PageSourceSearch

https://theluxhairbar.com/wp-content/themes/lux-hair-skin-lounge/assets/js/lux-theme.js?ver=2.1.5

js theluxhairbar.com collected 2026-10-09 22:38:25 UTC 4,436 bytes, 45 lines download raw bytes

1document.addEventListener('DOMContentLoaded',function(){
2  const track=document.querySelector('.lux-carousel-track');
3  document.querySelectorAll('[data-carousel]').forEach(function(button){button.addEventListener('click',function(){if(track) track.scrollBy({left:(button.dataset.carousel==='next'?1:-1)*Math.min(track.clientWidth*.82,380),behavior:'smooth'});});});
4  const toggle=document.querySelector('.lux-social-toggle'),panel=document.querySelector('.lux-social-panel'),close=document.querySelector('.lux-social-close');
5  function setSocial(open){if(!panel||!toggle)return;panel.hidden=!open;toggle.setAttribute('aria-expanded',open?'true':'false');}
6  if(toggle)toggle.addEventListener('click',function(){setSocial(panel.hidden);});
7  if(close)close.addEventListener('click',function(){setSocial(false);});
8  document.addEventListener('keydown',function(e){if(e.key==='Escape')setSocial(false);});
9  const reviews=document.querySelector('.lux-reviews');
10  if(reviews&&!reviews.querySelector('.lux-google-widget')){
11    const widget=document.createElement('a');
12    widget.className='lux-google-widget';
13    widget.href='https://share.google/gwzRHGHvj4coZQviJ';
14    widget.target='_blank';
15    widget.rel='noopener';
16    widget.setAttribute('aria-label','Read Lux Hair and Skin Lounge reviews directly on Google');
17    widget.innerHTML='<span class="lux-google-g">G</span><span><b>Google Reviews</b><small>Read client reviews directly on Google</small></span><strong>View Google reviews \u2192</strong>';
18    reviews.appendChild(widget);
19  }
20  const funnel=document.querySelector('[data-lux-funnel]');
21  if(funnel){
22    const answers={texture:'',concern:'',target:''};
23    const showStep=step=>funnel.querySelectorAll('[data-step]').forEach(panel=>panel.classList.toggle('active',panel.dataset.step===String(step)));
24    funnel.querySelectorAll('[data-next]').forEach(button=>button.addEventListener('click',()=>{answers[button.dataset.field]=button.dataset.value;showStep(button.dataset.next);}));
25    const recommendations={
26      'Premium Nanoplastia Smoothing':{name:'Premium Nanoplastia Smoothing',price:'From $192.00+',summary:'A consultation-led smoothing option for clients exploring reduced frizz, greater manageability and a polished finish.'},
27      'Luxury Hair Botox Treatment':{name:'Luxury Hair Botox Treatment',price:'From $144.00+',summary:'A conditioning-focused treatment for clients exploring softer, shinier and healthier-looking movement.'},
28      'Women’s Precision Haircut & Styling':{name:'Women’s Precision Haircut & Styling',price:'From $63.00',summary:'A personalized cut and finish designed around your texture, routine, features and styling preferences.'},
29      'Full Head Colour & Root Refresh':{name:'Full Head Colour & Root Refresh',price:'From $144.00+',summary:'A customized colour service planned around your current shade, hair history, condition and desired result.'}
30    };
31    function calculateLuxResult(recommendedService){
32      answers.target=recommendedService;
33      const result=recommendations[recommendedService]||recommendations['Women’s Precision Haircut & Styling'];
34      const resultPanel=funnel.querySelector('[data-step="result"]');
35      if(!resultPanel)return;
36      resultPanel.innerHTML='<div class="lux-funnel-confirmation"><p class="lux-result-status">Analysis complete</p><h3>Your recommended starting point</h3><strong class="lux-result-service"></strong><span class="lux-result-price"></span><p class="lux-result-summary"></p><p class="lux-result-note">Final suitability, timing and pricing are confirmed with Lux after reviewing your hair history, condition and goals.</p><div class="lux-funnel-result-actions"><a class="lux-button lux-btn-primary" href="https://www.vagaro.com/luxhairbar" target="_blank" rel="noopener noreferrer">Book Your Sunday Slot Now</a><a class="lux-phone lux-result-phone" href="tel:7787004008">Call or Text Studio: (778) 700-4008</a></div></div>';
37      resultPanel.querySelector('.lux-result-service').textContent=result.name;
38      resultPanel.querySelector('.lux-result-price').textContent=result.price;
39      resultPanel.querySelector('.lux-result-summary').textContent=result.summary;
40      showStep('result');
41      resultPanel.querySelector('.lux-button').focus();
42    }
43    funnel.querySelectorAll('[data-result]').forEach(button=>button.addEventListener('click',()=>calculateLuxResult(button.dataset.result)));
44  }
45});

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.