PageSourceSearch

https://www.renotype.com/distsite/styles/8/js/scripts.js

js renotype.com collected 2026-10-07 22:03:54 UTC 19,329 bytes, 570 lines download raw bytes

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">&#8592;</button>
443        <span class="drawer-title" id="drw-title">Menu</span>
444        <button class="drawer-close" id="drw-close" aria-label="Close">&#215;</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.