Apache-UploadMeter
view release on metacpan or search on metacpan
lib/Apache/UploadMeter/Resources/JavaScript.pm view on Meta::CPAN
element.appendChild(e)
else
if(Builder._isStringOrNumber(e))
element.appendChild(Builder._text(e));
});
} else
if(Builder._isStringOrNumber(children))
element.appendChild(Builder._text(children));
},
_isStringOrNumber: function(param) {
return(typeof param=='string' || typeof param=='number');
},
build: function(html) {
var element = this.node('div');
$(element).update(html.strip());
return element.down();
},
dump: function(scope) {
if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
tags.each( function(tag){
scope[tag] = function() {
return Builder.node.apply(Builder, [tag].concat($A(arguments)));
}
});
}
}
SCRIPTACULOUS-END
$r->print($output);
return Apache2::Const::OK;
}
sub json_js {
my $r = shift;
$r->content_type("application/x-javascript");
$r->set_etag();
return Apache2::Const::OK if $r->header_only();
my $output=<<'AUM-END';
// UploadMeter Object (makes assumptions about the target DOM, but still useful as a reference point)
var UploadMeter = Class.create();
UploadMeter.prototype = {
status: undefined,
ajax: undefined,
options: {
delay: 3.0 // Delay in seconds between requests (also almost duration of sliding effect for smoothest exerience)
},
// We can't seem to Element.extend our elements in a seperate window... Dunno why yet
// but it makes for uglier code :-(
// Constructor - Parameters are:
// el: Outer div to bind widget to
// meter: uploadmeter id
// url: uploadmeter ajax url
// options: additional callbacks, etc
initialize: function(el, meter, url, options) {
this.url = url;
this.meter = meter;
this.main = $(el);
Object.extend(this.options, options || {});
this.desc = Builder.node( "div", {className:'metercontent'});
this.main.appendChild(this.desc);
this.desc = $(this.desc);
Position.absolutize(this.desc);
Position.clone(this.main, this.desc);
this.ul = Builder.node( "div", {className:'meterunderlay'});
this.main.appendChild(this.ul);
this.ul = $(this.ul);
Position.absolutize(this.ul);
Position.clone(this.main, this.ul);
this.ul.setStyle({width: "0px"});
},
start: function() {
// Restart paused meter
if (this.ajax !== undefined) {
this.ajax.start();
return;
}
// Call onCreate hook
try {
(this.options.onCreate || Prototype.emptyFunction)();
UploadMeter.Responders.dispatch('onCreate', this);
} catch (e) {
this.dispatchException(e);
}
var errorFunc = function (transport) {
Element.setStyle(this.main, {'border-color': 'yellow'});
Element.update(this.desc, "Unknown");
Element.setStyle(this.ul, {'background-color': 'yellow'}).hide();
Position.clone(this.main, this.ul);
Element.show(this.ul);
}.bind(this);
// New meter
var params = "format=json&meter_id=" + this.meter;
new Ajax.Request(this.url, {
parameters: params,
onSuccess: function(transport) {
// Handle response
this.__onSuccess(transport);
// Start periodic
params = params + "&returned=1";
this.ajax = new PeriodicalExecuter(function() {
new Ajax.Request(this.url, {
parameters: params,
onSuccess: this.__onSuccess.bind(this)
});}.bind(this), this.options.delay);
}.bind(this),
on404: errorFunc,
on400: errorFunc
}); /* first request */
},
stop: function() {
lib/Apache/UploadMeter/Resources/JavaScript.pm view on Meta::CPAN
Object.extend(UploadMeter.Responders, Enumerable);
var Util = {
formatTime: function(timestamp) {
if (isNaN(timestamp)) {
return timestamp;
}
if (!(isFinite(timestamp))) {
return "Unknown";
}
var oH, oM, oS, str;
str = "";
oS = Math.floor(timestamp % 60);
oM = Math.floor((timestamp / 60) % 60);
oH = Math.floor(timestamp / 60 / 60);
if (oH > 0) {
str = oH + ":";
}
str = str + ((oM == 0) ? "00:" : ((oM < 10) ? "0" + oM + ":" : oM + ":"));
str = str + ((oS == 0) ? "00" : ((oS < 10) ? "0" + oS : oS));
return str;
},
formatDec: function (val) {
sign = val < 0 ? "-":"";
rval = Math.abs(Math.round(val*100));
str = rval.toString();
if(rval < 10) str = "0.0"+str;
else if(rval < 100) str = "0."+str;
else str = str.substring(0, str.length-2)
+ "." + str.substring(str.length-2, str.length);
return sign+str;
}
};
// Default behavior code
var aum_el;
function addMeterURL(url) {
try {
if (url.indexOf('?') >= 0) {
return url + "&meter_id=" + meter_id;
} else {
return url + "?meter_id=" + meter_id;
}
} catch (e) {}
}
function aum_popup() {
var aum = window.open(meter_url + "/styles/aum_popup.html" ,"_new","toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizeable=no,width=450,height=240");
// Pass our info to the child window's global obj
Object.extend(aum, {'meter_id': meter_id, 'meter_url': meter_url});
}
var rules={
'.uploadform':function(el) {
el.action = addMeterURL(el.action);
aum_el = $(el); // Put this in a global so we can unregister later, if needed
Event.observe(aum_el, 'submit', aum_popup);
}
};
Behaviour.register(rules);
AUM-END
$r->print($output);
return Apache2::Const::OK;
}
1;
( run in 1.061 second using v1.01-cache-2.11-cpan-b16cb0d3907 )