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">×</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.