/** * @ignore * storage for component * @author yiminghe@gmail.com */ KISSY.add("component/base/manager", function (S) { var uis = { // 不带前缀 prefixCls /* "menu" :{ priority:0, constructor:Menu } */ }; function getConstructorByXClass(cls) { var cs = cls.split(/\s+/), p = -1, t, ui = null; for (var i = 0; i < cs.length; i++) { var uic = uis[cs[i]]; if (uic && (t = uic.priority) > p) { p = t; ui = uic.constructor; } } return ui; } function getXClassByConstructor(constructor) { for (var u in uis) { var ui = uis[u]; if (ui.constructor == constructor) { return u; } } return 0; } function setConstructorByXClass(cls, uic) { if (S.isFunction(uic)) { uis[cls] = { constructor:uic, priority:0 }; } else { uic.priority = uic.priority || 0; uis[cls] = uic; } } function getCssClassWithPrefix(cls) { var cs = S.trim(cls).split(/\s+/); for (var i = 0; i < cs.length; i++) { if (cs[i]) { cs[i] = this.get("prefixCls") + cs[i]; } } return cs.join(" "); } var componentInstances = {}; /** * @class KISSY.Component.Manager * @member Component * @singleton * Manage component metadata. */ var Manager = { __instances:componentInstances, /** * associate id with component * @param {String} id * @param {KISSY.Component.Controller} component */ addComponent:function (id, component) { componentInstances[id] = component; }, /** * remove association id with component * @param {String} id */ removeComponent:function (id) { delete componentInstances[id]; }, /** * get component by id * @param {String} id * @return {KISSY.Component.Controller} */ 'getComponent':function (id) { return componentInstances[id]; }, /** * complete css by prefix prefixCls * @return {String} * @method * @param {String} css */ getCssClassWithPrefix:getCssClassWithPrefix, /** * Get css class name for this component constructor. * @param {Function} constructor Component's constructor. * @return {String} * @method */ getXClassByConstructor:getXClassByConstructor, /** * Get component constructor by css class name. * @param {String} classNames Class names separated by space. * @return {Function} * @method */ getConstructorByXClass:getConstructorByXClass, /** * Associate css class with component constructor. * @param {String} className Component's class name. * @param {Function} componentConstructor Component's constructor. * @method */ setConstructorByXClass:setConstructorByXClass }; Manager.getCssClassWithPrefix = getCssClassWithPrefix; return Manager; });