UNPKG

highcharts

Version:
142 lines (141 loc) 3.73 kB
/* * * * Popup generator for Stock tools * * (c) 2009-2026 Highsoft AS * Author: Sebastian Bochan * * A commercial license may be required depending on use. * See www.highcharts.com/license * * * */ 'use strict'; import H from '../../../Core/Globals.js'; const { doc } = H; import { addEvent, createElement } from '../../../Shared/Utilities.js'; /* * * * Functions * * */ /** * Create tab content. * * @internal * @return {HTMLDOMElement} - created HTML tab-content element */ function addContentItem() { const popupDiv = this.container; return createElement('div', { // #12100 className: 'highcharts-tab-item-content highcharts-no-mousewheel' }, void 0, popupDiv); } /** * Create tab menu item. * * @internal * @param {string} tabName * `add` or `edit` * @param {number} [disableTab] * Disable tab when 0 * @return {Highcharts.HTMLDOMElement} * Created HTML tab-menu element */ function addMenuItem(tabName, disableTab) { const popupDiv = this.container, lang = this.lang; let className = 'highcharts-tab-item'; if (disableTab === 0) { className += ' highcharts-tab-disabled'; } // Tab 1 const menuItem = createElement('button', { className }, void 0, popupDiv); menuItem.appendChild(doc.createTextNode(lang[tabName + 'Button'] || tabName)); menuItem.setAttribute('highcharts-data-tab-type', tabName); return menuItem; } /** * Set all tabs as invisible. * @internal */ function deselectAll() { const popupDiv = this.container, tabs = popupDiv .querySelectorAll('.highcharts-tab-item'), tabsContent = popupDiv .querySelectorAll('.highcharts-tab-item-content'); for (let i = 0; i < tabs.length; i++) { tabs[i].classList.remove('highcharts-tab-item-active'); tabsContent[i].classList.remove('highcharts-tab-item-show'); } } /** * Init tabs. Create tab menu items, tabs containers. * * @internal * @param {Highcharts.Chart} chart * Reference to current chart */ function init(chart) { if (!chart) { return; } const indicatorsCount = this.indicators.getAmount.call(chart); // Create menu items const firstTab = addMenuItem.call(this, 'add'); // Run by default addMenuItem.call(this, 'edit', indicatorsCount); // Create tabs containers addContentItem.call(this); addContentItem.call(this); switchTabs.call(this, indicatorsCount); // Activate first tab selectTab.call(this, firstTab, 0); } /** * Set tab as visible. * * @internal * @param {globals.Element} tab The current tab * @param {number} index Index of the tab in the menu */ function selectTab(tab, index) { const allTabs = this.container .querySelectorAll('.highcharts-tab-item-content'); tab.className += ' highcharts-tab-item-active'; allTabs[index].className += ' highcharts-tab-item-show'; } /** * Add click event to each tab. * * @internal * @param {number} disableTab * Disable tab when 0 */ function switchTabs(disableTab) { const popup = this, popupDiv = this.container, tabs = popupDiv.querySelectorAll('.highcharts-tab-item'); tabs.forEach((tab, i) => { if (disableTab === 0 && tab.getAttribute('highcharts-data-tab-type') === 'edit') { return; } ['click', 'touchstart'].forEach((eventName) => { addEvent(tab, eventName, function () { // Reset class on other elements deselectAll.call(popup); selectTab.call(popup, this, i); }); }); }); } /* * * * Default Export * * */ /** @internal */ const PopupTabs = { init }; /** @internal */ export default PopupTabs;