From 349b501c27bab9c51bb91f5139d07d63511cd7ad Mon Sep 17 00:00:00 2001 From: REJack Date: Sat, 19 Sep 2020 14:00:55 +0200 Subject: [PATCH] further progress - fix tab creation - fix tab switching - add auto open tab on creation - add auto iframe mode for easy adaption - add switchTab method --- build/js/IFrame.js | 65 +++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/build/js/IFrame.js b/build/js/IFrame.js index 47bf025a4..426f31868 100644 --- a/build/js/IFrame.js +++ b/build/js/IFrame.js @@ -21,8 +21,6 @@ const SELECTOR_CONTENT_WRAPPER = '.content-wrapper' const SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe` const SELECTOR_TAB_NAVBAR_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .navbar-nav` const SELECTOR_TAB_NAVBAR_NAV_ITEM = `${SELECTOR_TAB_NAVBAR_NAV} .nav-item` -const SELECTOR_NAV_LINK = '.nav-link[role="tab"]' -const SELECTOR_TAB_NAVBAR_NAV_LINK = `${SELECTOR_TAB_NAVBAR_NAV} ${SELECTOR_NAV_LINK}` const SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content` const SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty` const SELECTOR_SIDEBAR_MENU_ITEM = '.main-sidebar .nav-item > a.nav-link' @@ -34,7 +32,9 @@ const Default = { }, changed(item) { return item - } + }, + autoIframeMode: true, + autoShowNewTab: true } /** @@ -60,33 +60,53 @@ class IFrame { this._config.changed.call(item) } - createTab(title, link) { - const tabId = `panel-${link.replace('.html', '').replace('./', '').replace('/', '-')}-${Math.floor(Math.random() * 1000)}` - const navId = `tab-${link.replace('.html', '').replace('./', '').replace('/', '-')}-${Math.floor(Math.random() * 1000)}` + createTab(title, link, autoOpen) { + const tabId = `panel-${link.replace('.html', '').replace('./', '').replaceAll('/', '-')}-${Math.floor(Math.random() * 1000)}` + const navId = `tab-${link.replace('.html', '').replace('./', '').replaceAll('/', '-')}-${Math.floor(Math.random() * 1000)}` const newNavItem = `` $(SELECTOR_TAB_NAVBAR_NAV).append(newNavItem) const newTabItem = `
` $(SELECTOR_TAB_CONTENT).append(newTabItem) + + if (autoOpen) { + this.switchTab(`#${navId}`) + } } openTabSidebar(item) { - const title = $(item).find('p').text() - const link = $(item).attr('href') - $(`${SELECTOR_TAB_NAVBAR_NAV} .nav-link[role="tab"]`).tab('dispose') + let $item = $(item).clone() - this.createTab(title, link) + if ($item.attr('href') === undefined) { + $item = $(item).parent('a').clone() + } - // eslint-disable-next-line no-console - console.log($(SELECTOR_TAB_NAVBAR_NAV)) - $(`${SELECTOR_TAB_NAVBAR_NAV} ${SELECTOR_NAV_LINK}`).tab() + const title = $item.find('p').text() + const link = $item.attr('href') + + if (link === '#' || link === '' || link === undefined) { + return + } + + this.createTab(title, link, this._config.autoShowNewTab) + } + + switchTab(item) { + $(SELECTOR_TAB_EMPTY).hide() + $(SELECTOR_TAB_NAVBAR_NAV).find('.active').tab('dispose') + $(SELECTOR_TAB_NAVBAR_NAV).find('.active').removeClass('active') + this._fixHeight() + $(item).tab('show') + $(item).parents('li').addClass('active') } // Private _init() { - if ($(SELECTOR_CONTENT_WRAPPER).hasClass(CLASS_NAME_IFRAME_MODE)) { + if (window.frameElement && this._config.autoIframeMode) { + $('body').addClass(CLASS_NAME_IFRAME_MODE) + } else if ($(SELECTOR_CONTENT_WRAPPER).hasClass(CLASS_NAME_IFRAME_MODE)) { this._setupListeners() this._fixHeight(true) } @@ -100,18 +120,11 @@ class IFrame { }) $(document).on('click', SELECTOR_SIDEBAR_MENU_ITEM, e => { e.preventDefault() - // eslint-disable-next-line no-console - console.log($(e.target)) this.openTabSidebar(e.target) }) $(document).on('click', SELECTOR_TAB_NAVBAR_NAV_ITEM, e => { e.preventDefault() - $(SELECTOR_TAB_EMPTY).hide() - $(`${SELECTOR_TAB_NAVBAR_NAV} .active`).removeClass('active') - $(SELECTOR_TAB_NAVBAR_NAV_LINK).tab('dispose') - this._fixHeight() - $(e.target).tab('show') - $(e.target).parents('li').addClass('active') + this.switchTab(e.target) }) } @@ -152,13 +165,7 @@ class IFrame { */ $(window).on('load', () => { - const gfg = window.frameElement - - if (gfg) { - document.body.classList.add(CLASS_NAME_IFRAME_MODE) - } else { - IFrame._jQueryInterface.call($(SELECTOR_DATA_TOGGLE)) - } + IFrame._jQueryInterface.call($(SELECTOR_DATA_TOGGLE)) }) /**