123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /**
- * --------------------------------------------
- * AdminLTE pushmenu.ts
- * License MIT
- * --------------------------------------------
- */
- import {
- windowReady
- } from './util/index'
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
- const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'
- const CLASS_NAME_SIDEBAR_MINI_HAD = 'sidebar-mini-had'
- const CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'
- const CLASS_NAME_SIDEBAR_CLOSE = 'sidebar-close'
- const CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'
- const CLASS_NAME_SIDEBAR_OPENING = 'sidebar-is-opening'
- const CLASS_NAME_SIDEBAR_COLLAPSING = 'sidebar-is-collapsing'
- const CLASS_NAME_SIDEBAR_SM = 'sidebar-sm'
- const CLASS_NAME_SIDEBAR_HOVER = 'sidebar-hover'
- const SELECTOR_SIDEBAR = '.sidebar'
- // const SELECTOR_MAIN_SIDEBAR = '.main-sidebar'
- // const SELECTOR_CONTENT_WRAPPER = '.content-wrapper'
- const SELECTOR_MINI_TOGGLE = '[data-pushmenu="mini"]'
- const SELECTOR_FULL_TOGGLE = '[data-pushmenu="full"]'
- const SELECTOR_SIDEBAR_SM = `.${CLASS_NAME_SIDEBAR_SM}`
- const SELECTOR_CONTENT = '.content'
- /**
- * Class Definition
- * ====================================================
- */
- class PushMenu {
- sidebarOpening(): void {
- const bodyClass = document.body.classList
- bodyClass.add(CLASS_NAME_SIDEBAR_OPENING)
- setTimeout(() => {
- bodyClass.remove(CLASS_NAME_SIDEBAR_OPENING)
- }, 1000)
- }
- sidebarColllapsing(): void {
- const bodyClass = document.body.classList
- bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSING)
- setTimeout(() => {
- bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSING)
- }, 1000)
- }
- expand(): void {
- this.sidebarOpening()
- const bodyClass = document.body.classList
- bodyClass.remove(CLASS_NAME_SIDEBAR_CLOSE)
- bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
- bodyClass.add(CLASS_NAME_SIDEBAR_OPEN)
- }
- collapse(): void {
- this.sidebarColllapsing()
- const bodyClass = document.body.classList
- bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSE)
- }
- close(): void {
- const bodyClass = document.body.classList
- bodyClass.add(CLASS_NAME_SIDEBAR_CLOSE)
- // if (bodyClass.contains(CLASS_NAME_SIDEBAR_SM)) {
- bodyClass.remove(CLASS_NAME_SIDEBAR_OPEN)
- // }
- }
- toggleFull(): void {
- const bodyClass = document.body.classList
- if (bodyClass.contains(CLASS_NAME_SIDEBAR_CLOSE)) {
- this.expand()
- } else {
- this.close()
- }
- if (bodyClass.contains(CLASS_NAME_SIDEBAR_MINI)) {
- bodyClass.remove(CLASS_NAME_SIDEBAR_MINI)
- bodyClass.add(CLASS_NAME_SIDEBAR_MINI_HAD)
- }
- }
- toggleMini(): void {
- const bodyClass = document.body.classList
- if (bodyClass.contains(CLASS_NAME_SIDEBAR_MINI_HAD)) {
- bodyClass.remove(CLASS_NAME_SIDEBAR_MINI_HAD)
- bodyClass.add(CLASS_NAME_SIDEBAR_MINI)
- }
- if (bodyClass.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
- this.expand()
- } else {
- this.collapse()
- }
- }
- toggle(state: string): void {
- if (state === 'full') {
- this.toggleFull()
- } else if (state === 'mini') {
- this.toggleMini()
- }
- }
- }
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
- windowReady(() => {
- function addSidebaBreakPoint() {
- const widthOutput: number = window.innerWidth
- const bodyClass = document.body.classList
- if (widthOutput >= 576) {
- bodyClass.remove(CLASS_NAME_SIDEBAR_SM)
- } else {
- bodyClass.add(CLASS_NAME_SIDEBAR_SM)
- }
- }
- addSidebaBreakPoint()
- window.addEventListener('resize', addSidebaBreakPoint)
- const fullBtn = document.querySelectorAll(SELECTOR_FULL_TOGGLE)
- const miniBtn = document.querySelectorAll(SELECTOR_MINI_TOGGLE)
- for (const btn of fullBtn) {
- btn.addEventListener('click', () => {
- const data = new PushMenu()
- data.toggle('full')
- })
- }
- for (const btn of miniBtn) {
- btn.addEventListener('click', () => {
- const data = new PushMenu()
- data.toggle('mini')
- })
- }
- const selSidebar = document.querySelector(SELECTOR_SIDEBAR)
- selSidebar?.addEventListener('mouseover', () => {
- const bodyClass = document.body.classList
- bodyClass.add(CLASS_NAME_SIDEBAR_HOVER)
- })
- selSidebar?.addEventListener('mouseout', () => {
- const bodyClass = document.body.classList
- bodyClass.remove(CLASS_NAME_SIDEBAR_HOVER)
- })
- function removeOverlaySidebar() {
- const bodyClass = document.body.classList
- if (bodyClass.contains(CLASS_NAME_SIDEBAR_SM)) {
- bodyClass.remove(CLASS_NAME_SIDEBAR_OPEN)
- bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
- bodyClass.add(CLASS_NAME_SIDEBAR_CLOSE)
- }
- }
- let selSidebarSm = document.querySelector(SELECTOR_SIDEBAR_SM)
- let selContentWrapper = selSidebarSm?.querySelector(SELECTOR_CONTENT)
- window.addEventListener('resize', () => {
- selSidebarSm = document.querySelector(SELECTOR_SIDEBAR_SM)
- selContentWrapper = selSidebarSm?.querySelector(SELECTOR_CONTENT)
- selContentWrapper?.addEventListener('touchstart', removeOverlaySidebar)
- selContentWrapper?.addEventListener('click', removeOverlaySidebar)
- })
- selContentWrapper?.addEventListener('touchstart', removeOverlaySidebar)
- selContentWrapper?.addEventListener('click', removeOverlaySidebar)
- window.addEventListener('resize', removeOverlaySidebar)
- })
- export default PushMenu
- //
|