| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.data.ItemExplorer"]){ |
| dojo._hasResource["dojox.data.ItemExplorer"]=true; |
| dojo.provide("dojox.data.ItemExplorer"); |
| dojo.require("dijit.Tree"); |
| dojo.require("dijit.Dialog"); |
| dojo.require("dijit.Menu"); |
| dojo.require("dijit.form.ValidationTextBox"); |
| dojo.require("dijit.form.Textarea"); |
| dojo.require("dijit.form.Button"); |
| dojo.require("dijit.form.CheckBox"); |
| dojo.require("dijit.form.FilteringSelect"); |
| (function(){ |
| var _1=function(_2,_3,_4){ |
| var _5=_2.getValues(_3,_4); |
| if(_5.length<2){ |
| _5=_2.getValue(_3,_4); |
| } |
| return _5; |
| }; |
| dojo.declare("dojox.data.ItemExplorer",dijit.Tree,{useSelect:false,refSelectSearchAttr:null,constructor:function(_6){ |
| dojo.mixin(this,_6); |
| var _7=this; |
| var _8={}; |
| var _9=this.rootModelNode={value:_8,id:"root"}; |
| this._modelNodeIdMap={}; |
| this._modelNodePropMap={}; |
| var _a=1; |
| this.model={getRoot:function(_b){ |
| _b(_9); |
| },mayHaveChildren:function(_c){ |
| return _c.value&&typeof _c.value=="object"&&!(_c.value instanceof Date); |
| },getChildren:function(_d,_e,_f){ |
| var _10,_11,_12=_d.value; |
| var _13=[]; |
| if(_12==_8){ |
| _e([]); |
| return; |
| } |
| var _14=_7.store&&_7.store.isItem(_12,true); |
| if(_14&&!_7.store.isItemLoaded(_12)){ |
| _7.store.loadItem({item:_12,onItem:function(_15){ |
| _12=_15; |
| _16(); |
| }}); |
| }else{ |
| _16(); |
| } |
| function _16(){ |
| if(_14){ |
| _10=_7.store.getAttributes(_12); |
| _11=_12; |
| }else{ |
| if(_12&&typeof _12=="object"){ |
| _11=_d.value; |
| _10=[]; |
| for(var i in _12){ |
| if(_12.hasOwnProperty(i)&&i!="__id"&&i!="__clientId"){ |
| _10.push(i); |
| } |
| } |
| } |
| } |
| if(_10){ |
| for(var key,k=0;key=_10[k++];){ |
| _13.push({property:key,value:_14?_1(_7.store,_12,key):_12[key],parent:_11}); |
| } |
| _13.push({addNew:true,parent:_11,parentNode:_d}); |
| } |
| _e(_13); |
| }; |
| },getIdentity:function(_17){ |
| if(!_17.id){ |
| if(_17.addNew){ |
| _17.property="--addNew"; |
| } |
| _17.id=_a++; |
| if(_7.store){ |
| if(_7.store.isItem(_17.value)){ |
| var _18=_7.store.getIdentity(_17.value); |
| (_7._modelNodeIdMap[_18]=_7._modelNodeIdMap[_18]||[]).push(_17); |
| } |
| if(_17.parent){ |
| _18=_7.store.getIdentity(_17.parent)+"."+_17.property; |
| (_7._modelNodePropMap[_18]=_7._modelNodePropMap[_18]||[]).push(_17); |
| } |
| } |
| } |
| return _17.id; |
| },getLabel:function(_19){ |
| return _19===_9?"Object Properties":_19.addNew?(_19.parent instanceof Array?"Add new value":"Add new property"):_19.property+": "+(_19.value instanceof Array?"("+_19.value.length+" elements)":_19.value); |
| },onChildrenChange:function(_1a){ |
| },onChange:function(_1b){ |
| }}; |
| },postCreate:function(){ |
| this.inherited(arguments); |
| dojo.connect(this,"onClick",function(_1c,_1d){ |
| this.lastFocused=_1d; |
| if(_1c.addNew){ |
| this._addProperty(); |
| }else{ |
| this._editProperty(); |
| } |
| }); |
| var _1e=new dijit.Menu({targetNodeIds:[this.rootNode.domNode],id:"contextMenu"}); |
| dojo.connect(_1e,"_openMyself",this,function(e){ |
| var _1f=dijit.getEnclosingWidget(e.target); |
| if(_1f){ |
| var _20=_1f.item; |
| if(this.store.isItem(_20.value,true)&&!_20.parent){ |
| _1e.getChildren().forEach(function(_21){ |
| _21.attr("disabled",(_21.label!="Add")); |
| }); |
| this.lastFocused=_1f; |
| }else{ |
| if(_20.value&&typeof _20.value=="object"&&!(_20.value instanceof Date)){ |
| _1e.getChildren().forEach(function(_22){ |
| _22.attr("disabled",(_22.label!="Add")&&(_22.label!="Delete")); |
| }); |
| this.lastFocused=_1f; |
| }else{ |
| if(_20.property&&dojo.indexOf(this.store.getIdentityAttributes(),_20.property)>=0){ |
| this.focusNode(_1f); |
| alert("Cannot modify an Identifier node."); |
| }else{ |
| if(_20.addNew){ |
| this.focusNode(_1f); |
| }else{ |
| _1e.getChildren().forEach(function(_23){ |
| _23.attr("disabled",(_23.label!="Edit")&&(_23.label!="Delete")); |
| }); |
| this.lastFocused=_1f; |
| } |
| } |
| } |
| } |
| } |
| }); |
| _1e.addChild(new dijit.MenuItem({label:"Add",onClick:dojo.hitch(this,"_addProperty")})); |
| _1e.addChild(new dijit.MenuItem({label:"Edit",onClick:dojo.hitch(this,"_editProperty")})); |
| _1e.addChild(new dijit.MenuItem({label:"Delete",onClick:dojo.hitch(this,"_destroyProperty")})); |
| _1e.startup(); |
| },store:null,setStore:function(_24){ |
| this.store=_24; |
| var _25=this; |
| if(this._editDialog){ |
| this._editDialog.destroyRecursive(); |
| delete this._editDialog; |
| } |
| dojo.connect(_24,"onSet",function(_26,_27,_28,_29){ |
| var _2a,i,_2b=_25.store.getIdentity(_26); |
| _2a=_25._modelNodeIdMap[_2b]; |
| if(_2a&&(_28===undefined||_29===undefined||_28 instanceof Array||_29 instanceof Array||typeof _28=="object"||typeof _29=="object")){ |
| for(i=0;i<_2a.length;i++){ |
| (function(_2c){ |
| _25.model.getChildren(_2c,function(_2d){ |
| _25.model.onChildrenChange(_2c,_2d); |
| }); |
| })(_2a[i]); |
| } |
| } |
| _2a=_25._modelNodePropMap[_2b+"."+_27]; |
| if(_2a){ |
| for(i=0;i<_2a.length;i++){ |
| _2a[i].value=_29; |
| _25.model.onChange(_2a[i]); |
| } |
| } |
| }); |
| this.rootNode.setChildItems([]); |
| },setItem:function(_2e){ |
| (this._modelNodeIdMap={})[this.store.getIdentity(_2e)]=[this.rootModelNode]; |
| this._modelNodePropMap={}; |
| this.rootModelNode.value=_2e; |
| var _2f=this; |
| this.model.getChildren(this.rootModelNode,function(_30){ |
| _2f.rootNode.setChildItems(_30); |
| }); |
| },refreshItem:function(){ |
| this.setItem(this.rootModelNode.value); |
| },_createEditDialog:function(){ |
| this._editDialog=new dijit.Dialog({title:"Edit Property",execute:dojo.hitch(this,"_updateItem"),preload:true}); |
| this._editDialog.placeAt(dojo.body()); |
| this._editDialog.startup(); |
| var _31=dojo.doc.createElement("div"); |
| var _32=dojo.doc.createElement("label"); |
| dojo.attr(_32,"for","property"); |
| dojo.style(_32,"fontWeight","bold"); |
| dojo.attr(_32,"innerHTML","Property:"); |
| _31.appendChild(_32); |
| var _33=new dijit.form.ValidationTextBox({name:"property",value:"",required:true,disabled:true}).placeAt(_31); |
| _31.appendChild(dojo.doc.createElement("br")); |
| _31.appendChild(dojo.doc.createElement("br")); |
| var _34=new dijit.form.RadioButton({name:"itemType",value:"value",onClick:dojo.hitch(this,function(){ |
| this._enableFields("value"); |
| })}).placeAt(_31); |
| var _35=dojo.doc.createElement("label"); |
| dojo.attr(_35,"for","value"); |
| dojo.attr(_35,"innerHTML","Value (JSON):"); |
| _31.appendChild(_35); |
| var _36=dojo.doc.createElement("div"); |
| dojo.addClass(_36,"value"); |
| var _37=new dijit.form.Textarea({name:"jsonVal"}).placeAt(_36); |
| _31.appendChild(_36); |
| var _38=new dijit.form.RadioButton({name:"itemType",value:"reference",onClick:dojo.hitch(this,function(){ |
| this._enableFields("reference"); |
| })}).placeAt(_31); |
| var _39=dojo.doc.createElement("label"); |
| dojo.attr(_39,"for","_reference"); |
| dojo.attr(_39,"innerHTML","Reference (ID):"); |
| _31.appendChild(_39); |
| _31.appendChild(dojo.doc.createElement("br")); |
| var _3a=dojo.doc.createElement("div"); |
| dojo.addClass(_3a,"reference"); |
| if(this.useSelect){ |
| var _3b=new dijit.form.FilteringSelect({name:"_reference",store:this.store,searchAttr:this.refSelectSearchAttr||this.store.getIdentityAttributes()[0],required:false,value:null,pageSize:10}).placeAt(_3a); |
| }else{ |
| var _3c=new dijit.form.ValidationTextBox({name:"_reference",value:"",promptMessage:"Enter the ID of the item to reference",isValid:dojo.hitch(this,function(_3d){ |
| return true; |
| })}).placeAt(_3a); |
| } |
| _31.appendChild(_3a); |
| _31.appendChild(dojo.doc.createElement("br")); |
| _31.appendChild(dojo.doc.createElement("br")); |
| var _3e=document.createElement("div"); |
| _3e.setAttribute("dir","rtl"); |
| var _3f=new dijit.form.Button({type:"reset",label:"Cancel"}).placeAt(_3e); |
| _3f.onClick=dojo.hitch(this._editDialog,"onCancel"); |
| var _40=new dijit.form.Button({type:"submit",label:"OK"}).placeAt(_3e); |
| _31.appendChild(_3e); |
| this._editDialog.attr("content",_31); |
| },_enableFields:function(_41){ |
| switch(_41){ |
| case "reference": |
| dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_42){ |
| dijit.getEnclosingWidget(_42).attr("disabled",true); |
| }); |
| dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_43){ |
| dijit.getEnclosingWidget(_43).attr("disabled",false); |
| }); |
| break; |
| case "value": |
| dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_44){ |
| dijit.getEnclosingWidget(_44).attr("disabled",false); |
| }); |
| dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_45){ |
| dijit.getEnclosingWidget(_45).attr("disabled",true); |
| }); |
| break; |
| } |
| },_updateItem:function(_46){ |
| var _47,_48,val,_49,_4a=this._editDialog.attr("title")=="Edit Property"; |
| var _4b=this._editDialog; |
| var _4c=this.store; |
| function _4d(){ |
| try{ |
| var _4e,_4f=[]; |
| var _50=_46.property; |
| if(_4a){ |
| while(!_4c.isItem(_48.parent,true)){ |
| _47=_47.getParent(); |
| _4f.push(_48.property); |
| _48=_47.item; |
| } |
| if(_4f.length==0){ |
| _4c.setValue(_48.parent,_48.property,val); |
| }else{ |
| _49=_1(_4c,_48.parent,_48.property); |
| if(_49 instanceof Array){ |
| _49=_49.concat(); |
| } |
| _4e=_49; |
| while(_4f.length>1){ |
| _4e=_4e[_4f.pop()]; |
| } |
| _4e[_4f]=val; |
| _4c.setValue(_48.parent,_48.property,_49); |
| } |
| }else{ |
| if(_4c.isItem(_51,true)){ |
| if(!_4c.isItemLoaded(_51)){ |
| _4c.loadItem({item:_51,onItem:function(_52){ |
| if(_52 instanceof Array){ |
| _50=_52.length; |
| } |
| _4c.setValue(_52,_50,val); |
| }}); |
| }else{ |
| if(_51 instanceof Array){ |
| _50=_51.length; |
| } |
| _4c.setValue(_51,_50,val); |
| } |
| }else{ |
| if(_48.value instanceof Array){ |
| _4f.push(_48.value.length); |
| }else{ |
| _4f.push(_46.property); |
| } |
| while(!_4c.isItem(_48.parent,true)){ |
| _47=_47.getParent(); |
| _4f.push(_48.property); |
| _48=_47.item; |
| } |
| _49=_1(_4c,_48.parent,_48.property); |
| _4e=_49; |
| while(_4f.length>1){ |
| _4e=_4e[_4f.pop()]; |
| } |
| _4e[_4f]=val; |
| _4c.setValue(_48.parent,_48.property,_49); |
| } |
| } |
| } |
| catch(e){ |
| alert(e); |
| } |
| }; |
| if(_4b.validate()){ |
| _47=this.lastFocused; |
| _48=_47.item; |
| var _51=_48.value; |
| if(_48.addNew){ |
| _51=_47.item.parent; |
| _47=_47.getParent(); |
| _48=_47.item; |
| } |
| val=null; |
| switch(_46.itemType){ |
| case "reference": |
| this.store.fetchItemByIdentity({identity:_46._reference,onItem:function(_53){ |
| val=_53; |
| _4d(); |
| },onError:function(){ |
| alert("The id could not be found"); |
| }}); |
| break; |
| case "value": |
| var _54=_46.jsonVal; |
| val=dojo.fromJson(_54); |
| if(typeof val=="function"){ |
| val.toString=function(){ |
| return _54; |
| }; |
| } |
| _4d(); |
| break; |
| } |
| }else{ |
| _4b.show(); |
| } |
| },_editProperty:function(){ |
| var _55=dojo.mixin({},this.lastFocused.item); |
| if(!this._editDialog){ |
| this._createEditDialog(); |
| }else{ |
| this._editDialog.reset(); |
| } |
| if(dojo.indexOf(this.store.getIdentityAttributes(),_55.property)>=0){ |
| alert("Cannot Edit an Identifier!"); |
| }else{ |
| this._editDialog.attr("title","Edit Property"); |
| dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true); |
| if(this.store.isItem(_55.value,true)){ |
| if(_55.parent){ |
| _55.itemType="reference"; |
| this._enableFields(_55.itemType); |
| _55._reference=this.store.getIdentity(_55.value); |
| this._editDialog.attr("value",_55); |
| this._editDialog.show(); |
| } |
| }else{ |
| if(_55.value&&typeof _55.value=="object"&&!(_55.value instanceof Date)){ |
| }else{ |
| _55.itemType="value"; |
| this._enableFields(_55.itemType); |
| _55.jsonVal=typeof _55.value=="function"?_55.value.toString():_55.value instanceof Date?"new Date(\""+_55.value+"\")":dojo.toJson(_55.value); |
| this._editDialog.attr("value",_55); |
| this._editDialog.show(); |
| } |
| } |
| } |
| },_destroyProperty:function(){ |
| var _56=this.lastFocused; |
| var _57=_56.item; |
| var _58=[]; |
| while(!this.store.isItem(_57.parent,true)||_57.parent instanceof Array){ |
| _56=_56.getParent(); |
| _58.push(_57.property); |
| _57=_56.item; |
| } |
| if(dojo.indexOf(this.store.getIdentityAttributes(),_57.property)>=0){ |
| alert("Cannot Delete an Identifier!"); |
| }else{ |
| try{ |
| if(_58.length>0){ |
| var _59,_5a=_1(this.store,_57.parent,_57.property); |
| _59=_5a; |
| while(_58.length>1){ |
| _59=_59[_58.pop()]; |
| } |
| if(dojo.isArray(_59)){ |
| _59.splice(_58,1); |
| }else{ |
| delete _59[_58]; |
| } |
| this.store.setValue(_57.parent,_57.property,_5a); |
| }else{ |
| this.store.unsetAttribute(_57.parent,_57.property); |
| } |
| } |
| catch(e){ |
| alert(e); |
| } |
| } |
| },_addProperty:function(){ |
| var _5b=this.lastFocused.item; |
| var _5c=_5b.value; |
| var _5d=dojo.hitch(this,function(){ |
| var _5e=null; |
| if(!this._editDialog){ |
| this._createEditDialog(); |
| }else{ |
| this._editDialog.reset(); |
| } |
| if(_5c instanceof Array){ |
| _5e=_5c.length; |
| dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true); |
| }else{ |
| dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",false); |
| } |
| this._editDialog.attr("title","Add Property"); |
| this._enableFields("value"); |
| this._editDialog.attr("value",{itemType:"value",property:_5e}); |
| this._editDialog.show(); |
| }); |
| if(_5b.addNew){ |
| _5b=this.lastFocused.getParent().item; |
| _5c=this.lastFocused.item.parent; |
| } |
| if(_5b.property&&dojo.indexOf(this.store.getIdentityAttributes(),_5b.property)>=0){ |
| alert("Cannot add properties to an ID node!"); |
| }else{ |
| if(this.store.isItem(_5c,true)&&!this.store.isItemLoaded(_5c)){ |
| this.store.loadItem({item:_5c,onItem:function(_5f){ |
| _5c=_5f; |
| _5d(); |
| }}); |
| }else{ |
| _5d(); |
| } |
| } |
| }}); |
| })(); |
| } |