PageSourceSearch

https://gogol.ru/bitrix/templates/dresscodeV2/components/bitrix/menu/catalogMenu/script.js?17907036696737

js gogol.ru collected 2026-10-02 16:33:28 UTC 6,737 bytes, 333 lines download raw bytes

1//global vars
2var menuTimeouts = {main: false, section: false, firstOpen: false};
3
4//check ready
5$(document).on("ready", function(event){
6
7	//jquery vars
8	var $mainMenu = $("#mainMenu");
9	var $sectionMenu = $("#menuCatalogSection");
10	var $mainMenuItems = $mainMenu.children(".eChild");
11	var $sectionMenuItems = $sectionMenu.children(".menuSection");
12
13	//other
14	var viewport = 0;
15
16	//functions container
17	var events = {
18		click: {},
19		mouseleave: {},
20		mouseenter: {}
21	}
22
23	var tools = {};
24
25	//get browser viewport
26	tools.getViewport = function(){
27
28		//(mozilla/netscape/opera/IE7)
29		if(typeof window.innerWidth != "undefined"){
30			viewport = window.innerWidth;
31		}
32
33		//IE6
34		else if(typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0){
35			viewport = document.documentElement.clientWidth;
36		}
37
38		//older versions of IE
39		else{
40			viewport = document.getElementsByTagName("body")[0].clientWidth;
41		}
42
43		return viewport;
44
45	}
46
47	// slice menu func
48	tools.sliceMainMenu = function(resize = true){
49
50		//check window resize
51		if(resize == true){
52
53			//clear removed items
54			$mainMenu.find(".removed").each(function(i, nextElement){
55
56				//jquery vars
57				var $nextElement = $(nextElement);
58
59				//move item
60				$mainMenu.append($nextElement.removeClass("removed"));
61
62			});
63
64			$mainMenu.find(".removedItemsLink").remove();
65
66		}
67
68		//other
69		var visibleMenuWidth = $mainMenu.width() - 100;
70		var totalSumMenuWidth = 0;
71
72		//check desktop
73		if(viewport > 1024){
74
75			$mainMenuItems.each(function(i, nextElement){
76
77				//jquery vars
78				var $nextElement = $(nextElement);
79
80				//other
81				totalSumMenuWidth += $nextElement.outerWidth(true);
82
83				//hide not fit items
84				if(totalSumMenuWidth > visibleMenuWidth){
85					$nextElement.addClass("removed");
86				}
87
88			});
89
90			//get hidden items
91			var $removedItems = $mainMenu.find(".removed");
92
93			//if exist hidden items
94			if($removedItems.length > 0){
95
96				//jquery vars
97				var $removedItemsList = $("<ul/>").addClass("removedItemsList");
98				var $removedItemsLink = $("<li/>").addClass("removedItemsLink").append($("<a/>"));
99
100				//move hidden items to drop menu container
101				$removedItems.each(function(i, nextElement){
102					$removedItemsList.append($(nextElement));
103				});
104
105				//join drop link to main menu
106				$mainMenu.append($removedItemsLink.append($removedItemsList));
107
108				//set drop menu position
109				$removedItemsList.css({
110					left: $removedItemsLink.offset().left + "px"
111				});
112
113			}
114
115		}
116
117	}
118
119	tools.clearAttributes = function(){
120
121		//check mobile
122		if(viewport <= 1024){
123
124			//clear styles
125			$mainMenu.find(".drop").removeAttr("style");
126
127		}
128
129	}
130
131	//events functions
132	events.click.openNested = function(event){
133
134		//check viewport
135		if(tools.getViewport() <= 1024){
136
137			//jquery vars
138			var $this = $(this);
139
140			//other
141			var state = $this.data("state");
142
143			//check state
144			if(typeof state == "undefined" || state === false){
145
146				//open & set state
147				$this.data("state", true).addClass("opened");
148
149				//block actions
150				return event.preventDefault();
151
152			}
153
154		}
155
156	}
157
158	events.click.closeNested = function(event){
159
160		//check viewport
161		if(tools.getViewport() <= 1024){
162
163			//jquery vars
164			var $this = $(this);
165			var $container = $this.parents(".opened");
166
167			//set state
168			$container.data("state", false).removeClass("opened");
169
170			//close & close by tree
171			$container.find(".opened").removeClass("opened").data("state", false);
172
173			//block actions
174			event.preventDefault();
175			event.stopimmediatepropagation();
176
177		}
178
179	}
180
181	events.click.toggleMenu = function(event){
182
183		//show / hide menu
184		$mainMenu.slideToggle();
185
186		//block actions
187		return event.preventDefault();
188
189	};
190
191	events.mouseenter.mainMenuItems = function(event){
192
193		//check viewport
194		if(viewport > 1024){
195
196			//jquery vars
197			var $this = $(this);
198
199			//check for hidden items
200			if(!$this.hasClass("removed")){
201
202				//open menu
203				menuTimeouts.firstOpen = setTimeout(function(){
204
205					//check hover
206					if($this.is(":hover")){
207
208						//kill last events
209						clearTimeout(menuTimeouts.firstOpen);
210
211						//hide last opened items
212						$sectionMenuItems.removeClass("activeDrop").find(".drop").hide();
213						$mainMenuItems.removeClass("activeDrop").find(".drop").hide();
214
215						//show current drop menu
216						$this.addClass("activeDrop").find(".drop").css("display", "table");
217
218						//clear events
219						return clearTimeout(menuTimeouts.main);
220
221					}
222
223				}, 300);
224
225
226			}
227
228		}
229
230	}
231
232	events.mouseleave.mainMenuItems = function(event){
233
234		//check viewport
235		if(viewport > 1024){
236
237			//jquery vars
238			var $this = $(this);
239
240			//hide
241			menuTimeouts.main = setTimeout(function(){
242				if(!$this.is(":hover")){
243					$this.removeClass("activeDrop").find(".drop").hide();
244				}
245			}, 500);
246
247		}
248
249	}
250
251	events.mouseenter.button = function(event){
252
253		//check viewport
254		if(viewport > 1024){
255
256			//jquery vars
257			var $this = $(this);
258
259			//open menu
260			menuTimeouts.firstOpen = setTimeout(function(){
261
262				//check hover
263				if($sectionMenu.is(":hover")){
264
265					//kill last events
266					clearTimeout(menuTimeouts.firstOpen);
267
268					//hide last opened items
269					$sectionMenuItems.removeClass("activeDrop").find(".drop").hide();
270					$mainMenuItems.removeClass("activeDrop").find(".drop").hide();
271
272					//show current drop menu
273					$this.addClass("activeDrop").find(".drop").css("display", "table");
274
275					//clear events
276					return clearTimeout(menuTimeouts.section);
277				}
278
279			}, 300);
280
281		}
282
283	}
284
285	events.mouseleave.button = function(event){
286
287		//check viewport
288		if(viewport > 1024){
289
290			//jquery vars
291			var $this = $(this);
292
293			//hide menu
294			menuTimeouts.section = setTimeout(function(){
295				$this.removeClass("activeDrop").find(".drop").hide();
296			}, 500);
297
298		}
299
300	}
301
302	events.resize = function(event){
303		tools.getViewport();
304		tools.sliceMainMenu();
305		tools.clearAttributes();
306	}
307
308	//set start viewport
309	tools.getViewport();
310
311	//collapse
312	tools.sliceMainMenu(false);
313
314	//clear styles & attribures
315	tools.clearAttributes();
316
317	//binds
318	$(document).on("click", "#catalogSlideButton", events.click.toggleMenu);
319	$(document).on("click", "#mainMenu .allow-dropdown", events.click.openNested);
320	$(document).on("click", "#mainMenu .allow-dropdown .back", events.click.closeNested);
321
322	//catalog button menu
323	$(document).on("mouseenter", "#menuCatalogSection", events.mouseenter.button);
324	$(document).on("mouseleave", "#menuCatalogSection", events.mouseleave.button);
325
326	//main menu
327	$(document).on("mouseenter", "#mainMenu .eChild", events.mouseenter.mainMenuItems);
328	$(document).on("mouseleave", "#mainMenu .eChild", events.mouseleave.mainMenuItems);
329
330	//resize control
331	$(window).on("resize", events.resize);
332
333});

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.