PageSourceSearch

https://www.graduate.nu.ac.th/old_web/wp-content/themes/progrisaas/js/elementor-header.js?ver=20210110

js nu.ac.th collected 2026-10-01 11:28:14 UTC 6,469 bytes, 143 lines download raw bytes

1(function($) {
2    "use strict";
3  
4    /* --------------------------------------------------
5    * side panel
6    * --------------------------------------------------*/
7    var element = $('#panel-btn'),
8    sidebar = $('#side-panel');
9  
10    function panel_handler() {
11        var isActive = !element.hasClass('active');
12  
13        element.toggleClass('active', isActive);
14        sidebar.toggleClass('side-panel-open', isActive);
15        $('body').toggleClass('side-panel-active', isActive);
16        return false;
17    }
18  
19    $('#panel-btn, .side-panel-close, .panel-overlay').on('click', panel_handler);
20  
21    /* --------------------------------------------------
22    * toggle search
23    * --------------------------------------------------*/
24    var tgSearch  = function($scope, $){
25        $scope.find('.octf-search').each( function(){
26            var btn = $(this).find('.toggle_search'),
27            form = $(this).find('.h-search-form-field');
28            function search_handler() {
29                var isActive = !btn.hasClass('active');
30
31                btn.toggleClass('active', isActive);
32                form.toggleClass('show', isActive);
33                return false;
34            }
35            $('.search-overlay, .h-search-form-inner > i, .toggle_search').on('click', search_handler);
36        });
37    };
38  
39    /* --------------------------------------------------
40    * mobile menu
41    * --------------------------------------------------*/
42    var mmenuPanel  = function(){
43        var element = $('#mmenu-toggle'),
44            mmenu   = $('#mmenu-wrapper');
45
46        function mmenu_handler() {
47            var isActive = !element.hasClass('active');
48
49            element.toggleClass('active', isActive);
50            mmenu.toggleClass('mmenu-open', isActive);
51            $('body').toggleClass('mmenu-active', isActive);
52            return false;
53        }
54
55        $('#mmenu-toggle, .mmenu-close, .mmenu-overlay').on('click', mmenu_handler);
56
57        $('.mmenu-wrapper li:has(ul)').prepend('<span class="arrow">+</span>');
58        $(".mmenu-wrapper .mobile_mainmenu > li span.arrow").on('click',function() {
59            $(this).parent().find("> ul").stop(true, true).slideToggle()
60            $(this).toggleClass( "active" ); 
61        });
62    };
63
64    /* --------------------------------------------------
65    * menu vertical
66    * --------------------------------------------------*/
67    var menuVertical = function($scope, $){
68        if( $scope.find('.vertical-main-navigation').length ){
69            $scope.find('.vertical-main-navigation').each( function(){
70                var selector         = $(this),
71                    itemHasChildren  = selector.find('> ul > li.menu-item-has-children > a'),
72                    nItemHasChildren = selector.find('ul ul > li.menu-item-has-children > a');
73
74                itemHasChildren.prepend('<span class="arrow"><svg viewBox="0 0 448 448" xmlns="http://www.w3.org/2000/svg"><path d="m272 184c-4.417969 0-8-3.582031-8-8v-176h-80v176c0 4.417969-3.582031 8-8 8h-176v80h176c4.417969 0 8 3.582031 8 8v176h80v-176c0-4.417969 3.582031-8 8-8h176v-80zm0 0"/></svg></span>');
75                nItemHasChildren.prepend('<span class="arrow"><svg viewBox="0 0 448 448" xmlns="http://www.w3.org/2000/svg"><path d="m272 184c-4.417969 0-8-3.582031-8-8v-176h-80v176c0 4.417969-3.582031 8-8 8h-176v80h176c4.417969 0 8 3.582031 8 8v176h80v-176c0-4.417969 3.582031-8 8-8h176v-80zm0 0"/></svg></span>');
76                itemHasChildren.find('span.arrow').on('click',function() {
77                    itemHasChildren.parent().not($(this).parents('li.menu-item-has-children')).find('>ul').stop(true, true).slideUp();
78                    nItemHasChildren.parent().find('>ul').stop(true, true).slideUp();
79                    nItemHasChildren.find('span.arrow').removeClass('active');
80                    itemHasChildren.find('span.arrow').not($(this)).removeClass('active');
81                    $(this).parents('li.menu-item-has-children').find('>ul').stop(true, true).slideToggle();
82                    $(this).toggleClass( 'active' );
83                });
84                nItemHasChildren.find('span.arrow').on('click',function() {
85                    $(this).parents('sub-menu').eq(0).find('li.menu-item-has-children').not($(this).parents('li.menu-item-has-children').eq(0)).find('>
85ul').stop(true, true).slideUp();
86                    $(this).parents('sub-menu').eq(0).find('li.menu-item-has-children').find('>a span.arrow').not($(this)).removeClass('active');
87                    $(this).parents('li.menu-item-has-children').eq(0).find('>ul').stop(true, true).slideToggle();
88                    $(this).toggleClass( 'active' );
89                });
90            });
91        }
92    };
93
94    /* --------------------------------------------------
95    * Hamburger menu
96    * --------------------------------------------------*/
97    var hamburgerMenu = function($scope, $){
98        $scope.find('.menu-hamburger-toggle').each( function(){
99            var selector         = $(this),
100                menuHamburger    = selector.next('.octf-menu-hamburger'),
101                mainNav          = menuHamburger.find('.main-navigation'),
102                btnClose         = menuHamburger.find('#menu-hamburger-close');
103            selector.on('click', function() {
104                menuHamburger.addClass('open-menu');
105            });
106            btnClose.on('click', function() {
107                menuHamburger.removeClass('open-menu');
108            });
109            document.addEventListener('keydown', function(event){
110                if(event.key === "Escape"){
111                    menuHamburger.removeClass('open-menu');
112                }
113            });
114        });
115    };
116  
117    /**
118     * Elementor JS Hooks
119     */
120    $(window).on("elementor/frontend/init", function () {
121        /*toggle search*/
122        elementorFrontend.hooks.addAction(
123             "frontend/element_ready/isearch.default",
124            tgSearch
125        );
126        /*mmenu*/
127        elementorFrontend.hooks.addAction(
128            "frontend/element_ready/imenu_mobile.default",
129            mmenuPanel
130        );
131        /*menu vertical*/
132        elementorFrontend.hooks.addAction(
133            "frontend/element_ready/imenu.default",
134            menuVertical
135        );
136        /*menu hamburger*/
137        elementorFrontend.hooks.addAction(
138            "frontend/element_ready/imenu_hamburger.default",
139            hamburgerMenu
140        );
141    });
142  
143  })(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.