/////////////////////////////////////////////////////////////////////////// // Copyright © 2014 - 2018 Esri. All Rights Reserved. // // Licensed under the Apache License Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /////////////////////////////////////////////////////////////////////////// define(['dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/html', 'dojo/on', 'dojo/Evented', 'dijit/_WidgetBase', 'dijit/_TemplatedMixin', './ViewStack', '../utils' ], function(declare, lang, array, html, on, Evented, _WidgetBase, _TemplatedMixin, ViewStack, utils){ return declare([_WidgetBase, _TemplatedMixin, Evented], { // summary: // a tab dijit // description: // constructor options: /*====== { tabs: [{ title: String content: DomNode|dijit }], selected: String // summary: // the default selected tab title } =====*/ 'baseClass': 'jimu-tab', declaredClass: 'jimu.dijit.TabContainer', templateString: '
' + '
' + '
' + '
', postCreate: function(){ this.inherited(arguments); if(this.tabs.length === 0){ return; } this.controlNodes = []; this.viewStack = new ViewStack(null, this.containerNode); var width = 1 / this.tabs.length * 100; if(this.isNested){ html.addClass(this.domNode, 'nested'); } array.forEach(this.tabs, function(tabConfig){ this._createTab(tabConfig, width); }, this); }, startup: function() { // this.inherited(arguments); if(this.selected){ this.selectTab(this.selected); }else if(this.tabs.length > 0){ this.selectTab(this.tabs[0].title); } utils.setVerticalCenter(this.domNode); }, _createTab: function(tabConfig, width){ var ctrlNode; ctrlNode = html.create('div', { innerHTML: tabConfig.title, 'class': 'tab jimu-vcenter-text', style: { width: this.isNested? 'auto': width + '%' }, label: tabConfig.title }, this.controlNode); if(tabConfig.content.domNode){ this.viewStack.viewType = 'dijit'; }else{ this.viewStack.viewType = 'dom'; } tabConfig.content.label = tabConfig.title; this.viewStack.addView(tabConfig.content); this.own(on(ctrlNode, 'click', lang.hitch(this, this.onSelect, tabConfig.title))); ctrlNode.label = tabConfig.title; this.controlNodes.push(ctrlNode); }, onSelect: function(title){ this.selectTab(title); }, selectTab: function(title){ this._selectControl(title); this.viewStack.switchView(title); this.emit('tabChanged', title); }, _selectControl: function(title){ array.forEach(this.controlNodes, function(ctrlNode) { html.removeClass(ctrlNode, 'jimu-state-selected'); if(ctrlNode.label === title){ html.addClass(ctrlNode, 'jimu-state-selected'); } }); } }); });