sidebar.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. document.addEventListener("DOMContentLoaded", function(event) {
  2. const isSidebarExpanded = toggleSidebarEl => {
  3. return toggleSidebarEl.getAttribute('aria-expanded') === 'true' ? true : false;
  4. }
  5. const toggleSidebar = (sidebarEl, expand, setExpanded = false) => {
  6. const bottomMenuEl = document.querySelector('[sidebar-bottom-menu]');
  7. const mainContentEl = document.getElementById('main-content');
  8. if (expand) {
  9. sidebarEl.classList.remove('bx-mc-narrowed');
  10. sidebarEl.classList.add('bx-mc-expanded');
  11. sidebarEl.classList.add('xl:w-64');
  12. sidebarEl.classList.remove('xl:w-16');
  13. mainContentEl.classList.add('xl:ml-64');
  14. mainContentEl.classList.remove('xl:ml-16');
  15. document.querySelectorAll('#' + sidebarEl.getAttribute('id') + ' [sidebar-toggle-item]').forEach(sidebarToggleEl => {
  16. sidebarToggleEl.classList.remove('xl:hidden');
  17. sidebarToggleEl.classList.remove('xl:absolute');
  18. sidebarToggleEl.classList.remove('bx-mpi-toggle-hidden');
  19. });
  20. // toggle multi level menu item initial and full text
  21. document.querySelectorAll('#' + sidebar.getAttribute('id') + ' ul > li > ul > li > a').forEach(e => {
  22. e.classList.add('pl-11');
  23. e.classList.remove('px-4');
  24. e.childNodes[0].classList.remove('hidden');
  25. e.childNodes[1].classList.add('hidden');
  26. });
  27. bottomMenuEl.classList.remove('flex-col', 'space-y-4', 'p-2');
  28. bottomMenuEl.classList.add('space-x-4', 'p-4');
  29. setExpanded ? toggleSidebarEl.setAttribute('aria-expanded', 'true') : null;
  30. }
  31. else {
  32. sidebarEl.classList.add('bx-mc-narrowed');
  33. sidebarEl.classList.remove('bx-mc-expanded');
  34. sidebarEl.classList.remove('xl:w-64');
  35. sidebarEl.classList.add('xl:w-16');
  36. mainContentEl.classList.remove('xl:ml-64');
  37. mainContentEl.classList.add('xl:ml-16');
  38. document.querySelectorAll('#' + sidebarEl.getAttribute('id') + ' [sidebar-toggle-item]').forEach(sidebarToggleEl => {
  39. sidebarToggleEl.classList.add('xl:hidden');
  40. sidebarToggleEl.classList.add('xl:absolute');
  41. sidebarToggleEl.classList.add('bx-mpi-toggle-hidden');
  42. });
  43. // toggle multi level menu item initial and full text
  44. document.querySelectorAll('#' + sidebar.getAttribute('id') + ' ul > li > ul > li > a').forEach(e => {
  45. e.classList.remove('pl-11');
  46. e.classList.add('px-4');
  47. e.childNodes[0].classList.add('hidden');
  48. e.childNodes[1].classList.remove('hidden');
  49. });
  50. bottomMenuEl.classList.add('flex-col', 'space-y-4', 'p-2');
  51. bottomMenuEl.classList.remove('space-x-4', 'p-4');
  52. setExpanded ? toggleSidebarEl.setAttribute('aria-expanded', 'false') : null;
  53. }
  54. }
  55. const toggleSidebarMobile = (sidebar, sidebarBackdrop, toggleSidebarMobileHamburger, toggleSidebarMobileClose) => {
  56. sidebar.classList.remove('bx-mc-narrowed');
  57. sidebar.classList.add('bx-mc-expanded');
  58. sidebar.classList.toggle('hidden');
  59. sidebarBackdrop.classList.toggle('hidden');
  60. toggleSidebarMobileHamburger.classList.toggle('hidden');
  61. toggleSidebarMobileClose.classList.toggle('hidden');
  62. }
  63. const sidebar = document.getElementById('sidebar');
  64. const toggleSidebarEl = document.getElementById('toggleSidebar');
  65. if(sidebar) {
  66. document.querySelectorAll('#' + sidebar.getAttribute('id') + ' ul > li > ul > li > a').forEach(e => {
  67. var fullText = e.textContent;
  68. var firstLetter = fullText.substring(0, 1);
  69. var fullTextEl = document.createElement('span');
  70. var firstLetterEl = document.createElement('span');
  71. firstLetterEl.classList.add('hidden');
  72. fullTextEl.textContent = fullText;
  73. firstLetterEl.textContent = firstLetter;
  74. e.textContent = '';
  75. e.appendChild(fullTextEl);
  76. e.appendChild(firstLetterEl);
  77. });
  78. // initialize sidebar
  79. if (localStorage.getItem('sidebarExpanded') !== null) {
  80. if (localStorage.getItem('sidebarExpanded') === 'true') {
  81. toggleSidebar(sidebar, true, false);
  82. } else {
  83. toggleSidebar(sidebar, false, true);
  84. }
  85. }
  86. if(toggleSidebarEl) {
  87. toggleSidebarEl.addEventListener('click', () => {
  88. localStorage.setItem('sidebarExpanded', !isSidebarExpanded(toggleSidebarEl));
  89. toggleSidebar(sidebar, !isSidebarExpanded(toggleSidebarEl), true);
  90. });
  91. sidebar.addEventListener('mouseenter', () => {
  92. if (!isSidebarExpanded(toggleSidebarEl)) {
  93. toggleSidebar(sidebar, true);
  94. }
  95. });
  96. sidebar.addEventListener('mouseleave', () => {
  97. if (!isSidebarExpanded(toggleSidebarEl)) {
  98. toggleSidebar(sidebar, false);
  99. }
  100. });
  101. }
  102. }
  103. const toggleSidebarMobileEl = document.getElementById('toggleSidebarMobile');
  104. if(toggleSidebarMobileEl) {
  105. const sidebarBackdrop = document.getElementById('sidebarBackdrop');
  106. const toggleSidebarMobileHamburger = document.getElementById('toggleSidebarMobileHamburger');
  107. const toggleSidebarMobileClose = document.getElementById('toggleSidebarMobileClose');
  108. toggleSidebarMobileEl.addEventListener('click', () => {
  109. toggleSidebarMobile(sidebar, sidebarBackdrop, toggleSidebarMobileHamburger, toggleSidebarMobileClose);
  110. });
  111. sidebarBackdrop.addEventListener('click', () => {
  112. toggleSidebarMobile(sidebar, sidebarBackdrop, toggleSidebarMobileHamburger, toggleSidebarMobileClose);
  113. });
  114. }
  115. });