99 lines
3 KiB
JavaScript
99 lines
3 KiB
JavaScript
|
dojo.provide("dijit.layout.TabController");
|
||
|
|
||
|
dojo.require("dijit.layout.StackController");
|
||
|
dojo.requireLocalization("dijit", "common");
|
||
|
|
||
|
//TODO: make private for 2.0?
|
||
|
dojo.declare("dijit.layout.TabController",
|
||
|
dijit.layout.StackController,
|
||
|
{
|
||
|
// summary:
|
||
|
// Set of tabs (the things with titles and a close button, that you click to show a tab panel).
|
||
|
// Used internally by `dijit.layout.TabContainer`.
|
||
|
// description:
|
||
|
// Lets the user select the currently shown pane in a TabContainer or StackContainer.
|
||
|
// TabController also monitors the TabContainer, and whenever a pane is
|
||
|
// added or deleted updates itself accordingly.
|
||
|
// tags:
|
||
|
// private
|
||
|
|
||
|
templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
|
||
|
|
||
|
// tabPosition: String
|
||
|
// Defines where tabs go relative to the content.
|
||
|
// "top", "bottom", "left-h", "right-h"
|
||
|
tabPosition: "top",
|
||
|
|
||
|
// doLayout: Boolean
|
||
|
// TODO: unused, remove
|
||
|
doLayout: true,
|
||
|
|
||
|
// buttonWidget: String
|
||
|
// The name of the tab widget to create to correspond to each page
|
||
|
buttonWidget: "dijit.layout._TabButton",
|
||
|
|
||
|
_rectifyRtlTabList: function(){
|
||
|
//summary: Rectify the width of all tabs in rtl, otherwise the tab widths are different in IE
|
||
|
if(0 >= this.tabPosition.indexOf('-h')){ return; }
|
||
|
if(!this.pane2button){ return; }
|
||
|
|
||
|
var maxWidth = 0;
|
||
|
for(var pane in this.pane2button){
|
||
|
var ow = this.pane2button[pane].innerDiv.scrollWidth;
|
||
|
maxWidth = Math.max(maxWidth, ow);
|
||
|
}
|
||
|
//unify the length of all the tabs
|
||
|
for(pane in this.pane2button){
|
||
|
this.pane2button[pane].innerDiv.style.width = maxWidth + 'px';
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
dojo.declare("dijit.layout._TabButton",
|
||
|
dijit.layout._StackButton,
|
||
|
{
|
||
|
// summary:
|
||
|
// A tab (the thing you click to select a pane).
|
||
|
// description:
|
||
|
// Contains the title of the pane, and optionally a close-button to destroy the pane.
|
||
|
// This is an internal widget and should not be instantiated directly.
|
||
|
// tags:
|
||
|
// private
|
||
|
|
||
|
baseClass: "dijitTab",
|
||
|
|
||
|
templatePath: dojo.moduleUrl("dijit.layout","templates/_TabButton.html"),
|
||
|
|
||
|
// Override _FormWidget.scrollOnFocus.
|
||
|
// Don't scroll the whole tab container into view when the button is focused.
|
||
|
scrollOnFocus: false,
|
||
|
|
||
|
postCreate: function(){
|
||
|
if(this.closeButton){
|
||
|
dojo.addClass(this.innerDiv, "dijitClosable");
|
||
|
var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
|
||
|
if(this.closeNode){
|
||
|
dojo.attr(this.closeNode,"title", _nlsResources.itemClose);
|
||
|
// IE needs title set directly on image
|
||
|
dojo.attr(this.closeIcon,"title", _nlsResources.itemClose);
|
||
|
}
|
||
|
}else{
|
||
|
this.closeNode.style.display="none";
|
||
|
}
|
||
|
this.inherited(arguments);
|
||
|
dojo.setSelectable(this.containerNode, false);
|
||
|
},
|
||
|
|
||
|
_onCloseButtonEnter: function(){
|
||
|
// summary:
|
||
|
// Handler when mouse is moved over the close icon (the X)
|
||
|
dojo.addClass(this.closeNode, "closeButton-hover");
|
||
|
},
|
||
|
|
||
|
_onCloseButtonLeave: function(){
|
||
|
// summary:
|
||
|
// Handler when mouse is moved off the close icon (the X)
|
||
|
dojo.removeClass(this.closeNode, "closeButton-hover");
|
||
|
}
|
||
|
});
|