//>>built // wrapped by build app define("dojox/data/StoreExplorer", ["dijit","dojo","dojox","dojo/require!dojox/grid/DataGrid,dojox/data/ItemExplorer,dijit/layout/BorderContainer,dijit/layout/ContentPane"], function(dijit,dojo,dojox){ dojo.provide("dojox.data.StoreExplorer"); dojo.require("dojox.grid.DataGrid"); dojo.require("dojox.data.ItemExplorer"); dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.declare("dojox.data.StoreExplorer", dijit.layout.BorderContainer, { constructor: function(options){ dojo.mixin(this, options); }, store: null, columnWidth: '', stringQueries: false, showAllColumns: false, postCreate: function(){ var self = this; this.inherited(arguments); var contentPane = new dijit.layout.ContentPane({ region:'top' }).placeAt(this); function addButton(name, action){ var button = new dijit.form.Button({label: name}); contentPane.containerNode.appendChild(button.domNode); button.onClick = action; return button; } var queryText = contentPane.containerNode.appendChild(document.createElement("span")); queryText.innerHTML = "Enter query:  "; queryText.id = "queryText"; var queryTextBox = contentPane.containerNode.appendChild(document.createElement("input")); queryTextBox.type = "text"; queryTextBox.id = "queryTextBox"; addButton("Query",function(){ var query = queryTextBox.value; self.setQuery(self.stringQueries ? query : dojo.fromJson(query)); }); contentPane.containerNode.appendChild(document.createElement("span")).innerHTML = "   "; var createNewButton = addButton("Create New", dojo.hitch(this, "createNew")); var deleteButton = addButton("Delete",function(){ var items = grid.selection.getSelected(); for(var i = 0; i < items.length; i++){ self.store.deleteItem(items[i]); } }); this.setItemName = function(name){ createNewButton.attr('label'," Create New " + name); deleteButton.attr('label',"Delete " + name); }; addButton("Save",function(){ self.store.save({onError:function(error){ alert(error); }}); //refresh the tree self.tree.refreshItem(); }); addButton("Revert",function(){ self.store.revert(); }); addButton("Add Column", function(){ var columnName = prompt("Enter column name:","property"); if(columnName){ self.gridLayout.push({ field: columnName, name: columnName, formatter: dojo.hitch(self,"_formatCell"), editable: true }); self.grid.attr("structure",self.gridLayout); } }); var centerCP = new dijit.layout.ContentPane({ region:'center' }).placeAt(this); var grid = this.grid = new dojox.grid.DataGrid( {store: this.store} ); centerCP.attr("content", grid); grid.canEdit = function(inCell, inRowIndex){ var value = this._copyAttr(inRowIndex, inCell.field); return !(value && typeof value == 'object') || value instanceof Date; } var trailingCP = new dijit.layout.ContentPane({ region: 'trailing', splitter: true, style: "width: 300px" }).placeAt(this); var tree = this.tree = new dojox.data.ItemExplorer({ store: this.store} ); trailingCP.attr("content", tree); dojo.connect(grid, "onCellClick", function(){ var selected = grid.selection.getSelected()[0]; tree.setItem(selected); }); this.gridOnFetchComplete = grid._onFetchComplete; this.setStore(this.store); }, setQuery: function(query, options){ this.grid.setQuery(query, options); }, _formatCell: function(value){ if(this.store.isItem(value)){ return this.store.getLabel(value) || this.store.getIdentity(value); } return value; }, setStore: function(store){ this.store = store; var self = this; var grid = this.grid; grid._pending_requests[0] = false; function formatCell(value){ return self._formatCell(value); } var defaultOnComplete = this.gridOnFetchComplete; grid._onFetchComplete = function(items, req){ var layout = self.gridLayout = []; var column, key, item, i, j, k, idAttributes = store.getIdentityAttributes(); for(i = 0; i < idAttributes.length; i++){ key = idAttributes[i]; layout.push({ field: key, name: key, _score: 100, formatter: formatCell, editable: false }); } for(i=0; item = items[i++];){ var keys = store.getAttributes(item); for(k=0; key = keys[k++];){ var found = false; for(j=0; column = layout[j++];){ if(column.field == key){ column._score++; found = true; break; } } if(!found){ layout.push({ field: key, name: key, _score: 1, formatter: formatCell, styles: "white-space:nowrap; ", editable: true }); } } } layout = layout.sort(function(a, b){ return b._score - a._score; }); if(!self.showAllColumns){ for(j=0; column=layout[j]; j++){ if(column._score < items.length/40 * j) { layout.splice(j, layout.length-j); break; } } } for(j=0; column = layout[j++];){ column.width=self.columnWidth || Math.round(100/layout.length) + '%'; } grid._onFetchComplete = defaultOnComplete; grid.attr("structure",layout); var retValue = defaultOnComplete.apply(this, arguments); } grid.setStore(store); this.queryOptions = {cache:true}; this.tree.setStore(store); }, createNew: function(){ var props = prompt("Enter any properties (in JSON literal form) to put in the new item (passed to the newItem constructor):","{ }"); if(props){ try{ this.store.newItem(dojo.fromJson(props)); }catch(e){ alert(e); } } } }); });