define([ 'dojo/_base/declare', 'dojo/_base/array', 'jimu/PanelManager' ], function(declare, array, PanelManager){ var clazz = declare(null, { // summary: // this mixin process the widgets in the widget pool. // description: // the controller widget should have two properties setting: // controlledGroups, controlledWidgets. Both of them are optional. //controlledGroups: String[]|String // If array, is array of gropus id. If String, "all" means read all of the groups. // If not set, do not read any group. //controlledWidgets: String[]|String // If array, is array of widgets id. If String, "all" means read all of the widgets. // If not set, do not read any widget. constructor: function(){ this.panelManager = PanelManager.getInstance(); }, postCreate: function(){ //we set default value to 'all', because of most of the time, we have one controller only. if(!this.controlledWidgets){ this.controlledWidgets = 'all'; } if(!this.controlledGroups){ this.controlledGroups = 'all'; } }, getOpenedIds: function(){ //return the Ids the the controller has opened //return []; }, setOpenedIds: function(ids){ /*jshint unused:false*/ //set the Ids that should be opened }, getConfigById: function(id){ var allConfigs = this.getAllConfigs(); for(var i = 0; i < allConfigs.length; i++){ if(allConfigs[i].id === id){ return allConfigs[i]; } } }, getAllConfigs: function(){ var ret = []; ret = ret.concat(this.getWidgetConfigs(), this.getGroupConfigs()); ret = array.filter(ret, function(o){ return o.visible; }); return ret.sort(function(a, b){ return a.index - b.index; }); }, getAllConfigsIncludeInvisible: function(){ var ret = []; ret = ret.concat(this.getWidgetConfigs(), this.getGroupConfigs()); return ret.sort(function(a, b){ return a.index - b.index; }); }, isControlled: function(id){ return array.some(this.getAllConfigsIncludeInvisible(), function(config){ return config.id === id; }); }, widgetIsControlled: function(widgetId){ return array.some(this.getAllConfigsIncludeInvisible(), function(config){ if(config.id === widgetId){ return true; }else{ return array.some(config.widgets, function(widgetConfig){ return widgetConfig.id === widgetId; }); } }); }, getGroupConfigs: function(){ var ret = []; if(!this.appConfig.widgetPool){ return ret; } if(this.appConfig.widgetPool.groups){ array.forEach(this.appConfig.widgetPool.groups, function(g){ if(this.controlledGroups){ if(Array.isArray(this.controlledGroups)){ if(this.controlledGroups.indexOf(g.id) > -1){ ret.push(g); } }else if(this.controlledGroups === 'all'){ ret.push(g); } } }, this); } return ret; }, getWidgetConfigs: function(){ var ret = []; if(!this.appConfig.widgetPool){ return ret; } if(this.appConfig.widgetPool.widgets){ array.forEach(this.appConfig.widgetPool.widgets, function(w){ if(this.controlledWidgets){ if(Array.isArray(this.controlledWidgets)){ if(this.controlledWidgets.indexOf(w.id) > -1){ ret.push(w); } }else if(this.controlledWidgets === 'all'){ ret.push(w); } } }, this); } return ret; } }); return clazz; });