This is obviously rough draft and not thoroughly tested, but it seems to
work.  If you'd like, give it a try (load it after you load
prototype.js):


Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, new SuperEvent(event || window.event));
  }
}

var SuperEvent = Class.create();
Object.extend(SuperEvent.prototype, {
  initialize: function (event) {
    for (attr in event) {
      this[attr] = event[attr];
    }
    this.target     = Event.element(event);
    this.srcElement = Event.element(event);
    this.which      = event.which || event.button;
    this.button     = event.button || event.which;
    this.pageX      = Event.pointerX(event);
    this.pageY      = Event.pointerY(event);
    this.clientX    = this.pageX - (document.documentElement.scrollLeft
|| document.body.scrollLeft);
    this.clientY    = this.pageY - (document.documentElement.scrollTop
|| document.body.scrollTop);
    this.preventDefault   = Event.stop.bind(Event, event);
    this.stopPropagation  = Event.stop.bind(Event, event);
  }
} );

There are probably more things that would need to be addressed; I just
based this off of what functionality was in prototype 'cause I believe
most of the remaining attributes/functions work cross-browser already
(and should be inherited in the for attr in event loop).

This is obviously less efficient since it gathers data for every bound
event, despite whether you use it or not.  But, it will let you call
IE-specific event functions in Firefox, so long as you still bound the
events using the bindAsEventListener function.

Greg
_______________________________________________
Rails-spinoffs mailing list
Rails-spinoffs@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs

Reply via email to