1/* prevent href parent click 2$(document).on('click', '.nav-menu a, .nav-sidebar a', function(e) { 3 if ($(this).siblings('ul').length) { 4 e.preventDefault(); 5 } 6}); */ 7 8 9$(document).scroll(function() { 10 if ($(window).scrollTop() > 0){ 11 $('.header-seven #header-inner').addClass('affix'); 12 // $('.header-seven #top-menu-wrap').hide(); 13 } else { 14 $('.header-seven #header-inner').removeClass('affix'); 15 // $('.header-seven #top-menu-wrap').show(); 16 } 17}); 18 19$(function(){ 20 21 //Cache the dinwos object 22 var $window = $(window); 23 24 // Parallax background effect 25 26 $('section[data-type="background"]').each(function(){ 27 var $bgobj = $(this); // assigning the object 28 29 $(window).scroll(function() { 30 31 32 var yPos = -($window.scrollTop() / $bgobj.data('speed')); 33 34 // Put together our final background position 35 var coords = '50% '+ yPos + 'px'; 36 37 // Move the background 38 $bgobj.css({ backgroundPosition: coords }); 39 }); 40 }); 41 42 43 44}); 45 46 47// Product Owl Carousel 48$(".product-slider").owlCarousel({ 49 items : 5, 50 loop:true, 51 autoplay:false, 52 autoplayTimeout:500, 53 navigation : true, // Show next and prev buttons 54 pagination : false, 55 navigationText : ["<span class='glyphicon glyphicon-chevron-left'></span>","<span class='glyphicon glyphicon-chevron-right'></span>"] 56}); 57 58 59 60 61 62$("#header-flex").hide(); 63 64/* Legacy 65if ($('header').hasClass('sticky-top')) { 66 $(document).scroll(function () { 67 68 var headerHeight = $("#header").height(); 69 70 if ($(window).scrollTop() > 0) { 71 $('header').addClass('fixed'); 72 $("#header-flex").show(); 73 $("#header-flex").css("height", headerHeight); 74 } else { 75 $('header').removeClass('fixed'); 76 $("#header-flex").hide(); 77 } 78 }); 79} 80 81*/ 82/* New sticky */ 83if ($('header').hasClass('sticky-top')) { 84 $(document).scroll(function () { 85 if ($(window).scrollTop() > 0) { 86 $('header').addClass('fixed'); 87 } else { 88 $('header').removeClass('fixed'); 89 } 90 }); 91} 92 93 94$(document).scroll(function() { 95 if ($(window).scrollTop() > 0){ 96 $('#qs-modal').hide(); 97 } 98 }); 99 100 101 102 103// Global Modal Quick Search 104 105$("#qs-modal-btn").click(function(){ 106 $("#qs-modal").fadeToggle(200); 107}); 108 109 110$("#qs-modal-btn-close").click(function(){ 111 $("#qs-modal").fadeOut(200); 112}); 113 114 115//$(document).ready( function() { 116// if ($('#header').hasClass('sticky-top')) { 117// $(".showroom-category-bar").css("margin-top", "250px"); 118// } 119// else { 120// $(".showroom-category-bar").css("margin-top", "0px"); 121// } 122// 123//}); 124 125 126 127//$(document).mouseup(function (e) { 128// var container = $("#qs-modal"); 129// if(!container.is(e.target) && 130// container.has(e.target).length === 0) { 131// container.hide(); 132// } 133// }); 134 135 136// Price Range 137//var price = document.getElementById('price'); 138//noUiSlider.create(price, { 139// start: [20, 80], 140// connect: true, 141// range: { 142// 'min': 0, 143// 'max': 100 144// } 145//}); 146//price.noUiSlider.on('update', function(values, handle) { 147// var value = values[handle]; 148// if (handle) { 149// $('#max-price').text('$' + Math.round(value)); 150// $('input[name="max-price"]').text(Math.round(value)); 151// } else { 152// $('#min-price').text('$' + Math.round(value)); 153// $('input[name="min-price"]').text(Math.round(value)); 154// } 155//}); 156 157function PlayYTVideo(btn) 158{ 159 var wrap = $(btn).parent(); 160 var overlay = wrap.children('.pb-video-ovarlay'); 161 var video = wrap.children('.pb-video'); 162 var src = video.attr('src'); 163 164 // Check if the src already contains a query string 165 var separator = src.includes('?') ? '&' : '?'; 166 167 // Add autoplay parameter to the video URL 168 src += separator + 'autoplay=1'; 169 170 // Hide the button and overlay 171 $(btn).hide(); 172 overlay.hide(); 173 174 // Update the src attribute with autoplay parameter 175 video.attr('src', src); 176} 177 178// Fix anchors with sticky header 179document.addEventListener('click', (e) => { 180 const anchor = e.target.closest('a.pb-btn.button-widget[href^="#"]'); 181 if (!anchor) return; 182 const id = anchor.getAttribute('href').slice(1); 183 if (!id) return; 184 const target = document.getElementById(id); 185 if (!target) return; 186 187 const headerHeight = $('header').hasClass('fixed') ? $('header').height() : 0; 188 189 e.preventDefault(); 190 e.stopPropagation(); 191 window.scrollTo({ 192 top: target.getBoundingClientRect().top + window.scrollY - headerHeight, 193 behavior: 'smooth' 194 }); 195}); 196 197 198// prevent scroll to top 199$(document).on('click', '.primary-nav-link', function(e) { 200 if ($(this).attr('href') === '#') { 201 e.preventDefault(); 202 } 203}); 204 205 206// Primary Nav Desktop 207const DesktopNav = (() => { 208 let navList, moreItem, morePanel, allItems; 209 210 function init(root, data) { 211 navList = root.querySelector('.primary-nav-list'); 212 data.forEach((item, idx) => navList.appendChild(_buildNavItem(item, idx))); 213 moreItem = _buildMoreItem(); 214 navList.appendChild(moreItem); 215 morePanel = moreItem.querySelector('.more-panel'); 216 allItems = [...navList.querySelectorAll(':scope>.primary-nav-item:not(.primary-nav-item--more)')]; 217 setTimeout(_update, 0); 218 let t; 219 window.addEventListener('resize', () => { clearTimeout(t); t = setTimeout(_update, 80); }); 220 //document.addEventListener('mouseenter', _edgeFlip, true); removed edge flip, force with class flip-left 221 } 222 223 function _buildNavItem(item, idx) { 224 const li = document.createElement('li'); 225 li.dataset.navIdx = idx; // stored so More can look up data without text-matching 226 const hasSub = item.groups && item.groups.length; 227 if (item.mega && hasSub) { 228 li.className = 'primary-nav-item primary-nav-item--mega'; 229 li.appendChild(_link(item, true)); 230 li.appendChild(_megaPanel(item.groups, item.image)); 231 } else if (hasSub) { 232 li.className = 'primary-nav-item'; 233 li.appendChild(_link(item, true));
234 li.appendChild(_dropPanel(item.groups)); 235 } else { 236 li.className = 'primary-nav-item'; 237 li.appendChild(_link(item, false)); 238 } 239 return li; 240 } 241 242 function _link(item, caret) { 243 // check for label as parent 244 if (item.type === 'label') { 245 const span = document.createElement('span'); 246 span.className = 'primary-nav-link'; 247 span.innerHTML = item.label + (caret ? ' <span class="caret"><i class="fas fa-chevron-down"></i></span>' : ''); 248 return span; 249 } 250 const a = document.createElement('a'); 251 a.className = 'primary-nav-link'; 252 a.href = item.href; 253 if (item.target) a.target = item.target; 254 a.innerHTML = item.label + (caret ? ' <span class="caret"><i class="fas fa-chevron-down"></i></span>' : ''); 255 return a; 256} 257 258 function _megaPanel(groups) { 259 const panel = document.createElement('div'); 260 panel.className = 'mega-panel'; 261 /*if (groups.length > 5) { 262 panel.classList.add('mega-panel--many'); 263 }*/ 264 const wrap = document.createElement('div'); 265 wrap.className = 'mega-panel-groups'; 266 groups.forEach((g) => { 267 if (g.type === 'spacer') { 268 const spacer = document.createElement('div'); 269 spacer.className = 'mega-group mega-group--spacer'; 270 wrap.appendChild(spacer); 271 return; 272 } 273 const col = document.createElement('div'); 274 col.className = 'mega-group'; 275 if (g.type === 'label') { 276 col.innerHTML = `<span class="mega-group-header">${g.label}</span>`; 277 } else { 278 const hdr = document.createElement('a'); 279 hdr.className = 'mega-group-header'; 280 hdr.href = g.href; 281 if (g.target) hdr.target = g.target; 282 hdr.innerHTML = g.label; 283 col.appendChild(hdr); 284 } 285 const ul = document.createElement('ul'); 286 ul.className = 'mega-group-list'; 287 const items = g.items || []; 288 items.forEach(it => { 289 if (it.type === 'spacer') { 290 ul.innerHTML += `<li class="mega-group-spacer"></li>`; 291 return; 292 } 293 if (it.type === 'label') { 294 ul.innerHTML += `<li class="mega-group-label">${it.label}</li>`; 295 return; 296 } 297 const target = it.target ? `target="${it.target}"` : ''; 298 ul.innerHTML += `<li class="mega-group-item"><a href="${it.href}" ${target}>${it.label}</a></li>`; 299 }); 300 if (g.image) { 301 const inner = document.createElement('div'); 302 inner.className = 'mega-group-inner'; 303 inner.appendChild(ul); 304 const img = document.createElement('img'); 305 img.src = g.image; 306 img.className = 'mega-group-float-img'; 307 inner.appendChild(img); 308 col.appendChild(inner); 309 } else { 310 col.appendChild(ul); 311 } 312 wrap.appendChild(col); 313 }); 314 panel.appendChild(wrap); 315 return panel; 316 } 317 318 319
320 function _dropPanel(groups) { 321 const ul = document.createElement('ul'); 322 ul.className = 'drop-panel'; 323 groups.forEach((g, gi) => { 324 if (gi > 0 && g.items && g.items.length) { 325 ul.innerHTML += `<li><hr style="border:none;border-top:1px solid #eee;margin:4px 0;"></li>`; 326 } 327 if (g.items && g.items.length) { 328 const gTarget = g.target ? `target="${g.target}"` : ''; 329 ul.innerHTML += `<li><a class="drop-section-hdr" href="${g.href}" ${gTarget}>${g.label}</a></li>`; 330 const items = g.items || []; 331 items.forEach(it => { 332 const target = it.target ? `target="${it.target}"` : ''; 333 ul.innerHTML += `<li><a href="${it.href}" ${target}>${it.label}</a></li>`; 334 }); 335 } else { 336 const gTarget = g.target ? `target="${g.target}"` : ''; 337 ul.innerHTML += `<li><a href="${g.href}" ${gTarget}>${g.label}</a></li>`; 338 } 339 }); 340 return ul; 341 } 342 343 function _buildMoreItem() { 344 const li = document.createElement('li'); 345 li.className = 'primary-nav-item primary-nav-item--more'; 346 li.innerHTML = `<a class="primary-nav-link" href="#" onclick="return false">More <span class="caret"><i class="fas fa-chevron-down"></i></span></a><ul class="more-panel"></ul>`; 347 return li; 348 } 349 350 /* Two-pass overflow 351 Pass 1 - measure all items with More hidden; find where they overflow. 352 Pass 2 account for More button's own width; find the final break point. 353 Items from breakAt onward get hidden and added to the More panel. */ 354 function _update() { 355 if (window.innerWidth < 500) return; 356 allItems.forEach(li => li.style.display = ''); 357 moreItem.style.display = 'none'; 358 navList.classList.remove('has-more'); // removed class 359 morePanel.innerHTML = ''; 360 361 const W = navList.offsetWidth - 20; // subtract buffer to tighen center alignment 362 let sum = 0, breakAt = -1; 363 for (let i = 0; i < allItems.length; i++) { 364 sum += allItems[i].offsetWidth; 365 if (sum > W) { breakAt = i; break; } 366 } 367 if (breakAt === -1) return; 368 369 moreItem.style.display = 'flex'; 370 navList.classList.add('has-more'); // added class for nav centered 371 sum = moreItem.offsetWidth; 372 breakAt = allItems.length; 373 for (let i = 0; i < allItems.length; i++) { 374 sum += allItems[i].offsetWidth; 375 if (sum > W) { breakAt = i; break; } 376 } 377 378 allItems.forEach((li, i) => { 379 if (i < breakAt) return; 380 li.style.display = 'none'; 381 const data = NAV[parseInt(li.dataset.navIdx, 10)]; 382 if (data) morePanel.appendChild(_moreRow(data)); 383 }); 384 385 } 386 387 // stacked 388 function _moreRow(item) { 389 const li = document.createElement('li'); 390 li.className = 'more-row'; 391 if (!item.groups || !item.groups.length) { 392 const target = item.target ? `target="${item.target}"` : ''; 393 li.innerHTML = `<a href="${item.href}" ${target}>${item.label}</a>`; 394 return li; 395 } 396 const a = document.createElement('a'); 397 a.href = item.href; 398 if (item.target) a.target = item.target; 399 a.innerHTML = `${item.label}`; 400 li.appendChild(a); 401 item.groups.forEach((g, gi) => { 402 if (gi > 0) { 403 const sep = document.createElement('div'); 404 sep.innerHTML = '<hr class="more-divider">'; 405 li.appendChild(sep); 406 } 407 const hdr = document.createElement('div'); 408 hdr.className = 'more-group-hdr'; 409 const gTarget = g.target ? `target="${g.target}"` : ''; 410 hdr.innerHTML = `<a href="${g.href}" ${gTarget}>${g.label}</a>`; 411 li.appendChild(hdr); 412 const items = g.items || []; 413 items.forEach(it => { 414 const row = document.createElement('div'); 415 row.className = 'more-group-item'; 416 const target = it.target ? `target="${it.target}"` : ''; 417 row.innerHTML = `<a href="${it.href}" ${target}>${it.label}</a>`; 418 li.appendChild(row);
419 }); 420 }); 421 return li; 422} 423return { init }; 424})(); 425 426 427/* Mobile stack draw */ 428const MobileNav = (() => { 429 let overlay, drawer, titleEl, backBtn, viewport, stack = []; 430 431 function init(root, data) { 432 overlay = document.createElement('div'); 433 overlay.className = 'drawer-overlay'; 434 overlay.addEventListener('click', _close); 435 436 drawer = document.createElement('div'); 437 drawer.className = 'drawer'; 438 drawer.setAttribute('aria-hidden','true'); 439 drawer.setAttribute('inert', ''); 440 drawer.innerHTML = ` 441 <div class="drawer-header"> 442 <button class="drawer-back" id="drw-back" aria-label="Back">←</button> 443 <span class="drawer-title" id="drw-title">Menu</span> 444 <button class="drawer-close" id="drw-close" aria-label="Close">×</button> 445 </div> 446 <div class="drawer-viewport" id="drw-viewport"></div>`; 447 448 document.body.appendChild(overlay); 449 document.body.appendChild(drawer); 450 titleEl = drawer.querySelector('#drw-title'); 451 backBtn = drawer.querySelector('#drw-back'); 452 viewport = drawer.querySelector('#drw-viewport'); 453 backBtn.addEventListener('click', _pop); 454 drawer.querySelector('#drw-close').addEventListener('click', _close); 455 document.addEventListener('keydown', e => { if (e.key==='Escape') _close(); }); 456 root.querySelector('.primary-nav-hamburger').addEventListener('click', () => _open(data)); 457 } 458 459 function _open(data) { 460 stack = []; 461 const root = data 462 // remove spacers from mobile menu 463 .filter(d => d.type !== 'spacer') 464 .map(d => ({ 465 label: d.label, href: d.href, target: d.target || null, 466 children: d.groups && d.groups.length 467 ? d.groups 468 .filter(g => g.type !== 'spacer') 469 .map(g => ({ 470 label: g.label, href: g.href, target: g.target || null, 471 children: g.items && g.items.length 472 ? g.items 473 .filter(it => it.type !== 'spacer') 474 .map(it => ({ label: it.label, href: it.href, target: it.target || null, children: null })) 475 : null 476 })) 477 : null 478})); 479 _push('Menu', root, 'none'); 480 overlay.classList.add('is-visible'); 481 requestAnimationFrame(() => { 482 overlay.classList.add('is-open'); 483 drawer.classList.add('is-open'); 484 drawer.removeAttribute('inert'); 485 drawer.setAttribute('aria-hidden', 'false'); 486 }); 487} 488 489 function _close() { 490 overlay.classList.remove('is-open'); 491 drawer.classList.remove('is-open'); 492 drawer.setAttribute('aria-hidden','true'); 493 drawer.setAttribute('inert', ''); 494 setTimeout(() => { overlay.classList.remove('is-visible'); viewport.innerHTML=''; stack=[]; }, 240); 495 } 496 497 function _push(title, items, dir='forward') { 498 const pane = _buildPane(items); 499 if (dir !== 'none') pane.style.transform = dir==='forward' ? 'translateX(100%)' : 'translateX(-100%)'; 500 const cur = viewport.querySelector('.drawer-pane:last-child'); 501 if (cur && dir!=='none') { 502 cur.style.transition = `transform var(--speed) var(--ease)`; 503 cur.style.transform = dir==='forward' ? 'translateX(-100%)' : 'translateX(100%)'; 504 setTimeout(() => cur.remove(), 240); 505 } 506 viewport.appendChild(pane); 507 if (dir !== 'none') requestAnimationFrame(() => requestAnimationFrame(() => { 508 pane.style.transition = `transform var(--speed) var(--ease)`; 509 pane.style.transform = 'translateX(0)'; 510 })); 511 stack.push({ title, items }); 512 titleEl.textContent = title; 513 backBtn.classList.toggle('is-visible', stack.length > 1); 514 } 515 516 function _pop() { 517 if (stack.length <= 1) return; 518 stack.pop(); 519 const prev = stack[stack.length-1]; 520 const cur = viewport.querySelector('.drawer-pane:last-child'); 521 if (cur) { cur.style.transition=`transform var(--speed) var(--ease)`; cur.style.transform='translateX(100%)'; setTimeout(()=>cur.remove(),240); } 522 const prevPane = _buildPane(prev.items); 523 prevPane.style.transform = 'translateX(-100%)'; 524 viewport.appendChild(prevPane); 525 requestAnimationFrame(() => requestAnimationFrame(() => { 526 prevPane.style.transition = `transform var(--speed) var(--ease)`; 527 prevPane.style.transform = 'translateX(0)'; 528 })); 529 titleEl.textContent = prev.title; 530 backBtn.classList.toggle('is-visible', stack.length > 1); 531 } 532 533 function _buildPane(items) { 534 const pane = document.createElement('div'); 535 pane.className = 'drawer-pane'; 536 const ul = document.createElement('ul'); 537 ul.className = 'drawer-list';
538 items.forEach(item => { 539 const li = document.createElement('li'); li.className='drawer-item'; 540 const row = document.createElement('div'); row.className='drawer-row'; 541 const link = document.createElement('a'); link.className='drawer-row-link'; 542 link.href=item.href; 543 if (item.target) link.target = item.target; 544 link.innerHTML=item.label; 545 row.appendChild(link); 546 if (item.children && item.children.length) { 547 const drill = document.createElement('button'); 548 drill.className='drawer-row-drill'; drill.setAttribute('aria-label',`Open ${_stripHtml(item.label)}`); drill.textContent='âº'; 549 drill.addEventListener('click', e => { e.stopPropagation(); _push(_stripHtml(item.label), item.children); }); 550 row.appendChild(drill); 551 if (!item.href || item.href==='#') 552 link.addEventListener('click', e => { e.preventDefault(); _push(_stripHtml(item.label), item.children); }); 553 } 554 li.appendChild(row); ul.appendChild(li); 555 }); 556 pane.appendChild(ul); 557 return pane; 558 } 559 560 function _stripHtml(html) { 561 const tmp = document.createElement('div'); 562 tmp.innerHTML = html; 563 return tmp.textContent || tmp.innerText || ''; 564 } 565 566 return { init }; 567})(); 568 569 570
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.