StackController.js
4.94 KB
//>>built
define("dojo/_base/array dojo/_base/declare dojo/dom-class dojo/dom-construct dojo/keys dojo/_base/lang dojo/on dojo/topic ../focus ../registry ../_Widget ../_TemplatedMixin ../_Container ../form/ToggleButton dojo/touch".split(" "),function(m,h,q,l,f,c,n,k,p,g,r,t,u,v){l=h("dijit.layout._StackButton",v,{tabIndex:"-1",closeButton:!1,_aria_attr:"aria-selected",buildRendering:function(a){this.inherited(arguments);(this.focusNode||this.domNode).setAttribute("role","tab")}});h=h("dijit.layout.StackController",
[r,t,u],{baseClass:"dijitStackController",templateString:"\x3cspan role\x3d'tablist' data-dojo-attach-event\x3d'onkeydown'\x3e\x3c/span\x3e",containerId:"",buttonWidget:l,buttonWidgetCloseClass:"dijitStackCloseButton",pane2button:function(a){return g.byId(this.id+"_"+a)},postCreate:function(){this.inherited(arguments);this.own(k.subscribe(this.containerId+"-startup",c.hitch(this,"onStartup")),k.subscribe(this.containerId+"-addChild",c.hitch(this,"onAddChild")),k.subscribe(this.containerId+"-removeChild",
c.hitch(this,"onRemoveChild")),k.subscribe(this.containerId+"-selectChild",c.hitch(this,"onSelectChild")),k.subscribe(this.containerId+"-containerKeyDown",c.hitch(this,"onContainerKeyDown")));this.containerNode.dojoClick=!0;this.own(n(this.containerNode,"click",c.hitch(this,function(a){var b=g.getEnclosingWidget(a.target);if(b!=this.containerNode&&!b.disabled&&b.page)for(a=a.target;a!==this.containerNode;a=a.parentNode)if(q.contains(a,this.buttonWidgetCloseClass)){this.onCloseButtonClick(b.page);
break}else if(a==b.domNode){this.onButtonClick(b.page);break}})))},onStartup:function(a){this.textDir=a.textDir;m.forEach(a.children,this.onAddChild,this);if(a.selected)this.onSelectChild(a.selected);var b=g.byId(this.containerId).containerNode,d=c.hitch(this,"pane2button");a={title:"label",showtitle:"showLabel",iconclass:"iconClass",closable:"closeButton",tooltip:"title",disabled:"disabled",textdir:"textdir"};var f=function(a,e){return n(b,"attrmodified-"+a,function(a){var b=d(a.detail&&a.detail.widget&&
a.detail.widget.id);b&&b.set(e,a.detail.newValue)})},e;for(e in a)this.own(f(e,a[e]))},destroy:function(a){this.destroyDescendants(a);this.inherited(arguments)},onAddChild:function(a,b){var d=new (c.isString(this.buttonWidget)?c.getObject(this.buttonWidget):this.buttonWidget)({id:this.id+"_"+a.id,name:this.id+"_"+a.id,label:a.title,disabled:a.disabled,ownerDocument:this.ownerDocument,dir:a.dir,lang:a.lang,textDir:a.textDir||this.textDir,showLabel:a.showTitle,iconClass:a.iconClass,closeButton:a.closable,
title:a.tooltip,page:a});this.addChild(d,b);a.controlButton=d;if(!this._currentChild)this.onSelectChild(a);b=a._wrapper.getAttribute("aria-labelledby")?a._wrapper.getAttribute("aria-labelledby")+" "+d.id:d.id;a._wrapper.removeAttribute("aria-label");a._wrapper.setAttribute("aria-labelledby",b)},onRemoveChild:function(a){this._currentChild===a&&(this._currentChild=null);var b=this.pane2button(a.id);b&&(this.removeChild(b),b.destroy());delete a.controlButton},onSelectChild:function(a){if(a){if(this._currentChild){var b=
this.pane2button(this._currentChild.id);b.set("checked",!1);b.focusNode.setAttribute("tabIndex","-1")}b=this.pane2button(a.id);b.set("checked",!0);this._currentChild=a;b.focusNode.setAttribute("tabIndex","0");g.byId(this.containerId)}},onButtonClick:function(a){var b=this.pane2button(a.id);p.focus(b.focusNode);this._currentChild&&this._currentChild.id===a.id&&b.set("checked",!0);g.byId(this.containerId).selectChild(a)},onCloseButtonClick:function(a){g.byId(this.containerId).closeChild(a);this._currentChild&&
(a=this.pane2button(this._currentChild.id))&&p.focus(a.focusNode||a.domNode)},adjacent:function(a){this.isLeftToRight()||this.tabPosition&&!/top|bottom/.test(this.tabPosition)||(a=!a);var b=this.getChildren(),d=m.indexOf(b,this.pane2button(this._currentChild.id)),f=b[d],e;do d=(d+(a?1:b.length-1))%b.length,e=b[d];while(e.disabled&&e!=f);return e},onkeydown:function(a,b){if(!this.disabled&&!a.altKey&&(b=null,a.ctrlKey||!a._djpage)){switch(a.keyCode){case f.LEFT_ARROW:case f.UP_ARROW:a._djpage||(b=
!1);break;case f.PAGE_UP:a.ctrlKey&&(b=!1);break;case f.RIGHT_ARROW:case f.DOWN_ARROW:a._djpage||(b=!0);break;case f.PAGE_DOWN:a.ctrlKey&&(b=!0);break;case f.HOME:for(var d=this.getChildren(),c=0;c<d.length;c++){var e=d[c];if(!e.disabled){this.onButtonClick(e.page);break}}a.stopPropagation();a.preventDefault();break;case f.END:d=this.getChildren();for(c=d.length-1;0<=c;c--)if(e=d[c],!e.disabled){this.onButtonClick(e.page);break}a.stopPropagation();a.preventDefault();break;case f.DELETE:case 87:this._currentChild.closable&&
(a.keyCode==f.DELETE||a.ctrlKey)&&(this.onCloseButtonClick(this._currentChild),a.stopPropagation(),a.preventDefault());break;case f.TAB:a.ctrlKey&&(this.onButtonClick(this.adjacent(!a.shiftKey).page),a.stopPropagation(),a.preventDefault())}null!==b&&(this.onButtonClick(this.adjacent(b).page),a.stopPropagation(),a.preventDefault())}},onContainerKeyDown:function(a){a.e._djpage=a.page;this.onkeydown(a.e)}});h.StackButton=l;return h});