|
@@ -194,11 +194,9 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
|
|
|
this.selectors = [];
|
|
|
this.jsSelectors = [];
|
|
|
|
|
|
- this.get = function (stSelector) {
|
|
|
+ this.make = function (stSelector, targetClasses) {
|
|
|
var method = methodDict[stSelector];
|
|
|
- if(method) {
|
|
|
- return method;
|
|
|
- }
|
|
|
+ if(method) return;
|
|
|
var jsSelector = st.st2js(stSelector);
|
|
|
this.selectors.push(stSelector);
|
|
|
this.jsSelectors.push(jsSelector);
|
|
@@ -206,6 +204,9 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
|
|
|
methodDict[stSelector] = method;
|
|
|
methods.push(method);
|
|
|
manip.installMethod(method, rootAsClass);
|
|
|
+ targetClasses.forEach(function (target) {
|
|
|
+ manip.installMethod(method, target);
|
|
|
+ });
|
|
|
return method;
|
|
|
};
|
|
|
|
|
@@ -261,20 +262,12 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
|
|
|
}
|
|
|
|
|
|
function ManipulationBrik(brikz, st) {
|
|
|
-
|
|
|
- this.installMethodIfAbsent = function (handler, klass) {
|
|
|
- if(!klass.fn.prototype[handler.jsSelector]) {
|
|
|
- installMethod(handler, klass);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- function installMethod (method, klass) {
|
|
|
+ this.installMethod = function (method, klass) {
|
|
|
Object.defineProperty(klass.fn.prototype, method.jsSelector, {
|
|
|
value: method.fn,
|
|
|
enumerable: false, configurable: true, writable: true
|
|
|
});
|
|
|
}
|
|
|
- this.installMethod = installMethod;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -575,13 +568,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
|
|
|
return that;
|
|
|
};
|
|
|
|
|
|
- function installNewDnuHandler(newHandler) {
|
|
|
- var wrappedClasses = st.wrappedClasses();
|
|
|
- for(var i = 0; i < wrappedClasses.length; i++) {
|
|
|
- manip.installMethodIfAbsent(newHandler, wrappedClasses[i]);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
function ensureJsSelector(method) {
|
|
|
if (!(method.jsSelector)) {
|
|
|
method.jsSelector = st.st2js(method.selector);
|
|
@@ -602,19 +588,13 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
|
|
|
|
|
|
propagateMethodChange(klass, method);
|
|
|
|
|
|
- var usedSelectors = method.messageSends;
|
|
|
- var dnuHandlers = [];
|
|
|
+ var usedSelectors = method.messageSends,
|
|
|
+ targetClasses = stInit.initialized() ? st.wrappedClasses() : [];
|
|
|
|
|
|
- dnuHandlers.push(dnu.get(method.selector));
|
|
|
+ dnu.make(method.selector, targetClasses);
|
|
|
|
|
|
for(var i=0; i<usedSelectors.length; i++) {
|
|
|
- dnuHandlers.push(dnu.get(usedSelectors[i]));
|
|
|
- }
|
|
|
-
|
|
|
- if(stInit.initialized()) {
|
|
|
- dnuHandlers.forEach(function(each) {
|
|
|
- installNewDnuHandler(each);
|
|
|
- });
|
|
|
+ dnu.make(usedSelectors[i], targetClasses);
|
|
|
}
|
|
|
};
|
|
|
|