890 lines
21 KiB
JavaScript
890 lines
21 KiB
JavaScript
//>>built
|
|
define(["dijit","dojo","dojox","dojo/i18n!dijit/nls/common","dojo/require!dojo/window,dijit/layout/ContentPane,dijit/_Templated,dijit/_Contained,dijit/layout/_LayoutWidget,dijit/Menu,dijit/form/Button,dijit/focus,dijit/_base/focus,dojox/html/metrics,dojo/i18n"],function(_1,_2,_3){
|
|
_2.provide("dojox.widget.RollingList");
|
|
_2.experimental("dojox.widget.RollingList");
|
|
_2.require("dojo.window");
|
|
_2.require("dijit.layout.ContentPane");
|
|
_2.require("dijit._Templated");
|
|
_2.require("dijit._Contained");
|
|
_2.require("dijit.layout._LayoutWidget");
|
|
_2.require("dijit.Menu");
|
|
_2.require("dijit.form.Button");
|
|
_2.require("dijit.focus");
|
|
_2.require("dijit._base.focus");
|
|
_2.require("dojox.html.metrics");
|
|
_2.require("dojo.i18n");
|
|
_2.requireLocalization("dijit","common");
|
|
_2.declare("dojox.widget._RollingListPane",[_1.layout.ContentPane,_1._Templated,_1._Contained],{templateString:"<div class=\"dojoxRollingListPane\"><table><tbody><tr><td dojoAttachPoint=\"containerNode\"></td></tr></tbody></div>",parentWidget:null,parentPane:null,store:null,items:null,query:null,queryOptions:null,_focusByNode:true,minWidth:0,_setContentAndScroll:function(_4,_5){
|
|
this._setContent(_4,_5);
|
|
this.parentWidget.scrollIntoView(this);
|
|
},_updateNodeWidth:function(n,_6){
|
|
n.style.width="";
|
|
var _7=_2.marginBox(n).w;
|
|
if(_7<_6){
|
|
_2.marginBox(n,{w:_6});
|
|
}
|
|
},_onMinWidthChange:function(v){
|
|
this._updateNodeWidth(this.domNode,v);
|
|
},_setMinWidthAttr:function(v){
|
|
if(v!==this.minWidth){
|
|
this.minWidth=v;
|
|
this._onMinWidthChange(v);
|
|
}
|
|
},startup:function(){
|
|
if(this._started){
|
|
return;
|
|
}
|
|
if(this.store&&this.store.getFeatures()["dojo.data.api.Notification"]){
|
|
window.setTimeout(_2.hitch(this,function(){
|
|
this.connect(this.store,"onSet","_onSetItem");
|
|
this.connect(this.store,"onNew","_onNewItem");
|
|
this.connect(this.store,"onDelete","_onDeleteItem");
|
|
}),1);
|
|
}
|
|
this.connect(this.focusNode||this.domNode,"onkeypress","_focusKey");
|
|
this.parentWidget._updateClass(this.domNode,"Pane");
|
|
this.inherited(arguments);
|
|
this._onMinWidthChange(this.minWidth);
|
|
},_focusKey:function(e){
|
|
if(e.charOrCode==_2.keys.BACKSPACE){
|
|
_2.stopEvent(e);
|
|
return;
|
|
}else{
|
|
if(e.charOrCode==_2.keys.LEFT_ARROW&&this.parentPane){
|
|
this.parentPane.focus();
|
|
this.parentWidget.scrollIntoView(this.parentPane);
|
|
}else{
|
|
if(e.charOrCode==_2.keys.ENTER){
|
|
this.parentWidget._onExecute();
|
|
}
|
|
}
|
|
}
|
|
},focus:function(_8){
|
|
if(this.parentWidget._focusedPane!=this){
|
|
this.parentWidget._focusedPane=this;
|
|
this.parentWidget.scrollIntoView(this);
|
|
if(this._focusByNode&&(!this.parentWidget._savedFocus||_8)){
|
|
try{
|
|
(this.focusNode||this.domNode).focus();
|
|
}
|
|
catch(e){
|
|
}
|
|
}
|
|
}
|
|
},_onShow:function(){
|
|
if((this.store||this.items)&&((this.refreshOnShow&&this.domNode)||(!this.isLoaded&&this.domNode))){
|
|
this.refresh();
|
|
}
|
|
},_load:function(){
|
|
this.isLoaded=false;
|
|
if(this.items){
|
|
this._setContentAndScroll(this.onLoadStart(),true);
|
|
window.setTimeout(_2.hitch(this,"_doQuery"),1);
|
|
}else{
|
|
this._doQuery();
|
|
}
|
|
},_doLoadItems:function(_9,_a){
|
|
var _b=0,_c=this.store;
|
|
_2.forEach(_9,function(_d){
|
|
if(!_c.isItemLoaded(_d)){
|
|
_b++;
|
|
}
|
|
});
|
|
if(_b===0){
|
|
_a();
|
|
}else{
|
|
var _e=function(_f){
|
|
_b--;
|
|
if((_b)===0){
|
|
_a();
|
|
}
|
|
};
|
|
_2.forEach(_9,function(_10){
|
|
if(!_c.isItemLoaded(_10)){
|
|
_c.loadItem({item:_10,onItem:_e});
|
|
}
|
|
});
|
|
}
|
|
},_doQuery:function(){
|
|
if(!this.domNode){
|
|
return;
|
|
}
|
|
var _11=this.parentWidget.preloadItems;
|
|
_11=(_11===true||(this.items&&this.items.length<=Number(_11)));
|
|
if(this.items&&_11){
|
|
this._doLoadItems(this.items,_2.hitch(this,"onItems"));
|
|
}else{
|
|
if(this.items){
|
|
this.onItems();
|
|
}else{
|
|
this._setContentAndScroll(this.onFetchStart(),true);
|
|
this.store.fetch({query:this.query,onComplete:function(_12){
|
|
this.items=_12;
|
|
this.onItems();
|
|
},onError:function(e){
|
|
this._onError("Fetch",e);
|
|
},scope:this});
|
|
}
|
|
}
|
|
},_hasItem:function(_13){
|
|
var _14=this.items||[];
|
|
for(var i=0,_15;(_15=_14[i]);i++){
|
|
if(this.parentWidget._itemsMatch(_15,_13)){
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},_onSetItem:function(_16,_17,_18,_19){
|
|
if(this._hasItem(_16)){
|
|
this.refresh();
|
|
}
|
|
},_onNewItem:function(_1a,_1b){
|
|
var sel;
|
|
if((!_1b&&!this.parentPane)||(_1b&&this.parentPane&&this.parentPane._hasItem(_1b.item)&&(sel=this.parentPane._getSelected())&&this.parentWidget._itemsMatch(sel.item,_1b.item))){
|
|
this.items.push(_1a);
|
|
this.refresh();
|
|
}else{
|
|
if(_1b&&this.parentPane&&this._hasItem(_1b.item)){
|
|
this.refresh();
|
|
}
|
|
}
|
|
},_onDeleteItem:function(_1c){
|
|
if(this._hasItem(_1c)){
|
|
this.items=_2.filter(this.items,function(i){
|
|
return (i!=_1c);
|
|
});
|
|
this.refresh();
|
|
}
|
|
},onFetchStart:function(){
|
|
return this.loadingMessage;
|
|
},onFetchError:function(_1d){
|
|
return this.errorMessage;
|
|
},onLoadStart:function(){
|
|
return this.loadingMessage;
|
|
},onLoadError:function(_1e){
|
|
return this.errorMessage;
|
|
},onItems:function(){
|
|
if(!this.onLoadDeferred){
|
|
this.cancel();
|
|
this.onLoadDeferred=new _2.Deferred(_2.hitch(this,"cancel"));
|
|
}
|
|
this._onLoadHandler();
|
|
}});
|
|
_2.declare("dojox.widget._RollingListGroupPane",[_3.widget._RollingListPane],{templateString:"<div><div dojoAttachPoint=\"containerNode\"></div>"+"<div dojoAttachPoint=\"menuContainer\">"+"<div dojoAttachPoint=\"menuNode\"></div>"+"</div></div>",_menu:null,_setContent:function(_1f){
|
|
if(!this._menu){
|
|
this.inherited(arguments);
|
|
}
|
|
},_onMinWidthChange:function(v){
|
|
if(!this._menu){
|
|
return;
|
|
}
|
|
var _20=_2.marginBox(this.domNode).w;
|
|
var _21=_2.marginBox(this._menu.domNode).w;
|
|
this._updateNodeWidth(this._menu.domNode,v-(_20-_21));
|
|
},onItems:function(){
|
|
var _22,_23=false;
|
|
if(this._menu){
|
|
_22=this._getSelected();
|
|
this._menu.destroyRecursive();
|
|
}
|
|
this._menu=this._getMenu();
|
|
var _24,_25;
|
|
if(this.items.length){
|
|
_2.forEach(this.items,function(_26){
|
|
_24=this.parentWidget._getMenuItemForItem(_26,this);
|
|
if(_24){
|
|
if(_22&&this.parentWidget._itemsMatch(_24.item,_22.item)){
|
|
_25=_24;
|
|
}
|
|
this._menu.addChild(_24);
|
|
}
|
|
},this);
|
|
}else{
|
|
_24=this.parentWidget._getMenuItemForItem(null,this);
|
|
if(_24){
|
|
this._menu.addChild(_24);
|
|
}
|
|
}
|
|
if(_25){
|
|
this._setSelected(_25);
|
|
if((_22&&!_22.children&&_25.children)||(_22&&_22.children&&!_25.children)){
|
|
var _27=this.parentWidget._getPaneForItem(_25.item,this,_25.children);
|
|
if(_27){
|
|
this.parentWidget.addChild(_27,this.getIndexInParent()+1);
|
|
}else{
|
|
this.parentWidget._removeAfter(this);
|
|
this.parentWidget._onItemClick(null,this,_25.item,_25.children);
|
|
}
|
|
}
|
|
}else{
|
|
if(_22){
|
|
this.parentWidget._removeAfter(this);
|
|
}
|
|
}
|
|
this.containerNode.innerHTML="";
|
|
this.containerNode.appendChild(this._menu.domNode);
|
|
this.parentWidget.scrollIntoView(this);
|
|
this._checkScrollConnection(true);
|
|
this.inherited(arguments);
|
|
this._onMinWidthChange(this.minWidth);
|
|
},_checkScrollConnection:function(_28){
|
|
var _29=this.store;
|
|
if(this._scrollConn){
|
|
this.disconnect(this._scrollConn);
|
|
}
|
|
delete this._scrollConn;
|
|
if(!_2.every(this.items,function(i){
|
|
return _29.isItemLoaded(i);
|
|
})){
|
|
if(_28){
|
|
this._loadVisibleItems();
|
|
}
|
|
this._scrollConn=this.connect(this.domNode,"onscroll","_onScrollPane");
|
|
}
|
|
},startup:function(){
|
|
this.inherited(arguments);
|
|
this.parentWidget._updateClass(this.domNode,"GroupPane");
|
|
},focus:function(_2a){
|
|
if(this._menu){
|
|
if(this._pendingFocus){
|
|
this.disconnect(this._pendingFocus);
|
|
}
|
|
delete this._pendingFocus;
|
|
var _2b=this._menu.focusedChild;
|
|
if(!_2b){
|
|
var _2c=_2.query(".dojoxRollingListItemSelected",this.domNode)[0];
|
|
if(_2c){
|
|
_2b=_1.byNode(_2c);
|
|
}
|
|
}
|
|
if(!_2b){
|
|
_2b=this._menu.getChildren()[0]||this._menu;
|
|
}
|
|
this._focusByNode=false;
|
|
if(_2b.focusNode){
|
|
if(!this.parentWidget._savedFocus||_2a){
|
|
try{
|
|
_2b.focusNode.focus();
|
|
}
|
|
catch(e){
|
|
}
|
|
}
|
|
window.setTimeout(function(){
|
|
try{
|
|
_2.window.scrollIntoView(_2b.focusNode);
|
|
}
|
|
catch(e){
|
|
}
|
|
},1);
|
|
}else{
|
|
if(_2b.focus){
|
|
if(!this.parentWidget._savedFocus||_2a){
|
|
_2b.focus();
|
|
}
|
|
}else{
|
|
this._focusByNode=true;
|
|
}
|
|
}
|
|
this.inherited(arguments);
|
|
}else{
|
|
if(!this._pendingFocus){
|
|
this._pendingFocus=this.connect(this,"onItems","focus");
|
|
}
|
|
}
|
|
},_getMenu:function(){
|
|
var _2d=this;
|
|
var _2e=new _1.Menu({parentMenu:this.parentPane?this.parentPane._menu:null,onCancel:function(_2f){
|
|
if(_2d.parentPane){
|
|
_2d.parentPane.focus(true);
|
|
}
|
|
},_moveToPopup:function(evt){
|
|
if(this.focusedChild&&!this.focusedChild.disabled){
|
|
this.focusedChild._onClick(evt);
|
|
}
|
|
}},this.menuNode);
|
|
this.connect(_2e,"onItemClick",function(_30,evt){
|
|
if(_30.disabled){
|
|
return;
|
|
}
|
|
evt.alreadySelected=_2.hasClass(_30.domNode,"dojoxRollingListItemSelected");
|
|
if(evt.alreadySelected&&((evt.type=="keypress"&&evt.charOrCode!=_2.keys.ENTER)||(evt.type=="internal"))){
|
|
var p=this.parentWidget.getChildren()[this.getIndexInParent()+1];
|
|
if(p){
|
|
p.focus(true);
|
|
this.parentWidget.scrollIntoView(p);
|
|
}
|
|
}else{
|
|
this._setSelected(_30,_2e);
|
|
this.parentWidget._onItemClick(evt,this,_30.item,_30.children);
|
|
if(evt.type=="keypress"&&evt.charOrCode==_2.keys.ENTER){
|
|
this.parentWidget._onExecute();
|
|
}
|
|
}
|
|
});
|
|
if(!_2e._started){
|
|
_2e.startup();
|
|
}
|
|
return _2e;
|
|
},_onScrollPane:function(){
|
|
if(this._visibleLoadPending){
|
|
window.clearTimeout(this._visibleLoadPending);
|
|
}
|
|
this._visibleLoadPending=window.setTimeout(_2.hitch(this,"_loadVisibleItems"),500);
|
|
},_loadVisibleItems:function(){
|
|
delete this._visibleLoadPending;
|
|
var _31=this._menu;
|
|
if(!_31){
|
|
return;
|
|
}
|
|
var _32=_31.getChildren();
|
|
if(!_32||!_32.length){
|
|
return;
|
|
}
|
|
var _33=function(n,m,pb){
|
|
var s=_2.getComputedStyle(n);
|
|
var r=0;
|
|
if(m){
|
|
r+=_2._getMarginExtents(n,s).t;
|
|
}
|
|
if(pb){
|
|
r+=_2._getPadBorderExtents(n,s).t;
|
|
}
|
|
return r;
|
|
};
|
|
var _34=_33(this.domNode,false,true)+_33(this.containerNode,true,true)+_33(_31.domNode,true,true)+_33(_32[0].domNode,true,false);
|
|
var h=_2.contentBox(this.domNode).h;
|
|
var _35=this.domNode.scrollTop-_34-(h/2);
|
|
var _36=_35+(3*h/2);
|
|
var _37=_2.filter(_32,function(c){
|
|
var cnt=c.domNode.offsetTop;
|
|
var s=c.store;
|
|
var i=c.item;
|
|
return (cnt>=_35&&cnt<=_36&&!s.isItemLoaded(i));
|
|
});
|
|
var _38=_2.map(_37,function(c){
|
|
return c.item;
|
|
});
|
|
var _39=_2.hitch(this,function(){
|
|
var _3a=this._getSelected();
|
|
var _3b;
|
|
_2.forEach(_38,function(_3c,idx){
|
|
var _3d=this.parentWidget._getMenuItemForItem(_3c,this);
|
|
var _3e=_37[idx];
|
|
var _3f=_3e.getIndexInParent();
|
|
_31.removeChild(_3e);
|
|
if(_3d){
|
|
if(_3a&&this.parentWidget._itemsMatch(_3d.item,_3a.item)){
|
|
_3b=_3d;
|
|
}
|
|
_31.addChild(_3d,_3f);
|
|
if(_31.focusedChild==_3e){
|
|
_31.focusChild(_3d);
|
|
}
|
|
}
|
|
_3e.destroy();
|
|
},this);
|
|
this._checkScrollConnection(false);
|
|
});
|
|
this._doLoadItems(_38,_39);
|
|
},_getSelected:function(_40){
|
|
if(!_40){
|
|
_40=this._menu;
|
|
}
|
|
if(_40){
|
|
var _41=this._menu.getChildren();
|
|
for(var i=0,_42;(_42=_41[i]);i++){
|
|
if(_2.hasClass(_42.domNode,"dojoxRollingListItemSelected")){
|
|
return _42;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
},_setSelected:function(_43,_44){
|
|
if(!_44){
|
|
_44=this._menu;
|
|
}
|
|
if(_44){
|
|
_2.forEach(_44.getChildren(),function(i){
|
|
this.parentWidget._updateClass(i.domNode,"Item",{"Selected":(_43&&(i==_43&&!i.disabled))});
|
|
},this);
|
|
}
|
|
}});
|
|
_2.declare("dojox.widget.RollingList",[_1._Widget,_1._Templated,_1._Container],{templateString:_2.cache("dojox.widget","RollingList/RollingList.html","<div class=\"dojoxRollingList ${className}\"\n\t><div class=\"dojoxRollingListContainer\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onkeypress:_onKey\"\n\t></div\n\t><div class=\"dojoxRollingListButtons\" dojoAttachPoint=\"buttonsNode\"\n ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"okButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onExecute\">${okButtonLabel}</button\n ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"cancelButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onCancel\">${cancelButtonLabel}</button\n\t></div\n></div>\n"),widgetsInTemplate:true,className:"",store:null,query:null,queryOptions:null,childrenAttrs:["children"],parentAttr:"",value:null,executeOnDblClick:true,preloadItems:false,showButtons:false,okButtonLabel:"",cancelButtonLabel:"",minPaneWidth:0,postMixInProperties:function(){
|
|
this.inherited(arguments);
|
|
var loc=_2.i18n.getLocalization("dijit","common");
|
|
this.okButtonLabel=this.okButtonLabel||loc.buttonOk;
|
|
this.cancelButtonLabel=this.cancelButtonLabel||loc.buttonCancel;
|
|
},_setShowButtonsAttr:function(_45){
|
|
var _46=false;
|
|
if((this.showButtons!=_45&&this._started)||(this.showButtons==_45&&!this.started)){
|
|
_46=true;
|
|
}
|
|
_2.toggleClass(this.domNode,"dojoxRollingListButtonsHidden",!_45);
|
|
this.showButtons=_45;
|
|
if(_46){
|
|
if(this._started){
|
|
this.layout();
|
|
}else{
|
|
window.setTimeout(_2.hitch(this,"layout"),0);
|
|
}
|
|
}
|
|
},_itemsMatch:function(_47,_48){
|
|
if(!_47&&!_48){
|
|
return true;
|
|
}else{
|
|
if(!_47||!_48){
|
|
return false;
|
|
}
|
|
}
|
|
return (_47==_48||(this._isIdentity&&this.store.getIdentity(_47)==this.store.getIdentity(_48)));
|
|
},_removeAfter:function(idx){
|
|
if(typeof idx!="number"){
|
|
idx=this.getIndexOfChild(idx);
|
|
}
|
|
if(idx>=0){
|
|
_2.forEach(this.getChildren(),function(c,i){
|
|
if(i>idx){
|
|
this.removeChild(c);
|
|
c.destroyRecursive();
|
|
}
|
|
},this);
|
|
}
|
|
var _49=this.getChildren(),_4a=_49[_49.length-1];
|
|
var _4b=null;
|
|
while(_4a&&!_4b){
|
|
var val=_4a._getSelected?_4a._getSelected():null;
|
|
if(val){
|
|
_4b=val.item;
|
|
}
|
|
_4a=_4a.parentPane;
|
|
}
|
|
if(!this._setInProgress){
|
|
this._setValue(_4b);
|
|
}
|
|
},addChild:function(_4c,_4d){
|
|
if(_4d>0){
|
|
this._removeAfter(_4d-1);
|
|
}
|
|
this.inherited(arguments);
|
|
if(!_4c._started){
|
|
_4c.startup();
|
|
}
|
|
_4c.attr("minWidth",this.minPaneWidth);
|
|
this.layout();
|
|
if(!this._savedFocus){
|
|
_4c.focus();
|
|
}
|
|
},_setMinPaneWidthAttr:function(_4e){
|
|
if(_4e!==this.minPaneWidth){
|
|
this.minPaneWidth=_4e;
|
|
_2.forEach(this.getChildren(),function(c){
|
|
c.attr("minWidth",_4e);
|
|
});
|
|
}
|
|
},_updateClass:function(_4f,_50,_51){
|
|
if(!this._declaredClasses){
|
|
this._declaredClasses=("dojoxRollingList "+this.className).split(" ");
|
|
}
|
|
_2.forEach(this._declaredClasses,function(c){
|
|
if(c){
|
|
_2.addClass(_4f,c+_50);
|
|
for(var k in _51||{}){
|
|
_2.toggleClass(_4f,c+_50+k,_51[k]);
|
|
}
|
|
_2.toggleClass(_4f,c+_50+"FocusSelected",(_2.hasClass(_4f,c+_50+"Focus")&&_2.hasClass(_4f,c+_50+"Selected")));
|
|
_2.toggleClass(_4f,c+_50+"HoverSelected",(_2.hasClass(_4f,c+_50+"Hover")&&_2.hasClass(_4f,c+_50+"Selected")));
|
|
}
|
|
});
|
|
},scrollIntoView:function(_52){
|
|
if(this._scrollingTimeout){
|
|
window.clearTimeout(this._scrollingTimeout);
|
|
}
|
|
delete this._scrollingTimeout;
|
|
this._scrollingTimeout=window.setTimeout(_2.hitch(this,function(){
|
|
if(_52.domNode){
|
|
_2.window.scrollIntoView(_52.domNode);
|
|
}
|
|
delete this._scrollingTimeout;
|
|
return;
|
|
}),1);
|
|
},resize:function(_53){
|
|
_1.layout._LayoutWidget.prototype.resize.call(this,_53);
|
|
},layout:function(){
|
|
var _54=this.getChildren();
|
|
if(this._contentBox){
|
|
var bn=this.buttonsNode;
|
|
var _55=this._contentBox.h-_2.marginBox(bn).h-_3.html.metrics.getScrollbar().h;
|
|
_2.forEach(_54,function(c){
|
|
_2.marginBox(c.domNode,{h:_55});
|
|
});
|
|
}
|
|
if(this._focusedPane){
|
|
var foc=this._focusedPane;
|
|
delete this._focusedPane;
|
|
if(!this._savedFocus){
|
|
foc.focus();
|
|
}
|
|
}else{
|
|
if(_54&&_54.length){
|
|
if(!this._savedFocus){
|
|
_54[0].focus();
|
|
}
|
|
}
|
|
}
|
|
},_onChange:function(_56){
|
|
this.onChange(_56);
|
|
},_setValue:function(_57){
|
|
delete this._setInProgress;
|
|
if(!this._itemsMatch(this.value,_57)){
|
|
this.value=_57;
|
|
this._onChange(_57);
|
|
}
|
|
},_setValueAttr:function(_58){
|
|
if(this._itemsMatch(this.value,_58)&&!_58){
|
|
return;
|
|
}
|
|
if(this._setInProgress&&this._setInProgress===_58){
|
|
return;
|
|
}
|
|
this._setInProgress=_58;
|
|
if(!_58||!this.store.isItem(_58)){
|
|
var _59=this.getChildren()[0];
|
|
_59._setSelected(null);
|
|
this._onItemClick(null,_59,null,null);
|
|
return;
|
|
}
|
|
var _5a=_2.hitch(this,function(_5b,_5c){
|
|
var _5d=this.store,id;
|
|
if(this.parentAttr&&_5d.getFeatures()["dojo.data.api.Identity"]&&((id=this.store.getValue(_5b,this.parentAttr))||id==="")){
|
|
var cb=function(i){
|
|
if(_5d.getIdentity(i)==_5d.getIdentity(_5b)){
|
|
_5c(null);
|
|
}else{
|
|
_5c([i]);
|
|
}
|
|
};
|
|
if(id===""){
|
|
_5c(null);
|
|
}else{
|
|
if(typeof id=="string"){
|
|
_5d.fetchItemByIdentity({identity:id,onItem:cb});
|
|
}else{
|
|
if(_5d.isItem(id)){
|
|
cb(id);
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
var _5e=this.childrenAttrs.length;
|
|
var _5f=[];
|
|
_2.forEach(this.childrenAttrs,function(_60){
|
|
var q={};
|
|
q[_60]=_5b;
|
|
_5d.fetch({query:q,scope:this,onComplete:function(_61){
|
|
if(this._setInProgress!==_58){
|
|
return;
|
|
}
|
|
_5f=_5f.concat(_61);
|
|
_5e--;
|
|
if(_5e===0){
|
|
_5c(_5f);
|
|
}
|
|
}});
|
|
},this);
|
|
}
|
|
});
|
|
var _62=_2.hitch(this,function(_63,idx){
|
|
var set=_63[idx];
|
|
var _64=this.getChildren()[idx];
|
|
var _65;
|
|
if(set&&_64){
|
|
var fx=_2.hitch(this,function(){
|
|
if(_65){
|
|
this.disconnect(_65);
|
|
}
|
|
delete _65;
|
|
if(this._setInProgress!==_58){
|
|
return;
|
|
}
|
|
var _66=_2.filter(_64._menu.getChildren(),function(i){
|
|
return this._itemsMatch(i.item,set);
|
|
},this)[0];
|
|
if(_66){
|
|
idx++;
|
|
_64._menu.onItemClick(_66,{type:"internal",stopPropagation:function(){
|
|
},preventDefault:function(){
|
|
}});
|
|
if(_63[idx]){
|
|
_62(_63,idx);
|
|
}else{
|
|
this._setValue(set);
|
|
this.onItemClick(set,_64,this.getChildItems(set));
|
|
}
|
|
}
|
|
});
|
|
if(!_64.isLoaded){
|
|
_65=this.connect(_64,"onLoad",fx);
|
|
}else{
|
|
fx();
|
|
}
|
|
}else{
|
|
if(idx===0){
|
|
this.set("value",null);
|
|
}
|
|
}
|
|
});
|
|
var _67=[];
|
|
var _68=_2.hitch(this,function(_69){
|
|
if(_69&&_69.length){
|
|
_67.push(_69[0]);
|
|
_5a(_69[0],_68);
|
|
}else{
|
|
if(!_69){
|
|
_67.pop();
|
|
}
|
|
_67.reverse();
|
|
_62(_67,0);
|
|
}
|
|
});
|
|
var ns=this.domNode.style;
|
|
if(ns.display=="none"||ns.visibility=="hidden"){
|
|
this._setValue(_58);
|
|
}else{
|
|
if(!this._itemsMatch(_58,this._visibleItem)){
|
|
_68([_58]);
|
|
}
|
|
}
|
|
},_onItemClick:function(evt,_6a,_6b,_6c){
|
|
if(evt){
|
|
var _6d=this._getPaneForItem(_6b,_6a,_6c);
|
|
var _6e=(evt.type=="click"&&evt.alreadySelected);
|
|
if(_6e&&_6d){
|
|
this._removeAfter(_6a.getIndexInParent()+1);
|
|
var _6f=_6a.getNextSibling();
|
|
if(_6f&&_6f._setSelected){
|
|
_6f._setSelected(null);
|
|
}
|
|
this.scrollIntoView(_6f);
|
|
}else{
|
|
if(_6d){
|
|
this.addChild(_6d,_6a.getIndexInParent()+1);
|
|
if(this._savedFocus){
|
|
_6d.focus(true);
|
|
}
|
|
}else{
|
|
this._removeAfter(_6a);
|
|
this.scrollIntoView(_6a);
|
|
}
|
|
}
|
|
}else{
|
|
if(_6a){
|
|
this._removeAfter(_6a);
|
|
this.scrollIntoView(_6a);
|
|
}
|
|
}
|
|
if(!evt||evt.type!="internal"){
|
|
this._setValue(_6b);
|
|
this.onItemClick(_6b,_6a,_6c);
|
|
}
|
|
this._visibleItem=_6b;
|
|
},_getPaneForItem:function(_70,_71,_72){
|
|
var ret=this.getPaneForItem(_70,_71,_72);
|
|
ret.store=this.store;
|
|
ret.parentWidget=this;
|
|
ret.parentPane=_71||null;
|
|
if(!_70){
|
|
ret.query=this.query;
|
|
ret.queryOptions=this.queryOptions;
|
|
}else{
|
|
if(_72){
|
|
ret.items=_72;
|
|
}else{
|
|
ret.items=[_70];
|
|
}
|
|
}
|
|
return ret;
|
|
},_getMenuItemForItem:function(_73,_74){
|
|
var _75=this.store;
|
|
if(!_73||!_75||!_75.isItem(_73)){
|
|
var i=new _1.MenuItem({label:"---",disabled:true,iconClass:"dojoxEmpty",focus:function(){
|
|
}});
|
|
this._updateClass(i.domNode,"Item");
|
|
return i;
|
|
}else{
|
|
var _76=_75.isItemLoaded(_73);
|
|
var _77=_76?this.getChildItems(_73):undefined;
|
|
var _78;
|
|
if(_77){
|
|
_78=this.getMenuItemForItem(_73,_74,_77);
|
|
_78.children=_77;
|
|
this._updateClass(_78.domNode,"Item",{"Expanding":true});
|
|
if(!_78._started){
|
|
var c=_78.connect(_78,"startup",function(){
|
|
this.disconnect(c);
|
|
_2.style(this.arrowWrapper,"display","");
|
|
});
|
|
}else{
|
|
_2.style(_78.arrowWrapper,"display","");
|
|
}
|
|
}else{
|
|
_78=this.getMenuItemForItem(_73,_74,null);
|
|
if(_76){
|
|
this._updateClass(_78.domNode,"Item",{"Single":true});
|
|
}else{
|
|
this._updateClass(_78.domNode,"Item",{"Unloaded":true});
|
|
_78.attr("disabled",true);
|
|
}
|
|
}
|
|
_78.store=this.store;
|
|
_78.item=_73;
|
|
if(!_78.label){
|
|
_78.attr("label",this.store.getLabel(_73).replace(/</,"<"));
|
|
}
|
|
if(_78.focusNode){
|
|
var _79=this;
|
|
_78.focus=function(){
|
|
if(!this.disabled){
|
|
try{
|
|
this.focusNode.focus();
|
|
}
|
|
catch(e){
|
|
}
|
|
}
|
|
};
|
|
_78.connect(_78.focusNode,"onmouseenter",function(){
|
|
if(!this.disabled){
|
|
_79._updateClass(this.domNode,"Item",{"Hover":true});
|
|
}
|
|
});
|
|
_78.connect(_78.focusNode,"onmouseleave",function(){
|
|
if(!this.disabled){
|
|
_79._updateClass(this.domNode,"Item",{"Hover":false});
|
|
}
|
|
});
|
|
_78.connect(_78.focusNode,"blur",function(){
|
|
_79._updateClass(this.domNode,"Item",{"Focus":false,"Hover":false});
|
|
});
|
|
_78.connect(_78.focusNode,"focus",function(){
|
|
_79._updateClass(this.domNode,"Item",{"Focus":true});
|
|
_79._focusedPane=_74;
|
|
});
|
|
if(this.executeOnDblClick){
|
|
_78.connect(_78.focusNode,"ondblclick",function(){
|
|
_79._onExecute();
|
|
});
|
|
}
|
|
}
|
|
return _78;
|
|
}
|
|
},_setStore:function(_7a){
|
|
if(_7a===this.store&&this._started){
|
|
return;
|
|
}
|
|
this.store=_7a;
|
|
this._isIdentity=_7a.getFeatures()["dojo.data.api.Identity"];
|
|
var _7b=this._getPaneForItem();
|
|
this.addChild(_7b,0);
|
|
},_onKey:function(e){
|
|
if(e.charOrCode==_2.keys.BACKSPACE){
|
|
_2.stopEvent(e);
|
|
return;
|
|
}else{
|
|
if(e.charOrCode==_2.keys.ESCAPE&&this._savedFocus){
|
|
try{
|
|
_1.focus(this._savedFocus);
|
|
}
|
|
catch(e){
|
|
}
|
|
_2.stopEvent(e);
|
|
return;
|
|
}else{
|
|
if(e.charOrCode==_2.keys.LEFT_ARROW||e.charOrCode==_2.keys.RIGHT_ARROW){
|
|
_2.stopEvent(e);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
},_resetValue:function(){
|
|
this.set("value",this._lastExecutedValue);
|
|
},_onCancel:function(){
|
|
this._resetValue();
|
|
this.onCancel();
|
|
},_onExecute:function(){
|
|
this._lastExecutedValue=this.get("value");
|
|
this.onExecute();
|
|
},focus:function(){
|
|
var _7c=this._savedFocus;
|
|
this._savedFocus=_1.getFocus(this);
|
|
if(!this._savedFocus.node){
|
|
delete this._savedFocus;
|
|
}
|
|
if(!this._focusedPane){
|
|
var _7d=this.getChildren()[0];
|
|
if(_7d&&!_7c){
|
|
_7d.focus(true);
|
|
}
|
|
}else{
|
|
this._savedFocus=_1.getFocus(this);
|
|
var foc=this._focusedPane;
|
|
delete this._focusedPane;
|
|
if(!_7c){
|
|
foc.focus(true);
|
|
}
|
|
}
|
|
},handleKey:function(e){
|
|
if(e.charOrCode==_2.keys.DOWN_ARROW){
|
|
delete this._savedFocus;
|
|
this.focus();
|
|
return false;
|
|
}else{
|
|
if(e.charOrCode==_2.keys.ESCAPE){
|
|
this._onCancel();
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},_updateChildClasses:function(){
|
|
var _7e=this.getChildren();
|
|
var _7f=_7e.length;
|
|
_2.forEach(_7e,function(c,idx){
|
|
_2.toggleClass(c.domNode,"dojoxRollingListPaneCurrentChild",(idx==(_7f-1)));
|
|
_2.toggleClass(c.domNode,"dojoxRollingListPaneCurrentSelected",(idx==(_7f-2)));
|
|
});
|
|
},startup:function(){
|
|
if(this._started){
|
|
return;
|
|
}
|
|
if(!this.getParent||!this.getParent()){
|
|
this.resize();
|
|
this.connect(_2.global,"onresize","resize");
|
|
}
|
|
this.connect(this,"addChild","_updateChildClasses");
|
|
this.connect(this,"removeChild","_updateChildClasses");
|
|
this._setStore(this.store);
|
|
this.set("showButtons",this.showButtons);
|
|
this.inherited(arguments);
|
|
this._lastExecutedValue=this.get("value");
|
|
},getChildItems:function(_80){
|
|
var _81,_82=this.store;
|
|
_2.forEach(this.childrenAttrs,function(_83){
|
|
var _84=_82.getValues(_80,_83);
|
|
if(_84&&_84.length){
|
|
_81=(_81||[]).concat(_84);
|
|
}
|
|
});
|
|
return _81;
|
|
},getMenuItemForItem:function(_85,_86,_87){
|
|
return new _1.MenuItem({});
|
|
},getPaneForItem:function(_88,_89,_8a){
|
|
if(!_88||_8a){
|
|
return new _3.widget._RollingListGroupPane({});
|
|
}else{
|
|
return null;
|
|
}
|
|
},onItemClick:function(_8b,_8c,_8d){
|
|
},onExecute:function(){
|
|
},onCancel:function(){
|
|
},onChange:function(_8e){
|
|
}});
|
|
});
|