From 25a3c4bf1f853f323b11de1812f376b58bedbd65 Mon Sep 17 00:00:00 2001 From: REJack Date: Wed, 17 Feb 2021 11:23:12 +0100 Subject: [PATCH] rework IFrame for single tab closing --- build/js/IFrame.js | 34 ++++++++++++++++++++++++++++++---- build/scss/pages/_iframe.scss | 11 +++++++++++ iframe.html | 11 ++++------- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/build/js/IFrame.js b/build/js/IFrame.js index 48acbeb71..93f335f2a 100644 --- a/build/js/IFrame.js +++ b/build/js/IFrame.js @@ -26,6 +26,7 @@ const SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe` const SELECTOR_TAB_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .nav` 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_TAB_NAVBAR_NAV_LINK = `${SELECTOR_TAB_NAVBAR_NAV} .nav-link` const SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content` const SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty` const SELECTOR_TAB_LOADING = `${SELECTOR_TAB_CONTENT} .tab-loading` @@ -95,7 +96,7 @@ class IFrame { navId += `-${Math.floor(Math.random() * 1000)}` } - const newNavItem = `` + const newNavItem = `` $(SELECTOR_TAB_NAVBAR_NAV).append(unescape(escape(newNavItem))) const newTabItem = `
` @@ -170,7 +171,7 @@ class IFrame { } } - removeActiveTab(type) { + removeActiveTab(type, element) { if (type == 'all') { $(SELECTOR_TAB_NAVBAR_NAV_ITEM).remove() $(SELECTOR_TAB_PANE).remove() @@ -178,6 +179,20 @@ class IFrame { } else if (type == 'all-other') { $(`${SELECTOR_TAB_NAVBAR_NAV_ITEM}:not(.active)`).remove() $(`${SELECTOR_TAB_PANE}:not(.active)`).remove() + } else if (type == 'only-this') { + const $navClose = $(element) + const $navItem = $navClose.parent('.nav-item') + const $navItemParent = $navItem.parent() + const navItemIndex = $navItem.index() + const tabId = $navClose.siblings('.nav-link').attr('aria-controls') + $navItem.remove() + $(`#${tabId}`).remove() + if ($(SELECTOR_TAB_CONTENT).children().length == $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).length) { + $(SELECTOR_TAB_EMPTY).show() + } else { + const prevNavItemIndex = navItemIndex - 1 + this.switchTab($navItemParent.children().eq(prevNavItemIndex).find('a')) + } } else { const $navItem = $(`${SELECTOR_TAB_NAVBAR_NAV_ITEM}.active`) const $navItemParent = $navItem.parent() @@ -249,14 +264,25 @@ class IFrame { }) } - $(document).on('click', SELECTOR_TAB_NAVBAR_NAV_ITEM, e => { + $(document).on('click', SELECTOR_TAB_NAVBAR_NAV_LINK, e => { + e.preventDefault() + this.onTabClick(e.target) + this.switchTab(e.target) + }) + $(document).on('click', SELECTOR_TAB_NAVBAR_NAV_LINK, e => { e.preventDefault() this.onTabClick(e.target) this.switchTab(e.target) }) $(document).on('click', SELECTOR_DATA_TOGGLE_CLOSE, e => { e.preventDefault() - this.removeActiveTab(e.target.attributes['data-type'] ? e.target.attributes['data-type'].nodeValue : null) + let { target } = e + + if (target.nodeName == 'I') { + target = e.target.offsetParent + } + + this.removeActiveTab(target.attributes['data-type'] ? target.attributes['data-type'].nodeValue : null, target) }) $(document).on('click', SELECTOR_DATA_TOGGLE_FULLSCREEN, e => { e.preventDefault() diff --git a/build/scss/pages/_iframe.scss b/build/scss/pages/_iframe.scss index 191d0b93d..061c5ace5 100644 --- a/build/scss/pages/_iframe.scss +++ b/build/scss/pages/_iframe.scss @@ -21,6 +21,14 @@ body.iframe-mode-fullscreen { height: 100%; &.iframe-mode { + .btn-iframe-close { + color: $danger; + position: absolute; + line-height: 1; + right: .125rem; + top: .125rem; + z-index: 10; + } .navbar-nav { overflow-y: auto; width: 100%; @@ -28,6 +36,9 @@ body.iframe-mode-fullscreen { .nav-link { white-space: nowrap; } + .nav-item { + position: relative; + } } .tab-content { position: relative; diff --git a/iframe.html b/iframe.html index 9ed26842c..f53214f68 100644 --- a/iframe.html +++ b/iframe.html @@ -753,16 +753,13 @@