PageSourceSearch

https://xn--80ahbb5ad.xn--p1ai/wp-content/plugins/iks-menu/assets/js/menu.js?ver=1.8.2

js xn--80ahbb5ad.xn--p1ai collected 2026-10-10 02:34:17 UTC 9,252 bytes, 243 lines download raw bytes

1'use strict';
2
3jQuery(document).ready(function ($j) {
4    initMenuAccordion();
5});
6
7var termClass = 'iksm-term';
8
9var IKSM = {
10    classes: {
11        element: {
12            current: termClass + '--current',
13            expanded: termClass + '--expanded',
14            expanding: termClass + '--expanding',
15            collapsing: termClass + '--collapsing',
16            child: termClass + '--child',
17            hasChildren: termClass + '--has-children',
18            expandedCurrent: termClass + '--expanded-current',
19            expandedInitial: termClass + '--expanded-initial',
20        },
21    },
22    selectors: {
23        dataAttrs: '#iksm_data_args',
24        container: '.iksm-container',
25        treeContainer: '.iksm-terms-tree',
26        treeContainerInner: '.iksm-terms-tree__inner',
27        toggle: '.' + termClass + '__toggle',
28        element: '.' + termClass,
29        elementCurrent: '.' + termClass + '--current',
30        elementInner: '.' + termClass + '__inner',
31        elementHasChildren: '.' + termClass + '--has-children',
32        elementIsParent: '.' + termClass + '--parent',
33        elementExpandedCurrent: '.' + termClass + '--expanded-current',
34        elementExpandedInitial: '.' + termClass + '--expanded-initial',
35    },
36    dataAttrs: {
37        collapseChildren: "collapse_children_terms",
38        collapseOther: "collapse_other_terms",
39        collapseAnimationDuration: "collapse_animation_duration",
40        expandAnimationDuration: "expand_animation_duration",
41        disableParentLinks: "disable_parent_links_level",
42        initialExpansionDisableScreenWidth: "initial_expansion_disable_screen_width",
43    },
44};
45
46function initMenuAccordion() {
47    var $ = jQuery;
48    var selectors = IKSM.selectors;
49    var classes = IKSM.classes;
50    var $menus = $(selectors.container);
51    log('initMenuAccordion, $menus:', $menus);
52
53    $menus.each(function (index, menu) {
54        /*
55        * FOR EACH MENU
56        */
57
58        var $menu = $(menu);
59        var $toggles = $menu.find(selectors.toggle);
60        var data = $menu.find(selectors.dataAttrs).data() || {};
61
62        log('data', data);
63        // console.time('Click init');
64        $toggles.click(processClick);
65
66        processDisableParentLinks();
67
68        processInitialExpansion();
69
70        /*
71        * FUNCTIONS
72        */
73
74        function processClick() {
75            // console.time('Click');
76            var $this = $(this);
77            var $item = $this.closest(selectors.element);
78
79            if (isExpanded($item)) { // Only if expanded
80                collapse($item);
81                if (data[IKSM.dataAttrs.collapseChildren]) {
82                    collapseChildren($item);
83                }
84            } else {
85                expand($item);
86                if (data[IKSM.dataAttrs.collapseOther]) {
87                    collapseOther($item);
88                }
89            }
90            // console.timeEnd('Click');
91        }
92
93        function processDisableParentLinks() {
94            if (data.hasOwnProperty(IKSM.dataAttrs.disableParentLinks)) {
95                var $elements = $menu.find("a[data-toggle=1]");
96
97                $elements.each(function (index, element) {
98                    var $item = $(element).closest(selectors.elementInner);
99                    $item.click(processClick);
100                    $item.find(selectors.toggle).off('click');
101                });
102            }
103        }
104
105        function processInitialExpansion() {
106            var $elements;
107
108            // Initial Expansion
109            $elements = $menu.find(selectors.elementExpandedInitial);
110            if ($elements.length) {
111                var screenWidth = parseInt(data[IKSM.dataAttrs.initialExpansionDisableScreenWidth]);
112
113                $elements.each(function (index, element) {
114                    const $element = $(element);
115
116                    if (screenWidth && isScreenWidthLessThan(screenWidth)) {
117                        var $tree = $element.children(selectors.treeContainer);
118                        $tree.css("display", "");
119                        $element.removeClass(classes.element.expanded);
120                    }
121                    $element.removeClass(classes.element.expandedInitial);
122                });
123            }
124
125            // Current Terms Expansion
126            $elements = $menu.find(selectors.elementExpandedCurrent);
127            if ($elements.length) {
128                $elements.removeClass(classes.element.expandedCurrent);
129            }
130        }
131
132        function isExpanded($element) {
133            return $element.hasClass(classes.element.expanded);
134        }
135
136        function hasChildren($element) {
137            return $element && $element.hasClass(classes.element.hasChildren);
138        }
139
140        function expand($element, duration) {
141            if (hasChildren($element)) {
142                // TODO: Recalculate real-height, if children were collapsed/expanded changes
143                duration = duration === undefined ? data[IKSM.dataAttrs.expandAnimationDuration] : duration;
144                var isCollapsing = $element.hasClass(classe
144s.element.collapsing);
145                var $tree = $element.children(selectors.treeContainer);
146
147                $element.addClass(classes.element.expanded);
148                $element.addClass(classes.element.expanding);
149                $element.removeClass(classes.element.collapsing);
150
151                var height;
152                if (isCollapsing) {
153                    height = $tree.data("real-height");
154                } else {
155                    $tree.css('opacity', 0);
156                    $tree.css('display', 'block'); // To get correct outerHeight
157                    height = $tree.outerHeight();
158                    $tree.css('opacity', '');
159                    $tree.css('display', '');
160                    $tree.data("real-height", height);
161                    $tree.css("height", 0); // Required for animate
162                }
163
164                $tree.css("display", "block"); // Make it visible
165                $tree.stop().animate({height: height}, duration, function () {
166                    $tree.css("height", ""); // Remove unnecessary height
167                    $element.removeClass(classes.element.expanding);
168                });
169
170                log('expand', $element, height);
171            }
172        }
173
174        function collapse($element, duration) {
175            if (hasChildren($element)) {
176                duration = duration === undefined ? data[IKSM.dataAttrs.collapseAnimationDuration] : duration;
177                var isExpanding = $element.hasClass(classes.element.expanding);
178                var $tree = $element.children(selectors.treeContainer);
179
180                $element.removeClass(classes.element.expanded);
181                $element.removeClass(classes.element.expanding);
182                $element.addClass(classes.element.collapsing);
183
184                if (!isExpanding) {
185                    var outerHeight = $tree.outerHeight();
186                    $tree.data("real-height", outerHeight); // Saving real height to use it, if EXPANDING started before COLLAPSING ended
187                }
188
189                $tree.stop().animate({height: 0}, duration, function () {
190                    $tree.css("display", "");
191                    $tree.css("height", "");
192                    $element.removeClass(classes.element.collapsing);
193                });
194
195                log('collapse', $element);
196            }
197        }
198
199        function collapseOther($element) {
200            log('collapseOther', $element);
201            var id = $element.data("id");
202
203            var $elements = $element
204                .parent(selectors.treeContainerInner) // Collapsing SAME level items
205                .children(selectors.elementHasChildren + '.' + classes.element.expanded)
206                .filter(function () {
207                    var $this = $(this);
208                    if ($this.data("id") === id) { // Same element
209                        return false;
210                    }
211                    if ($this.find(selectors.element + "[data-id='" + id + "']").length > 0) { // Is parent
212                        return false;
213                    }
214                    return true;
215                });
216
217            // Collapse result elements
218            $elements.each(function (index, element) {
219                var $element = $(element);
220                collapse($element);
221                // Maybe collapse children
222                if (data[IKSM.dataAttrs.collapseChildren]) {
223                    collapseChildren($element);
224                }
225            });
226        }
227
228        function collapseChildren($element) {
229            log('collapseChildren', $element);
230            $element.find(selectors.elementHasChildren).each(function (index, element) {
231                collapse($(element));
232            });
233        }
234    });
235
236    function log(/*...args*/) {
237        // console.log(...args);
238    }
239
240    function isScreenWidthLessThan(width) {
241        return window.matchMedia('(max-width: ' + width + 'px)').matches;
242    }
243}

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.