/* * MooTools Extension script to support custom extensions to mootools */ var zmMooToolsVersion = '1.2.1'; /* * Firstly, lets check that mootools has been included and thus is present */ if ( typeof(MooTools) == "undefined" ) { alert( "MooTools not found! Please download from\nhttp://mootools.net and install in ZoneMinder web root." ); } else { //console.log( "Got MooTools version "+MooTools.version ); /* Version check */ if ( MooTools.version < zmMooToolsVersion ) { alert( "MooTools version "+MooTools.version+" found.\nVersion "+zmMooToolsVersion+" required, please upgrade." ); } /* * Ajax class extenstion to allow for request timeouts */ Request.implement({ send: function( data ) { if ( this.options.timeout ) { if ( this.timeoutTimer ) this.removeTimer(); this.timeoutTimer = this.timedOut.delay( this.options.timeout, this ); this.addEvent( 'onComplete', this.removeTimer ); } this.parent( data ); return( this ); }, timedOut: function () { this.cancel(); if ( this.options.onTimeout ) this.options.onTimeout(); return( this ); }, removeTimer: function() { $clear( this.timeoutTimer ); this.timeoutTimer = 0; return( this ); } }); } /* * class: CSS * * A class that builds stylesheets. * * * license: * * MIT-style license. * * author: * * Marat A. Denenberg, * * copyright: * * copyright (c) 2008 revnode, * * inspiration: * * horseweapon on the mootools forum, * * links: * * CSS implementation by popular browsers: * * * * * * * * changelog: * * added check_rule * cleaned up code, fixed bugs, Safari support * */ var CSS = new Class({ local: { self: 'CSS', limited: ['dpi', 'border-radius'], _rule: '' }, options: { rules: {} }, xhtml: { _style: null }, initialize: function(options) { this.local = $merge(this.local, this.options, options, this.xhtml); }, destroy: function() { if(this.local._style) this.local._style.destroy(); }, refresh: function() { var text = ''; Hash.each(this.local.rules, function(rule, selector) { this.local._rule = ''; Hash.each(rule, this._glue, this); text += (this.local._rule == '' ? '' : selector + '\n{\n' + this.local._rule + '}\n'); }, this); this.destroy(); this.local._style = new Element('style').set('type', 'text/css').inject(document.head); switch(Browser.Engine.name) { case 'trident': this.local._style.styleSheet.cssText = text; break; default: this.local._style.set('text', text); break; } return this; }, _glue: function(value, property) { if(this[Browser.Engine.name + '_' + property]) { var pair; if(pair = this[Browser.Engine.name + '_' + property](value, property)) { this.local._rule += '\t' + pair[0] + ':' + pair[1] + ';\n'; } } else if(!this.local.limited.contains(property)) { this.local._rule += '\t' + property + ':' + value + ';\n'; } }, add_prop: function(selector, property, value) { var rules = {}; rules[selector] = {}; rules[selector][property] = value; return this.add_rules(rules); }, add_rule: function(selector, properties) { var rules = {}; rules[selector] = properties; return this.add_rules(rules); }, add_rules: function(rules) { this.local.rules = $merge(this.local.rules, rules); return this; }, remove_prop: function(selector, property) { delete this.local.rules[selector][property]; return this; }, remove_rule: function(selector) { delete this.local.rules[selector]; return this; }, remove_rules: function(selectors) { if(selectors) { selectors.each(this.remove_rule, this); } else { this.local.rules = {}; } return this; }, check_rule: function(selector) { return $defined(this.local.rules[selector]); } }); CSS.implement({ // ### TRIDENT ### 'trident_opacity': function(value, property) { return ['filter', 'alpha(opacity=' + (value * 100) + ')']; }, 'trident_dpi': function(value, property) { if($defined(window.screen.deviceXDPI)) { return ['font-size', ((96 / window.screen.deviceXDPI) * value).round() + '%']; } else { return ['font-size', value + '%']; } }, // ### GECKO ### 'gecko_border-radius': function(value, property) { return ['-moz-' + property, value]; }, // ### WEBKIT ### 'webkit_border-radius': function(value, property) { return ['-webkit-' + property, value]; } // ### PRESTO ### });