summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/data/StoreExplorer.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/data/StoreExplorer.js')
-rw-r--r--js/dojo-1.7.2/dojox/data/StoreExplorer.js196
1 files changed, 196 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/data/StoreExplorer.js b/js/dojo-1.7.2/dojox/data/StoreExplorer.js
new file mode 100644
index 0000000..14581b6
--- /dev/null
+++ b/js/dojo-1.7.2/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);
+ }
+
+ }
+ }
+});
+
+});