diff options
Diffstat (limited to 'js/dojo/dojox/data/StoreExplorer.js')
| -rw-r--r-- | js/dojo/dojox/data/StoreExplorer.js | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/js/dojo/dojox/data/StoreExplorer.js b/js/dojo/dojox/data/StoreExplorer.js new file mode 100644 index 0000000..14581b6 --- /dev/null +++ b/js/dojo/dojox/data/StoreExplorer.js @@ -0,0 +1,196 @@ +//>>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',"<img style='width:12px; height:12px' src='" + dojo.moduleUrl("dijit.themes.tundra.images","dndCopy.png") + "' /> 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); + } + + } + } +}); + +}); |
