PageSourceSearch

https://course.secrets-online.ru/nassets/7717e45a/js/light-menu.js?v=1763986723

js secrets-online.ru collected 2026-09-28 09:04:03 UTC 12,287 bytes, 421 lines download raw bytes

1$( function() {
2	let $itemsListEl = null;
3	let $submenuBarEl  = null;
4	let $fade = null;
5	let counters = null;
6
7	let handleItemClick = function( $itemEl, item ) {
8		if (item.id === 'marathon') {
9			window.open(item.subitems[0].url);
10			return;
11		}
12
13		/*
14		if ( item.id == "notifications_button_small" ) {
15			return;
16		}
17		*/
18
19
20		setSelectedItem( item.id );
21		if( item.subitems.length == 1 ) {
22			location.href = item.subitems[0].url;
23		}
24		else {
25			showSubmenu(item);
26		}
27
28	};
29
30	let balances = null;
31	let loadBalances = function( $headerEl ) {
32
33		let showBalances = function() {
34			let $balanceEl = $('<div class="user-balance"/>');
35			for( let balance of balances ) {
36				let $balanceStr = $("<p>" + balance.label + ": <b>" + balance.value + "</b></p>");
37				$balanceStr.appendTo( $balanceEl );
38			}
39			$balanceEl.appendTo( $headerEl );
40		};
41
42		if ( balances === null ) {
43			ajaxCall("/pl/user/user/get-balance?id=" + window.accountUserId, {}, {}, function (data) {
44				if ( data.balances && data.balances.length ) {
45					balances = data.balances;
46					showBalances();
47				}
48			});
49		}
50		else {
51			showBalances();
52		}
53	};
54
55	updateNotificationsData = function( data ) {
56
57		let count = data.count;
58		let $notificationsContentEl = $submenuBarEl;
59
60		$notificationsContentEl.empty();
61
62
63
64
65		let groups = data.groups;
66		if ( groups.length > 0 ) {
67
68			let $headerEl = $('<div class="header"/>').appendTo( $notificationsContentEl );
69			let $headerLinkWrapper = $('<div class="all-notifications-header-link-wrapper"/>').appendTo( $headerEl );
70
71			let $groupsEl = $('<div/>').appendTo( $notificationsContentEl );
72
73			var notificationsLabel =  (typeof Yii != 'undefined') ? Yii.t( "common", "Notifications" ) : 'Уведомления';
74			let $headerLink = $('<a href="/notifications/notifications/all" class="all-notifications-header-link"/>').html( count.new > 0 ? notificationsLabel + ' (' + count.new + ')' : notificationsLabel);
75			$headerLink.appendTo( $headerLinkWrapper );
76
77
78			let markAsReadLabel = (typeof Yii != 'undefined') ? Yii.t( "common", "Mark as read" ) : 'Отметить прочитанными';
79			let $markViewedAllLink = $( '<div class="mark-viewed-all"/>' );
80			$markViewedAllLink.html( markAsReadLabel ).appendTo( $headerEl );
81			$('<div class="clear"/>').appendTo( $headerEl );
82
83			let markViewedAllInProcess = false;
84			$markViewedAllLink.click( function() {
85				if ( markViewedAllInProcess ) {
86					return;
87				}
88				$("<img src='/public/img/loading.gif'/>").prependTo( $(this));
89				markViewedAllInProcess = true;
90				ajaxCall('/notifications/notifications/viewedAll', {}, {suppressErrors: true}, function (response) {
91					markViewedAllInProcess = false;
92					updateNotificationsData(response.groups);
93					updateCounters();
94				});
95
96			});
97
98			for (let group of groups) {
99
100				let helper = group.helper ? group.helper : {};
101
102				let $el = $("<a/>");
103				$el.addClass('notification-group notification-click-area notification-status-' + group.status);
104				$el.attr('href', helper.click_url);
105
106				$('<span class="user-image"/>').html(helper.first_user_thumbnail).appendTo($el);
107				$('<div class="content"/>').html(helper.content).appendTo($el);
108				$('<div class="date"/>').html(helper.display_date).appendTo($el);
109				$('<div class="clear"/>').appendTo($el);
110
111				let $markAsViewedLink = $('<div class="mark-viewed" style="top: 5px">&times;</div>');
112				$markAsViewedLink.appendTo($el);
113				$markAsViewedLink.data('group-id', group.id);
114
115				$markAsViewedLink.click(function (e) {
116					let groupId = $(this).data('group-id');
117					if ($(this).data('processing')) {
118						return;
119					}
120					$(this).data('processing', true)
121					e.stopPropagation();
122					e.preventDefault();
123					$markAsViewedLink.html("<img src='/public/img/loading.gif'/>");
124
125					ajaxCall('/notifications/notifications/viewed', {
126						id: groupId
127					}, {suppressErrors: true}, function (resp) {
128						$(this).data('processing', false);
129						updateNotificationsData(resp.groups);
130						updateCounters();
131					});
132
133				});
134
135				$el.appendTo($groupsEl);
136			}
137
138			var allNotificationsLabel = (typeof Yii != 'undefined') ? Yii.t("common", "All notifications") : 'Все уведомления';
139			if (data.count.all > 10) {
140				$('<a class="all-notifications-footer-link" href="/notifications/notifications/all"/>').html(allNotificationsLabel).appendTo($notificationsContentEl);
141			}
142		}
143		else {
144			var noNotificationMessagesLabel = (typeof Yii != 'undefined') ? Yii.t( "common", "No notification messages" ) : 'Уведомлений для вас еще нет';
145
146			$("<div class='no-notifications-message'>" + noNotificationMessagesLabel + "</div>").appendTo($notificationsContentEl);
147		}
148
149	};
150
151
152	loadNotifications = function() {
153		$submenuBarEl.html("<div class='text-center'><img style='margin-top: 20px;' src='/public/img/loading.gif'/></div>");
154		ajaxCall( "/notifications/notifications/get", {}, {method: "GET"}, function(response) {
155			updateNotificationsData( response.data );
156		});
157	};
158
159	let updateCounters = function() {
160		$itemsListEl.find('.notify-count').hide();
161		for ( let key in counters ) {
162			let value = counters[key];
163			if (value> 0) {
164				if ($itemsListEl.find('.menu-item-' + key)) {
165					let $notifyCount = $itemsListEl.find('.menu-item-' + key + ' .notify-count');
166					$notifyCount.html( value ).show();
167
168					if (key == 'notifications_button_small') {
169						$itemsListEl.find('.menu-item-' + key + ' .menu-item-icon').hide();
170					}
171				}
172			}
173		}
174
175	};
176
177	let setSelectedItem = function( itemId ) {
178		let $currentSelected = $itemsListEl.find('.menu-item.selected');
179		if ( $currentSelected.length > 0 ) {
180			if ($currentSelected.hasClass('menu-item-' + itemId)) {
181				return;
182			}
183			let currentSelectedItem = $currentSelected.data('item');
184			$currentSelected.find('.menu-item-icon').attr( 'src', currentSelectedItem.iconUrl );
185			$currentSelected.removeClass('selected');
186		}
187
188		if ( ! itemId ) {
189			return;
190		}
191
192
193		let $newSelected = $itemsListEl.find('.menu-item.menu-item-' + itemId );
194		if ( $newSelected.hasClass( 'active') ) {
195			return;
196		}
197		let newSelectedItem = $newSelected.data('item');
198		$newSelected.find('.menu-item-icon').attr( 'src', newSelectedItem.activeIconUrl );
199		$newSelected.addClass('selected');
200	};
201
202
203	let showSubmenu = function( item ) {
204
205		$submenuBarEl.empty();
206		$submenuBarEl.attr('class', 'gc-account-user-submenu-bar');
207		$submenuBarEl.addClass( 'gc-account-user-submenu-bar-' + item.id );
208
209
210		if ( item.id == 'notifications_button_small' ) {
211			loadNotifications();
212		}
213		else {
214			let $header = $("<div><h3>" + item.label + "</h3></div>");
215			$header.appendTo( $submenuBarEl );
216
217
218
219			if ( item.id == 'profile' ) {
220				loadBalances( $header );
221			}
222
223
224
225			let $submenuEl = $("<ul class='gc-account-user-submenu'>").appendTo($submenuBarEl);
226
227
228
229			for ( let subitem of item.subitems ) {
230
231				var subItemFullId = item.id + '-' + subitem.id;
232
233
234				var itemClassName = "menu-item-" + subitem.id;
235				//var notifyCountClass = 'notify-count ' + (this.props.notifyCount > 0 ? '' : 'hide');
236				if (subitem.params.hasDelimiter === true) {
237					itemClassName = itemClassName + ' ' + 'menu-item-delimiter';
238				}
239
240				let $subitemEl = $("<li class='" + itemClassName + "'/>");
241				$subitemEl.appendTo( $submenuEl );
242
243				let target = item.target ? item.target : '_self';
244
245				if (subitem.id.indexOf('gus-') !== -1) {
246					target = subitem.target ? subitem.target : target;
247				}
248
249				let $subitemLink = $("<a class='subitem-link' target='" + target + "' href='" + subitem.url + "'>" + subitem.label + "</a>");
250				$subitemLink.appendTo( $subitemEl );
251
252				if ( subitem.imageUrl ) {
253					$('<img src="' + subitem.imageUrl + '"/>').prependTo($subitemLink);
254				}
255
256
257
258				var notifyCount = counters ? counters[subItemFullId] : 0;
259				if ( !!notifyCount ) {
260					let $notifyEl = $( "<span class='notify-count'>" + notifyCount + "</span>" );
261					$notifyEl.appendTo( $subitemLink );
262				}
263
264				$subitemEl.appendTo( $submenuEl );
265			}
266		}
267
268
269		$submenuBarEl.show();
270		$fade.show();
271	};
272
273
274
275	var initMenu = function() {
276		$fade = $('<div class="gc-fade-wrapper"><div class="gc-fade"></div></div>');
277		$fade.hide();
278		$fade.appendTo($(document.body));
279		$fade.click(function () {
280			$('.gc-account-leftbar').removeClass("expanded")
281			setSelectedItem(null);
282			$fade.hide();
283			$submenuBarEl.hide();
284		});
285
286		$('.gc-main-content').addClass("with-left-menu");
287		ajaxCall('/cms/counters/menu', {}, {suppressErrors: true}, function (response) {
288
289			counters = response.counters;
290			updateCounters();
291
292			var $elem = $('.talks-widget.activated-talks-widget');
293			if ( $elem.length > 0 ) {
294				$elem.talksWidget( 'setCounter', response.counters.conversationsData )
295			}
296		});
297	};
298
299	var renderPageMenu = function ( menu ) {
300		let $leftbarEl = $('<div class="gc-account-leftbar"/>');
301		let $toggleLink = $('<a href="javascript:void(0)" class="toggle-link without-icon"><img src="/public/img/bars.svg" width="35"/></span></a>');
302		$toggleLink.appendTo ( $leftbarEl )
303		$toggleLink.click( function() {
304			$leftbarEl.toggleClass("expanded")
305			if ( $leftbarEl.hasClass('expanded')) {
306				$leftbarEl.find('.gc-account-user-menu').show();
307				$fade.show();
308			}
309			else {
310				$leftbarEl.find('.gc-account-user-menu').hide();
311				$leftbarEl.find('.gc-account-user-submenu-bar').hide();
312				$fade.hide();
313			}
314		} );
315
316		let $gcAccountUserMenu = $('#gcAccountUserMenu');
317
318		if (menu.customClass) {
319			$gcAccountUserMenu.addClass(menu.customClass);
320		}
321
322		if( menu.navMenuItems && menu.navMenuItems.subitems && menu.navMenuItems.subitems.length > 0 ) {
323			let $navItemsMenu = $("<div class='gc-page-nav-items-menu lt-page-edit-link'/>");
324			$navItemsMenu.appendTo($gcAccountUserMenu);
325			//$navItemsMenu.hide();
326			for( let item of menu.navMenuItems.subitems ) {
327				let $navItem = $('<a class="item ' + item.id + '-link" href="' + item.url + '">' + item.label + '</a>')
328				$navItem.appendTo( $navItemsMenu )
329			}
330
331
332			var togglerLabel =  (typeof Yii != 'undefined') ? Yii.t( "common", "Actions" ) : 'Действия';
333			let $togglerNavItem = $('<a class="toggler-item" >' + togglerLabel + '</a>');
334			$togglerNavItem.appendTo( $navItemsMenu );
335
336			$togglerNavItem.click( function() {
337				$navItemsMenu.toggleClass('expanded');
338			})
339		}
340
341		initMenu();
342
343		$submenuBarEl = $("<div class='gc-account-user-submenu-bar'/>");
344		$submenuBarEl.appendTo( $leftbarEl );
345		$submenuBarEl.hide();
346
347		$itemsListEl = $('<ul class="gc-account-user-menu">');
348		$itemsListEl.appendTo( $leftbarEl );
349
350		$leftbarEl.appendTo($gcAccountUserMenu);
351		for( let item of menu.items ) {
352
353			/*
354			if ( item.id == "notifications" ) {
355				continue;
356			}
357			*/
358
359			let $itemEl = $('<li/>');
360			$itemEl.data('item', item );
361
362			//$itemEl.html( item.label );
363			$itemEl.addClass("menu-item" );
364			$itemEl.addClass("menu-item-" + item.id);
365			if (item.id === 'profile') {
366				const worksheetClass = item.params.worksheetClass ?? null;
367				if (worksheetClass !== null) {
368					$itemEl.addClass(`worksheet__${worksheetClass}`);
369				}
370			}
371			if ( menu.activeItem == item.id ) {
372				$itemEl.addClass('active')
373			}
374
375
376			let $linkEl = $("<a href='javascript:void(0)'/>");
377			$linkEl.appendTo( $itemEl );
378			$linkEl.attr('title', item.label);
379			$linkEl.click( function() {
380				handleItemClick( $itemEl, item );
381
382			});
383
384			let $img = $("<img class='menu-item-icon' src='" + ( ( item.id == menu.activeItem ) ? item.activeIconUrl : item.iconUrl ) + "'/>");
385			$img.appendTo( $linkEl );
386
387
388
389			$itemEl.appendTo( $itemsListEl );
390
391			if ( item.subIconHtml ) {
392				let $subIcon = $("<span class='sub-icon'>" + item.subIconHtml + "</span>");
393				$subIcon.appendTo( $itemEl )
394			}
395
396			let $notifyCountEl = $("<span class='notify-count'/>");
397			$notifyCountEl.appendTo( $itemEl.find('a') );
398			$notifyCountEl.hide();
399
400			if (!item.hideLabel) {
401				let $labelEl = $(`<span class='menu-item-label'>${item.label}</span>`);
402				if (item.label.length > 9) {
403					$labelEl.css('margin', 0);
404				}
405				$labelEl.appendTo($linkEl);
406				$notifyCountEl.addClass('with-label');
407				$linkEl.addClass('with-label');
408			}
409		}
410
411		$gcAccountUserMenu.removeClass('not-inited');
412
413		//$(".menu-item-notifications_button_small a").click();
414	};
415
416
417
418	if (window.gcAccountUserMenu) {
419		renderPageMenu(window.gcAccountUserMenu);
420	}
421});

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.