generators/jelly/templates/javascripts/jelly.js in honkster-jelly-0.7.4 vs generators/jelly/templates/javascripts/jelly.js in honkster-jelly-0.7.5

- old
+ new

@@ -10,13 +10,22 @@ * * Date: 2009-07-20 9:50:50 (Mon, 20 Jul 2009) * */ if (!window.Jelly) Jelly = new Object(); +if (!Function.prototype.bind) { + Function.prototype.bind = function(object) { + var self = this; + return function() { + return self.apply(object, arguments); + } + } +} Jelly.init = function() { this.components = []; this.observers = []; + this.notifyObservers = this.Observers.notify; this.Components.initCalled = false; this.Pages.init(); var self = this; $(document).ready(function() { self.Components.init(); @@ -38,70 +47,65 @@ Jelly.Components.initComponentFromDefinition(evaluatedDefinition); } } }; -Jelly.notifyObservers = function(params, observers) { - if (!observers) { - observers = []; - for (var i = 0; i < Jelly.observers.length; i++) { - observers.push(Jelly.observers[i]); +Jelly.Components = { + init: function() { + for (var i = 0; i < Jelly.components.length; i++) { + this.initComponentFromDefinition(Jelly.components[i]); } + this.initCalled = true; + }, + initComponentFromDefinition: function(definition) { + var observer; + if (definition.component.init) { + observer = definition.component.init.apply(definition.component, definition.arguments); + } + Jelly.observers.push(observer ? observer : definition.component); + } +}; +Jelly.Observers = { + notify: function(params) { + if (this == Jelly) return Jelly.Observers.notify.call(this.observers, params); + var observers = this.slice(0); + // Deprecate 'on' in favor of making each page action a Component. if (params.on) { var additionalObserver = eval(params.on); - var additionalObserverAlreadyAnObserver = false; - for (var i = 0; i < observers.length; i++) { - if (observers[i] == additionalObserver) { - additionalObserverAlreadyAnObserver = true; - break; - } - } - if (!additionalObserverAlreadyAnObserver) { + if (observers.indexOf(additionalObserver) == -1) { observers.push(additionalObserver); } } - } - for (var i = 0; i < observers.length; i++) { - var observer = observers[i]; - if (observer[params.method]) { - if (observer.detach && observer.detach()) { - this.garbageCollectObserver(observer); - } else { - observer[params.method].apply(observer, params.arguments); + for (var i = 0; i < observers.length; i++) { + var observer = observers[i]; + if (observer[params.method]) { + if (observer.detach && observer.detach()) { + Jelly.Observers.garbageCollectObserver.call(this, observer); + } else { + observer[params.method].apply(observer, params.arguments); + } } } - } -}; -Jelly.garbageCollectObserver = function(observer) { - var index = Jelly.observers.indexOf(observer); - if (index > -1) { - this.arrayRemove(Jelly.observers, index, index + 1); - } -}; - -Jelly.arrayRemove = function(array, from, to) { - var rest = array.slice((to || from) + 1 || array.length); - array.length = from < 0 ? array.length + from : from; - return array.push.apply(array, rest); -}; - -Jelly.Components = { - init: function() { - for (var i = 0; i < Jelly.components.length; i++) { - this.initComponentFromDefinition(Jelly.components[i]); + if (params.attach) { + Jelly.attach.apply(Jelly, params.attach); } - this.initCalled = true; }, - initComponentFromDefinition: function(definition) { - var observer; - if (definition.component.init) { - observer = definition.component.init.apply(definition.component, definition.arguments); + + garbageCollectObserver: function(observer) { + var index = this.indexOf(observer); + if (index > -1) { + Jelly.Observers.remove.call(this, index, index + 1); } - Jelly.observers.push(observer ? observer : definition.component); + }, + + remove: function(from, to) { + var rest = this.slice((to || from) + 1 || this.length); + this.length = from < 0 ? this.length + from : from; + return this.push.apply(this, rest); } }; Jelly.Pages = { init: function() {