fineui是帆软报表和BI产品线所使用的前端框架。
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.

159 lines
4.6 KiB

7 years ago
(function () {
7 years ago
var constantInjection = {};
BI.constant = function (xtype, cls) {
if (constantInjection[xtype] != null) {
throw ("constant:[" + xtype + "] has been registed");
}
constantInjection[xtype] = cls;
};
var modelInjection = {};
BI.model = function (xtype, cls) {
if (modelInjection[xtype] != null) {
throw ("model:[" + xtype + "] has been registed");
}
modelInjection[xtype] = cls;
};
var storeInjection = {};
7 years ago
BI.store = function (xtype, cls) {
7 years ago
if (storeInjection[xtype] != null) {
throw ("store:[" + xtype + "] has been registed");
}
storeInjection[xtype] = cls;
};
7 years ago
var serviceInjection = {};
BI.service = function (xtype, cls) {
if (serviceInjection[xtype] != null) {
throw ("service:[" + xtype + "] has been registed");
}
serviceInjection[xtype] = cls;
};
7 years ago
var providerInjection = {};
BI.provider = function (xtype, cls) {
if (providerInjection[xtype] != null) {
throw ("provider:[" + xtype + "] has been registed");
}
providerInjection[xtype] = cls;
};
BI.config = function (type, configFn) {
if (constantInjection[type]) {
return constantInjection[type] = configFn(constantInjection[type]);
}
if (providerInjection[type]) {
if (!providers[type]) {
providers[type] = new providerInjection[type]();
}
7 years ago
return configFn(providers[type]);
7 years ago
}
7 years ago
BI.Plugin.configWidget(type, configFn);
7 years ago
};
7 years ago
7 years ago
var actions = {};
7 years ago
BI.action = function (type, actionFn) {
if (!actions[type]) {
actions[type] = [];
}
7 years ago
actions[type].push(actionFn);
7 years ago
return function () {
actions[type].remove(actionFn);
if (actions[type].length === 0) {
delete actions[type];
}
7 years ago
};
};
7 years ago
7 years ago
var points = {};
BI.point = function (type, action, pointFn, after) {
if (!points[type]) {
points[type] = {};
7 years ago
}
7 years ago
if (!points[type][action]) {
points[type][action] = {};
points[type][action][after ? "after" : "before"] = [];
}
points[type][action][after ? "after" : "before"].push(pointFn);
7 years ago
};
7 years ago
7 years ago
var callPoint = function (inst, type) {
if (points[type]) {
for (var action in points[type]) {
var fns = points[type][action].before;
if (fns) {
BI.aspect.before(inst, action, function () {
for (var i = 0, len = fns.length; i < len; i++) {
fns[i].apply(inst, arguments);
}
});
}
fns = points[type][action].after;
if (fns) {
BI.aspect.after(inst, action, function () {
for (var i = 0, len = fns.length; i < len; i++) {
fns[i].apply(inst, arguments);
}
});
}
}
}
};
7 years ago
BI.Models = {
getModel: function (type, config) {
7 years ago
var inst = new modelInjection[type](config);
callPoint(inst, type);
return inst;
7 years ago
}
7 years ago
};
7 years ago
var stores = {};
BI.Stores = {
getStore: function (type, config) {
if (stores[type]) {
return stores[type];
}
7 years ago
stores[type] = new storeInjection[type](config);
callPoint(stores[type], type);
return stores[type];
7 years ago
}
7 years ago
};
7 years ago
7 years ago
var services = {};
BI.Services = {
getService: function (type, config) {
if (services[type]) {
return services[type];
}
7 years ago
services[type] = new serviceInjection[type](config);
callPoint(services[type], type);
return services[type];
7 years ago
}
7 years ago
};
7 years ago
7 years ago
var providers = {}, providerInstance = {};
7 years ago
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];
}
7 years ago
};
7 years ago
BI.Actions = {
runAction: function (type, config) {
BI.each(actions[type], function (i, act) {
act(config);
7 years ago
});
7 years ago
}
7 years ago
};
7 years ago
})();