push-menu.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /**
  2. * --------------------------------------------
  3. * AdminLTE pushmenu.ts
  4. * License MIT
  5. * --------------------------------------------
  6. */
  7. import {
  8. domReady
  9. } from './util/index'
  10. /**
  11. * ------------------------------------------------------------------------
  12. * Constants
  13. * ------------------------------------------------------------------------
  14. */
  15. const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'
  16. const CLASS_NAME_SIDEBAR_MINI_HAD = 'sidebar-mini-had'
  17. const CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'
  18. const CLASS_NAME_SIDEBAR_CLOSE = 'sidebar-close'
  19. const CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'
  20. const CLASS_NAME_SIDEBAR_OPENING = 'sidebar-is-opening'
  21. const CLASS_NAME_SIDEBAR_COLLAPSING = 'sidebar-is-collapsing'
  22. const SELECTOR_MINI_TOGGLE = '[data-pushmenu="mini"]'
  23. const SELECTOR_FULL_TOGGLE = '[data-pushmenu="full"]'
  24. /**
  25. * Class Definition
  26. * ====================================================
  27. */
  28. class PushMenu {
  29. sidebarOpening(): void {
  30. const bodyClass = document.body.classList
  31. bodyClass.add(CLASS_NAME_SIDEBAR_OPENING)
  32. setTimeout(() => {
  33. bodyClass.remove(CLASS_NAME_SIDEBAR_OPENING)
  34. }, 1000)
  35. }
  36. sidebarColllapsing(): void {
  37. const bodyClass = document.body.classList
  38. bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSING)
  39. setTimeout(() => {
  40. bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSING)
  41. }, 1000)
  42. }
  43. expand(): void {
  44. this.sidebarOpening()
  45. const bodyClass = document.body.classList
  46. bodyClass.remove(CLASS_NAME_SIDEBAR_CLOSE)
  47. bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
  48. bodyClass.add(CLASS_NAME_SIDEBAR_OPEN)
  49. }
  50. collapse(): void {
  51. this.sidebarColllapsing()
  52. const bodyClass = document.body.classList
  53. bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSE)
  54. }
  55. close(): void {
  56. const bodyClass = document.body.classList
  57. bodyClass.add(CLASS_NAME_SIDEBAR_CLOSE)
  58. // if (bodyClass.contains(CLASS_NAME_SIDEBAR_SM)) {
  59. bodyClass.remove(CLASS_NAME_SIDEBAR_OPEN)
  60. // }
  61. }
  62. toggleFull(): void {
  63. const bodyClass = document.body.classList
  64. if (bodyClass.contains(CLASS_NAME_SIDEBAR_CLOSE)) {
  65. this.expand()
  66. } else {
  67. this.close()
  68. }
  69. if (bodyClass.contains(CLASS_NAME_SIDEBAR_MINI)) {
  70. bodyClass.remove(CLASS_NAME_SIDEBAR_MINI)
  71. bodyClass.add(CLASS_NAME_SIDEBAR_MINI_HAD)
  72. }
  73. }
  74. toggleMini(): void {
  75. const bodyClass = document.body.classList
  76. if (bodyClass.contains(CLASS_NAME_SIDEBAR_MINI_HAD)) {
  77. bodyClass.remove(CLASS_NAME_SIDEBAR_MINI_HAD)
  78. bodyClass.add(CLASS_NAME_SIDEBAR_MINI)
  79. }
  80. if (bodyClass.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
  81. this.expand()
  82. } else {
  83. this.collapse()
  84. }
  85. }
  86. toggle(state: string): void {
  87. if (state === 'full') {
  88. this.toggleFull()
  89. } else if (state === 'mini') {
  90. this.toggleMini()
  91. }
  92. }
  93. }
  94. /**
  95. * ------------------------------------------------------------------------
  96. * Data Api implementation
  97. * ------------------------------------------------------------------------
  98. */
  99. domReady(() => {
  100. const fullBtn = document.querySelectorAll(SELECTOR_FULL_TOGGLE)
  101. const miniBtn = document.querySelectorAll(SELECTOR_MINI_TOGGLE)
  102. for (const btn of fullBtn) {
  103. btn.addEventListener('click', () => {
  104. const data = new PushMenu()
  105. data.toggle('full')
  106. })
  107. }
  108. for (const btn of miniBtn) {
  109. btn.addEventListener('click', () => {
  110. const data = new PushMenu()
  111. data.toggle('mini')
  112. })
  113. }
  114. })
  115. export default PushMenu
  116. //