1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- define([], function () {
- return function Brikz(api, apiKey, initKey) {
- //jshint eqnull:true
- var brikz = this,
- backup = {};
- apiKey = apiKey || 'exports';
- initKey = initKey || '__init__';
- function mixin(src, target, what) {
- for (var keys = Object.keys(what || src), l = keys.length, i = 0; i < l; ++i) {
- if (src == null) {
- target[keys[i]] = undefined;
- } else {
- var value = src[keys[i]];
- if (typeof value !== "undefined") {
- target[keys[i]] = value;
- }
- }
- }
- return target;
- }
- Object.defineProperties(this, {
- rebuild: { value: null, enumerable: false, configurable: true, writable: true }
- });
- var exclude = mixin(this, {});
- this.rebuild = function () {
- Object.keys(backup).forEach(function (key) {
- mixin(null, api, (backup[key] || 0)[apiKey] || {});
- });
- var oapi = mixin(api, {}),
- order = [],
- chk = {};
- function ensure(key) {
- if (key in exclude) {
- return null;
- }
- var b = brikz[key],
- bak = backup[key];
- mixin(null, api, api);
- while (typeof b === "function") {
- (b.deps || []).forEach(ensure);
- b = new b(brikz, api, bak);
- }
- brikz[key] = b;
- if (b && !chk[key]) {
- chk[key] = true;
- order.push(b);
- }
- if (b && !b[apiKey]) {
- b[apiKey] = mixin(api, {});
- }
- }
- Object.keys(brikz).forEach(ensure);
- mixin(oapi, mixin(null, api, api));
- order.forEach(function (brik) {
- mixin(brik[apiKey] || {}, api);
- });
- order.forEach(function (brik) {
- if (brik[initKey]) {
- brik[initKey]();
- if (brik[initKey].once) {
- delete brik[initKey];
- }
- }
- });
- backup = mixin(brikz, {});
- };
- };
- });
|