PageSourceSearch

https://sciartel.ru/wp-content/plugins/iks-menu/assets/js/menu.js?ver=1.9.8

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

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.