119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Main
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| let menu, animate;
 | |
| 
 | |
| function Main () {
 | |
|   // Initialize menu
 | |
|   //-----------------
 | |
| 
 | |
|   let layoutMenuEl = document.querySelectorAll('#layout-menu');
 | |
|   layoutMenuEl.forEach(function (element) {
 | |
|     menu = new Menu(element, {
 | |
|       orientation: 'vertical',
 | |
|       closeChildren: false
 | |
|     });
 | |
|     // Change parameter to true if you want scroll animation
 | |
|     window.Helpers.scrollToActive((animate = false));
 | |
|     window.Helpers.mainMenu = menu;
 | |
|   });
 | |
| 
 | |
|   // Initialize menu togglers and bind click on each
 | |
|   let menuToggler = document.querySelectorAll('.layout-menu-toggle');
 | |
|   menuToggler.forEach(item => {
 | |
|     item.addEventListener('click', event => {
 | |
|       event.preventDefault();
 | |
|       window.Helpers.toggleCollapsed();
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   // Display menu toggle (layout-menu-toggle) on hover with delay
 | |
|   let delay = function (elem, callback) {
 | |
|     let timeout = null;
 | |
|     elem.onmouseenter = function () {
 | |
|       // Set timeout to be a timer which will invoke callback after 300ms (not for small screen)
 | |
|       if (!Helpers.isSmallScreen()) {
 | |
|         timeout = setTimeout(callback, 300);
 | |
|       } else {
 | |
|         timeout = setTimeout(callback, 0);
 | |
|       }
 | |
|     };
 | |
| 
 | |
|     elem.onmouseleave = function () {
 | |
|       // Clear any timers set to timeout
 | |
|       document.querySelector('.layout-menu-toggle').classList.remove('d-block');
 | |
|       clearTimeout(timeout);
 | |
|     };
 | |
|   };
 | |
|   if (document.getElementById('layout-menu')) {
 | |
|     delay(document.getElementById('layout-menu'), function () {
 | |
|       // not for small screen
 | |
|       if (!Helpers.isSmallScreen()) {
 | |
|         document.querySelector('.layout-menu-toggle').classList.add('d-block');
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   // Display in main menu when menu scrolls
 | |
|   let menuInnerContainer = document.getElementsByClassName('menu-inner'),
 | |
|     menuInnerShadow = document.getElementsByClassName('menu-inner-shadow')[0];
 | |
|   if (menuInnerContainer.length > 0 && menuInnerShadow) {
 | |
|     menuInnerContainer[0].addEventListener('ps-scroll-y', function () {
 | |
|       if (this.querySelector('.ps__thumb-y').offsetTop) {
 | |
|         menuInnerShadow.style.display = 'block';
 | |
|       } else {
 | |
|         menuInnerShadow.style.display = 'none';
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   // Init helpers & misc
 | |
|   // --------------------
 | |
| 
 | |
|   // Init BS Tooltip
 | |
|   const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
 | |
|   tooltipTriggerList.map(function (tooltipTriggerEl) {
 | |
|     return new bootstrap.Tooltip(tooltipTriggerEl);
 | |
|   });
 | |
| 
 | |
|   // Accordion active class
 | |
|   const accordionActiveFunction = function (e) {
 | |
|     if (e.type == 'show.bs.collapse' || e.type == 'show.bs.collapse') {
 | |
|       e.target.closest('.accordion-item').classList.add('active');
 | |
|     } else {
 | |
|       e.target.closest('.accordion-item').classList.remove('active');
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   const accordionTriggerList = [].slice.call(document.querySelectorAll('.accordion'));
 | |
|   const accordionList = accordionTriggerList.map(function (accordionTriggerEl) {
 | |
|     accordionTriggerEl.addEventListener('show.bs.collapse', accordionActiveFunction);
 | |
|     accordionTriggerEl.addEventListener('hide.bs.collapse', accordionActiveFunction);
 | |
|   });
 | |
| 
 | |
|   // Auto update layout based on screen size
 | |
|   window.Helpers.setAutoUpdate(true);
 | |
| 
 | |
|   // Toggle Password Visibility
 | |
|   window.Helpers.initPasswordToggle();
 | |
| 
 | |
|   // Speech To Text
 | |
|   window.Helpers.initSpeechToText();
 | |
| 
 | |
|   // Manage menu expanded/collapsed with templateCustomizer & local storage
 | |
|   //------------------------------------------------------------------
 | |
| 
 | |
|   // If current layout is horizontal OR current window screen is small (overlay menu) than return from here
 | |
|   if (window.Helpers.isSmallScreen()) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // If current layout is vertical and current window screen is > small
 | |
| 
 | |
|   // Auto update menu collapsed/expanded based on the themeConfig
 | |
|   window.Helpers.setCollapsed(true, false);
 | |
| };
 |