%PDF- %PDF-
Direktori : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/ |
Current File : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/delegation.js |
(function(addEvent, removeEvent){ var match = /(.*?):relay\(((?:\(.*?\)|.)+)\)$/, combinators = /[+>~\s]/, splitType = function(type){ var bits = type.match(match); return !bits ? {event: type} : { event: bits[1], selector: bits[2] }; }, check = function(e, selector){ var t = e.target; if (combinators.test(selector = selector.trim())){ var els = this.getElements(selector); for (var i = els.length; i--; ){ var el = els[i]; if (t == el || el.hasChild(t)) return el; } } else { for ( ; t && t != this; t = t.parentNode){ if (Element.match(t, selector)) return document.id(t); } } return null; }; Element.implement({ addEvent: function(type, fn){ var split = splitType(type); if (split.selector){ var monitors = this.retrieve('delegation:_delegateMonitors', {}); if (!monitors[type]){ var monitor = function(e){ var el = check.call(this, e, split.selector); if (el) this.fireEvent(type, [e, el], 0, el); }.bind(this); monitors[type] = monitor; addEvent.call(this, split.event, monitor); } } return addEvent.apply(this, arguments); }, removeEvent: function(type, fn){ var split = splitType(type); if (split.selector){ var events = this.retrieve('events'); if (!events || !events[type] || (fn && !events[type].keys.contains(fn))) return this; if (fn) removeEvent.apply(this, [type, fn]); else removeEvent.apply(this, type); events = this.retrieve('events'); if (events && events[type] && events[type].keys.length == 0){ var monitors = this.retrieve('delegation:_delegateMonitors', {}); removeEvent.apply(this, [split.event, monitors[type]]); delete monitors[type]; } return this; } return removeEvent.apply(this, arguments); }, fireEvent: function(type, args, delay, bind){ var events = this.retrieve('events'); var e, el; if (args) { e = args[0]; el = args[1]; } if (!events || !events[type]) return this; events[type].keys.each(function(fn){ fn.create({bind: bind || this, delay: delay, arguments: args})(); }, this); return this; } }); })(Element.prototype.addEvent, Element.prototype.removeEvent); try { if (typeof HTMLElement != 'undefined') HTMLElement.prototype.fireEvent = Element.prototype.fireEvent; } catch(e){}