X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/6917ea088f905ec57e16d8795ad0bcb191c38b52..HEAD:/resources/js/components/tri-layout.js diff --git a/resources/js/components/tri-layout.js b/resources/js/components/tri-layout.js deleted file mode 100644 index 905ca03b1..000000000 --- a/resources/js/components/tri-layout.js +++ /dev/null @@ -1,113 +0,0 @@ - -class TriLayout { - - constructor(elem) { - this.elem = elem; - - this.lastLayoutType = 'none'; - this.onDestroy = null; - this.scrollCache = { - 'content': 0, - 'info': 0, - }; - this.lastTabShown = 'content'; - - // Bind any listeners - this.mobileTabClick = this.mobileTabClick.bind(this); - - // Watch layout changes - this.updateLayout(); - window.addEventListener('resize', event => { - this.updateLayout(); - }, {passive: true}); - } - - updateLayout() { - let newLayout = 'tablet'; - if (window.innerWidth <= 1000) newLayout = 'mobile'; - if (window.innerWidth >= 1400) newLayout = 'desktop'; - if (newLayout === this.lastLayoutType) return; - - if (this.onDestroy) { - this.onDestroy(); - this.onDestroy = null; - } - - if (newLayout === 'desktop') { - this.setupDesktop(); - } else if (newLayout === 'mobile') { - this.setupMobile(); - } - - this.lastLayoutType = newLayout; - } - - setupMobile() { - const layoutTabs = document.querySelectorAll('[tri-layout-mobile-tab]'); - for (let tab of layoutTabs) { - tab.addEventListener('click', this.mobileTabClick); - } - - this.onDestroy = () => { - for (let tab of layoutTabs) { - tab.removeEventListener('click', this.mobileTabClick); - } - } - } - - setupDesktop() { - // - } - - - /** - * Action to run when the mobile info toggle bar is clicked/tapped - * @param event - */ - mobileTabClick(event) { - const tab = event.target.getAttribute('tri-layout-mobile-tab'); - this.showTab(tab); - } - - /** - * Show the content tab. - * Used by the page-display component. - */ - showContent() { - this.showTab('content', false); - } - - /** - * Show the given tab - * @param tabName - */ - showTab(tabName, scroll = true) { - this.scrollCache[this.lastTabShown] = document.documentElement.scrollTop; - - // Set tab status - const tabs = document.querySelectorAll('.tri-layout-mobile-tab'); - for (let tab of tabs) { - const isActive = (tab.getAttribute('tri-layout-mobile-tab') === tabName); - tab.classList.toggle('active', isActive); - } - - // Toggle section - const showInfo = (tabName === 'info'); - this.elem.classList.toggle('show-info', showInfo); - - // Set the scroll position from cache - if (scroll) { - const pageHeader = document.querySelector('header'); - const defaultScrollTop = pageHeader.getBoundingClientRect().bottom; - document.documentElement.scrollTop = this.scrollCache[tabName] || defaultScrollTop; - setTimeout(() => { - document.documentElement.scrollTop = this.scrollCache[tabName] || defaultScrollTop; - }, 50); - } - - this.lastTabShown = tabName; - } - -} - -export default TriLayout; \ No newline at end of file