define([
|
'require',
|
'dojo/_base/array',
|
'dojo/_base/declare',
|
'dojo/_base/lang',
|
'dojo/Deferred',
|
'dojo/topic',
|
'dstore/Memory',
|
'dstore/Trackable',
|
'dijit/layout/StackContainer',
|
'./FeatureGrid',
|
'../data/features'
|
], function (require, arrayUtil, declare, lang, Deferred, topic, Memory, Trackable, StackContainer, FeatureGrid,
|
featureData) {
|
|
return declare(StackContainer, {
|
baseClass: 'featureEditor',
|
doLayout: false,
|
|
buildRendering: function () {
|
this.inherited(arguments);
|
|
this.configPanes = {};
|
|
this.store = new (declare([ Memory, Trackable ]))({
|
data: featureData
|
});
|
|
this.featureGrid = new FeatureGrid({
|
store: this.store,
|
featureType: 'grid'
|
});
|
this.addChild(this.featureGrid);
|
},
|
|
postCreate: function () {
|
this.inherited(arguments);
|
|
this.own(
|
this.featureGrid.on('configure-module', lang.hitch(this, '_showModuleConfig')),
|
this.store.on('add,delete,update', lang.hitch(this, '_onUpdateStore'))
|
);
|
},
|
|
startup: function () {
|
this.inherited(arguments);
|
|
var self = this;
|
var configModuleIds = [];
|
var dfd = new Deferred();
|
arrayUtil.forEach(featureData, function (feature) {
|
if (feature.configModule) {
|
configModuleIds.push('./' + feature.configModule);
|
}
|
});
|
|
require(configModuleIds, function () {
|
arrayUtil.forEach(featureData, function (feature) {
|
var ConfigConstructor;
|
var configPane;
|
|
if (feature.configModule !== undefined) {
|
ConfigConstructor = require('./' + feature.configModule);
|
configPane = new ConfigConstructor({
|
moduleName: feature.mid.slice(feature.mid.lastIndexOf('/') + 1),
|
documentationUrl: feature.documentationUrl
|
});
|
|
configPane.on('close', function () {
|
self.selectChild(self.featureGrid);
|
});
|
|
this.addChild(configPane);
|
this.configPanes[feature.mid] = configPane;
|
}
|
}, self);
|
dfd.resolve();
|
});
|
|
return dfd.promise;
|
},
|
|
isSelected: function (moduleId) {
|
return !!this.store.filter({ mid: moduleId, selected: true }).fetchSync().length;
|
},
|
|
filter: function (query) {
|
return this.store.filter(query).fetchSync();
|
},
|
|
getModuleConfig: function (mid) {
|
return this.configPanes[mid] && this.configPanes[mid].get('value');
|
},
|
|
_showModuleConfig: function (event) {
|
var configPane = this.configPanes[event.mid];
|
if (configPane) {
|
this.selectChild(configPane);
|
}
|
},
|
|
_onUpdateStore: function () {
|
// Let the Laboratory know that it should update the demo display (grid or generated code)
|
topic.publish('/configuration/changed');
|
},
|
|
_getExpandoColumnAttr: function () {
|
return this.configPanes['dgrid/Tree'].get('expandoColumn');
|
},
|
|
_setFeatureTypeAttr: function (featureType) {
|
this.featureGrid.set('featureType', featureType);
|
// Make sure the grid is actually the selected child (not one of the option panes)
|
this.selectChild(this.featureGrid);
|
}
|
});
|
});
|