Skip to content

Instantly share code, notes, and snippets.

@pcg79
Forked from jamis/behaviors.js
Created March 2, 2010 01:02
Show Gist options
  • Save pcg79/319008 to your computer and use it in GitHub Desktop.
Save pcg79/319008 to your computer and use it in GitHub Desktop.
// An Unobtrusive Javascript (UJS) driver based on explicit behavior definitions. Just
// put a "data-behaviors" attribute on your view elements, and then assign callbacks
// for those named behaviors via Behaviors.add.
var Behaviors = {
observers: {},
observe: function(trigger) {
$(document.body).observe(trigger, this.onTrigger.bind(this));
},
add: function(trigger, behavior, callback) {
if(!this.observers[trigger]) {
this.observe(trigger);
this.observers[trigger] = {};
}
if(!this.observers[trigger][behavior]) {
this.observers[trigger][behavior] = $A();
}
this.observers[trigger][behavior].push(callback);
},
onTrigger: function(event) {
var element = event.findElement("*[data-behaviors]");
if(!element) return;
var behavesLike = element.readAttribute('data-behaviors').split(",");
if(behavesLike.length < 1) return;
var definedBehaviors = this.observers[event.type] || {};
for(behavior in definedBehaviors) {
if(behavesLike.include(behavior)) {
definedBehaviors[behavior].each(function(callback) {
callback(element, event);
if(event.stopped) return;
});
}
}
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment