diff --git a/src/core/plugin.js b/src/core/plugin.js index 323045a42..069a1ceac 100644 --- a/src/core/plugin.js +++ b/src/core/plugin.js @@ -3,13 +3,18 @@ BI.Plugin = BI.Plugin || {}; var _WidgetsPlugin = {}; var _ObjectPlugin = {}; var _ConfigPlugin = {}; - var _GlobalWidgetConfigFn, _GlobalObjectConfigFn; + var _GlobalWidgetConfigFns = []; + var __GlobalObjectConfigFns = []; BI.extend(BI.Plugin, { getWidget: function (type, options) { - if (_GlobalWidgetConfigFn) { - _GlobalWidgetConfigFn(type, options); + if (_GlobalWidgetConfigFns.length > 0) { + var fns = _GlobalWidgetConfigFns.slice(0); + for (var i = fns.length - 1; i >= 0; i--) { + fns[i](type, options); + } } + var res; if (_ConfigPlugin[type]) { for (var i = _ConfigPlugin[type].length - 1; i >= 0; i--) { @@ -30,8 +35,8 @@ BI.Plugin = BI.Plugin || {}; }, config: function (widgetConfigFn, objectConfigFn) { - _GlobalWidgetConfigFn = widgetConfigFn; - _GlobalObjectConfigFn = objectConfigFn; + _GlobalWidgetConfigFns = _GlobalWidgetConfigFns.concat(_.isArray(widgetConfigFn) ? widgetConfigFn : [widgetConfigFn]); + __GlobalObjectConfigFns = __GlobalObjectConfigFns.concat(_.isArray(objectConfigFn) ? objectConfigFn : [objectConfigFn]); }, configWidget: function (type, fn) { @@ -56,15 +61,19 @@ BI.Plugin = BI.Plugin || {}; }, getObject: function (type, object) { - if (_GlobalObjectConfigFn) { - _GlobalObjectConfigFn(type, object); + if (__GlobalObjectConfigFns.length > 0) { + var fns = __GlobalObjectConfigFns.slice(0); + for (var i = fns.length - 1; i >= 0; i--) { + fns[i](type, object); + } } + if (_ObjectPlugin[type]) { var res; for (var i = 0, len = _ObjectPlugin[type].length; i < len; i++) { if (res = _ObjectPlugin[type][i](object)) { object = res; - }; + } } } return res || object; @@ -84,4 +93,4 @@ BI.Plugin = BI.Plugin || {}; delete _ObjectPlugin[type]; } }); -})(); \ No newline at end of file +})();