UNPKG

dijit

Version:

Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u

183 lines (154 loc) 5.58 kB
define([ "dojo/_base/declare", // declare "dojo/dom", // dom.setSelectable "dojo/dom-attr", // domAttr.attr "dojo/dom-class", // domClass.toggle "dojo/has", "dojo/i18n", // i18n.getLocalization "dojo/_base/lang", // lang.hitch lang.trim "./StackController", "../registry", "../Menu", "../MenuItem", "dojo/text!./templates/_TabButton.html", "dojo/i18n!../nls/common" ], function(declare, dom, domAttr, domClass, has, i18n, lang, StackController, registry, Menu, MenuItem, template){ // module: // dijit/layout/TabController var TabButton = declare("dijit.layout._TabButton" + (has("dojo-bidi") ? "_NoBidi" : ""), StackController.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: String // The CSS class applied to the domNode. baseClass: "dijitTab", // Apply dijitTabCloseButtonHover when close button is hovered cssStateNodes: { closeNode: "dijitTabCloseButton" }, templateString: template, // Button superclass maps name to a this.valueNode, but we don't have a this.valueNode attach point _setNameAttr: "focusNode", // Override _FormWidget.scrollOnFocus. // Don't scroll the whole tab container into view when the button is focused. scrollOnFocus: false, buildRendering: function(){ this.inherited(arguments); dom.setSelectable(this.containerNode, false); }, startup: function(){ this.inherited(arguments); var n = this.domNode; // Required to give IE6 a kick, as it initially hides the // tabs until they are focused on. this.defer(function(){ n.className = n.className; }, 1); }, _setCloseButtonAttr: function(/*Boolean*/ disp){ // summary: // Hide/show close button this._set("closeButton", disp); domClass.toggle(this.domNode, "dijitClosable", disp); this.closeNode.style.display = disp ? "" : "none"; if(disp){ var _nlsResources = i18n.getLocalization("dijit", "common"); if(this.closeNode){ domAttr.set(this.closeNode, "title", _nlsResources.itemClose); } } }, _setDisabledAttr: function(/*Boolean*/ disabled){ // summary: // Make tab selected/unselectable this.inherited(arguments); // Don't show tooltip for close button when tab is disabled if(this.closeNode){ if(disabled){ domAttr.remove(this.closeNode, "title"); }else{ var _nlsResources = i18n.getLocalization("dijit", "common"); domAttr.set(this.closeNode, "title", _nlsResources.itemClose); } } }, _setLabelAttr: function(/*String*/ content){ // summary: // Hook for set('label', ...) to work. // description: // takes an HTML string. // Inherited ToggleButton implementation will Set the label (text) of the button; // Need to set the alt attribute of icon on tab buttons if no label displayed this.inherited(arguments); if(!this.showLabel && !this.params.title){ this.iconNode.alt = lang.trim(this.containerNode.innerText || this.containerNode.textContent || ''); } } }); if(has("dojo-bidi")){ TabButton = declare("dijit.layout._TabButton", TabButton, { _setLabelAttr: function(/*String*/ content){ this.inherited(arguments); this.applyTextDir(this.iconNode, this.iconNode.alt); } }); } var TabController = declare("dijit.layout.TabController", 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 baseClass: "dijitTabController", templateString: "<div role='tablist' data-dojo-attach-event='onkeydown:onkeydown'></div>", // tabPosition: String // Defines where tabs go relative to the content. // "top", "bottom", "left-h", "right-h" tabPosition: "top", // buttonWidget: Constructor // The tab widget to create to correspond to each page buttonWidget: TabButton, // buttonWidgetCloseClass: String // Class of [x] close icon, used by event delegation code to tell when close button was clicked buttonWidgetCloseClass: "dijitTabCloseButton", postCreate: function(){ this.inherited(arguments); // Setup a close menu to be shared between all the closable tabs (excluding disabled tabs) var closeMenu = new Menu({ id: this.id + "_Menu", ownerDocument: this.ownerDocument, dir: this.dir, lang: this.lang, textDir: this.textDir, targetNodeIds: [this.domNode], selector: function(node){ return domClass.contains(node, "dijitClosable") && !domClass.contains(node, "dijitTabDisabled"); } }); this.own(closeMenu); var _nlsResources = i18n.getLocalization("dijit", "common"), controller = this; closeMenu.addChild(new MenuItem({ label: _nlsResources.itemClose, ownerDocument: this.ownerDocument, dir: this.dir, lang: this.lang, textDir: this.textDir, onClick: function(evt){ var button = registry.byNode(this.getParent().currentTarget); controller.onCloseButtonClick(button.page); } })); } }); TabController.TabButton = TabButton; // for monkey patching return TabController; });