1(function() { 2 'use strict'; 3 4 if(!!window.JCCatalogMenu) 5 return; 6 7 window.JCCatalogMenu = function(params) { 8 this.catalogMenu = BX(params.container); 9 this.catalogMenuInside = params.inside; 10 this.catalogMenuSetActive = params.setActive; 11 this.catalogMenuOpenLast = params.openLast; 12 this.catalogMenuMoved = false; 13 14 this.menuIcon = document.body.querySelector('[data-entity="menu-icon"]'); 15 16 BX.ready(BX.delegate(this.init, this)); 17 }; 18 19 window.JCCatalogMenu.prototype = { 20 init: function() { 21 var subMenuAll = this.catalogMenu.querySelectorAll('[data-entity="dropdown-menu"]'); 22 if(!!subMenuAll) { 23 for(var i in subMenuAll) { 24 if(subMenuAll.hasOwnProperty(i)) { 25 var subMenuLiActive = subMenuAll[i].querySelector('.active'); 26 if(!!subMenuLiActive) { 27 var parentMenuLi = BX.findParent(subMenuAll[i], {tagName: 'LI'}); 28 if(!!parentMenuLi) 29 BX.addClass(parentMenuLi, 'active'); 30 } 31 } 32 } 33 } 34 35 if(window.innerWidth >= 992) 36 $(this.catalogMenu).moreMenu(); 37 38 this.adjustCatalogMenu(); 39 BX.bind(window, 'resize', BX.proxy(this.adjustCatalogMenu, this)); 40 41 this.resetDropDownAll(); 42 BX.bind(window, 'resize', BX.proxy(this.resetDropDownAll, this)); 43 44 this.checkCatalogMenuTop(); 45 BX.bind(window, 'resize', BX.proxy(this.checkCatalogMenuTop, this)); 46 BX.bind(window, 'scroll', BX.proxy(this.checkCatalogMenuTop, this)); 47 }, 48 49 adjustCatalogMenu: function() { 50 if(window.innerWidth >= 992) { 51 if(!!this.catalogMenuMoved) { 52 var insertNode = document.body.querySelector(this.catalogMenuInside ? '.top-panel__catalog-menu' : '.catalog-menu-wrapper'); 53 if(!!insertNode) { 54 insertNode.appendChild(this.catalogMenu); 55 this.catalogMenuMoved = false; 56 57 this.resetCatalogMenu(); 58 59 $(this.catalogMenu).moreMenu(); 60 } 61 } 62 63 if(!!this.menuIcon) 64 BX.unbind(this.menuIcon, 'click', BX.proxy(this.showHideCatalogMenu, this)); 65 66 BX.unbind(document, 'click', BX.proxy(this.checkDropDownMenu, this)); 67 BX.unbind(document, 'keydown', BX.proxy(this.checkDropDownMenuKeydown, this)); 68 } else { 69 if(!this.catalogMenuMoved) { 70 var insertNode = document.body.querySelector('.page-wrapper'); 71 if(!!insertNode) { 72 insertNode.appendChild(this.catalogMenu); 73 this.catalogMenuMoved = true; 74 75 $(this.catalogMenu).moreMenu({'undo': true}); 76 77 this.adjustMainMenu(); 78 79 $(this.catalogMenu).scrollbar({ 80 disableBodyScroll: true 81 }); 82 if(BX.hasClass(this.catalogMenu.parentNode, 'scroll-wrapper')) 83 this.catalogMenu = this.catalogMenu.parentNode; 84 85 if(this.catalogMenuSetActive) 86 this.setCatalogMenuActive(); 87 } 88 } 89 90 if(!!this.menuIcon) 91 BX.bind(this.menuIcon, 'click', BX.proxy(this.showHideCatalogMenu, this)); 92 93 BX.bind(document, 'click', BX.proxy(this.checkDropDownMenu, this)); 94 BX.bind(document, 'keydown', BX.proxy(this.checkDropDownMenuKeydown, this)); 95 } 96 }, 97 98 resetDropDownAll: function() { 99 var dropDownAll = this.catalogMenu.querySelectorAll('[data-entity="dropdown"]'); 100 if(!!dropDownAll) { 101 for(var i in dropDownAll) { 102 if(dropDownAll.hasOwnProperty(i)) { 103 if(!BX.hasClass(dropDownAll[i], 'more')) 104 this.hoverIntentLi(dropDownAll[i]); 105 else 106 this.hoverIntentLiMore(dropDownAll[i]); 107 } 108 } 109 } 110 }, 111 112 hoverIntentLi: function(item) { 113 $(item).hoverIntent({ 114 over: function() { 115 BX.addClass(this, 'hover'); 116 if(window.innerWidth >= 992) { 117 var parentMenu = BX.findParent(this, {attrs: {'data-entity': 'dropdown-menu'}}); 118 if(!!parentMenu && BX.hasClass(parentMenu, 'catalog-menu')) { 119 var dropDownMenu = this.querySelector('[data-entity="dropdown-menu"]'); 120 if(!!dropDownMenu) { 121 BX.style(dropDownMenu, 'left', '0'); 122 new BX.easing({ 123 duration: 150, 124 start: {opacity: 0}, 125 finish: {opacity: 100}, 126 transition: BX.easing.transitions.linear, 127 step: function(state) { 128 dropDownMenu.style.opacity = state.opacity / 100; 129 } 130 }).animate(); 131 } 132 } 133 } 134 }, 135 out: function() { 136 BX.removeClass(this, 'hover'); 137 if(window.innerWidth >= 992) { 138 var parentMenu = BX.findParent(this, {attrs: {'data-entity': 'dropdown-menu'}}); 139 if(!!parentMenu && BX.hasClass(parentMenu, 'catalog-menu')) { 140 var dropDownMenu = this.querySelector('[data-entity="dropdown-menu"]'); 141 if(!!dropDownMenu) { 142 new BX.easing({ 143 duration: 150, 144 start: {opacity: 100}, 145 finish: {opacity: 0}, 146 transition: BX.easing.transitions.linear, 147 step: function(state){ 148 dropDownMenu.style.opacity = state.opacity / 100; 149 }, 150 complete: function() { 151 BX.style(dropDownMenu, 'left', ''); 152 } 153 }).animate(); 154 } 155 } 156 } 157 }, 158 timeout: 200 159 }); 160 }, 161 162 hoverIntentLiMore: function(item) { 163 $(item).hoverIntent({ 164 over: function() { 165 BX.addClass(this, 'hover'); 166 if(window.innerWidth >= 992) { 167 var parentMenu = BX.findParent(this, {attrs: {'data-entity': 'dropdown-menu'}}); 168 if(!!parentMenu && BX.hasClass(parentMenu, 'catalog-menu')) { 169 var dropDownMenu = this.querySelector('[data-entity="dropdown-menu"]'); 170 if(!!dropDownMenu) { 171 BX.style(dropDownMenu, 'left', 'auto'); 172 if(this.getBoundingClientRect().left + dropDownMenu.offsetWidth > document.body.clientWidth) 173 BX.style(dropDownMenu, 'right', '0'); 174 175 new BX.easing({ 176 duration: 150, 177 start: {opacity: 0}, 178 finish: {opacity: 100}, 179 transition: BX.easing.transitions.linear, 180 step: function(state) { 181 dropDownMenu.style.opacity = state.opacity / 100; 182 } 183 }).animate(); 184 } 185 } 186 } 187 }, 188 out: function() { 189 BX.removeClass(this, 'hover'); 190 if(window.innerWidth >= 992) { 191 var parentMenu = BX.findParent(this, {attrs: {'data-entity': 'dropdown-menu'}}); 192 if(!!parentMenu && BX.hasClass(parentMenu, 'catalog-menu')) { 193 var dropDownMenu = this.querySelector('[data-entity="dropdown-menu"]'); 194 if(!!dropDownMenu) { 195 new BX.easing({ 196 duration: 150, 197 start: {opacity: 100}, 198 finish: {opacity: 0}, 199 transition: BX.easing.transitions.linear, 200 step: function(state){ 201 dropDownMenu.style.opacity = state.opacity / 100; 202 }, 203 complete: function() { 204 BX.style(dropDownMenu, 'left', ''); 205 BX.style(dropDownMenu, 'right', ''); 206 } 207 }).animate(); 208 } 209 } 210 } 211 }, 212 timeout: 200 213 }); 214 }, 215 216 resetCatalogMenu: function() { 217 if(BX.hasClass(this.catalogMenu, 'scroll-wrapper')) { 218 var catalogMenu = this.catalogMenu.querySelector('.scroll-content'); 219 if(!!catalogMenu) { 220 $(catalogMenu).scrollbar('destroy'); 221 this.catalogMenu = catalogMenu; 222 } 223 } 224 225 if(BX.hasClass(this.catalogMenu, 'active')) { 226 BX.removeClass(this.catalogMenu, 'active'); 227 BX.removeClass(document.body, 'slide-menu-option-1-active'); 228 } 229 230 var dropDownMenuAll = this.catalogMenu.querySelectorAll('[data-entity="dropdown-menu"]'); 231 if(!!dropDownMenuAll) { 232 for(var i in dropDownMenuAll) { 233 if(dropDownMenuAll.hasOwnProperty(i)) { 234 BX.style(dropDownMenuAll[i], 'top', ''); 235 BX.style(dropDownMenuAll[i], 'bottom', ''); 236 237 if(BX.hasClass(dropDownMenuAll[i], 'active')) 238 BX.removeClass(dropDownMenuAll[i], 'active'); 239 240 if(BX.hasClass(dropDownMenuAll[i], 'scroll-content')) 241 $(dropDownMenuAll[i]).scrollbar('destroy'); 242 } 243 } 244 } 245 246 var mainMenu = this.catalogMenu.querySelector('[data-role="mainMenu"]'); 247 if(!!mainMenu) 248 BX.remove(mainMenu); 249 }, 250 251 checkCatalogMenuTop: function() { 252 var topPanelThead = document.body.querySelector('.top-panel__thead'); 253 254 if(window.innerWidth < 992) { 255 if(!!topPanelThead) 256 BX.style(this.catalogMenu, 'top', topPanelThead.getBoundingClientRect().top + topPanelThead.offsetHeight + 'px'); 257 } else { 258 BX.style(this.catalogMenu, 'top', ''); 259 } 260 }, 261 262 adjustMainMenu: function() { 263 var topMenu = document.body.querySelector('.horizontal-multilevel-menu'), 264 mainMenu = !!topMenu && BX.clone(topMenu); 265 266 if(!!mainMenu) { 267 var mainMenuLiAll = BX.findChild(mainMenu, {tagName: 'LI'}, true, true); 268 if(!!mainMenuLiAll) { 269 for(var i in mainMenuLiAll) { 270 if(mainMenuLiAll.hasOwnProperty(i)) { 271 var mainMenuLiA = BX.findChild(mainMenuLiAll[i], {tagName: 'A'}, false, false); 272 if(!!mainMenuLiA) { 273 BX.adjust(mainMenuLiA, { 274 html: '<span class="catalog-menu-text">' + mainMenuLiA.innerText + '</span>' 275 }); 276 if(mainMenuLiAll[i].getAttribute('data-entity') == 'dropdown') { 277 mainMenuLiA.appendChild(BX.create('SPAN', { 278 props: { 279 className: 'catalog-menu-arrow' 280 }, 281 children: [ 282 BX.create('I', { 283 props: { 284 className: 'icon-arrow-right' 285 } 286 }) 287 ] 288 })); 289 } 290 291 var dropDownMenuTitle = BX.create('LI', { 292 attrs: { 293 'data-entity': 'title' 294 }, 295 children: [ 296 BX.create('I', { 297 props: { 298 className: 'icon-arrow-left catalog-menu-back' 299 } 300 }), 301 BX.create('SPAN', { 302 props: { 303 className: 'catalog-menu-title' 304 }, 305 html: mainMenuLiA.innerText 306 }), 307 BX.create('I', { 308 props: { 309 className: 'icon-close catalog-menu-close' 310 } 311 }) 312 ] 313 }); 314 } 315 316 var dropDownMenu = mainMenuLiAll[i].querySelector('[data-entity="dropdown-menu"]'); 317 if(!!dropDownMenu) { 318 if(!!dropDownMenuTitle) 319 BX.prepend(dropDownMenuTitle, dropDownMenu); 320 321 BX.adjust(dropDownMenu, { 322 props: { 323 className: '' 324 }, 325 attrs: { 326 'data-entity': '' 327 } 328 }); 329 330 var dropDownMenuContainer = BX.create('DIV', { 331 props: { 332 className: 'catalog-menu-dropdown-menu scrollbar-inner' 333 }, 334 attrs: { 335 'data-entity': 'dropdown-menu' 336 } 337 }); 338 dropDownMenuContainer.appendChild(dropDownMenu); 339 340 BX.append(dropDownMenuContainer, mainMenuLiAll[i]); 341 } 342 } 343 } 344 } 345 346 BX.prepend(BX.create('LI', { 347 attrs: { 348 'data-entity': 'title' 349 }, 350 children: [ 351 BX.create('I', { 352 props: { 353 className: 'icon-arrow-left catalog-menu-back' 354 } 355 }), 356 BX.create('SPAN', { 357 props: { 358 className: 'catalog-menu-title' 359 }, 360 html: BX.message('MAIN_MENU') 361 }), 362 BX.create('I', { 363 props: { 364 className: 'icon-close catalog-menu-close' 365 } 366 }) 367 ] 368 }), mainMenu); 369 370 BX.adjust(mainMenu, { 371 props: { 372 className: '' 373 }, 374 attrs: { 375 'id': '', 376 'data-entity': '' 377 } 378 }); 379 380 var mainMenuContainer = BX.create('DIV', { 381 props: { 382 className: 'catalog-menu-dropdown-menu scrollbar-inner' 383 }, 384 attrs: { 385 'data-entity': 'dropdown-menu' 386 } 387 }); 388 mainMenuContainer.appendChild(mainMenu); 389 390 var mainMenuLi = BX.create('LI', { 391 attrs: { 392 'data-entity': 'dropdown', 393 'data-role': 'mainMenu' 394 }, 395 children: [ 396 BX.create('A', { 397 attrs: { 398 'href': 'javascript:void(0);' 399 }, 400 children: [ 401 BX.create('SPAN', { 402 props: { 403 className: 'catalog-menu-pic' 404 }, 405 children: [ 406 BX.create('IMG', { 407 attrs: { 408 'src': '/upload/da-team/icons_new/contacts.png' 409 }, 410 }) 411 ] 412 }), 413 BX.create('SPAN', { 414 props: { 415 className: 'catalog-menu-text' 416 }, 417 html: BX.message('MAIN_MENU') 418 }), 419 BX.create('SPAN', { 420 props: { 421 className: 'catalog-menu-arrow' 422 }, 423 children: [ 424 BX.create('I', { 425 props: { 426 className: 'icon-arrow-right' 427 } 428 }) 429 ] 430 }) 431 ] 432 }), 433 ] 434 }); 435 mainMenuLi.appendChild(mainMenuContainer); 436 437 var subMenuAll = mainMenuLi.querySelectorAll('[data-entity="dropdown-menu"]'); 438 if(!!subMenuAll) { 439 for(var i in subMenuAll) { 440 if(subMenuAll.hasOwnProperty(i)) { 441 var subMenuLiActive = subMenuAll[i].querySelector('.active'); 442 if(!!subMenuLiActive) { 443 var parentMenuLi = BX.findParent(subMenuAll[i], {tagName: 'LI'}); 444 if(!!parentMenuLi) 445 BX.addClass(parentMenuLi, 'active'); 446 } 447 } 448 } 449 } 450 451 BX.prepend(mainMenuLi, this.catalogMenu); 452 } 453 }, 454 455 setCatalogMenuActive: function() { 456 var catalogMenuLiActiveAll = BX.findChild(this.catalogMenu, {tagName: 'li', className: 'active'}, true, true); 457 if(!!catalogMenuLiActiveAll) { 458 for(var i in catalogMenuLiActiveAll) { 459 if(catalogMenuLiActiveAll.hasOwnProperty(i)) { 460 var dropDownMenu = catalogMenuLiActiveAll[i].querySelector('[data-entity="dropdown-menu"]'); 461 if(!!dropDownMenu && !BX.hasClass(dropDownMenu, 'active')) 462 BX.addClass(dropDownMenu, 'active'); 463 } 464 } 465 } 466 467 var dropDownMenuActiveAll = BX.findChild(this.catalogMenu, {className: 'active', attrs: {'data-entity': 'dropdown-menu'}}, true, true); 468 if(!!dropDownMenuActiveAll) { 469 var dropDownMenuLastActive = dropDownMenuActiveAll[dropDownMenuActiveAll.length - 1]; 470 if(!!dropDownMenuLastActive) { 471 if(BX.hasClass(this.catalogMenu, 'scroll-wrapper')) { 472 var catalogMenu = this.catalogMenu.querySelector('.scroll-content'); 473 if(!!catalogMenu) { 474 var catalogMenuTop = Math.abs(parseInt(BX.style(catalogMenu.parentNode, 'top'), 10)); 475 if(!!catalogMenuTop && catalogMenuTop > 0) 476 BX.style(catalogMenu, 'top', catalogMenuTop + 'px'); 477 478 catalogMenu.scrollTop = 0; 479 480 $(catalogMenu).scrollbar('destroy'); 481 482 this.catalogMenu = catalogMenu; 483 } 484 } 485 486 if(!BX.hasClass(dropDownMenuLastActive, 'scroll-content')) { 487 $(dropDownMenuLastActive).scrollbar({ 488 disableBodyScroll: true, 489 onInit: function() { 490 if(BX.hasClass(dropDownMenuLastActive, 'active')) 491 BX.removeClass(dropDownMenuLastActive, 'active'); 492 } 493 }); 494 } 495 } 496 } 497 }, 498 499 showHideCatalogMenu: function(event) { 500 if(!BX.hasClass(this.catalogMenu, 'active')) { 501 BX.addClass(this.catalogMenu, 'active'); 502 BX.addClass(document.body, 'slide-menu-option-1-active'); 503 } else { 504 BX.removeClass(this.catalogMenu, 'active'); 505 BX.removeClass(document.body, 'slide-menu-option-1-active'); 506 } 507 event.stopPropagation(); 508 }, 509 510 checkDropDownMenu: function(event) { 511 if(BX.hasClass(this.catalogMenu, 'active')) { 512 var catalogMenuLi = event.target.tagName == 'LI' ? event.target : BX.findParent(event.target, {tagName: 'LI'}); 513 if(!!catalogMenuLi) { 514 if(catalogMenuLi.getAttribute('data-entity') == 'dropdown') { 515 var isCatalogMenuMainMenu = catalogMenuLi.hasAttribute('data-role') && catalogMenuLi.getAttribute('data-role') == 'mainMenu', 516 isCatalogMenuArrow = BX.hasClass(event.target, 'catalog-menu-arrow') || (BX.findParent(event.target, {className: 'catalog-menu-arrow'}) ? true : false); 517 518 if(!!isCatalogMenuMainMenu || this.catalogMenuOpenLast || (!this.catalogMenuOpenLast && !!isCatalogMenuArrow)) { 519 BX.PreventDefault(event); 520 521 var dropDownMenu = catalogMenuLi.querySelector('[data-entity="dropdown-menu"]'); 522 if(!!dropDownMenu) { 523 var parentMenu = BX.findParent(dropDownMenu, {attrs: {'data-entity': 'dropdown-menu'}}); 524 if(!!parentMenu && BX.hasClass(parentMenu, 'scroll-content')) { 525 var parentMenuScrollTop = parentMenu.scrollTop, 526 parentMenuTop = Math.abs(parseInt(BX.style(parentMenu.parentNode, 'top'), 10)), 527 parentMenuBottom = Math.abs(parseInt(BX.style(parentMenu.parentNode, 'bottom'), 10)); 528 529 if(!!parentMenuTop && parentMenuTop > 0) 530 BX.styl
530e(parentMenu, 'top', parentMenuTop + 'px'); 531 532 if(!!parentMenuBottom && parentMenuBottom > 0) 533 BX.style(parentMenu, 'bottom', parentMenuBottom * -1 + 'px'); 534 535 if(BX.hasClass(parentMenu.parentNode, 'active')) 536 BX.addClass(parentMenu, 'active'); 537 538 $(parentMenu).scrollbar('destroy'); 539 540 if(BX.hasClass(parentMenu, 'catalog-menu')) 541 this.catalogMenu = parentMenu; 542 } 543 544 $(dropDownMenu).scrollbar({ 545 disableBodyScroll: true, 546 onInit: function() { 547 dropDownMenu = dropDownMenu.parentNode; 548 if(!!parentMenuScrollTop && parentMenuScrollTop > 0) { 549 BX.style(dropDownMenu, 'top', parentMenuScrollTop + 'px'); 550 BX.style(dropDownMenu, 'bottom', parentMenuScrollTop * -1 + 'px'); 551 } 552 } 553 }); 554 555 new BX.easing({ 556 duration: 300, 557 start: {left: 100}, 558 finish: {left: 0}, 559 transition: BX.easing.transitions.linear, 560 step: function(state) { 561 BX.style(dropDownMenu, 'left', state.left + '%'); 562 }, 563 complete: function() { 564 BX.addClass(dropDownMenu, 'active'); 565 BX.style(dropDownMenu, 'left', ''); 566 } 567 }).animate(); 568 } 569 } 570 } else if(catalogMenuLi.getAttribute('data-entity') == 'title') { 571 var parentMenu = BX.findParent(catalogMenuLi, {attrs: {'data-entity': 'dropdown-menu'}}); 572 if(!!parentMenu) { 573 var parentParentMenu = BX.findParent(parentMenu, {attrs: {'data-entity': 'dropdown-menu'}}); 574 if(!!parentParentMenu) { 575 $(parentParentMenu).scrollbar({ 576 disableBodyScroll: true, 577 onInit: BX.delegate(function() { 578 var parentParentMenuTop = Math.abs(parseInt(BX.style(parentParentMenu, 'top'), 10)); 579 if(!!parentParentMenuTop && parentParentMenuTop > 0) { 580 BX.style(parentParentMenu.parentNode, 'top', parentParentMenuTop + 'px'); 581 BX.style(parentParentMenu, 'top', ''); 582 } 583 584 var parentParentMenuBottom = Math.abs(parseInt(BX.style(parentParentMenu, 'bottom'), 10)); 585 if(!!parentParentMenuBottom && parentParentMenuBottom > 0) { 586 BX.style(parentParentMenu.parentNode, 'bottom', parentParentMenuBottom * -1 + 'px'); 587 BX.style(parentParentMenu, 'bottom', ''); 588 } 589 590 if(BX.hasClass(parentParentMenu, 'active')) 591 BX.removeClass(parentParentMenu, 'active'); 592 593 if(BX.hasClass(parentParentMenu.parentNode, 'catalog-menu')) 594 this.catalogMenu = parentParentMenu.parentNode; 595 }, this) 596 }); 597 } 598 599 if(BX.hasClass(parentMenu, 'scroll-content')) { 600 if(BX.hasClass(parentMenu.parentNode, 'active')) 601 BX.addClass(parentMenu, 'active'); 602 603 $(parentMenu).scrollbar('destroy'); 604 } 605 606 new BX.easing({ 607 duration: 300, 608 start: {left: 0}, 609 finish: {left: 100}, 610 transition: BX.easing.transitions.linear, 611 step: function(state) { 612 BX.style(parentMenu, 'left', state.left + '%'); 613 }, 614 complete: function() { 615 BX.removeClass(parentMenu, 'active'); 616 BX.style(parentMenu, 'left', ''); 617 } 618 }).animate(); 619 } 620 } 621 } 622 event.stopPropagation(); 623 } 624 }, 625 626 checkDropDownMenuKeydown: function(event) { 627 if(BX.hasClass(this.catalogMenu, 'active') && event.keyCode == 27) { 628 BX.removeClass(this.catalogMenu, 'active'); 629 BX.removeClass(document.body, 'slide-menu-option-1-active'); 630 event.stopPropagation(); 631 } 632 } 633 } 634})();
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.