Hello, Before 1.6, I had a set of functions on top of the Event.observe family of functions, which dealt with registering callbacks for events, like this:
signalConnect: function(element, name, observer) { if (!element || !name || !observer) return; if (!element.signals) element.signals = {}; if (!element.signals[name]) element.signals[name] = {observers: [], callbacks: []}; if (element.signals[name].observers.indexOf(observer) > -1) return Event; var custom = Event.custom[name]; if (custom) { var real = custom.real; var callback = custom.callback ? custom.callback.bindAsEventListener(Event, element) : null; if (custom.connect) custom.connect.call(Event, element, observer); } element.signals[name].observers.push(observer); element.signals[name].callbacks.push(callback || observer); if ((real || name) != 'activate') Event.observe.call(Event, element, real || name, callback || observer); return Event; }, I needed that, since I needed to be able to disconnect all handlers for a particular signal, and then I added generic events for elements, like mousewheel and mouseenter, much akin to the mootools library. With the current release candidate, most of my code has been made obsolete, and I'm trying to reduce it to to point of my functions calling the prototype ones. However, there's still the issue of having support for global element events, like 'mousewheel', 'mouseenter', and 'mouseout', that would work with all elements, and reuse existing event names to achieve their function. Is there a structure somewhere in the latest prototype that will let me add those, or can they be added before the final release? the custom events were implemented using the following fashion: custom: { mouseenter: { real: 'mouseover', callback: function(event, element) { var target = Event.relatedElement(event); if (target == element || Element.descendantOf(target, element)) return; Event.emitSignal(element, 'mouseenter', event); } }, mouseleave: { real: 'mouseout', callback: function(event, element) { var target = Event.relatedElement(event); if (target == element || Element.descendantOf(target, element)) return; Event.emitSignal(element, 'mouseleave', event); } }, mousewheel: { real: (Prototype.Browser.Gecko) ? 'DOMMouseScroll' : 'mousewheel', callback: function(event, element) { if (event.detail) event.scrollDirection = event.detail; else if (event.wheelDelta) event.scrollDirection = event.wheelDelta / -40; Event.emitSignal(element, 'mousewheel', event); } }, domready: { connect: function(element, observer) { if (window.loaded) { observer.call(element); } if (document.readyState && (Prototype.Browser.WebKit || Prototype.Browser.KHTML)) { window.domreadytimer = setInterval(function() { if (['loaded', 'complete'].include(document.readyState)) Event.custom.domready._callback(element); }, 50); } else if (document.readyState && Prototype.Browser.IE) { if (!$('iedomready')) { var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)'; document.write('<script id="iedomready" defer src="' + src + '"></ script>'); $('iedomready').onreadystatechange = function() { if (this.readyState == 'complete') Event.custom.domready._callback(element); }; } } else { Event.observe(window, 'load', Event.custom.domready._callback.bind(Event, element)); Event.observe(document, 'DOMContentLoaded', Event.custom.domready._callback.bind(Event, element)); } }, _callback: function(element) { if (window.loaded) return; window.loaded = true; clearInterval(window.domreadytimer); window.domreadytimer = null; Event.emitSignal(element, 'domready'); } } } they are pretty much a translation from the mootools ones, and are made to work with prototype (the mousewheel one has a few additions). --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---