You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
8.7 KiB
271 lines
8.7 KiB
(function () { |
|
var moduleInjection = {}; |
|
BI.module = function (xtype, cls) { |
|
if (moduleInjection[xtype] != null) { |
|
_global.console && console.error("module:[" + xtype + "] has been registed"); |
|
} |
|
moduleInjection[xtype] = cls; |
|
}; |
|
|
|
var constantInjection = {}; |
|
BI.constant = function (xtype, cls) { |
|
if (constantInjection[xtype] != null) { |
|
_global.console && console.error("constant:[" + xtype + "] has been registed"); |
|
} |
|
constantInjection[xtype] = cls; |
|
}; |
|
|
|
var modelInjection = {}; |
|
BI.model = function (xtype, cls) { |
|
if (modelInjection[xtype] != null) { |
|
_global.console && console.error("model:[" + xtype + "] has been registed"); |
|
} |
|
modelInjection[xtype] = cls; |
|
}; |
|
|
|
var storeInjection = {}; |
|
BI.store = function (xtype, cls) { |
|
if (storeInjection[xtype] != null) { |
|
_global.console && console.error("store:[" + xtype + "] has been registed"); |
|
} |
|
storeInjection[xtype] = cls; |
|
}; |
|
|
|
var serviceInjection = {}; |
|
BI.service = function (xtype, cls) { |
|
if (serviceInjection[xtype] != null) { |
|
_global.console && console.error("service:[" + xtype + "] has been registed"); |
|
} |
|
serviceInjection[xtype] = cls; |
|
}; |
|
|
|
var providerInjection = {}; |
|
BI.provider = function (xtype, cls) { |
|
if (providerInjection[xtype] != null) { |
|
_global.console && console.error("provider:[" + xtype + "] has been registed"); |
|
} |
|
providerInjection[xtype] = cls; |
|
}; |
|
|
|
var configFunctions = {}; |
|
BI.config = function (type, configFn) { |
|
if (BI.initialized) { |
|
if (constantInjection[type]) { |
|
return (constantInjection[type] = configFn(constantInjection[type])); |
|
} |
|
if (providerInjection[type]) { |
|
if (!providers[type]) { |
|
providers[type] = new providerInjection[type](); |
|
} |
|
return configFn(providers[type]); |
|
} |
|
return BI.Plugin.configWidget(type, configFn); |
|
} |
|
if (!configFunctions[type]) { |
|
configFunctions[type] = []; |
|
BI.prepares.push(function () { |
|
var queue = configFunctions[type]; |
|
for (var i = 0; i < queue.length; i++) { |
|
if (constantInjection[type]) { |
|
constantInjection[type] = queue[i](constantInjection[type]); |
|
continue; |
|
} |
|
if (providerInjection[type]) { |
|
if (!providers[type]) { |
|
providers[type] = new providerInjection[type](); |
|
} |
|
queue[i](providers[type]); |
|
continue; |
|
} |
|
BI.Plugin.configWidget(type, queue[i]); |
|
} |
|
configFunctions[type] = null; |
|
}); |
|
} |
|
configFunctions[type].push(configFn); |
|
}; |
|
|
|
var actions = {}; |
|
var globalAction = []; |
|
BI.action = function (type, actionFn) { |
|
if (BI.isFunction(type)) { |
|
globalAction.push(type); |
|
return function () { |
|
BI.remove(globalAction, function (idx) { |
|
return globalAction.indexOf(actionFn) === idx; |
|
}); |
|
}; |
|
} |
|
if (!actions[type]) { |
|
actions[type] = []; |
|
} |
|
actions[type].push(actionFn); |
|
return function () { |
|
BI.remove(actions[type], function (idx) { |
|
return actions[type].indexOf(actionFn) === idx; |
|
}); |
|
if (actions[type].length === 0) { |
|
delete actions[type]; |
|
} |
|
}; |
|
}; |
|
|
|
var points = {}; |
|
BI.point = function (type, action, pointFn, after) { |
|
if (!points[type]) { |
|
points[type] = {}; |
|
} |
|
if (!points[type][action]) { |
|
points[type][action] = {}; |
|
} |
|
if (!points[type][action][after ? "after" : "before"]) { |
|
points[type][action][after ? "after" : "before"] = []; |
|
} |
|
points[type][action][after ? "after" : "before"].push(pointFn); |
|
}; |
|
|
|
BI.Modules = { |
|
getModule: function (type) { |
|
if (!moduleInjection[type]) { |
|
_global.console && console.error("module:[" + type + "] does not exists"); |
|
return false; |
|
} |
|
return moduleInjection[type]; |
|
}, |
|
getAllModules: function () { |
|
return moduleInjection; |
|
} |
|
}; |
|
|
|
BI.Constants = { |
|
getConstant: function (type) { |
|
return constantInjection[type]; |
|
} |
|
}; |
|
|
|
var callPoint = function (inst, type) { |
|
if (points[type]) { |
|
for (var action in points[type]) { |
|
var bfns = points[type][action].before; |
|
if (bfns) { |
|
BI.aspect.before(inst, action, function (bfns) { |
|
return function () { |
|
for (var i = 0, len = bfns.length; i < len; i++) { |
|
try { |
|
bfns[i].apply(inst, arguments); |
|
} catch (e) { |
|
_global.console && console.error(e); |
|
} |
|
} |
|
}; |
|
}(bfns)); |
|
} |
|
var afns = points[type][action].after; |
|
if (afns) { |
|
BI.aspect.after(inst, action, function (afns) { |
|
return function () { |
|
for (var i = 0, len = afns.length; i < len; i++) { |
|
try { |
|
afns[i].apply(inst, arguments); |
|
} catch (e) { |
|
_global.console && console.error(e); |
|
} |
|
} |
|
}; |
|
}(afns)); |
|
} |
|
} |
|
} |
|
}; |
|
|
|
BI.Models = { |
|
getModel: function (type, config) { |
|
var inst = new modelInjection[type](config); |
|
inst._constructor && inst._constructor(config); |
|
callPoint(inst, type); |
|
return inst; |
|
} |
|
}; |
|
|
|
var stores = {}; |
|
|
|
BI.Stores = { |
|
getStore: function (type, config) { |
|
if (stores[type]) { |
|
return stores[type]; |
|
} |
|
var inst = stores[type] = new storeInjection[type](config); |
|
inst._constructor && inst._constructor(config); |
|
callPoint(inst, type); |
|
return inst; |
|
} |
|
}; |
|
|
|
var services = {}; |
|
|
|
BI.Services = { |
|
getService: function (type, config) { |
|
if (services[type]) { |
|
return services[type]; |
|
} |
|
services[type] = new serviceInjection[type](config); |
|
callPoint(services[type], type); |
|
return services[type]; |
|
} |
|
}; |
|
|
|
var providers = {}, |
|
providerInstance = {}; |
|
|
|
BI.Providers = { |
|
getProvider: function (type, config) { |
|
if (!providers[type]) { |
|
providers[type] = new providerInjection[type](); |
|
} |
|
if (!providerInstance[type]) { |
|
providerInstance[type] = new (providers[type].$get())(config); |
|
} |
|
return providerInstance[type]; |
|
} |
|
}; |
|
|
|
BI.Actions = { |
|
runAction: function (type, event, config) { |
|
BI.each(actions[type], function (i, act) { |
|
try { |
|
act(event, config); |
|
} catch (e) { |
|
_global.console && console.error(e); |
|
} |
|
}); |
|
}, |
|
runGlobalAction: function () { |
|
var args = [].slice.call(arguments); |
|
BI.each(globalAction, function (i, act) { |
|
try { |
|
act.apply(null, args); |
|
} catch (e) { |
|
_global.console && console.error(e); |
|
} |
|
}); |
|
} |
|
}; |
|
|
|
BI.getContext = function (type, config) { |
|
if (constantInjection[type]) { |
|
return BI.Constants.getConstant(type); |
|
} |
|
if (modelInjection[type]) { |
|
return BI.Models.getModel(type, config); |
|
} |
|
if (storeInjection[type]) { |
|
return BI.Stores.getStore(type, config); |
|
} |
|
if (serviceInjection[type]) { |
|
return BI.Services.getService(type, config); |
|
} |
|
if (providerInjection[type]) { |
|
return BI.Providers.getProvider(type, config); |
|
} |
|
}; |
|
})(); |