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() {