PageSourceSearch

https://velayat.tv/wp-content/plugins/iks-menu/assets/js/menu.js?ver=1.11.2

js velayat.tv collected 2026-09-24 10:16:55 UTC 10,587 bytes, 290 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        elementLink: '.' + termClass + '__link',
32        elementHasChildren: '.' + termClass + '--has-children',
33        elementIsParent: '.' + termClass + '--parent',
34        elementExpandedCurrent: '.' + termClass + '--expanded-current',
35        elementExpandedInitial: '.' + termClass + '--expanded-initial',
36    },
37    dataAttrs: {
38        collapseChildren: "collapse_children_terms",
39        collapseOther: "collapse_other_terms",
40        collapseAnimationDuration: "collapse_animation_duration",
41        expandAnimationDuration: "expand_animation_duration",
42        disableParentLinks: "disable_parent_links_level",
43        toggleByItemClick: "toggle_by_item_click",
44        initialExpansionDisableScreenWidth: "initial_expansion_disable_screen_width",
45    },
46};
47jQuery( document ).on( 'elementor/popup/show', (event, id) => {
48    var $ = jQuery;
49    var $popupMenu = $("[data-elementor-id=" + id + "]");
50    var $menuElementor = $popupMenu.find(IKSM.selectors.container);
51    if ($menuElementor.length > 0 ) {
52        initMenuAccordion($menuElementor);
53    }
54});
55
56function initMenuAccordion($menus = null) {
57    var $ = jQuery;
58    var selectors = IKSM.selectors;
59    var classes = IKSM.classes;
60    if (!$menus) {
61        $menus = $(selectors.container);
62    }
63    log('initMenuAccordion, $menus:', $menus);
64
65    $menus.each(function (index, menu) {
66        /*
67        * FOR EACH MENU
68        */
69
70        var $menu = $(menu);
71        var $toggles = $menu.find(selectors.toggle);
72        var $elementsInner = $menu.find(selectors.elementInner);
73        var $elementsLinks = $menu.find(selectors.elementLink);
74        var data = $menu.find(selectors.dataAttrs).data() || {};
75
76        $toggles.click(processClick);
77        $toggles.keypress(function (event) {
78            if (event.keyCode === 13) { // Enter
79                event.target && event.target.click()
80            }
81        });
82
83        $elementsInner.keypress(function (event) {
84            if (event.keyCode === 13) { // Enter
85                var $target = $(event.target)
86                var children = $target.children(selectors.elementLink)
87                if (children.length) {
88                    children[0].click()
89                }
90            }
91        });
92
93        // Focus and Blur parent element when focusing/blurring link element
94
95        $elementsLinks.focus(function (event) {
96            var parent = getLinkContainer(event.target)
97            parent && parent.focus()
98        });
99
100        $elementsLinks.blur(function (event) {
101            var parent = getLinkContainer(event.target)
102            parent && parent.blur()
103        });
104
105        processToggledLinks();
106
107        processInitialExpansion();
108
109        /*
110        * FUNCTIONS
111        */
112
113        function processClick() {
114            var $this = $(this);
115            var $item = $this.closest(selectors.element);
116
117            if (isExpanded($item)) { // Only if expanded
118                collapse($item);
119                if (data[IKSM.dataAttrs.collapseChildren]) {
120                    collapseChildren($item);
121                }
122            } else {
123                expand($item);
124                if (data[IKSM.dataAttrs.collapseOther]) {
125                    collapseOther($item);
126                }
127            }
128        }
129
130        function processToggledLinks() {
131            if (
132              data.hasOwnProperty(IKSM.dataAttrs.disableParentLinks)
133              || data.hasOwnProperty(IKSM.dataAttrs.toggleByItemClick)
134            ) {
135                var $elements = $menu.find("a[data-toggle=1]");
136
137                $elements.each(function (index, element) {
138                    var $item = $(element).closest(selectors.elementInner);
139                    $item.click(processClick);
140                    $item.find(selectors.toggle).off('click');
141                });
142            }
143        }
144
145        function processInitialExpansion() {
146            var $elements;
147
148            // Initial Expansion
149            $elements = $menu.find(selectors.elementExpandedInitial);
150            if ($elements.length) {
151                var screenWidth = parseInt(data[IKSM.dataAttrs.initialExpansionDisableScreenWidth]);
152
153                $elements.each(function (index, element) {
154                    const $element = $(element);
155
156                    if (screenWidth && isScreenWidthLessThan(screenWidth)) {
157                        var $tree = $element.children(selectors.treeContainer);
158                        $tree.css("display", "");
159                        $element.removeClass(classes.element.expanded);
160                    }
161                    $element.removeClass(classes.element.expandedInitial);
162                });
163            }
164
165            // Current Terms Expansion
166            $elements = $menu.find(selectors.elementExpandedCurrent);
167            if ($elements.length) {
168                $elements.removeClass(classes.element.expandedCurrent);
169            }
170        }
171
172        function isExpanded($element) {
173            return $element.hasClass(classes.element.expanded);
174        }
175
176        function hasChildren($element) {
177            return $element && $element.hasClass(classes.element.hasChildren);
178        }
179
180        function expand($element, duration) {
181            if (hasChildren($element)) {
182                // TODO: Recalculate real-height, if children were collapsed/expanded changes
183                duration = duration === undefined ? data[IKSM.dataAttrs.expandAnimationDuration] : duration;
184                var isCollapsing = $element.hasClass(classes.element.collapsing);
185                var $tree = $element.children(selectors.treeContainer);
186
187                $element.addClass(classes.element.expanded);
188                $element.addClass(classes.element.expanding);
189                $element.removeClass(classes.element.collapsing);
190
191                var height;
192                if (isCollapsing) {
193                    height = $tree.data("real-height");
194                } else {
195                    $tree.css('opacity', 0);
196                    $tree.css('display', 'block'); // To get correct outerHeight
197                    height = $tree.outerHeight();
198                    $tree.css('opacity', '');
199                    $tree.css('display', '');
200                    $tree.data("real-height", height);
201                    $tree.css("height", 0); // Required for animate
202                }
203
204                $tree.css("display", "block"); // Make it visible
205                $tree.stop().animate({height: height}, duration, function () {
206                    $tree.css("height", ""); // Remove unnecessary height
207                    $element.removeClass(classes.element.expanding);
208                });
209
210                log('expand', $element, height);
211            }
212        }
213
214        function collapse($element, duration) {
215            if (hasChildren($element)) {
216                duration = duration === undefined ? data[IKSM.dataAttrs.collapseAnimationDuration] : duration;
217                var isExpanding = $element.hasClass(classes.element.expanding);
218                var $tree = $element.children(selectors.treeContainer);
219
220                $element.removeClass(classes.element.expanded);
221                $element.removeClass(classes.element.expanding);
222                $element.addClass(classes.element.collapsing);
223
224                if (!isExpanding) {
225                    var outerHeight = $tree.outerHeight();
226                    $tree.data("real-height", outerHeight); // Saving real height to use it, if EXPANDING started before COLLAPSING ended
227                }
228
229                $tree.stop().animate({height: 0}, duration, function () {
230                    $tree.css("display", "");
231                    $tree.css("height", "");
232                    $element.removeClass(classes.element.collapsing);
233                });
234
235                log('collapse', $element);
236            }
237        }
238
239        function collapseOther($element) {
240            log('collapseOther', $element);
241            var id = $element.data("id");
242
243            var $elements = $element
244                .parent(selectors.treeContainerInner) // Collapsing SAME level items
245                .children(selectors.elementHasChildren + '.' + classes.element.expanded)
246                .filter(function () {
247                    var $this = $(this);
248                    if ($this.data("id") === id) { // Same element
249                        return false;
250                    }
251                    if ($this.find(selectors.element + "[data-id='" + id + "']").length > 0) { // Is parent
252                        return false;
253                    }
254                    return true;
255                });
256
257            // Collapse result elements
258            $elements.each(function (index, element) {
259                var $element = $(element);
260                collapse($element);
261                // Maybe collapse children
262                if (data[IKSM.dataAttrs.collapseChildren]) {
263                    collapseChildren($element);
264                }
265            });
266        }
267
268        function collapseChildren($element) {
269            log('collapseChildren', $element);
270            $element.find(selectors.elementHasChildren).each(function (index, element) {
271                collapse($(element));
272            });
273        }
274    });
275
276    function getLinkContainer(element) {
277        var $target = $(element)
278        var parent = $target.closest(selectors.elementInner)
279        return parent[0]
280    }
281
282    function log(/*...args*/) {
283        // console.log(...args);
284    }
285
286    function isScreenWidthLessThan(width) {
287        return window.matchMedia('(max-width: ' + width + 'px)').matches;
288    }
289}
290

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.