1 2 3<!DOCTYPE html> 4<html class="no-js" lang="en"> 5 <head> 6 <title>Guitar Wall Hangers, Mounts, Stands, & Racks | Guitar Storage</title> 7 <link rel="dns-prefetch preconnect" href="https://cdn11.bigcommerce.com/s-5r2w8tg1gb" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.googleapis.com/" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.gstatic.com/" crossorigin> 8 <meta name="description" content="String Swing manufactures storage solutions for any guitar, any number of guitars, & any guitarist. Explore our innovative guitar hangers & guitar displays."><link rel='canonical' href='https://www.stringswing.com/shop-all/stringed-instruments/guitar/' /><meta name='platform' content='bigcommerce.stencil' /> 9 10 <link rel="next" href="https://www.stringswing.com/shop-all/stringed-instruments/guitar/?page=2"> 11 12 <meta name="google-site-verification" content="88aPcnKpXQOM7DeF_O-v_VMxC2rRJkM5tg7eVU7fbqc" /> 13 <meta name="google-site-verification" content="lOvPFDlYTEILhuYgZnqP_-xXDAciHoMQTo-7MSWWX3I" /> 14 15 <!-- Start this type of method at 13-Jan-2025 To in process --> 16 <link rel="icon" type="image/x-icon" href="https://www.stringswing.com/product_images/favicon.ico"> 17 <link rel="shortcut icon" href="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/product_images/favicon.jpg"> 18 19 20 21 <meta name="viewport" content="width=device-width, initial-scale=1"> 22 23 <meta name="facebook-domain-verification" content="mcm6d3ubi3mxz24op2xmgspkopa676" /> 24 25
25<script nonce=""> 26 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 27 </script>
27 28 29
29<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js?v=3" type="text/javascript" ></script>
29 30 31 32
32<script nonce=""> 33 function browserSupportsAllFeatures() { 34 return window.Promise 35 && window.fetch 36 && window.URL 37 && window.URLSearchParams 38 && window.WeakMap 39 // object-fit support 40 && ('objectFit' in document.documentElement.style); 41 } 42 43 function loadScript(src) { 44 var js = document.createElement('script'); 45 js.src = src; 46 js.onerror = function () { 47 console.error('Failed to load polyfill script ' + src); 48 }; 49 document.head.appendChild(js); 50 } 51 52 if (!browserSupportsAllFeatures()) { 53 loadScript('https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/theme-bundle.polyfills.js'); 54 } 55</script>
55 56
56<script nonce="">window.consentManagerTranslations = `{"locale":"en","locales":{"consent_manager.data_collection_warning":"en","consent_manager.accept_all_cookies":"en","consent_manager.gdpr_settings":"en","consent_manager.data_collection_preferences":"en","consent_manager.manage_data_collection_preferences":"en","consent_manager.use_data_by_cookies":"en","consent_manager.data_categories_table":"en","consent_manager.allow":"en","consent_manager.accept":"en","consent_manager.deny":"en","consent_manager.dismiss":"en","consent_manager.reject_all":"en","consent_manager.category":"en","consent_manager.purpose":"en","consent_manager.functional_category":"en","consent_manager.functional_purpose":"en","consent_manager.analytics_category":"en","consent_manager.analytics_purpose":"en","consent_manager.targeting_category":"en","consent_manager.advertising_category":"en","consent_manager.advertising_purpose":"en","consent_manager.essential_category":"en","consent_manager.esential_purpose":"en","consent_manager.yes":"en","consent_manager.no":"en","consent_manager.not_available":"en","consent_manager.cancel":"en","consent_manager.save":"en","consent_manager.back_to_preferences":"en","consent_manager.close_without_changes":"en","consent_manager.unsaved_changes":"en","consent_manager.by_using":"en","consent_manager.agree_on_data_collection":"en","consent_manager.change_preferences":"en","consent_manager.cancel_dialog_title":"en","consent_manager.privacy_policy":"en","consent_manager.allow_category_tracking":"en","consent_manager.disallow_category_tracking":"en"},"translations":{"consent_manager.data_collection_warning":"We use cookies (and other similar technologies) to collect data to improve your shopping experience.","consent_manager.accept_all_cookies":"Accept All Cookies","consent_manager.gdpr_settings":"Settings","consent_manager.data_collection_preferences":"Website Data Collection Preferences","consent_manager.manage_data_collection_preferences":"Manage Website Data Collection Preferences","consent_manager.use_data_by_cookies":" uses data collected by cookies and JavaScript libraries to improve your shopping experience.","consent_manager.data_categories_table":"The table below outlines how we use this data by category. To opt out of a category of data collection, select 'No' and save your preferences.","consent_manager.allow":"Allow","consent_manager.accept":"Accept","consent_manager.deny":"Deny","consent_manager.dismiss":"Dismiss","consent_manager.reject_all":"Reject all","consent_manager.category":"Category","consent_manager.purpose":"Purpose","consent_manager.functional_category":"Functional","consent_manager.functional_purpose":"Enables enhanced functionality, such as videos and live chat. If you do not allow these, then some or all of these functions may not work properly.","consent_manager.analytics_category":"Analytics","consent_manager.analytics_purpose":"Provide statistical information on site usage, e.g., web analytics so we can improve this website over time.","consent_manager.targeting_category":"Targeting","consent_manager.advertising_category":"Advertising","consent_manager.advertising_purpose":"Used to create profiles or personalize content to enhance your shopping experience.","consent_manager.essential_category":"Essential","consent_manager.esential_purpose":"Essential for the site and any requested services to work, but do not perform any additional or secondary function.","consent_manager.yes":"Yes","consent_manager.no":"No","consent_manager.not_available":"N/A","consent_manager.cancel":"Cancel","consent_manager.save":"Save","consent_manager.back_to_preferences":"Back to Preferences","consent_manager.close_without_changes":"You have unsaved changes to your data collection preferences. Are you sure you want to close without saving?","consent_manager.unsaved_changes":"You have unsaved changes","consent_manager.by_using":"By using our website, you're agreeing to our","consent_manager.agree_on_data_collection":"By using our website, you're agreeing to the collection of data as described in our ","consent_manager.change_preferences":"You can change your preferences at any time","consent_manager.cancel_dialog_title":"Are you sure you want to cancel?","consent_manager.privacy_policy":"Privacy Policy","consent_manager.allow_category_tracking":"Allow [CATEGORY_NAME] tracking","consent_manager.disallow_category_tracking":"Disallow [CATEGORY_NAME] tracking"}}`;</script>
56 57 58
58<script nonce=""> 59 window.lazySizesConfig = window.lazySizesConfig || {}; 60 window.lazySizesConfig.loadMode = 1; 61 </script>
61 62
62<script nonce="" async src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/theme-bundle.head_async.js"></script>
62 63 64 <link href="https://fonts.googleapis.com/css?family=Montserrat:700,500,400%7CKarla:400&display=block" rel="stylesheet"> 65 66
66<script nonce="" async src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/theme-bundle.font.js"></script>
66 67 68 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/css/theme-1ecdf6a0-3100-013f-bf88-427d0abff2cb.css" rel="stylesheet"> 69 70 <!-- Start Tracking Code for analytics_facebook --> 71
72<script> 73!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js'); 74 75fbq('set', 'autoConfig', 'false', '567723480372508'); 76fbq('dataProcessingOptions', ['LDU'], 0, 0); 77fbq('init', '567723480372508', {"external_id":"68106a8b-69b6-456a-b114-80a129188a3e"}); 78fbq('set', 'agent', 'bigcommerce', '567723480372508'); 79 80function trackEvents() { 81 var pathName = window.location.pathname; 82 83 84 85 // Search events start -- only fire if the shopper lands on the /search.php page 86 if (pathName.indexOf('/search.php') === 0 && getUrlParameter('search_query')) { 87 fbq('trackSingle', '567723480372508', 'Search', { 88 content_type: 'product_group', 89 content_ids: [], 90 search_string: getUrlParameter('search_query') 91 }); 92 } 93 // Search events end 94 95 // Wishlist events start -- only fire if the shopper attempts to add an item to their wishlist 96 if (pathName.indexOf('/wishlist.php') === 0 && getUrlParameter('added_product_id')) { 97 fbq('trackSingle', '567723480372508', 'AddToWishlist', { 98 content_type: 'product_group', 99 content_ids: [] 100 }); 101 } 102 // Wishlist events end 103 104 // Lead events start -- only fire if the shopper subscribes to newsletter 105 if (pathName.indexOf('/subscribe.php') === 0 && getUrlParameter('result') === 'success') { 106 fbq('trackSingle', '567723480372508', 'Lead', {}); 107 } 108 // Lead events end 109 110 // Registration events start -- only fire if the shopper registers an account 111 if (pathName.indexOf('/login.php') === 0 && getUrlParameter('action') === 'account_created') { 112 fbq('trackSingle', '567723480372508', 'CompleteRegistration', {}, ""); 113 } 114 // Registration events end 115 116 117 118 function getUrlParameter(name) { 119 var cleanName = name.replace(/[\[]/, '\[').replace(/[\]]/, '\]'); 120 var regex = new RegExp('[\?&]' + cleanName + '=([^&#]*)'); 121 var results = regex.exec(window.location.search); 122 return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); 123 } 124} 125 126if (window.addEventListener) { 127 window.addEventListener("load", trackEvents, false) 128} 129</script>
129 130<noscript><img height="1" width="1" style="display:none" alt="null" src="https://www.facebook.com/tr?id=567723480372508&ev=PageView&noscript=1&a=plbigcommerce1.2&eid="/></noscript> 131 132<!-- End Tracking Code for analytics_facebook --> 133 134<!-- Start Tracking Code for analytics_googleanalytics4 --> 135
136<script data-cfasync="false" src="https://cdn11.bigcommerce.com/shared/js/google_analytics4_bodl_subscribers-358423becf5d870b8b603a81de597c10f6bc7699.js" integrity="sha256-gtOfJ3Avc1pEE/hx6SKj/96cca7JvfqllWA9FTQJyfI=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 136
136
137<script data-cfasync="false"> 138 (function () { 139 window.dataLayer = window.dataLayer || []; 140 141 function gtag(){ 142 dataLayer.push(arguments); 143 } 144 145 function initGA4(event) { 146 function setupGtag() { 147 function configureGtag() { 148 gtag('js', new Date()); 149 gtag('set', 'developer_id.dMjk3Nj', true); 150 gtag('config', 'G-QBGB93N37G'); 151 } 152 153 var script = document.createElement('script'); 154 155 script.src = 'https://www.googletagmanager.com/gtag/js?id=G-QBGB93N37G'; 156 script.async = true; 157 script.onload = configureGtag; 158 159 document.head.appendChild(script); 160 } 161 162 setupGtag(); 163 164 if (typeof subscribeOnBodlEvents === 'function') { 165 subscribeOnBodlEvents('G-QBGB93N37G', false); 166 } 167 168 window.removeEventListener(event.type, initGA4); 169 } 170 171 172 173 var eventName = document.readyState === 'complete' ? 'consentScriptsLoaded' : 'DOMContentLoaded'; 174 window.addEventListener(eventName, initGA4, false); 175 })() 176</script>
176 177 178<!-- End Tracking Code for analytics_googleanalytics4 --> 179 180<!-- Start Tracking Code for analytics_siteverification -->
vendor: 65 bytes, lines 180-182
180 181 182<script async src="https://www.googletagmanager.com/gtag/js?id=
182UA-147015641-2
vendor: 12 bytes, line 182
182"></script>
183<script> 184
vendor: 134 bytes, lines 184-188
184window.dataLayer = window.dataLayer || []; 185 function gtag(){dataLayer.push(arguments);} 186 gtag('js', new Date()); 187 188 gtag('config', '
188UA-147015641-2
vendor: 6 bytes, lines 188-189
188'); 189
189gtag('config', 'AW-869051340'); 190 191function trackEcommerce() { 192 function gaAddTrans(orderID, store, total, tax, shipping, city, state, country, currency, channelInfo) { 193 var transaction = { 194 id: orderID, 195 affiliation: store, 196 revenue: total, 197 tax: tax, 198 shipping: shipping, 199 city: city, 200 state: state, 201 country: country 202 }; 203 204 if (currency) { 205 transaction.currency = currency; 206 } 207 208 ga('ecommerce:addTransaction', transaction); 209 } 210 211 function gaAddItems(orderID, sku, product, variation, price, qty) { 212 ga('ecommerce:addItem', { 213 id: orderID, 214 sku: sku, 215 name: product, 216 category: variation, 217 price: price, 218 quantity: qty 219 }); 220 } 221 222 function gaTrackTrans() { 223 ga('ecommerce:send'); 224 } 225 226 function gtagAddTrans(orderID, store, total, tax, shipping, city, state, country, currency, channelInfo) { 227 this.transaction = { 228 transaction_id: orderID, 229 affiliation: store, 230 value: total, 231 tax: tax, 232 shipping: shipping, 233 items: [] 234 }; 235 236 if (currency) { 237 this.transaction.currency = currency; 238 } 239 } 240 241 function gtagAddItem(orderID, sku, product, variation, price, qty) { 242 this.transaction.items.push({ 243 id: sku, 244 name: product, 245 category: variation, 246 price: price, 247 quantity: qty 248 }); 249 } 250 251 function gtagTrackTrans() { 252 gtag('event', 'purchase', this.transaction); 253 gtag('event', 'conversion', { 254 'send_to': 'AW-869051340', 255 'value': this.transaction.value, 256 'transaction_id': this.transaction.transaction_id, 257 }); 258 this.transaction = null; 259 } 260 261 if (typeof gtag === 'function') { 262 this._addTrans = gtagAddTrans; 263 this._addItem = gtagAddItem; 264 this._trackTrans = gtagTrackTrans; 265 } else if (typeof ga === 'function') { 266 this._addTrans = gaAddTrans; 267 this._addItem = gaAddItems; 268 this._trackTrans = gaTrackTrans; 269 } 270} 271 272var pageTracker = new trackEcommerce(); 273</script>
273 274 275<!-- End Tracking Code for analytics_siteverification --> 276 277
278<script type="text/javascript" src="https://checkout-sdk.bigcommerce.com/v1/loader.js" defer ></script>
vendor: 1 bytes, line 278
278
279<script type="text/javascript"> 280fbq('trackSingle', '567723480372508', 'ViewCategory', {"content_ids":["473","411","322","483","478","475","366","474","354","329","439"],"content_type":"product_group","content_category":"Guitar"}); 281</script>
vendor: 1 bytes, line 281
281
282<script type="text/javascript"> 283var BCData = {}; 284</script>
vendor: 1 bytes, line 284
284
285<script src='https://cdn-redirector.glopal.com/common/js/webinterpret-loader.js?bigcommerce_store_hash=5r2w8tg1gb' async></script>
285<script>var _d_site = _d_site || '130EB3698DB2035BC86AD337';</script>
285<!-- Hotjar Tracking Code for https://www.stringswing.com/ -->
286<script>
vendor: 125 bytes, lines 286-289
286 287 (function(h,o,t,j,a,r){ 288 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 289 h._hjSettings={hjid:
2892681667
vendor: 258 bytes, lines 289-294
289,hjsv:6}; 290 a=o.getElementsByTagName('head')[0]; 291 r=o.createElement('script');r.async=1; 292 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 293 a.appendChild(r); 294 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
295</script>
295<script async defer src="https://tools.luckyorange.com/core/lo.js?site-id=f6c59d6f"></script>
295<!-- Begin: Northbeam pixel -->
296<script>// async type="text/javascript" src="//j.northbeam.io/ota-sp/4e89b810-838d-41dc-ad3f-d1aacb33c3fd.js"></script>
296 297<!-- End: Northbeam pixel --> 298 299<!-- Begin: Northbeam pixel -->
300<script>(function(){var r;(n=r=r||{}).A="identify",n.B="trackPageView",n.C="fireEmailCaptureEvent",n.D="fireCustomGoal",n.E="firePurchaseEvent";var n="//j.northbeam.io/ota-sp/4e89b810-838d-41dc-ad3f-d1aacb33c3fd.js";function t(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];a.push({fnName:n,args:e})}var a=[],e=((e={_q:a})[r.A]=function(n,e){return t(r.A,n,e)},e[r.B]=function(){return t(r.B)},e[r.C]=function(n,e){return t(r.C,n,e)},e[r.D]=function(n,e){return t(r.D,n,e)},e[r.E]=function(n){return t(r.E,n)},window.Northbeam=e,document.createElement("script"));e.async=!0,e.src=n,document.head.appendChild(e);})()</script>
300 301<!-- End: Northbeam pixel -->
301<script> 302function z_getParameterByName(name) { 303 name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 304 var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), 305 results = regex.exec(location.search); 306 return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 307} 308 309if(z_getParameterByName("adid") !== "gshopping"){ 310 var head= document.getElementsByTagName('head')[0]; 311 var script= document.createElement('script'); 312 script.type= 'text/javascript'; 313 script.src= 'https://hello.zonos.com/hello.js?siteKey=1G242Z618CXDS'; 314 head.appendChild(script); 315} 316</script>
316<script type="text/javascript" src="https://appdevelopergroup.co/apps/bc_smartbar/js/smartbar.js?shop=04bf39fdfc62786cd897caa0ce4b3749"></script>
316<!-- Google Tag Manager -->
317<script>
vendor: 327 bytes, lines 317-321
317(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 318new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 319j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 320'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 321})(window,document,'script','dataLayer','
321GTM-W434G2T
vendor: 3 bytes, line 321
321');
321</script>
321 322<!-- End Google Tag Manager -->
322<script src="https://us1-config.doofinder.com/2.x/e7f58881-2a64-4f14-9f3b-c304e50628f3.js" async></script>
322<script> 323var b2bHideBodyStyle = document.createElement('style'); 324b2bHideBodyStyle.id = 'b2b-account-page-hide-body'; 325 const removeCart = () => { 326 const style = document.createElement('style'); 327 style.type = 'text/css'; 328 style.id = 'b2bPermissions-cartElement-id' 329 style.innerHTML='[href="/cart.php"], #form-action-addToCart, [data-button-type="add-cart"], .button--cardAdd, .card-figcaption-button, [data-emthemesmodez-cart-item-add], .add-to-cart-button { display: none !important }' 330 document.getElementsByTagName('head').item(0).appendChild(style); 331 } 332 removeCart() 333</script>
333<script>/* >> Heatmap.com :: Snippet << */(function (h,e,a,t,m,ap) { (h._heatmap_paq = []).push([ 'setTrackerUrl', (h.heatUrl = e) + a]); h.hErrorLogs=h.hErrorLogs || []; ap=t.createElement('script'); ap.src=h.heatUrl+'preprocessor.min.js?sid='+m; ap.defer=true; t.head.appendChild(ap); ['error', 'unhandledrejection'].forEach(function (ty) { h.addEventListener(ty, function (et) { h.hErrorLogs.push({ type: ty, event: et }); }); });})(window,'https://dashboard.heatmap.com/','heatmap.php',document,6164);</script>
333<script nonce=""> 334if(typeof fbq === 'function') { 335 fbq('trackSingle', '567723480372508', 'PageView', {}, {"eventID":"b6168f79-e068-472c-9d38-88473e11a03b"}); 336} else if (typeof window.addEventListener === 'function') { 337 window.addEventListener("load", function() { fbq('trackSingle', '567723480372508', 'PageView', {}, {"eventID":"b6168f79-e068-472c-9d38-88473e11a03b"}); }, false) 338} 339</script>
339 340
340<script data-cfasync="false" src="https://microapps.bigcommerce.com/bodl-events/1.9.4/index.js" integrity="sha256-Y0tDj1qsyiKBRibKllwV0ZJ1aFlGYaHHGl/oUFoXJ7Y=" nonce="" crossorigin="anonymous"></script>
340 341
341<script data-cfasync="false" nonce=""> 342 343 (function() { 344 function decodeBase64(base64) { 345 const text = atob(base64); 346 const length = text.length; 347 const bytes = new Uint8Array(length); 348 for (let i = 0; i < length; i++) { 349 bytes[i] = text.charCodeAt(i); 350 } 351 const decoder = new TextDecoder(); 352 return decoder.decode(bytes); 353 } 354 window.bodl = JSON.parse(decodeBase64("eyJzZXNzaW9uIjp7ImlkIjoiMzk4NDAzYTItZmM2MC00YjYwLWI2ZDgtM2EzZjc5ZTBmOGIzIiwiZmlyc3RfdG91Y2hfdGltZXN0YW1wIjoiMjAyNi0wOS0yNlQxNjo0ODoyNiIsImZpcnN0X3RvdWNoX3JlZmVycmFsX3VybCI6IiIsImZpcnN0X3RvdWNoX3JlcXVlc3RfdXJsIjoiaHR0cHM6Ly93d3cuc3RyaW5nc3dpbmcuY29tL3Nob3AtYWxsL3N0cmluZ2VkLWluc3RydW1lbnRzL2d1aXRhci8ifSwic2hvcHBlciI6eyJ2aXNpdG9yX2lkIjoiIiwiY3VzdG9tZXJfaWQiOm51bGwsImVtYWlsIjpudWxsLCJmaXJzdF9uYW1lIjpudWxsLCJsYXN0X25hbWUiOm51bGx9LCJkYXRhX2NvbnNlbnQiOnsiZnVuY3Rpb25hbCI6dHJ1ZSwiYW5hbHl0aWNzIjp0cnVlLCJhZHZlcnRpc2luZyI6dHJ1ZX0sImV2ZW50cyI6W3siYm9kbF92MV9wcm9kdWN0X2NhdGVnb3J5X3ZpZXdlZCI6eyJldmVudF9pZCI6ImVhMzI3MTU3LWQwODYtNDY2Ni1iOTUwLTU0OWI3MTliMDUxMyIsImNoYW5uZWxfaWQiOjEsImNhdGVnb3J5X2lkIjo2MSwiY2F0ZWdvcnlfbmFtZSI6Ikd1aXRhciIsImxpbmVfaXRlbXMiOlt7InByb2R1Y3RfaWQiOiI0NzMiLCJza3UiOiJTVzEwUkwtSyIsInZhcmlhbnRfaWQiOm51bGwsInByb2R1Y3RfbmFtZSI6Ikd1aXRhciBXYWxsIFJhY2sgZm9yIDEwIEd1aXRhcnMiLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjozNDcuNzgsInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6NDE3LjM0LCJxdWFudGl0eSI6bnVsbCwiZGlzY291bnQiOjY5LjU2LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6MCwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiNDExIiwic2t1IjoiU1c1UkwtSyIsInZhcmlhbnRfaWQiOm51bGwsInByb2R1Y3RfbmFtZSI6Ik11bHRpcGxlIEd1aXRhciBXYWxsIFJhY2siLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjoxNzMuODksInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MjA4LjY3LCJxdWFudGl0eSI6bnVsbCwiZGlzY291bnQiOjM0Ljc4LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6MSwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiMzIyIiwic2t1IjoiQ0MwMUsuIiwidmFyaWFudF9pZCI6bnVsbCwicHJvZHVjdF9uYW1lIjoiV29vZGVuIEd1aXRhciBXYWxsIE1vdW50IiwiZ2lmdF9jZXJ0aWZpY2F0ZV9pZCI6bnVsbCwiZ2lmdF9jZXJ0aWZpY2F0ZV9uYW1lIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX3RoZW1lIjpudWxsLCJwdXJjaGFzZV9wcmljZSI6MTguOTksInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MjIuNzksInF1YW50aXR5IjpudWxsLCJkaXNjb3VudCI6My44LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6MiwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiNDgzIiwic2t1IjoiUExVU0hDUkFETEVDT1ZFUiIsInZhcmlhbnRfaWQiOm51bGwsInByb2R1Y3RfbmFtZSI6IlBsdXNoIENyYWRsZSBDb3ZlciBmb3IgTml0cm8gU2FmZSBHdWl0YXIgSGFuZ2VyIiwiZ2lmdF9jZXJ0aWZpY2F0ZV9pZCI6bnVsbCwiZ2lmdF9jZXJ0aWZpY2F0ZV9uYW1lIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX3RoZW1lIjpudWxsLCJwdXJjaGFzZV9wcmljZSI6MTguOTksInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MjIuNzksInF1YW50aXR5IjpudWxsLCJkaXNjb3VudCI6My44LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6MywiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiNDc4Iiwic2t1IjpudWxsLCJ2YXJpYW50X2lkIjpudWxsLCJwcm9kdWN0X25hbWUiOiJHdWl0YXIgUmFjayBmb3IgMyBHdWl0YXJzIiwiZ2lmdF9jZXJ0aWZpY2F0ZV9pZCI6bnVsbCwiZ2lmdF9jZXJ0aWZpY2F0ZV9uYW1lIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX3RoZW1lIjpudWxsLCJwdXJjaGFzZV9wcmljZSI6OTUuOTQsInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MTE1LjEzLCJxdWFudGl0eSI6bnVsbCwiZGlzY291bnQiOjE5LjE5LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6NCwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiNDc1Iiwic2t1IjpudWxsLCJ2YXJpYW50X2lkIjpudWxsLCJwcm9kdWN0X25hbWUiOiJHdWl0YXIgYW5kIEd1aXRhciBDYXNlIFN0b3JhZ2UgUmFjayBTZXQiLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjoyNTEuOTgsInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6bnVsbCwicXVhbnRpdHkiOm51bGwsImRpc2NvdW50IjpudWxsLCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6NSwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sIm
354N1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiMzY2Iiwic2t1IjoiQ0MzNC4iLCJ2YXJpYW50X2lkIjpudWxsLCJwcm9kdWN0X25hbWUiOiJXb29kZW4gR3VpdGFyIFN0YW5kIFJhY2siLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjoxNDIuOTksInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MjI5LjE5LCJxdWFudGl0eSI6bnVsbCwiZGlzY291bnQiOjg2LjIsImNvdXBvbl9hbW91bnQiOm51bGwsImluZGV4Ijo2LCJicmFuZF9uYW1lIjpudWxsLCJjYXRlZ29yeV9uYW1lcyI6WyJHdWl0YXIiXSwiY3VycmVuY3kiOiJVU0QifSx7InByb2R1Y3RfaWQiOiI0NzQiLCJza3UiOm51bGwsInZhcmlhbnRfaWQiOm51bGwsInByb2R1Y3RfbmFtZSI6IkRvdWJsZSBHdWl0YXIgU3RhbmQgUmFjayBCdW5kbGUiLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjoyODUuOTgsInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6bnVsbCwicXVhbnRpdHkiOm51bGwsImRpc2NvdW50IjpudWxsLCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6NywiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiMzU0Iiwic2t1IjoiQ0MyOS4iLCJ2YXJpYW50X2lkIjpudWxsLCJwcm9kdWN0X25hbWUiOiJHdWl0YXIgQ2FzZSBSYWNrIFN0YW5kIiwiZ2lmdF9jZXJ0aWZpY2F0ZV9pZCI6bnVsbCwiZ2lmdF9jZXJ0aWZpY2F0ZV9uYW1lIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX3RoZW1lIjpudWxsLCJwdXJjaGFzZV9wcmljZSI6MTA4Ljk5LCJzYWxlX3ByaWNlIjpudWxsLCJiYXNlX3ByaWNlIjpudWxsLCJyZXRhaWxfcHJpY2UiOjE5MS45OSwicXVhbnRpdHkiOm51bGwsImRpc2NvdW50Ijo4My4wLCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6OCwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiMzI5Iiwic2t1IjoiQ0MwMS4iLCJ2YXJpYW50X2lkIjpudWxsLCJwcm9kdWN0X25hbWUiOiJHdWl0YXIgV2FsbCBIYW5nZXI6IE9yaWdpbmFsIFN0eWxlIiwiZ2lmdF9jZXJ0aWZpY2F0ZV9pZCI6bnVsbCwiZ2lmdF9jZXJ0aWZpY2F0ZV9uYW1lIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX3RoZW1lIjpudWxsLCJwdXJjaGFzZV9wcmljZSI6MTguOTksInNhbGVfcHJpY2UiOm51bGwsImJhc2VfcHJpY2UiOm51bGwsInJldGFpbF9wcmljZSI6MjIuNzksInF1YW50aXR5IjpudWxsLCJkaXNjb3VudCI6My44LCJjb3Vwb25fYW1vdW50IjpudWxsLCJpbmRleCI6OSwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn0seyJwcm9kdWN0X2lkIjoiNDM5Iiwic2t1IjoiQ0MxMSIsInZhcmlhbnRfaWQiOm51bGwsInByb2R1Y3RfbmFtZSI6IkNsYXNzaWNhbCBHdWl0YXIgSGFuZ2VyIFdhbGwgTW91bnQiLCJnaWZ0X2NlcnRpZmljYXRlX2lkIjpudWxsLCJnaWZ0X2NlcnRpZmljYXRlX25hbWUiOm51bGwsImdpZnRfY2VydGlmaWNhdGVfdGhlbWUiOm51bGwsInB1cmNoYXNlX3ByaWNlIjoxOC45OSwic2FsZV9wcmljZSI6bnVsbCwiYmFzZV9wcmljZSI6bnVsbCwicmV0YWlsX3ByaWNlIjoyMi43OSwicXVhbnRpdHkiOm51bGwsImRpc2NvdW50IjozLjgsImNvdXBvbl9hbW91bnQiOm51bGwsImluZGV4IjoxMCwiYnJhbmRfbmFtZSI6bnVsbCwiY2F0ZWdvcnlfbmFtZXMiOlsiR3VpdGFyIl0sImN1cnJlbmN5IjoiVVNEIn1dfX1dfQ==")); 355 })() 356 357 </script>
357 358
359<script nonce=""> 360(function () { 361 var xmlHttp = new XMLHttpRequest(); 362 363 xmlHttp.open('POST', 'https://bes.gcp.data.bigcommerce.com/nobot'); 364 xmlHttp.setRequestHeader('Content-Type', 'application/json'); 365 xmlHttp.send('{"store_id":"1000954513","timezone_offset":"-5.0","timestamp":"2026-09-26T16:48:26.86416400Z","visit_id":"0d5713be-2776-44d3-b0a7-300f2ab57c7b","channel_id":1}'); 366})(); 367</script>
367 368 369
vendor: 1,039 bytes, lines 369-376
369<script> 370 !function (w, d, t) { 371 w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=i+"?sdkid="+e+"&lib="+t;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)}; 372 373 ttq.load('C54RJ0BG5HFBPDLNJJA0'); 374 ttq.page(); 375 }(window, document, 'ttq'); 376 </script>
376 377 </head> 378 <body> 379 <svg data-src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/img/icon-sprite.svg" class="icons-svg-sprite"></svg> 380 381 382<div id="announcement-bar"> 383 <div class="page-section full announcement-bar-wrapper ss-global"> 384 <div class="announcement-bar"> 385 <div class="body-text2">Save Up to $200</div> 386 <a href="/discounts/#spend-save" class="body-text2 black link">Learn More</a> 387 </div> 388 </div> 389</div> 390
391<script> 392$(document).ready(function() { 393 // 1. Handle clicks when the user is already on the /discounts/ page 394 $("#announcement-bar a").click(function(e) { 395 if (window.location.pathname.includes("/discounts")) { 396 e.preventDefault(); 397 $('html, body').animate({ 398 scrollTop: $("#spend-save").offset().top - 150 399 }, 'slow'); 400 } 401 // If on another page, it naturally follows href="/discounts/#spend-save" 402 }); 403 // 2. Handle page loads when arriving from ANOTHER page with the #spend-save hash 404 if (window.location.pathname.includes("/discounts") && window.location.hash === "#spend-save") { 405 // Temporarily clear the hash so the browser doesn't do its default instant jump 406 history.replaceState(null, null, window.location.pathname); 407 408 // Immediately trigger your exact smooth animation with the 150px offset 409 setTimeout(function() { 410 if ($("#spend-save").length) { 411 $('html, body').animate({ 412 scrollTop: $("#spend-save").offset().top - 150 413 }, 'slow'); 414 } 415 }, 50); 416 } 417}); 418</script>
418 419 420 421 422 423 424 425 426<header id="nav-bar"> 427 <div class="nav-bar ss-global"> 428 <!-- Nav Wrapper Desktop --> 429 <div class="section-wrapper nav-bar-wrapper nav-scroll-top"> 430 <!-- Nav Bar - Left --> 431 <div class="nav-left heading4"> 432 <a href="/" title="STRING SWING">STRING SWING<span style="color: #646464;">.</span></a> 433 </div> 434 <!-- Nav Bar - Center --> 435 <div class="nav-center header-tabs"> 436 <div class="header-tab nav-menu-toggle heading6"> 437 <a href="javascript:void(0);" title="Shop All"> 438 Shop All 439 <div class="svg-plus small thin"> 440 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 441 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 442 <path d="M24.56.56v48M48.56,24.56H.56"></path> 443 </g> 444 </svg> 445 </div> 446 </a> 447 </div> 448 <div class="header-tab heading6"> 449 <a href="/contact-us-1/" title="Contact Us">Contact Us</a> 450 </div> 451 <div class="header-tab heading6"> 452 <a href="/gallery/" title="Gallery">Gallery</a> 453 </div> 454 </div> 455 <!-- Nav Bar - Right --> 456 <div class="nav-right header-tabs"> 457 <div id="header-region" class="header-region" style="display:none;"> 458 <div class="region-inner"> 459 <div class="custom-zonos-country"> 460 <!-- Following span add to show country select option value as a text --> 461 <!----> 462 <span class="zonos-value-text"></span> 463 464 <svg id="flagDropDownArrow" xmlns="http://www.w3.org/2000/svg" width="49.592" height="25.357" viewBox="0 0 49.592 25.357"> 465 <path id="Path_780" data-name="Path 780" d="M48.563.563l-24,24-24-24" transform="translate(0.233 0.232)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.125"></path> 466 </svg> 467 </div> 468 </div> 469</div> 470 471<!-- Following script show country select option value as a text -->
472<script> 473$(document).ready(function () { 474 475 $(".header-region").css("display", "none"); 476 477 function restoreScrollAfter(fn) { 478 var scrollTop = $(window).scrollTop(); 479 fn(); 480 $(window).scrollTop(scrollTop); 481 } 482 483 var checkZonos = setInterval(function () { 484 if ($("#zonos select").length) { 485 clearInterval(checkZonos); 486 487 setTimeout(function () { 488 $(".header-region").css("display", "flex"); 489 }, 500); 490 491 var $containers = $(".custom-zonos-country"); 492 493 /* ----------------------------- 494 UPDATE TEXT FROM OPTION VALUE 495 ------------------------------ */ 496 function updateOptionValueText($selects) { 497 $selects.each(function () { 498 var val = $(this).val(); 499 $(this) 500 .closest(".custom-zonos-country") 501 .find(".zonos-value-text") 502 .text(val); 503 }); 504 } 505 506 /* ----------------------------- 507 SYNC ORIGINAL → CUSTOM 508 ------------------------------ */ 509 function syncFromOriginal(callback) { 510 $(".region-inner").hide(); 511 512 var $original = $("#zonos select"); 513 if (!$original.length) return; 514 515 var newVal = $original.val(); 516 var optionsHtml = $original.html(); 517 518 $(".custom-zonos-country select").each(function () { 519 $(this).html(optionsHtml).val(newVal); 520 }); 521 522 updateOptionValueText($(".custom-zonos-country select"));
523 524 if (typeof callback === "function") callback(); 525 526 $(".region-inner").show(); 527 } 528 529 /* ----------------------------- 530 CREATE CUSTOM SELECTS 531 ------------------------------ */ 532 $containers.each(function (i, el) { 533 var $container = $(el); 534 535 if ($container.find("select").length === 0) { 536 var $original = $("#zonos select"); 537 538 var $clonedSelect = $original 539 .clone() 540 .attr("id", "custom-zonos-select-" + i); 541 542 $container.append($clonedSelect).show(); 543 544 /* custom → original */ 545 $clonedSelect.on("change", function () { 546 $(".region-inner").hide(); 547 548 var newVal = $(this).val(); 549 var $originalNative = $("#zonos select"); 550 551 restoreScrollAfter(function () { 552 // Fix: jQuery trigger use karein jo automated event handling karta hai 553 // Aur Native event dispatch ke liye purana method (no curly braces) 554 $originalNative.val(newVal).trigger("change"); 555 556 var ev = document.createEvent('HTMLEvents'); 557 ev.initEvent('change', true, true); 558 $originalNative[0].dispatchEvent(ev); 559 }); 560 561 updateOptionValueText($(this)); 562 563 setTimeout(function () { 564 $(".region-inner").show(); 565 }, 500); 566 }); 567 } 568 }); 569 570 /* ----------------------------- 571 ORIGINAL → CUSTOM CHANGE 572 ------------------------------ */ 573 $(document).on("change", "#zonos select", function () { 574 restoreScrollAfter(function () { 575 syncFromOriginal(); 576 }); 577 }); 578 579 /* ----------------------------- 580 INITIAL SYNC 581 ------------------------------ */ 582 syncFromOriginal(); 583 584 /* ----------------------------- 585 OBSERVE ZONOS RE-RENDER 586 ------------------------------ */ 587 var targetNode = document.querySelector("#zonos.left"); 588 if (targetNode) { 589 var observer = new MutationObserver(function () { 590 var scrollTop = $(window).scrollTop(); 591 updateOptionValueText($(".custom-zonos-country select"));
592 $(window).scrollTop(scrollTop); 593 }); 594 595 observer.observe(targetNode, { 596 childList: true, 597 subtree: true, 598 attributes: true 599 }); 600 } 601 602 /* ----------------------------- 603 OUTSIDE CLICK → CLOSE POPUP 604 ------------------------------ */ 605 $(document).on("click", function (e) { 606 if ( 607 $(e.target).closest(".custom-zonos-country").length || 608 $(e.target).closest("#zonos").length 609 ) return; 610 611 var $closeBtn = $("#zonos .z-close"); 612 if ($closeBtn.length) { 613 restoreScrollAfter(function () { 614 $closeBtn.trigger("click"); 615 }); 616 } 617 }); 618 } 619 }, 300); 620}); 621</script>
621 622 623 624 625<!-- This script use for showing zonos in local development --> 626 <div class="--header-tab icon search"> 627 <div class="svg-search small3 thin"> 628 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.13 49.13"> 629 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 630 <path d="M35.43,35.43h0c-7.98,7.98-20.91,7.98-28.89,0h0C-1.43,27.46-1.43,14.52,6.55,6.55h0c7.98-7.98,20.91-7.98,28.89,0h0c7.98,7.98,7.98,20.91,0,28.89ZM35.43,35.43l13.13,13.13"></path> 631 </g> 632 </svg> 633 </div> 634</div> 635 <div class="-header-tab icon account navUser-item--account"> 636 <a class="navUser-action" href="##" aria-label="Log in"> 637 <div class="svg-account small3 thin"> 638 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.13"> 639 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 640 <path d="M.56,48.56c4.79-7.65,13.75-12.8,24-12.8s19.21,5.15,24,12.8M24.56.56c-7.07,0-12.8,5.73-12.8,12.8s5.73,12.8,12.8,12.8,12.8-5.73,12.8-12.8S31.63.56,24.56.56Z"></path> 641 </g> 642 </svg> 643 </div> 644 </a> 645</div> 646 647 648 649 650 <div class="--header-tab icon cart navUser-item--cart"> 651 <a class="navUser-action body-text2" 652 data-cart-preview 653 data-dropdown="cart-preview-dropdown" 654 data-options="align:right" 655 href="https://www.stringswing.com/cart.php" 656 aria-label="Cart with 0 items" 657 > 658 <span class="countPill cart-quantity">0</span> 659 </a> 660</div> 661 </div> 662 <!-- Search Bar --> 663 <div class="search-bar"> 664 <form class="search-input form" onsubmit="return false" data-url="https://www.stringswing.com/search.php" data-quick-search-form> 665 <fieldset class="form-fieldset"> 666 <div class="form-field"> 667 <input class="form-input heading3" 668 id="search_query_adv" 669 name="search_query_adv" 670 placeholder="Search StringSwing.com..." 671 data-error-message="Search field cannot be empty." 672 autocomplete="off" 673 > 674 </div> 675 </fieldset> 676 </form> 677 <div class="search-close svg-x small2 thin"> 678 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 679 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 680 <path d="M.56.56l48,48M48.56.56L.56,48.56"></path> 681 </g> 682 </svg> 683 </div> 684</div> 685 686 687 688 689 690 691 692 693 694 695 696 697 <!-- Nav Bar End --> 698 </div> 699 <!-- Mobile Nav Wrapper --> 700 <div class="header-tabs section-wrapper mobile-nav-wrapper nav-scroll-top"> 701 <div class="ss-logo"> 702 <div class="heading4"> 703 <a href="/" title="STRING SWING">STRING SWING<span style="color: #646464;">.</span></a> 704 </div> 705 </div> 706 <div class="search-bar"> 707 <div class="search-bar"> 708 <form class="search-input form" onsubmit="return false" data-url="https://www.stringswing.com/search.php" data-quick-search-form> 709 <fieldset class="form-fieldset"> 710 <div class="form-field"> 711 <input class="form-input heading3" 712 id="search_query_adv" 713 name="search_query_adv" 714 placeholder="Search StringSwing.com..." 715 data-error-message="Search field cannot be empty." 716 autocomplete="off" 717 > 718 </div> 719 </fieldset> 720 </form> 721 <div class="search-close svg-x small2 thin"> 722 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 723 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 724 <path d="M.56.56l48,48M48.56.56L.56,48.56"></path> 725 </g> 726 </svg> 727 </div> 728</div> 729 730 731 732 733 734 735 736 737 738 739 740 741 </div> 742 <div id="header-region" class="header-region" style="display:none;"> 743 <div class="region-inner"> 744 <div class="custom-zonos-country"> 745 <!-- Following span add to show country select option value as a text --> 746 <!---->
747 <span class="zonos-value-text"></span> 748 749 <svg id="flagDropDownArrow" xmlns="http://www.w3.org/2000/svg" width="49.592" height="25.357" viewBox="0 0 49.592 25.357"> 750 <path id="Path_780" data-name="Path 780" d="M48.563.563l-24,24-24-24" transform="translate(0.233 0.232)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.125"></path> 751 </svg> 752 </div> 753 </div> 754</div> 755 756<!-- Following script show country select option value as a text -->
757<script> 758$(document).ready(function () { 759 760 $(".header-region").css("display", "none"); 761 762 function restoreScrollAfter(fn) { 763 var scrollTop = $(window).scrollTop(); 764 fn(); 765 $(window).scrollTop(scrollTop); 766 } 767 768 var checkZonos = setInterval(function () { 769 if ($("#zonos select").length) { 770 clearInterval(checkZonos); 771 772 setTimeout(function () { 773 $(".header-region").css("display", "flex"); 774 }, 500); 775 776 var $containers = $(".custom-zonos-country"); 777 778 /* ----------------------------- 779 UPDATE TEXT FROM OPTION VALUE 780 ------------------------------ */ 781 function updateOptionValueText($selects) { 782 $selects.each(function () { 783 var val = $(this).val(); 784 $(this) 785 .closest(".custom-zonos-country") 786 .find(".zonos-value-text") 787 .text(val); 788 }); 789 } 790 791 /* ----------------------------- 792 SYNC ORIGINAL → CUSTOM 793 ------------------------------ */ 794 function syncFromOriginal(callback) { 795 $(".region-inner").hide(); 796 797 var $original = $("#zonos select"); 798 if (!$original.length) return; 799 800 var newVal = $original.val(); 801 var optionsHtml = $original.html(); 802 803 $(".custom-zonos-country select").each(function () { 804 $(this).html(optionsHtml).val(newVal); 805 }); 806 807 updateOptionValueText($(".custom-zonos-country select"));
808 809 if (typeof callback === "function") callback(); 810 811 $(".region-inner").show(); 812 } 813 814 /* ----------------------------- 815 CREATE CUSTOM SELECTS 816 ------------------------------ */ 817 $containers.each(function (i, el) { 818 var $container = $(el); 819 820 if ($container.find("select").length === 0) { 821 var $original = $("#zonos select"); 822 823 var $clonedSelect = $original 824 .clone() 825 .attr("id", "custom-zonos-select-" + i); 826 827 $container.append($clonedSelect).show(); 828 829 /* custom → original */ 830 $clonedSelect.on("change", function () { 831 $(".region-inner").hide(); 832 833 var newVal = $(this).val(); 834 var $originalNative = $("#zonos select"); 835 836 restoreScrollAfter(function () { 837 // Fix: jQuery trigger use karein jo automated event handling karta hai 838 // Aur Native event dispatch ke liye purana method (no curly braces) 839 $originalNative.val(newVal).trigger("change"); 840 841 var ev = document.createEvent('HTMLEvents'); 842 ev.initEvent('change', true, true); 843 $originalNative[0].dispatchEvent(ev); 844 }); 845 846 updateOptionValueText($(this)); 847 848 setTimeout(function () { 849 $(".region-inner").show(); 850 }, 500); 851 }); 852 } 853 }); 854 855 /* ----------------------------- 856 ORIGINAL → CUSTOM CHANGE 857 ------------------------------ */ 858 $(document).on("change", "#zonos select", function () { 859 restoreScrollAfter(function () { 860 syncFromOriginal(); 861 }); 862 }); 863 864 /* ----------------------------- 865 INITIAL SYNC 866 ------------------------------ */ 867 syncFromOriginal(); 868 869 /* ----------------------------- 870 OBSERVE ZONOS RE-RENDER 871 ------------------------------ */ 872 var targetNode = document.querySelector("#zonos.left"); 873 if (targetNode) { 874 var observer = new MutationObserver(function () { 875 var scrollTop = $(window).scrollTop(); 876 updateOptionValueText($(".custom-zonos-country select"));
877 $(window).scrollTop(scrollTop); 878 }); 879 880 observer.observe(targetNode, { 881 childList: true, 882 subtree: true, 883 attributes: true 884 }); 885 } 886 887 /* ----------------------------- 888 OUTSIDE CLICK → CLOSE POPUP 889 ------------------------------ */ 890 $(document).on("click", function (e) { 891 if ( 892 $(e.target).closest(".custom-zonos-country").length || 893 $(e.target).closest("#zonos").length 894 ) return; 895 896 var $closeBtn = $("#zonos .z-close"); 897 if ($closeBtn.length) { 898 restoreScrollAfter(function () { 899 $closeBtn.trigger("click"); 900 }); 901 } 902 }); 903 } 904 }, 300); 905}); 906</script>
906 907 908 909 910<!-- This script use for showing zonos in local development --> 911 912 <!--<div class="header-tab icon cart body-text2">0</div>--> 913 <div class="header-tab icon cart body-text2 navUser-item--cart"> 914 <a class="navUser-action body2" 915 data-cart-preview 916 data-dropdown="cart-preview-dropdown" 917 data-options="align:right" 918 href="https://www.stringswing.com/cart.php" 919 aria-label="Cart with 0 items" 920 > 921 <span class="countPill cart-quantity">0</span> 922 </a> 923 </div> 924 <div class="header-tab icon menu body-text"> 925 <div class="svg-hamburger small2 thin"> 926 <svg viewBox="0 0 49.12 37.12"> 927 <line class="line top" x1=".56" y1=".56" x2="48.56" y2=".56"></line> 928 <line class="line middle" x1=".56" y1="18.56" x2="48.56" y2="18.56"></line> 929 <line class="line bottom" x1=".56" y1="36.56" x2="48.56" y2="36.56"></line> 930 </svg> 931 </div> 932 </div> 933 </div> 934 935 <!-- Nav Menu --> 936 <div class="section-wrapper nav-menu"> 937 938 <div class="tabs-hover cat-mains text-box3"></div> 939 940 <div class="cat-sets"></div> 941 942 <div class="cat-hover-media"></div> 943 944</div> 945
946<script> 947 948$(document).ready(function () { 949 $(document).on('mouseenter', '.nav-menu-toggle a', function () { 950 $(this).parent($('.nav-menu-toggle')).addClass('active'); 951 }); 952 // fetch('https://cdn11.bigcommerce.com/s-5r2w8tg1gb/content/custom/ss_root/json/mainCategoryNavMenu.json?c=9985295') 953 fetch('https://cdn11.bigcommerce.com/s-5r2w8tg1gb/content/custom/ss_root/json/UpdatedNavMenu.json?c=4266285') 954 .then(res => res.json()) 955 .then(data => { 956 957 const $nav = $('.nav-menu .cat-mains'); 958 const $catSets = $('.nav-menu .cat-sets'); 959 const $media = $('.nav-menu .cat-hover-media'); 960 961 // ===== BUILD EVERYTHING FROM JSON ===== 962 data.mainCategories.forEach(cat => { 963 964 // ===== MAIN CATEGORY ===== 965 $nav.append(` 966 <div class="tab-hover heading2" data-cat="${cat.id}"> 967 <a href="${cat.url}" title="${cat.label}">${cat.label}</a> 968 </div> 969 `); 970 971 // ===== SUB CATEGORY ===== 972 const $subSet = $(`<div class="cat-set tabs text-box5" data-cat="${cat.id}-sub"></div>`); 973 974 (cat.subCategories || []).forEach(sub => { 975 $subSet.append(` 976 <div class="tab body-text" data-cat="${sub.id}"> 977 <a class="link" href="${sub.url}" title="${sub.label}">${sub.label}</a> 978 </div> 979 `); 980 }); 981 982 $catSets.append($subSet); 983 984 // ===== MEDIA (IMAGE + LINK) ===== 985 $media.append(` 986 <div class="cat-media-wrapper" data-cat="${cat.id}"> 987 <a href="${cat.media.link}" title="${cat.label}"> 988 <img src="${cat.media.image}" alt="${cat.label}"> 989 </a> 990 991 <div class="nav-view-products"> 992 <a href="${cat.media.link}" title="${cat.label}" class="body-text link">View Products</a> 993 </div> 994 </div> 995 `); 996 997 }); 998 999 // ===== DEFAULT LOAD ===== 1000 const defaultCat = data.mainCategories[0].id; 1001 activateMain(defaultCat); 1002 1003 // ===== MAIN HOVER ===== 1004 $('.tab-hover').on('mouseenter click', function (e) { 1005 // e.preventDefault(); 1006 activateMain($(this).data('cat')); 1007 }); 1008 1009 // ===== SUB HOVER ===== 1010 $('.cat-sets').on('mouseenter click', '.tab', function () { 1011 $(this).siblings().removeClass('active'); 1012 $(this).addClass('active'); 1013 }); 1014 1015 // ===== FUNCTION ===== 1016 function activateMain(cat) { 1017 1018 // main active 1019 $('.tab-hover').removeClass('active'); 1020 $(`.tab-hover[data-cat="${cat}"]`).addClass('active'); 1021 1022 // sub category switch 1023 $('.cat-set').removeClass('active'); 1024 const $subSet = $(`.cat-set[data-cat="${cat}-sub"]`); 1025 $subSet.addClass('active'); 1026 1027 // first sub active 1028 const $firstSub = $subSet.find('.tab').first(); 1029 $subSet.find('.tab').removeClass('active'); 1030 if ($firstSub.length) { 1031 $firstSub.addClass('active'); 1032 } 1033 1034 // ===== MEDIA SWITCH ===== 1035 $('.cat-media-wrapper').removeClass('active'); 1036 $(`.cat-media-wrapper[data-cat="${cat}"]`).addClass('active'); 1037 } 1038 1039 }) 1040 .catch(err => { 1041 console.error('JSON Load Failed', err); 1042 $('.nav-menu').hide(); 1043 }); 1044 1045}); 1046</script>
1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057<!-- 27-03-2026 --> 1058 1059 1060 <!-- Mobile Nav Menu --> 1061 <div class="section-wrapper mobile-nav-menu"> 1062 <div class="tabs navigation"> 1063 <!-- JSON se yahan content inject hoga --> 1064 </div> 1065 <div class="sub-navigation"> 1066 <div class="inner text-box4"> 1067 <a class="body-text" href="/gallery/" title="">Gallery</a> 1068 <a class="body-text" href="/discounts/" title="">Discounts</a> 1069 <a class="body-text" href="/contact-us-1/" title="">Contact Us</a> 1070 </div> 1071 </div> 1072 <div class="sub-navigation mobile-user"> 1073 <div class="button-outer text-box4"> 1074 <div class="-button-n -sign-up body-text2"><a class="button-n sign-up body-text2" href="https://www.stringswing.com/login.php?action=create_account">Sign Up</a></div> 1075 <div class="-button-n -sign-in body-text2"><a class="button-n sign-in body-text2" href="https://www.stringswing.com/login.php">Log In</a></div> 1076 </div> 1077 </div> 1078</div> 1079
1080<script> 1081$(document).ready(function () { 1082 1083 // const jsonUrl = 'https://cdn11.bigcommerce.com/s-5r2w8tg1gb/content/custom/ss_root/json/mainCategoryNavMenu.json?c=9832068'; 1084 const jsonUrl = 'https://cdn11.bigcommerce.com/s-5r2w8tg1gb/content/custom/ss_root/json/UpdatedNavMenu.json?c=6402079'; 1085 const $nav = $('.mobile-nav-menu .navigation'); 1086 1087 fetch(jsonUrl) 1088 .then(res => res.json()) 1089 .then(data => { 1090 1091 data.mainCategories.forEach((cat, index) => { 1092 1093 const hasSub = cat.subCategories && cat.subCategories.length; 1094 const hasRealSub = cat.subCategories && cat.subCategories.length > 1; 1095 // MAIN CATEGORY 1096 const $mainTab = $(` 1097 <div class="tab heading3 cat-header ${!hasRealSub ? 'no-subcategories' : ''}" data-cat="${cat.id}"> 1098 ${!hasRealSub ? `<a href="${cat.url}" class="cat-title">${cat.label}</a>` : `<span class="cat-title">${cat.label}</span>`} 1099 ${hasRealSub ? '<div class="svg-plus small3 thin"><svg id="b" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"><g><path d="M24.56.56v48M48.56,24.56H.56" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path></g></svg></div>' : ''} 1100 </div> 1101 `); 1102 1103 $nav.append($mainTab); 1104 1105 // SUB CATEGORIES 1106 if (hasSub) { 1107 const $subWrap = $(`<div class="cat-collapse" data-cat="${cat.id}-sub"></div>`); 1108 1109 cat.subCategories.forEach(sub => { 1110 $subWrap.append(` 1111 <div class="body-text sub-cat" data-cat="${sub.id}"> 1112 <a href="${sub.url}">${sub.label}</a> 1113 </div> 1114 `); 1115 }); 1116 1117 $nav.append($subWrap); 1118 } 1119 }); 1120 1121 // ===== MAIN CATEGORY CLICK ===== 1122 $nav.on('click', '.cat-header', function (e) { 1123 // If NO real subcategories → let link work normally 1124 if ($(this).hasClass('no-subcategories')) { 1125 return; // no active, no toggle 1126 } 1127 e.preventDefault(); 1128 const cat = $(this).data('cat'); 1129 const $collapse = $(`.cat-collapse[data-cat="${cat}-sub"]`); 1130 $('.cat-header').not(this).removeClass('active'); 1131 // $('.cat-collapse').not($collapse).slideUp(200); 1132 $('.cat-collapse').not($collapse).hide(); 1133 $('.svg-plus').removeClass('active'); 1134 $(this).toggleClass('active'); 1135 $(this).find('.svg-plus').toggleClass('active'); 1136 if ($collapse.length) { 1137 // $collapse.stop(true, true).slideToggle(200); 1138 $collapse.toggle(); 1139 const $firstSub = $collapse.find('.sub-cat').first(); 1140 $collapse.find('.sub-cat').removeClass('active'); 1141 $firstSub.addClass('active'); 1142 } 1143 }); 1144 // ===== SUB CATEGORY ACTIVE SWITCH ===== 1145 $nav.on('click', '.sub-cat', function () { 1146 $(this).siblings().removeClass('active'); 1147 $(this).addClass('active'); 1148 }); 1149 }) 1150 .catch(err => { 1151 console.error('Mobile Nav JSON Error', err); 1152 $('.mobile-nav-menu').hide(); 1153 }); 1154 1155 // $(document).on('click', '.mobile-nav-menu .sign-up', function () { 1156 1157 // $('body') 1158 // .removeClass('sign-in-active sign-up-active') 1159 // .addClass('sign-up-active'); 1160 1161 // }); 1162 1163 // $(document).on('click', '.mobile-nav-menu .sign-in', function () { 1164 1165 // $('body') 1166 // .removeClass('sign-in-active sign-up-active') 1167 // .addClass('sign-in-active'); 1168 1169 // }); 1170 // Sign Up click 1171 $(document).on('click', '.mobile-nav-menu .sign-up', function () { 1172 const $body = $('body'); 1173 const $mobileUser = $('.mobile-user'); 1174 const $logoutBtn = $('.account-popup .header-tabs .logout-btn'); 1175 // Body & mobile user classes 1176 $mobileUser.removeClass('sign-in-active sign-up-active').addClass('active sign-up-active'); 1177 $body.removeClass('sign-in-active sign-up-active').addClass('sign-up-active'); 1178 // Remove active from other tabs inside header-tabs 1179 $('.account-popup .header-tabs .header-tab').removeClass('active'); 1180 // Add active to logout-btn 1181 $logoutBtn.addClass('active'); 1182 });
1183 // Sign In click 1184 $(document).on('click', '.mobile-nav-menu .sign-in', function () { 1185 const $body = $('body'); 1186 const $mobileUser = $('.mobile-user'); 1187 const $logoutBtn = $('.account-popup .header-tabs .login-btn'); 1188 // Body & mobile user classes 1189 $mobileUser.removeClass('sign-in-active sign-up-active').addClass('active sign-in-active'); 1190 $body.removeClass('sign-in-active sign-up-active').addClass('sign-in-active'); 1191 // Remove active from other tabs inside header-tabs 1192 $('.account-popup .header-tabs .header-tab').removeClass('active'); 1193 // Add active to logout-btn 1194 $logoutBtn.addClass('active'); 1195 }); 1196 $(document).on('click', '.account-popup-close', function () { 1197 $('.mobile-user').removeClass('sign-up-active'); 1198 $('.mobile-user').removeClass('sign-in-active'); 1199 $('body').removeClass('sign-in-active'); 1200 $('body').removeClass('sign-up-active'); 1201 }); 1202}); 1203</script>
1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223<!--<div class="section-wrapper mobile-nav-menu"> 1224 <div class="tabs text-box4 navigation"> 1225 <div class="tab heading2 cat-header-0">Guitar</div> 1226 <div class="tab heading2 cat-header-1"> 1227 String Instruments 1228 <div class="svg-plus small3 thin"></div> 1229 </div> 1230 <div class="tab heading2 cat-header-2"> 1231 Brass & Wind 1232 <div class="svg-plus small3 thin"></div> 1233 </div> 1234 <div class="tab heading2 cat-header-3"> 1235 Miscellaneous 1236 <div class="svg-plus small3 thin"></div> 1237 </div> 1238 <div class="tab heading2 cat-header-4">Stage Hangers</div> 1239 <div class="tab heading2 cat-header-5"> 1240 Store Displays 1241 <div class="svg-plus small3 thin"></div> 1242 </div> 1243 </div> 1244</div>--> 1245 1246 1247 <!-- Account Popup--> 1248 <div class="account-popup"> 1249 1250 <div class="page-section wide account-popup-wrapper"> 1251 <div class="meta"> 1252 <div class="account-popup-top"> 1253 <div class="header-tabs"> 1254 <div class="login-btn header-tab heading7 active"> 1255 Log In 1256 </div> 1257 <div class="logout-btn header-tab heading7"> 1258 Sign Up 1259 </div> 1260 </div> 1261 <div class="svg-x small thin account-popup-close"> 1262 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 1263 <g fill='none' stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.12px'> 1264 <path d="M.56.56l48,48M48.56.56L.56,48.56"></path> 1265 </g> 1266 </svg> 1267 </div> 1268 </div> 1269 <!-- Sign In Form --> 1270 <!-- Sign In Form --> 1271 <div class="text-box1 sign-in-form"> 1272 <div class="heading">Welcome Back.</div> 1273 <div class="text-box4 input-field-group"> 1274 <form class="login-form form" id="LoginForm" onsubmit="ExpressSigninPopup.Login(); return false;"> 1275 <div class="form-fields-wrap text-box4"> 1276 <div class="LoadingIndicator" style="display: none"> 1277 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/img/loading.svg" alt="Loading" /> 1278 </div> 1279 <div style="display: none" class="ErrorMessage" id="CheckoutLoginError"> </div> 1280 <div class="form-field"> 1281 <div class="form-input-field"> 1282 <div class="form-icon"> 1283 <div class="svg-at thin"> 1284 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.125 49.125"> 1285 <g> 1286 <path d="M35.062,24.562c0,5.799-4.701,10.5-10.5,10.5s-10.5-4.701-10.5-10.5,4.701-10.5,10.5-10.5,10.5,4.701,10.5,10.5ZM35.062,24.562v3.75c0,3.728,3.022,6.75,6.75,6.75h0c3.728,0,6.75-3.022,6.75-6.75v-3.196c0-12.827-10.469-24.174-23.291-24.544C11.023.162-.53,12.174.645,26.578c.935,11.456,10.111,20.777,21.553,21.871,4.176.4,8.16-.272,11.707-1.773" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.125px"></path> 1287 </g> 1288 </svg> 1289 </div> 1290 </div> 1291 <div class="v-line-break"></div> 1292 <div class="detail-info text-box6"> 1293 <div class="body-text3">Email Address</div> 1294 <div class="input-outer heading7"> 1295 <input class="heading7" name="login_email" id="header_login_email" type="email" placeholder="[email protected]"> 1296 </div> 1297 </div> 1298 </div>
1299 <span style="display:none;" class="form-inlineMessage">You must enter a valid email.</span> 1300 </div> 1301 <div class="form-field"> 1302 <div class="form-input-field"> 1303 <div class="form-icon"> 1304 <div class="svg-at thin"> 1305 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23.483 26.5"> 1306 <g> 1307 <g> 1308 <line x1="11.642" y1="25.25" x2="11.642" y2="1.25" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5px"></line> 1309 <line x1="1.449" y1="19.176" x2="22.233" y2="7.176" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5px"></line> 1310 <line x1="22.035" y1="19.25" x2="1.25" y2="7.25" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5px"></line> 1311 </g> 1312 </g> 1313 </svg> 1314 </div> 1315 </div> 1316 <div class="v-line-break"></div> 1317 <div class="detail-info text-box6"> 1318 <div class="body-text3">Password</div> 1319 <div class="input-outer heading7"> 1320 <input class="heading7" id="header_login_pass" type="password" name="login_pass" autocomplete="off" placeholder="••••••••••••••••••"> 1321 </div> 1322 </div> 1323 </div> 1324 <span style="display:none;" class="form-inlineMessage">You must enter a password.</span> 1325 </div> 1326 </div> 1327 <div class="text-box4"> 1328 <button type="submit" class="form-button purple heading7" value="Sign In">Sign In</button> 1329 <div class="body-text2"> 1330 <a class="ul link body-text2" href="/login.php?action=reset_password" title="Forgot Password">Forgot Password</a> 1331 </div> 1332 </div> 1333 </form> 1334 </div> 1335 </div> 1336 <!-- Sign Up Form --> 1337 <div class="text-box1 sign-up-form"> 1338 <div class="heading">Let's Get Started.</div> 1339 <div class="text-box4 input-field-group"> 1340 <div class="text-box4"> 1341 <div class="LoadingIndicator" style="display: none"> 1342 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/img/loading.svg" alt="Loading" /> 1343 </div> 1344 <div style="display: none" class="ErrorMessage" id="CheckoutLoginError"> </div> 1345 <!-- Input Box --> 1346 <div class="text-box5"> 1347 <div class="heading8">Email Address</div> 1348 <div class="form-input-wrapper"> 1349 <div class="form-input"> 1350 <input id="email" class="heading7" type="email" placeholder="[email protected]"> 1351 </div> 1352 </div> 1353 <span style="display:none;" class="form-inlineMessage">You must enter a valid email.</span> 1354 </div> 1355 <!-- Input Box --> 1356 <div class="text-box5"> 1357 <div class="heading8">Password</div> 1358 <div class="form-input-wrapper"> 1359 <div class="form-input"> 1360 <input id="password" class="heading7" type="password" placeholder="••••••••••"> 1361 </div> 1362 </div>
1363 <span style="display:none;" class="form-inlineMessage">Passwords must be at least 7 characters and contain both alphabetic and numeric characters.</span> 1364 </div> 1365 <!-- Input Box --> 1366 <div class="text-box5"> 1367 <div class="heading8">Confirm Password</div> 1368 <div class="form-input-wrapper"> 1369 <div class="form-input"> 1370 <input id="confirm_password" class="heading7" type="password" placeholder="••••••••••"> 1371 </div> 1372 </div> 1373 <span style="display:none;" class="form-inlineMessage">Your passwords do not match.</span> 1374 </div> 1375 <!-- Input Box End --> 1376 </div> 1377 <div id="continueBtn" class="form-button green heading7">Continue</div> 1378 </div> 1379 </div> 1380 1381 <div class="body-text">Hey there musician – sign in to save time at checkout, track orders, and more.</div> 1382 </div> 1383 <div class="media"> 1384 <div class="media"> 1385 <div class="media-text heading">You Belong Here</div> 1386 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/content/custom/ss_root/nav-bar/account-hero-w.webp" alt="Account Hero"> 1387 </div> 1388 </div> 1389 </div> 1390 1391
1391<script> 1392 // For Sign in Form 1393 var ExpressSigninPopup = { 1394 Login: function(){ 1395 $('#CheckoutLoginError').hide(); 1396 ExpressSigninPopup.anonymousCheckout = 0; 1397 ExpressSigninPopup.createAccount = 0; 1398 1399 if(ExpressSigninPopup.validateEmailAddress($('#header_login_email').val()) === false) { 1400 // alert('Please type in a valid email address, such as [email protected]'); 1401 $('#LoginForm #header_login_email').parent().closest('.form-field').addClass('form-field--error'); 1402 $('#LoginForm #header_login_email + .form-inlineMessage').show(); 1403 $('#LoginForm #header_login_email').focus(); 1404 $('#LoginForm #header_login_email').select(); 1405 return false; 1406 }else{ 1407 $('#LoginForm #header_login_email').parent().closest('.form-field').removeClass('form-field--error'); 1408 $('#LoginForm #header_login_email + .form-inlineMessage').hide() 1409 } 1410 if($('#LoginForm #header_login_pass').val() === '') { 1411 // alert('Please type in your password.'); 1412 1413 $('#LoginForm #header_login_pass').parent().closest('.form-field').addClass('form-field--error'); 1414 $('#LoginForm #header_login_pass + .form-inlineMessage').show(); 1415 $('#LoginForm #header_login_pass').focus(); 1416 return false; 1417 }else{ 1418 $('#LoginForm #header_login_pass').parent().closest('.form-field').removeClass('form-field--error'); 1419 $('#LoginForm #header_login_pass + .form-inlineMessage').hide() 1420 } 1421 ExpressSigninPopup.ShowLoadingIndicator('#LoginForm'); 1422 u = window.location.port ? window.location.protocol + "//" + window.location.hostname + ":" + window.location.port : window.location.protocol + "//" + window.location.hostname; 1423 $.ajax({
1424 url: u + "/login.php?action=check_login", 1425 type: 'post', 1426 data: $('#LoginForm').serialize(), 1427 success: ExpressSigninPopup.HandleResponse 1428 }); 1429 return false; 1430 }, 1431 HandleResponse: function(response){ 1432 ExpressSigninPopup.HideLoadingIndicators(); 1433 ExpressSigninPopup.HandleResponseStatus(response); 1434 }, 1435 HandleResponseStatus: function(response){ 1436 var $errorboxlen = $(response).find('.alertBox--error').length; 1437 if( $errorboxlen > 0) { 1438 var $errorbox = $(response).find('.alertBox--error').html(); 1439 console.log($errorbox) 1440 $('#LoginForm #CheckoutLoginError').html($errorbox).addClass('alertBox alertBox--error').show(); 1441 }else{ 1442 // location.reload(); 1443 window.location.href = "/account.php?action=order_status"; 1444 } 1445 }, 1446 ShowLoadingIndicator: function() { 1447 $('body').find('#LoginForm .LoadingIndicator').show(); 1448 }, 1449 HideLoadingIndicators: function(){ 1450 $('#LoginForm .LoadingIndicator').hide(); 1451 }, 1452 validateEmailAddress: function(email){ 1453 if(email.indexOf('@') === -1 || email.indexOf('.') === -1) { 1454 return false; 1455 } 1456 return true; 1457 }, 1458 }; 1459 // For Signup Form create local storage base email password confirm password field values passed into the account page and account page also have the script which use to get local storage content values and put them into the accoun form page and remove local storage cookie. 1460 $(document).ready(function () { 1461 function validateEmail() { 1462 const $email = $('#email'); 1463 const val = $email.val().trim(); 1464 const $msg = $email.closest('.text-box5').find('.form-inlineMessage'); 1465 if (!val || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)) { 1466 $msg.show(); 1467 return false; 1468 } else { 1469 $msg.hide(); 1470 return true; 1471 } 1472 } 1473 function validatePassword() { 1474 const $password = $('#password'); 1475 const val = $password.val().trim(); 1476 const $msg = $password.closest('.text-box5').find('.form-inlineMessage'); 1477 if (!val || val.length < 7 || !/\d/.test(val) || !/[a-zA-Z]/.test(val)) { 1478 $msg.show(); 1479 return false; 1480 } else { 1481 $msg.hide(); 1482 return true; 1483 } 1484 } 1485 function validateConfirm() { 1486 const $confirm = $('#confirm_password'); 1487 const val = $confirm.val().trim(); 1488 const $password = $('#password').val().trim(); 1489 const $msg = $confirm.closest('.text-box5').find('.form-inlineMessage'); 1490 if (val !== $password || val === '') { 1491 $msg.show(); 1492 return false; 1493 } else { 1494 $msg.hide(); 1495 return true; 1496 } 1497 } 1498 // Real-time validation on input 1499 $('#email').on('input', validateEmail); 1500 $('#password').on('input', function() { 1501 validatePassword(); 1502 validateConfirm(); // also check confirm in case password changed 1503 }); 1504 $('#confirm_password').on('input', validateConfirm); 1505 // On continue button click 1506 $('#continueBtn').on('click', function () { 1507 const emailValid = validateEmail(); 1508 const passValid = validatePassword(); 1509 const confirmValid = validateConfirm(); 1510 1511 if (emailValid && passValid && confirmValid) { 1512 const accountData = { 1513 email: $('#email').val().trim(), 1514 password: $('#password').val().trim() 1515 }; 1516 1517 $('.LoadingIndicator').addClass('is-active').show(); 1518 1519 // Set a flag to indicate form was submitted from custom popup 1520 localStorage.setItem('signupData', JSON.stringify(accountData)); 1521 localStorage.setItem('signupFromCustom', 'true'); 1522 1523 // Redirect to account page 1524 window.location.href = '/login.php?action=create_account'; 1525 } 1526 }); 1527 }); 1528 </script>
1528 1529</div> 1530 1531 <!-- Background Fade --> 1532 <div class="bg-fade"></div> 1533 </div> 1534</header> 1535 1536<div data-content-region="header_bottom--global"></div> 1537<div data-content-region="header_bottom"></div> 1538 1539 1540 1541 1542 1543 <div class="body custom-category" id="main-content" data-currency-code="USD"> 1544 1545 1546<div class="page-section ss-global"> 1547</div> 1548 1549<div class="page collection-page ss-global"> 1550 <div class="body-flexed"> 1551 <div class="collection-page-wrapper"> 1552 <!-- specific name base hero section from en.json --> 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562<div id="collection-hero"> 1563 <div class="page-section wide collection-hero ss-global"> 1564 <div class="collection-hero-wrapper"> 1565 <nav aria-label="Breadcrumb"> 1566 <ol class="breadcrumbs"> 1567 <li class="breadcrumb "> 1568 <a class="link body-text2 breadcrumb-label" 1569 href="https://www.stringswing.com/" 1570 1571 > 1572 <span>Home</span> 1573 </a> 1574 </li> 1575 <li class="breadcrumb "> 1576 <a class="link body-text2 breadcrumb-label" 1577 href="https://www.stringswing.com/shop-all/" 1578 1579 > 1580 <span>Shop All</span> 1581 </a> 1582 </li> 1583 <li class="breadcrumb "> 1584 <a class="link body-text2 breadcrumb-label" 1585 href="https://www.stringswing.com/shop-all/string-instruments-1/" 1586 1587 > 1588 <span>String Instruments</span> 1589 </a> 1590 </li> 1591 <li class="breadcrumb is-active"> 1592 <a class="link body-text2 breadcrumb-label" 1593 href="https://www.stringswing.com/shop-all/stringed-instruments/guitar/" 1594 aria-current="page" 1595 > 1596 <span>All Guitar</span> 1597 </a> 1598 </li> 1599 </ol> 1600</nav> 1601
1602<script type="application/ld+json" nonce=""> 1603{ 1604 "@context": "https://schema.org", 1605 "@type": "BreadcrumbList", 1606 "itemListElement": 1607 [ 1608 { 1609 "@type": "ListItem", 1610 "position": 1, 1611 "item": { 1612 "@id": "https:\u002f\u002fwww.stringswing.com\u002f", 1613 "name": "Home" 1614 } 1615 }, 1616 { 1617 "@type": "ListItem", 1618 "position": 2, 1619 "item": { 1620 "@id": "https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002f", 1621 "name": "Shop All" 1622 } 1623 }, 1624 { 1625 "@type": "ListItem", 1626 "position": 3, 1627 "item": { 1628 "@id": "https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002fstring-instruments-1\u002f", 1629 "name": "String Instruments" 1630 } 1631 }, 1632 { 1633 "@type": "ListItem", 1634 "position": 4, 1635 "item": { 1636 "@id": "https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002fstringed-instruments\u002fguitar\u002f", 1637 "name": "Guitar" 1638 } 1639 } 1640 ] 1641} 1642</script>
1642 1643 1644 1645 1646 1647 1648 1649 <div class="collection-hero-copy"> 1650 <h1 class="collection-title heading2">String Instruments</h1> 1651 <div class="body-text"> 1652 <p>Every string instrument deserves a home on your wall. We’ve designed hangers for violins, cellos, basses, dulcimers, mandolins and ukuleles, so no part of your ensemble is left out.</p> 1653 </div> 1654 </div> 1655 <hr> 1656 <div class="category-navigation-wrapper"> 1657 <div class="category-navigation body-text3"> 1658 <div class="category-navigation-item"> 1659 <a href="/guitars/">Guitars</a> 1660 </div> 1661 <div class="category-navigation-item"> 1662 <a href="/shop-all/string-instruments-1/">String Instruments</a> 1663 </div> 1664 <div class="category-navigation-item"> 1665 <a href="/shop-all/wind-instruments/">Brass & Wind</a> 1666 </div> 1667 <div class="category-navigation-item"> 1668 <a href="/shop/miscellaneous/">Miscellaneous</a> 1669 </div> 1670 <div class="category-navigation-item"> 1671 <a href="/shop/stage-hangers/">Stage Hangers</a> 1672 </div> 1673 <div class="category-navigation-item"> 1674 <a href="/store-displays/">Store Displays</a> 1675 </div> 1676 </div> 1677 </div> 1678 </div> 1679 </div> 1680 <div data-content-region="category_below_header"></div> 1681</div> 1682 1683
1684<script> 1685$(document).ready(function () { 1686 var currentUrl = window.location.pathname.toLowerCase(); 1687 // ----------------------------- 1688 // CATEGORY MAPPING (UNCHANGED) 1689 // ----------------------------- 1690 var categoryMap = { 1691 "stringed-instruments": "String Instruments", 1692 "brass-wind-instruments": "Brass & Wind" 1693 }; 1694 function setActiveByName(categoryName) { 1695 $('.category-navigation-item a').each(function () { 1696 var $link = $(this); 1697 var linkText = $link.text().trim().toLowerCase(); 1698 1699 if (linkText === categoryName.toLowerCase()) { 1700 $link.closest('.category-navigation-item').addClass('active'); 1701 } 1702 }); 1703 } 1704 // ----------------------------------- 1705 // 1. STORE DISPLAYS RULES (EXPANDED) 1706 // ----------------------------------- 1707 if ( 1708 currentUrl.includes('/miscelaneous') && 1709 !currentUrl.includes('/shop/miscelaneous') && 1710 !currentUrl.includes('/all-shop/miscelaneous') 1711 ) { 1712 setActiveByName('Store Displays'); 1713 } 1714 else if ( 1715 currentUrl.includes('/floor-racks') || 1716 currentUrl.includes('/slatwall-displays') || 1717 currentUrl.includes('/store-displays') 1718 ) { 1719 setActiveByName('Store Displays'); 1720 } 1721 // ----------------------------------- 1722 // 2. SHOP / ALL-SHOP MISC RULE 1723 // ----------------------------------- 1724 else if ( 1725 currentUrl.includes('/shop/miscelaneous') || 1726 currentUrl.includes('/all-shop/miscelaneous') 1727 ) { 1728 setActiveByName('Miscellaneous'); 1729 } 1730 // ----------------------------------- 1731 // 3. OLD LOGIC (SAFE FALLBACK) 1732 // ----------------------------------- 1733 else { 1734 $('.category-navigation-item a').each(function () { 1735 var $link = $(this); 1736 var href = ($link.attr('href') || '').toLowerCase(); 1737 if (href && currentUrl.includes(href)) { 1738 $link.closest('.category-navigation-item').addClass('active'); 1739 } 1740 $.each(categoryMap, function (keyword, categoryName) { 1741 if (currentUrl.includes(keyword)) { 1742 if ($link.text().trim().toLowerCase() === categoryName.toLowerCase()) { 1743 $link.closest('.category-navigation-item').addClass('active'); 1744 } 1745 } 1746 }); 1747 }); 1748 } 1749}); 1750/* Scroll state for category navigation at 10-09-2026 Start */ 1751function updateScrollState(el) { 1752 const isAtEnd = Math.ceil(el.scrollLeft + el.clientWidth) >= el.scrollWidth; 1753 const wrapper = el.closest('.category-navigation-wrapper') || el; 1754 wrapper.classList.toggle('not-scrolled-end', !isAtEnd); 1755} 1756 1757document.querySelectorAll('.category-navigation').forEach((el) => { 1758 // set initial state 1759 updateScrollState(el); 1760 1761 el.addEventListener('scroll', () => updateScrollState(el)); 1762}); 1763 1764// re-check on resize too, since scrollWidth can change 1765window.addEventListener('resize', () => { 1766 document.querySelectorAll('.category-navigation').forEach(updateScrollState); 1767}); 1768/* Scroll state for category navigation at 10-09-2026 End */ 1769</script>
1769 1770 1771
1772<script> 1773//$(document).ready(function () { 1774// var currentUrl = window.location.pathname.toLowerCase(); 1775// $('.category-navigation-item a').each(function () { 1776// var linkUrl = $(this).attr('href').toLowerCase(); 1777// // Check if current URL contains the link URL 1778// if (linkUrl !== "" && currentUrl.includes(linkUrl)) { 1779// $(this).closest('.category-navigation-item').addClass('active'); 1780// } 1781// }); 1782//}); 1783</script>
1783 1784 1785 <div id="collection-main"> 1786 <div class="page-section wide collection-main ss-global"> 1787 <div class="collection-nav"> 1788 <form class="actionBar" method="get" data-sort-by="product"> 1789 <div class="dropdown SortWrap"> 1790 <div class="dropdown-button"> 1791 <div class="svg-filter small2 thin"> 1792 <svg id="a" data-name="all" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"> 1793 <line x1="0" y1="6" x2="48" y2="6" stroke-width= "1.125px" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round"></line> 1794 <line x1="10.5" y1="24" x2="37.5" y2="24" stroke-width= "1.193px" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round"></line> 1795 <line x1="27" y1="42" x2="21" y2="42" stroke-width= "1.125px" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round"></line> 1796 </svg> 1797 </div> 1798 <div class="body-text2">Sort By: <span class="select-option-selected body-text2 black">Featured Items</span></div> 1799 </div> 1800 <div class="dropdown-content text-box5 custom-tabs select-options"> 1801 <div class="select-option dropdown-item body-text2 custom-tab active"><a href="?sort=featured&search_query=">Featured Items</a></div> 1802 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=newest&search_query=">Newest</a></div> 1803 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=bestselling&search_query=">Best Selling</a></div> 1804 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=alphaasc&search_query=">A–Z</a></div> 1805 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=alphadesc&search_query=">Z–A</a></div> 1806 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=avgcustomerreview&search_query=">Top Rated</a></div> 1807 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=priceasc&search_query=">Price (Ascending)</a></div> 1808 <div class="select-option dropdown-item body-text2 custom-tab"><a href="?sort=pricedesc&search_query=">Price (Descending)</a></div> 1809 </div> 1810</div> 1811
1812<script> 1813(function ($) { 1814 // Map sort values to labels 1815 const sortMap = { 1816 featured: 'Featured Items', 1817 newest: 'Newest', 1818 bestselling: 'Best Selling', 1819 alphaasc: 'A–Z', 1820 alphadesc: 'Z–A', 1821 avgcustomerreview: 'Top Rated', 1822 priceasc: 'Price (Ascending)', 1823 pricedesc: 'Price (Descending)' 1824 }; 1825 // Function to get URL param 1826 function getUrlParam(param) { 1827 const params = new URLSearchParams(window.location.search); 1828 return params.get(param); 1829 } 1830 // Update dropdown based on URL 1831 function updateSortFromUrl() { 1832 const sortValue = getUrlParam('sort') || 'featured'; 1833 $('.dropdown').each(function () { 1834 const $dropdown = $(this); 1835 const label = sortMap[sortValue]; 1836 if (!label) return; 1837 // Update button text 1838 $dropdown.find('.select-option-selected').text(label); 1839 // Update active state 1840 $dropdown.find('.select-option').removeClass('active'); 1841 $dropdown.find(`a[href*="sort=${sortValue}"]`) 1842 .closest('.select-option') 1843 .addClass('active'); 1844 }); 1845 } 1846 // Run on page load 1847 $(document).ready(function () { 1848 updateSortFromUrl(); 1849 }); 1850 // Handle click (instant UI update before reload) 1851 $(document).on('click', '.dropdown .select-option a', function () { 1852 const text = $.trim($(this).text()); 1853 const $dropdown = $(this).closest('.dropdown'); 1854 $dropdown.find('.select-option-selected').text(text); 1855 $dropdown.find('.select-option').removeClass('active'); 1856 $(this).closest('.select-option').addClass('active'); 1857 }); 1858})(jQuery); 1859</script>
1859 1860 1861 1862</form> 1863 <div class="body-text product-amount"><span id="product-val"></span><span id="product-val-default">21</span> Products</div> 1864 </div> 1865 <div class="products-wrapper"> 1866 <aside class="page-sidebar" id="faceted-search-container"> 1867 1868 1869 1870 1871 1872 1873 1874<nav> 1875 <div class="dropdown black plus sidebarBlock"> 1876 <div class="dropdown-button"> 1877 <div class="body-text2 black mm">Shop All</div> 1878 <div class="svg-plus small thin"> 1879 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 1880 <g> 1881 <path d="M24.56.56v48M48.56,24.56H.56" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path> 1882 </g> 1883 </svg> 1884 </div> 1885 </div> 1886 <div class="dropdown-content text-box5 tabs -navList"> 1887 <div class="body-text2 dropdown-item -navList-item main-cat is-active"> 1888 <a class="-body-text2 -navList-action" href="#product-listing-container" title="All String Instruments" data-categoryUrl="https://www.stringswing.com/shop-all/string-instruments-1/?limit=99">All String Instruments</a> 1889 </div> 1890 <div class="body-text2 special-item -navList-item"> 1891 <a class="-body-text2 -navList-action" href="/guitars/" aria-label="Guitars"> 1892 Guitars 1893 </a> 1894 </div> 1895 <div class="body-text2 dropdown-item -navList-item" data-categoryUrl="https://www.stringswing.com/shop-all/stringed-instruments/ukulele/?limit=99"> 1896 <a class="-body-text2 -navList-action" href="#subcat-ukulele" title="Ukulele">Ukulele</a> 1897 </div> 1898 <div class="body-text2 dropdown-item -navList-item" data-categoryUrl="https://www.stringswing.com/shop-all/stringed-instruments/violin/?limit=99"> 1899 <a class="-body-text2 -navList-action" href="#subcat-violin" title="Violin">Violin</a> 1900 </div> 1901 <div class="body-text2 dropdown-item -navList-item" data-categoryUrl="https://www.stringswing.com/shop-all/stringed-instruments/banjo/?limit=99"> 1902 <a class="-body-text2 -navList-action" href="#subcat-banjo" title="Banjo">Banjo</a> 1903 </div> 1904 <div class="body-text2 dropdown-item -navList-item" data-categoryUrl="https://www.stringswing.com/shop-all/stringed-instruments/cello/?limit=99"> 1905 <a class="-body-text2 -navList-action" href="#subcat-cello" title="Cello">Cello</a> 1906 </div> 1907 <div class="body-text2 dropdown-item -navList-item" data-categoryUrl="https://www.stringswing.com/shop-all/stringed-instruments/dulcimer/?limit=99"> 1908 <a class="-body-text2 -navList-action" href="#subcat-dulcimer" title="Dulcimer">Dulcimer</a> 1909 </div> 1910 </div> 1911 </div> 1912 </nav> 1913 1914
1915<script> 1916$(document).ready(function () { 1917 $(function () { 1918 if ( 1919 $('.sidebarBlock .dropdown-content .dropdown-item.is-active').length && 1920 $('.sidebarBlock .dropdown-content .dropdown-item.is-active').not('.main-cat').length 1921 ) { 1922 $('.sidebarBlock .dropdown-content .dropdown-item.main-cat').removeClass('is-active'); 1923 } 1924 }); 1925 1926 // Check karein ke .main-cat ke ilawa koi aur dropdown-item .is-active hai ya nahi 1927 const $otherActiveItem = $('.sidebarBlock .dropdown-content .dropdown-item.is-active:not(.main-cat)'); 1928 // Sirf tab hi .main-cat ka href update karein 1929 if ($otherActiveItem.length) { 1930 // Collection page se active category link find karein 1931 let $activeLink = $('.collection-page .collection-hero .category-navigation > .active'); 1932 // Agar .active parent element par hai to us ka <a> lein 1933 if ($activeLink.length && !$activeLink.is('a')) { 1934 $activeLink = $activeLink.find('a').first(); 1935 } 1936 // Fallback: direct <a class="active"> 1937 if (!$activeLink.length) { 1938 $activeLink = $('.collection-page .collection-hero .category-navigation a.active').first(); 1939 } 1940 // href hasil karein 1941 const mainCatUrl = $activeLink.attr('href'); 1942 // Agar valid href mil jaye to .main-cat ke anchor ko update karein 1943 if (mainCatUrl) { 1944 $('.sidebarBlock .dropdown-content .dropdown-item.main-cat > a').attr('href', mainCatUrl); 1945 } 1946 } 1947}); 1948</script>
1948 1949 1950 1951 1952 1953 1954 </aside> 1955 <div class="page-content collection-products is-active" id="product-listing-container"> 1956 1957 1958 1959 1960 1961 <div data-list-name="Category: Guitar" role="region" aria-label="Filtered products"> 1962 <ul class="productGrid"> 1963 <li class="product"> 1964 <article 1965 class="card 1966 " 1967 data-product-id="473" 1968 product-id="473" 1969 data-test="card-473" 1970 data-event-type="list" 1971 data-entity-id="473" 1972 data-position="1" 1973 data-name="Guitar Wall Rack for 10 Guitars" 1974 data-product-category=" 1975 Shop All, 1976 Shop All/String Instruments, 1977 Shop All/String Instruments/Guitar, 1978 Guitars, 1979 Guitars/Multi-Guitar Racks 1980 " 1981 data-product-brand="" 1982 data-product-price=" 1983 347.78 1984" 1985> 1986 <!-- Sku base section show hide compare with en.json and custom field both --> 1987 1988 <!-- Product Description --> 1989 1990 <figure class="card-figure"> 1991 1992 <a href="https://www.stringswing.com/multi-guitar-wall-rack-for-10-guitars-sw10rl-k/" 1993 class="card-figure__link" 1994 aria-label="Guitar Wall Rack for 10 Guitars, Price range from $347.78 to $387.78 1995 1996" 1997 data-event-type="product-click" 1998 > 1999 <div class="card-img-container"> 2000 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1" alt="Black | 1" title="Black | 1" data-sizes="auto" 2001 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1" 2002data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/473/1496/SW10RL-B-K-Main_1__11040.1774887786.png?c=1 2560w" 2003 2004class="lazyload card-image" 2005 2006 /> 2007 </div> 2008 </a> 2009 </figure> 2010 <div class="card-body text-box4"> 2011 <h3 class="card-title heading4 black"> 2012 <a 2013 class="heading4 black" 2014 aria-label="Guitar Wall Rack for 10 Guitars, Price range from $347.78 to $387.78 2015 2016" 2017 href="https://www.stringswing.com/multi-guitar-wall-rack-for-10-guitars-sw10rl-k/" 2018 data-event-type="product-click" 2019 > 2020 Guitar Wall Rack for 10 Guitars 2021 </a> 2022 </h3> 2023 <hr> 2024 <div class="bottom"> 2025 <div class="card-text product-price body-text" data-test-info-type="price"> 2026 2027 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;"> 2028 <span> 2029 MSRP: 2030 </span> 2031 <span data-product-rrp-price-without-tax class="price price--rrp"> 2032 $417.34 2033 </span> 2034 </div> 2035 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2036 <span> 2037 Was: 2038 </span> 2039 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2040 2041 </span> 2042 </div> 2043 <div class="price-section price-section--withoutTax">
2044 <span class="price-label"></span> 2045 <span class="price-now-label" style="display: none;"> 2046 Now: 2047 </span> 2048 <span class="range-price-with-from"> 2049 <span class="form-text">From</span> 2050 <span data-product-price-without-tax class="price price--withoutTax">$347.78</span> 2051 </span> 2052 </div> 2053 2054 </div> 2055 <!-- Customer Rating --> 2056 <div class="customer-rating"> 2057 <span class="stamped-product-reviews-badge" data-id="473" style="display:block;"></span> 2058 </div> 2059 </div> 2060 </div> 2061 2062 <div class="view-product-wrapper"> 2063 <div class="view-product"> 2064 <a href="https://www.stringswing.com/multi-guitar-wall-rack-for-10-guitars-sw10rl-k/" class="view-product-inner body-text3"> 2065 View Product 2066 <span class="svg-right-arrow small thin"> 2067 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2068 <g> 2069 <g> 2070 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2071 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2072 </g> 2073 </g> 2074 </svg> 2075 </span> 2076 </a> 2077 </div> 2078 </div> 2079</article> 2080 </li> 2081 <li class="product"> 2082 <article 2083 class="card 2084 " 2085 data-product-id="411" 2086 product-id="411" 2087 data-test="card-411" 2088 data-event-type="list" 2089 data-entity-id="411" 2090 data-position="2" 2091 data-name="Multiple Guitar Wall Rack" 2092 data-product-category=" 2093 Shop All, 2094 Shop All/String Instruments, 2095 Shop All/String Instruments/Guitar, 2096 Guitars, 2097 Guitars/Multi-Guitar Racks 2098 " 2099 data-product-brand="" 2100 data-product-price=" 2101 173.89 2102" 2103> 2104 <!-- Sku base section show hide compare with en.json and custom field both --> 2105 2106 <!-- Product Description --> 2107 2108 <figure class="card-figure"> 2109 2110 <a href="https://www.stringswing.com/rack-for-5-acoustic-or-electric-guitars/" 2111 class="card-figure__link" 2112 aria-label="Multiple Guitar Wall Rack, Price range from $173.89 to $193.89 2113 2114" 2115 data-event-type="product-click" 2116 > 2117 <div class="card-img-container"> 2118 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1" alt="Black | 1" title="Black | 1" data-sizes="auto" 2119 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1" 2120data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/411/1851/SW5RL-B-K-Main__59195.1775508483.png?c=1 2560w" 2121 2122class="lazyload card-image" 2123 2124 /> 2125 </div> 2126 </a> 2127 </figure> 2128 <div class="card-body text-box4"> 2129 <h3 class="card-title heading4 black"> 2130 <a 2131 class="heading4 black" 2132 aria-label="Multiple Guitar Wall Rack, Price range from $173.89 to $193.89 2133 2134" 2135 href="https://www.stringswing.com/rack-for-5-acoustic-or-electric-guitars/" 2136 data-event-type="product-click" 2137 > 2138 Multiple Guitar Wall Rack 2139 </a> 2140 </h3> 2141 <hr> 2142 <div class="bottom"> 2143 <div class="card-text product-price body-text" data-test-info-type="price"> 2144 2145 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;">
2146 <span> 2147 MSRP: 2148 </span> 2149 <span data-product-rrp-price-without-tax class="price price--rrp"> 2150 $208.67 2151 </span> 2152 </div> 2153 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2154 <span> 2155 Was: 2156 </span> 2157 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2158 2159 </span> 2160 </div> 2161 <div class="price-section price-section--withoutTax"> 2162 <span class="price-label"></span> 2163 <span class="price-now-label" style="display: none;"> 2164 Now: 2165 </span> 2166 <span class="range-price-with-from"> 2167 <span class="form-text">From</span> 2168 <span data-product-price-without-tax class="price price--withoutTax">$173.89</span> 2169 </span> 2170 </div> 2171 2172 </div> 2173 <!-- Customer Rating --> 2174 <div class="customer-rating"> 2175 <span class="stamped-product-reviews-badge" data-id="411" style="display:block;"></span> 2176 </div> 2177 </div> 2178 </div> 2179 2180 <div class="view-product-wrapper"> 2181 <div class="view-product"> 2182 <a href="https://www.stringswing.com/rack-for-5-acoustic-or-electric-guitars/" class="view-product-inner body-text3"> 2183 View Product 2184 <span class="svg-right-arrow small thin"> 2185 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2186 <g> 2187 <g> 2188 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2189 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2190 </g> 2191 </g> 2192 </svg> 2193 </span> 2194 </a> 2195 </div> 2196 </div> 2197</article> 2198 </li> 2199 <li class="product testimony space-between"> 2200 <div class="testimony-quote heading2">"I ordered tuba, alto saxophone, soprano saxophone, clarinet and trumpet mounts ... I get compliments from all our friends and most importantly, my husband can grab them from the mount and <span class="bold">play anytime he wants.</span>"</div> 2201 <div class="text-box6"> 2202 <div class="testimony-name heading4">Olga B.</div> 2203 <div class="testimony-position body-text2 black"> 2204 <div class="svg-verified small2 thin"> 2205 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 2206 <g id="c" data-name="all"> 2207 <path d="M18.3,1.12l4.24,2.49c1.25.73,2.8.73,4.05,0l4.24-2.49c2.29-1.34,5.22-.13,5.89,2.44l1.23,4.76c.36,1.4,1.46,2.5,2.86,2.86l4.76,1.23c2.57.67,3.78,3.6,2.44,5.89l-2.49,4.24c-.73,1.25-.73,2.8,0,4.05l2.49,4.24c1.34,2.29.13,5.22-2.44,5.89l-4.76,1.23c-1.4.36-2.5,1.46-2.86,2.86l-1.23,4.76c-.67,2.57-3.6,3.78-5.89,2.44l-4.24-2.49c-1.25-.73-2.8-.73-4.05,0l-4.24,2.49c-2.29,1.34-5.22.13-5.89-2.44l-1.23-4.76c-.36-1.4-1.46-2.5-2.86-2.86l-4.76-1.23c-2.57-.67-3.78-3.6-2.44-5.89l2.49-4.24c.73-1.25.73-2.8,0-4.05l-2.49-4.24c-1.34-2.29-.13-5.22,2.44-5.89l4.76-1.23c1.4-.36,2.5-1.46,2.86-2.86l1.23-4.76c.67-2.57,3.6-3.78,5.89-2.44ZM15.58,24.56l5.99,5.99,11.97-11.97" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path> 2208 </g> 2209 </svg> 2210 </div> 2211 Verified Customer 2212 </div> 2213 </div> 2214 </li> 2215 <li class="product"> 2216 <article 2217 class="card 2218 " 2219 data-product-id="322" 2220 product-id="322" 2221 data-test="card-322" 2222 data-event-type="list" 2223 data-entity-id="322" 2224 data-position="3" 2225 data-name="Wooden Guitar Wall Mount" 2226 data-product-category=" 2227 Shop All, 2228 Shop All/String Instruments, 2229 Shop All/String Instruments/Guitar, 2230 Guitars, 2231 Guitars/Single Guitar Racks 2232 " 2233 data-product-brand="" 2234 data-product-price=" 2235 18.99 2236" 2237> 2238 <!-- Sku base section show hide compare with en.json and custom field both --> 2239 2240 <!-- Product Description --> 2241 2242 <figure class="card-figure"> 2243 2244 <a href="https://www.stringswing.com/guitar-hanger-hardwood-wall-mount-for-acoustic-and-electric-guitars/" 2245 class="card-figure__link" 2246 aria-label="Wooden Guitar Wall Mount, $18.99 2247 2248" 2249 data-event-type="product-click" 2250 > 2251 <div class="card-img-container"> 2252 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1" alt="Wooden Guitar Wall Mount" title="Wooden Guitar Wall Mount" data-sizes="auto" 2253 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1" 2254data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/322/1513/CC01K-BWThumb__04593.1774986321.png?c=1 2560w" 2255 2256class="lazyload card-image" 2257 2258 /> 2259 </div> 2260 </a> 2261 </figure> 2262 <div class="card-body text-box4"> 2263 <h3 class="card-title heading4 black"> 2264 <a 2265 class="heading4 black" 2266 aria-label="Wooden Guitar Wall Mount, $18.99 2267 2268" 2269 href="https://www.stringswing.com/guitar-hanger-hardwood-wall-mount-for-acoustic-and-electric-guitars/" 2270 data-event-type="product-click" 2271 > 2272 Wooden Guitar Wall Mount 2273 </a> 2274 </h3> 2275 <hr> 2276 <div class="bottom"> 2277 <div class="card-text product-price body-text" data-test-info-type="price"> 2278 2279 <div class="price-section price-section--withoutTax rrp-price--withoutTax" >
2280 <span class="price-label"> 2281 MSRP: 2282 </span> 2283 <span data-product-rrp-price-without-tax class="price price--rrp"> 2284 $22.79 2285 </span> 2286 </div> 2287 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2288 <span class="price-label"> 2289 Was: 2290 </span> 2291 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2292 2293 </span> 2294 </div> 2295 <div class="price-section price-section--withoutTax"> 2296 <span class="price-label" > 2297 2298 </span> 2299 <span class="price-now-label" style="display: none;"> 2300 Now: 2301 </span> 2302 <span data-product-price-without-tax class="price price--withoutTax">$18.99</span> 2303 </div> 2304 </div> 2305 <!-- Customer Rating --> 2306 <div class="customer-rating"> 2307 <span class="stamped-product-reviews-badge" data-id="322" style="display:block;"></span> 2308 </div> 2309 </div> 2310 </div> 2311 2312 <div class="view-product-wrapper"> 2313 <div class="view-product"> 2314 <a href="https://www.stringswing.com/guitar-hanger-hardwood-wall-mount-for-acoustic-and-electric-guitars/" class="view-product-inner body-text3"> 2315 View Product 2316 <span class="svg-right-arrow small thin"> 2317 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2318 <g> 2319 <g> 2320 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2321 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2322 </g> 2323 </g> 2324 </svg> 2325 </span> 2326 </a> 2327 </div> 2328 </div> 2329</article> 2330 </li> 2331 <li class="product"> 2332 <article 2333 class="card 2334 " 2335 data-product-id="483" 2336 product-id="483" 2337 data-test="card-483" 2338 data-event-type="list" 2339 data-entity-id="483" 2340 data-position="4" 2341 data-name="Plush Cradle Cover for Nitro Safe Guitar Hanger" 2342 data-product-category=" 2343 Shop All, 2344 Shop All/String Instruments, 2345 Shop All/String Instruments/Guitar, 2346 Guitars, 2347 Guitars/Guitar Add-Ons 2348 " 2349 data-product-brand="" 2350 data-product-price=" 2351 18.99 2352" 2353> 2354 <!-- Sku base section show hide compare with en.json and custom field both --> 2355 2356 <!-- Product Description --> 2357 2358 <figure class="card-figure"> 2359 2360 <a href="https://www.stringswing.com/nitro-safe-guitar-stand-plush-cradle-cover/" 2361 class="card-figure__link" 2362 aria-label="Plush Cradle Cover for Nitro Safe Guitar Hanger, $18.99 2363 2364" 2365 data-event-type="product-click" 2366 > 2367 <div class="card-img-container"> 2368 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1" alt="Plush Cradle Cover for Nitro Safe Guitar Hanger" title="Plush Cradle Cover for Nitro Safe Guitar Hanger" data-sizes="auto" 2369 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1" 2370data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/483/1362/Plush_cover5745_0000__57280.1701721290.jpg?c=1 2560w" 2371 2372class="lazyload card-image" 2373 2374 /> 2375 </div> 2376 </a> 2377 </figure> 2378 <div class="card-body text-box4"> 2379 <h3 class="card-title heading4 black"> 2380 <a 2381 class="heading4 black" 2382 aria-label="Plush Cradle Cover for Nitro Safe Guitar Hanger, $18.99 2383 2384" 2385 href="https://www.stringswing.com/nitro-safe-guitar-stand-plush-cradle-cover/" 2386 data-event-type="product-click" 2387 > 2388 Plush Cradle Cover 2389 </a> 2390 </h3> 2391 <hr> 2392 <div class="bottom"> 2393 <div class="card-text product-price body-text" data-test-info-type="price"> 2394 2395 <div class="price-section price-section--withoutTax rrp-price--withoutTax" >
2396 <span class="price-label"> 2397 MSRP: 2398 </span> 2399 <span data-product-rrp-price-without-tax class="price price--rrp"> 2400 $22.79 2401 </span> 2402 </div> 2403 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2404 <span class="price-label"> 2405 Was: 2406 </span> 2407 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2408 2409 </span> 2410 </div> 2411 <div class="price-section price-section--withoutTax"> 2412 <span class="price-label" > 2413 2414 </span> 2415 <span class="price-now-label" style="display: none;"> 2416 Now: 2417 </span> 2418 <span data-product-price-without-tax class="price price--withoutTax">$18.99</span> 2419 </div> 2420 </div> 2421 <!-- Customer Rating --> 2422 <div class="customer-rating"> 2423 <span class="stamped-product-reviews-badge" data-id="483" style="display:block;"></span> 2424 </div> 2425 </div> 2426 </div> 2427 2428 <div class="view-product-wrapper"> 2429 <div class="view-product"> 2430 <a href="https://www.stringswing.com/nitro-safe-guitar-stand-plush-cradle-cover/" class="view-product-inner body-text3"> 2431 View Product 2432 <span class="svg-right-arrow small thin"> 2433 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2434 <g> 2435 <g> 2436 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2437 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2438 </g> 2439 </g> 2440 </svg> 2441 </span> 2442 </a> 2443 </div> 2444 </div> 2445</article> 2446 </li> 2447 <li class="product"> 2448 <article 2449 class="card 2450 " 2451 data-product-id="478" 2452 product-id="478" 2453 data-test="card-478" 2454 data-event-type="list" 2455 data-entity-id="478" 2456 data-position="5" 2457 data-name="Guitar Rack for 3 Guitars" 2458 data-product-category=" 2459 Shop All, 2460 Shop All/String Instruments, 2461 Shop All/String Instruments/Guitar, 2462 Guitars, 2463 Guitars/Multi-Guitar Racks 2464 " 2465 data-product-brand="" 2466 data-product-price=" 2467 95.94 2468" 2469> 2470 <!-- Sku base section show hide compare with en.json and custom field both --> 2471 2472 <!-- Product Description --> 2473 2474 <figure class="card-figure"> 2475 2476 <a href="https://www.stringswing.com/3-guitar-wall-rack-sw3rl/" 2477 class="card-figure__link" 2478 aria-label="Guitar Rack for 3 Guitars, Price range from $95.94 to $105.94 2479 2480" 2481 data-event-type="product-click" 2482 > 2483 <div class="card-img-container"> 2484 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1" alt="Black" title="Black" data-sizes="auto" 2485 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1" 2486data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/478/1858/SW3RL-B-K-Main__38528.1775673820.png?c=1 2560w" 2487 2488class="lazyload card-image" 2489 2490 /> 2491 </div> 2492 </a> 2493 </figure> 2494 <div class="card-body text-box4"> 2495 <h3 class="card-title heading4 black"> 2496 <a 2497 class="heading4 black" 2498 aria-label="Guitar Rack for 3 Guitars, Price range from $95.94 to $105.94 2499 2500" 2501 href="https://www.stringswing.com/3-guitar-wall-rack-sw3rl/" 2502 data-event-type="product-click" 2503 > 2504 Guitar Rack for 3 Guitars 2505 </a> 2506 </h3> 2507 <hr> 2508 <div class="bottom"> 2509 <div class="card-text product-price body-text" data-test-info-type="price"> 2510 2511 <div class="price-section price-section--withoutTax rrp-price--withoutTax">
2512 <span> 2513 MSRP: 2514 </span> 2515 <span data-product-rrp-price-without-tax class="price price--rrp">$107.99 - $115.13</span> 2516 </div> 2517 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2518 <span> 2519 Was: 2520 </span> 2521 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2522 2523 </span> 2524 </div> 2525 <div class="price-section price-section--withoutTax"> 2526 <span class="price-label"></span> 2527 <span class="price-now-label" style="display: none;"> 2528 Now: 2529 </span> 2530 <span class="range-price-with-from"> 2531 <span class="form-text">From</span> 2532 <span data-product-price-without-tax class="price price--withoutTax">$95.94</span> 2533 </span> 2534 </div> 2535 2536 </div> 2537 <!-- Customer Rating --> 2538 <div class="customer-rating"> 2539 <span class="stamped-product-reviews-badge" data-id="478" style="display:block;"></span> 2540 </div> 2541 </div> 2542 </div> 2543 2544 <div class="view-product-wrapper"> 2545 <div class="view-product"> 2546 <a href="https://www.stringswing.com/3-guitar-wall-rack-sw3rl/" class="view-product-inner body-text3"> 2547 View Product 2548 <span class="svg-right-arrow small thin"> 2549 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2550 <g> 2551 <g> 2552 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2553 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2554 </g> 2555 </g> 2556 </svg> 2557 </span> 2558 </a> 2559 </div> 2560 </div> 2561</article> 2562 </li> 2563 <li class="product"> 2564 <article 2565 class="card 2566 " 2567 data-product-id="475" 2568 product-id="475" 2569 data-test="card-475" 2570 data-event-type="list" 2571 data-entity-id="475" 2572 data-position="6" 2573 data-name="Guitar and Guitar Case Storage Rack Set" 2574 data-product-category=" 2575 Shop All, 2576 Shop All/String Instruments, 2577 Shop All/String Instruments/Guitar, 2578 Guitars, 2579 Guitars/Freestanding Displays 2580 " 2581 data-product-brand="" 2582 data-product-price=" 2583 251.98 2584" 2585> 2586 <!-- Sku base section show hide compare with en.json and custom field both --> 2587 2588 <!-- Product Description --> 2589 2590 <figure class="card-figure"> 2591 2592 <a href="https://www.stringswing.com/guitar-and-case-floor-rack-set-cc34-29/" 2593 class="card-figure__link" 2594 aria-label="Guitar and Guitar Case Storage Rack Set, Price range from $251.98 to $350.98 2595 2596" 2597 data-event-type="product-click" 2598 > 2599 <div class="card-img-container"> 2600 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/475/1375/CC34-29__49230.1732220277.jpg?c=1" alt="Ash-Oak" title="Ash-Oak" data-sizes="auto" 2601 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1" 2602data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/475/1375/CC34-29__49230.1732220277.jpg?c=1 2560w" 2603 2604class="lazyload card-image" 2605 2606 /> 2607 </div> 2608 </a> 2609 </figure> 2610 <div class="card-body text-box4"> 2611 <h3 class="card-title heading4 black"> 2612 <a 2613 class="heading4 black" 2614 aria-label="Guitar and Guitar Case Storage Rack Set, Price range from $251.98 to $350.98 2615 2616" 2617 href="https://www.stringswing.com/guitar-and-case-floor-rack-set-cc34-29/" 2618 data-event-type="product-click" 2619 > 2620 Guitar and Guitar Case Storage Rack Set 2621 </a> 2622 </h3> 2623 <hr> 2624 <div class="bottom"> 2625 <div class="card-text product-price body-text" data-test-info-type="price"> 2626 2627 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;">
2628 <span> 2629 MSRP: 2630 </span> 2631 <span data-product-rrp-price-without-tax class="price price--rrp"> 2632 2633 </span> 2634 </div> 2635 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2636 <span> 2637 Was: 2638 </span> 2639 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2640 2641 </span> 2642 </div> 2643 <div class="price-section price-section--withoutTax"> 2644 <span class="price-label"></span> 2645 <span class="price-now-label" style="display: none;"> 2646 Now: 2647 </span> 2648 <span class="range-price-with-from"> 2649 <span class="form-text">From</span> 2650 <span data-product-price-without-tax class="price price--withoutTax">$251.98</span> 2651 </span> 2652 </div> 2653 2654 </div> 2655 <!-- Customer Rating --> 2656 <div class="customer-rating"> 2657 <span class="stamped-product-reviews-badge" data-id="475" style="display:block;"></span> 2658 </div> 2659 </div> 2660 </div> 2661 2662 <div class="view-product-wrapper"> 2663 <div class="view-product"> 2664 <a href="https://www.stringswing.com/guitar-and-case-floor-rack-set-cc34-29/" class="view-product-inner body-text3"> 2665 View Product 2666 <span class="svg-right-arrow small thin"> 2667 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2668 <g> 2669 <g> 2670 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2671 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2672 </g> 2673 </g> 2674 </svg> 2675 </span> 2676 </a> 2677 </div> 2678 </div> 2679</article> 2680 </li> 2681 <li class="product"> 2682 <article 2683 class="card 2684 " 2685 data-product-id="366" 2686 product-id="366" 2687 data-test="card-366" 2688 data-event-type="list" 2689 data-entity-id="366" 2690 data-position="7" 2691 data-name="Wooden Guitar Stand Rack" 2692 data-product-category=" 2693 Shop All, 2694 Shop All/String Instruments, 2695 Shop All/String Instruments/Guitar, 2696 Guitars, 2697 Guitars/Freestanding Displays, 2698 Guitars/Multi-Guitar Racks 2699 " 2700 data-product-brand="" 2701 data-product-price=" 2702 142.99 2703" 2704> 2705 <!-- Sku base section show hide compare with en.json and custom field both --> 2706 2707 <!-- Product Description --> 2708 2709 <figure class="card-figure"> 2710 2711 <a href="https://www.stringswing.com/guitar-floor-rack-hardwood/" 2712 class="card-figure__link" 2713 aria-label="Wooden Guitar Stand Rack, Price range from $142.99 to $190.99 2714 2715" 2716 data-event-type="product-click" 2717 > 2718 <div class="card-img-container"> 2719 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1" alt="Wooden Guitar Stand Rack" title="Wooden Guitar Stand Rack" data-sizes="auto" 2720 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1" 2721data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/366/1543/CC34Oak_Thumbnail__95561.1770054869.png?c=1 2560w" 2722 2723class="lazyload card-image" 2724 2725 /> 2726 </div> 2727 </a> 2728 </figure> 2729 <div class="card-body text-box4"> 2730 <h3 class="card-title heading4 black"> 2731 <a 2732 class="heading4 black" 2733 aria-label="Wooden Guitar Stand Rack, Price range from $142.99 to $190.99 2734 2735" 2736 href="https://www.stringswing.com/guitar-floor-rack-hardwood/" 2737 data-event-type="product-click" 2738 > 2739 Wooden Guitar Stand Rack 2740 </a> 2741 </h3> 2742 <hr> 2743 <div class="bottom"> 2744 <div class="card-text product-price body-text" data-test-info-type="price"> 2745 2746 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;">
2747 <span> 2748 MSRP: 2749 </span> 2750 <span data-product-rrp-price-without-tax class="price price--rrp"> 2751 $229.19 2752 </span> 2753 </div> 2754 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2755 <span> 2756 Was: 2757 </span> 2758 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2759 2760 </span> 2761 </div> 2762 <div class="price-section price-section--withoutTax"> 2763 <span class="price-label"></span> 2764 <span class="price-now-label" style="display: none;"> 2765 Now: 2766 </span> 2767 <span class="range-price-with-from"> 2768 <span class="form-text">From</span> 2769 <span data-product-price-without-tax class="price price--withoutTax">$142.99</span> 2770 </span> 2771 </div> 2772 2773 </div> 2774 <!-- Customer Rating --> 2775 <div class="customer-rating"> 2776 <span class="stamped-product-reviews-badge" data-id="366" style="display:block;"></span> 2777 </div> 2778 </div> 2779 </div> 2780 2781 <div class="view-product-wrapper"> 2782 <div class="view-product"> 2783 <a href="https://www.stringswing.com/guitar-floor-rack-hardwood/" class="view-product-inner body-text3"> 2784 View Product 2785 <span class="svg-right-arrow small thin"> 2786 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2787 <g> 2788 <g> 2789 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2790 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2791 </g> 2792 </g> 2793 </svg> 2794 </span> 2795 </a> 2796 </div> 2797 </div> 2798</article> 2799 </li> 2800 <li class="product"> 2801 <article 2802 class="card 2803 " 2804 data-product-id="474" 2805 product-id="474" 2806 data-test="card-474" 2807 data-event-type="list" 2808 data-entity-id="474" 2809 data-position="8" 2810 data-name="Double Guitar Stand Rack Bundle" 2811 data-product-category=" 2812 Shop All, 2813 Shop All/String Instruments, 2814 Shop All/String Instruments/Guitar, 2815 Guitars, 2816 Guitars/Freestanding Displays 2817 " 2818 data-product-brand="" 2819 data-product-price=" 2820 285.98 2821" 2822> 2823 <!-- Sku base section show hide compare with en.json and custom field both --> 2824 2825 <!-- Product Description --> 2826 2827 <figure class="card-figure"> 2828 2829 <a href="https://www.stringswing.com/double-floor-guitar-rack-cc34x2/" 2830 class="card-figure__link" 2831 aria-label="Double Guitar Stand Rack Bundle, Price range from $285.98 to $381.98 2832 2833" 2834 data-event-type="product-click" 2835 > 2836 <div class="card-img-container"> 2837 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/474/1268/CC34X2__19648.1643058226.jpg?c=1" alt="Oak" title="Oak" data-sizes="auto" 2838 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1" 2839data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/474/1268/CC34X2__19648.1643058226.jpg?c=1 2560w" 2840 2841class="lazyload card-image" 2842 2843 /> 2844 </div> 2845 </a> 2846 </figure> 2847 <div class="card-body text-box4"> 2848 <h3 class="card-title heading4 black"> 2849 <a 2850 class="heading4 black" 2851 aria-label="Double Guitar Stand Rack Bundle, Price range from $285.98 to $381.98 2852 2853" 2854 href="https://www.stringswing.com/double-floor-guitar-rack-cc34x2/" 2855 data-event-type="product-click" 2856 > 2857 Double Guitar Stand Rack Bundle 2858 </a> 2859 </h3> 2860 <hr> 2861 <div class="bottom"> 2862 <div class="card-text product-price body-text" data-test-info-type="price"> 2863 2864 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;">
2865 <span> 2866 MSRP: 2867 </span> 2868 <span data-product-rrp-price-without-tax class="price price--rrp"> 2869 2870 </span> 2871 </div> 2872 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2873 <span> 2874 Was: 2875 </span> 2876 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2877 2878 </span> 2879 </div> 2880 <div class="price-section price-section--withoutTax"> 2881 <span class="price-label"></span> 2882 <span class="price-now-label" style="display: none;"> 2883 Now: 2884 </span> 2885 <span class="range-price-with-from"> 2886 <span class="form-text">From</span> 2887 <span data-product-price-without-tax class="price price--withoutTax">$285.98</span> 2888 </span> 2889 </div> 2890 2891 </div> 2892 <!-- Customer Rating --> 2893 <div class="customer-rating"> 2894 <span class="stamped-product-reviews-badge" data-id="474" style="display:block;"></span> 2895 </div> 2896 </div> 2897 </div> 2898 2899 <div class="view-product-wrapper"> 2900 <div class="view-product"> 2901 <a href="https://www.stringswing.com/double-floor-guitar-rack-cc34x2/" class="view-product-inner body-text3"> 2902 View Product 2903 <span class="svg-right-arrow small thin"> 2904 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 2905 <g> 2906 <g> 2907 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 2908 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 2909 </g> 2910 </g> 2911 </svg> 2912 </span> 2913 </a> 2914 </div> 2915 </div> 2916</article> 2917 </li> 2918 <li class="product"> 2919 <article 2920 class="card 2921 " 2922 data-product-id="354" 2923 product-id="354" 2924 data-test="card-354" 2925 data-event-type="list" 2926 data-entity-id="354" 2927 data-position="9" 2928 data-name="Guitar Case Rack Stand" 2929 data-product-category=" 2930 Shop All, 2931 Shop All/String Instruments, 2932 Shop All/String Instruments/Guitar, 2933 Guitars, 2934 Guitars/Freestanding Displays, 2935 Guitars/Multi-Guitar Racks 2936 " 2937 data-product-brand="" 2938 data-product-price=" 2939 108.99 2940" 2941> 2942 <!-- Sku base section show hide compare with en.json and custom field both --> 2943 2944 <!-- Product Description --> 2945 2946 <figure class="card-figure"> 2947 2948 <a href="https://www.stringswing.com/cc29-guitar-case-rack/" 2949 class="card-figure__link" 2950 aria-label="Guitar Case Rack Stand, Price range from $108.99 to $159.99 2951 2952" 2953 data-event-type="product-click" 2954 > 2955 <div class="card-img-container"> 2956 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/354/1557/Thumbnail__88439.1775726934.png?c=1" alt="Guitar Case Rack Stand" title="Guitar Case Rack Stand" data-sizes="auto" 2957 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/354/1557/Thumbnail__88439.1775726934.png?c=1" 2958data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/354/1557/Thumbnail__88439.1775726934.png?c=1 2560w" 2959 2960class="lazyload card-image" 2961 2962 /> 2963 </div> 2964 </a> 2965 </figure> 2966 <div class="card-body text-box4"> 2967 <h3 class="card-title heading4 black"> 2968 <a 2969 class="heading4 black" 2970 aria-label="Guitar Case Rack Stand, Price range from $108.99 to $159.99 2971 2972" 2973 href="https://www.stringswing.com/cc29-guitar-case-rack/" 2974 data-event-type="product-click" 2975 > 2976 Guitar Case Rack Stand 2977 </a> 2978 </h3> 2979 <hr> 2980 <div class="bottom"> 2981 <div class="card-text product-price body-text" data-test-info-type="price"> 2982 2983 <div class="price-section price-section--withoutTax rrp-price--withoutTax" style="display: none;">
2984 <span> 2985 MSRP: 2986 </span> 2987 <span data-product-rrp-price-without-tax class="price price--rrp"> 2988 $191.99 2989 </span> 2990 </div> 2991 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 2992 <span> 2993 Was: 2994 </span> 2995 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 2996 2997 </span> 2998 </div> 2999 <div class="price-section price-section--withoutTax"> 3000 <span class="price-label"></span> 3001 <span class="price-now-label" style="display: none;"> 3002 Now: 3003 </span> 3004 <span class="range-price-with-from"> 3005 <span class="form-text">From</span> 3006 <span data-product-price-without-tax class="price price--withoutTax">$108.99</span> 3007 </span> 3008 </div> 3009 3010 </div> 3011 <!-- Customer Rating --> 3012 <div class="customer-rating"> 3013 <span class="stamped-product-reviews-badge" data-id="354" style="display:block;"></span> 3014 </div> 3015 </div> 3016 </div> 3017 3018 <div class="view-product-wrapper"> 3019 <div class="view-product"> 3020 <a href="https://www.stringswing.com/cc29-guitar-case-rack/" class="view-product-inner body-text3"> 3021 View Product 3022 <span class="svg-right-arrow small thin"> 3023 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 3024 <g> 3025 <g> 3026 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 3027 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 3028 </g> 3029 </g> 3030 </svg> 3031 </span> 3032 </a> 3033 </div> 3034 </div> 3035</article> 3036 </li> 3037 <li class="product"> 3038 <article 3039 class="card 3040 " 3041 data-product-id="329" 3042 product-id="329" 3043 data-test="card-329" 3044 data-event-type="list" 3045 data-entity-id="329" 3046 data-position="10" 3047 data-name="Guitar Wall Hanger: Original Style" 3048 data-product-category=" 3049 Shop All, 3050 Shop All/String Instruments, 3051 Shop All/String Instruments/Guitar, 3052 Guitars, 3053 Guitars/Single Guitar Racks 3054 " 3055 data-product-brand="" 3056 data-product-price=" 3057 18.99 3058" 3059> 3060 <!-- Sku base section show hide compare with en.json and custom field both --> 3061 3062 <!-- Product Description --> 3063 3064 <figure class="card-figure"> 3065 3066 <a href="https://www.stringswing.com/original-style-hardwood-wall-mount-guitar-hanger-1/" 3067 class="card-figure__link" 3068 aria-label="Guitar Wall Hanger: Original Style, $18.99 3069 3070" 3071 data-event-type="product-click" 3072 > 3073 <div class="card-img-container"> 3074 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1" alt="Guitar Wall Hanger: Original Style" title="Guitar Wall Hanger: Original Style" data-sizes="auto" 3075 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1" 3076data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/329/2067/CC01--BWMainNG__71607.1781118955.png?c=1 2560w" 3077 3078class="lazyload card-image" 3079 3080 /> 3081 </div> 3082 </a> 3083 </figure> 3084 <div class="card-body text-box4"> 3085 <h3 class="card-title heading4 black"> 3086 <a 3087 class="heading4 black" 3088 aria-label="Guitar Wall Hanger: Original Style, $18.99 3089 3090" 3091 href="https://www.stringswing.com/original-style-hardwood-wall-mount-guitar-hanger-1/" 3092 data-event-type="product-click" 3093 > 3094 Guitar Wall Hanger: Original Style 3095 </a> 3096 </h3> 3097 <hr> 3098 <div class="bottom"> 3099 <div class="card-text product-price body-text" data-test-info-type="price"> 3100 3101 <div class="price-section price-section--withoutTax rrp-price--withoutTax" >
3102 <span class="price-label"> 3103 MSRP: 3104 </span> 3105 <span data-product-rrp-price-without-tax class="price price--rrp"> 3106 $22.79 3107 </span> 3108 </div> 3109 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 3110 <span class="price-label"> 3111 Was: 3112 </span> 3113 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 3114 3115 </span> 3116 </div> 3117 <div class="price-section price-section--withoutTax"> 3118 <span class="price-label" > 3119 3120 </span> 3121 <span class="price-now-label" style="display: none;"> 3122 Now: 3123 </span> 3124 <span data-product-price-without-tax class="price price--withoutTax">$18.99</span> 3125 </div> 3126 </div> 3127 <!-- Customer Rating --> 3128 <div class="customer-rating"> 3129 <span class="stamped-product-reviews-badge" data-id="329" style="display:block;"></span> 3130 </div> 3131 </div> 3132 </div> 3133 3134 <div class="view-product-wrapper"> 3135 <div class="view-product"> 3136 <a href="https://www.stringswing.com/original-style-hardwood-wall-mount-guitar-hanger-1/" class="view-product-inner body-text3"> 3137 View Product 3138 <span class="svg-right-arrow small thin"> 3139 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 3140 <g> 3141 <g> 3142 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 3143 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 3144 </g> 3145 </g> 3146 </svg> 3147 </span> 3148 </a> 3149 </div> 3150 </div> 3151</article> 3152 </li> 3153 <li class="product"> 3154 <article 3155 class="card 3156 " 3157 data-product-id="439" 3158 product-id="439" 3159 data-test="card-439" 3160 data-event-type="list" 3161 data-entity-id="439" 3162 data-position="11" 3163 data-name="Classical Guitar Hanger Wall Mount" 3164 data-product-category=" 3165 Shop All, 3166 Shop All/String Instruments, 3167 Shop All/String Instruments/Guitar, 3168 Guitars, 3169 Guitars/Single Guitar Racks 3170 " 3171 data-product-brand="" 3172 data-product-price=" 3173 18.99 3174" 3175> 3176 <!-- Sku base section show hide compare with en.json and custom field both --> 3177 3178 <!-- Product Description --> 3179 3180 <figure class="card-figure"> 3181 3182 <a href="https://www.stringswing.com/classical-guitar-hanger-wall-mount/" 3183 class="card-figure__link" 3184 aria-label="Classical Guitar Hanger Wall Mount, $18.99 3185 3186" 3187 data-event-type="product-click" 3188 > 3189 <div class="card-img-container"> 3190 <img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/500x659/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1" alt="Classical Guitar Hanger Wall Mount" title="Classical Guitar Hanger Wall Mount" data-sizes="auto" 3191 srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1" 3192data-srcset="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/80w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 80w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/160w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 160w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/320w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 320w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/640w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 640w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/960w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 960w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1280w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 1280w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/1920w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 1920w, https://cdn11.bigcommerce.com/s-5r2w8tg1gb/images/stencil/2560w/products/439/2076/BCC11-MainEG__70766.1781129503.png?c=1 2560w" 3193 3194class="lazyload card-image" 3195 3196 /> 3197 </div> 3198 </a> 3199 </figure> 3200 <div class="card-body text-box4"> 3201 <h3 class="card-title heading4 black"> 3202 <a 3203 class="heading4 black" 3204 aria-label="Classical Guitar Hanger Wall Mount, $18.99 3205 3206" 3207 href="https://www.stringswing.com/classical-guitar-hanger-wall-mount/" 3208 data-event-type="product-click" 3209 > 3210 Classical Guitar Hanger Wall Mount 3211 </a> 3212 </h3> 3213 <hr> 3214 <div class="bottom"> 3215 <div class="card-text product-price body-text" data-test-info-type="price"> 3216 3217 <div class="price-section price-section--withoutTax rrp-price--withoutTax" >
3218 <span class="price-label"> 3219 MSRP: 3220 </span> 3221 <span data-product-rrp-price-without-tax class="price price--rrp"> 3222 $22.79 3223 </span> 3224 </div> 3225 <div class="price-section price-section--withoutTax non-sale-price--withoutTax" style="display: none;"> 3226 <span class="price-label"> 3227 Was: 3228 </span> 3229 <span data-product-non-sale-price-without-tax class="price price--non-sale"> 3230 3231 </span> 3232 </div> 3233 <div class="price-section price-section--withoutTax"> 3234 <span class="price-label" > 3235 3236 </span> 3237 <span class="price-now-label" style="display: none;"> 3238 Now: 3239 </span> 3240 <span data-product-price-without-tax class="price price--withoutTax">$18.99</span> 3241 </div> 3242 </div> 3243 <!-- Customer Rating --> 3244 <div class="customer-rating"> 3245 <span class="stamped-product-reviews-badge" data-id="439" style="display:block;"></span> 3246 </div> 3247 </div> 3248 </div> 3249 3250 <div class="view-product-wrapper"> 3251 <div class="view-product"> 3252 <a href="https://www.stringswing.com/classical-guitar-hanger-wall-mount/" class="view-product-inner body-text3"> 3253 View Product 3254 <span class="svg-right-arrow small thin"> 3255 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 3256 <g> 3257 <g> 3258 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 3259 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 3260 </g> 3261 </g> 3262 </svg> 3263 </span> 3264 </a> 3265 </div> 3266 </div> 3267</article> 3268 </li> 3269</ul> 3270 </div> 3271 3272 <nav class="pagination" aria-label="pagination"> 3273 <div class="pagination-list"> 3274 <div class="pagination-numbers"> 3275 <div class="pagination-item pagination-item--current"> 3276 <a class="pagination-link" 3277 href="https://www.stringswing.com/shop-all/stringed-instruments/guitar/?page=1" 3278 data-faceted-search-facet 3279 aria-current="page" 3280 data-pagination-current-page-link 3281 aria-label="Page 1 of 2" 3282 > 3283 1 3284 </a> 3285 </div> 3286 <div class="pagination-item "> 3287 <a class="pagination-link" 3288 href="https://www.stringswing.com/shop-all/stringed-instruments/guitar/?page=2" 3289 data-faceted-search-facet 3290 aria-label="Page 2 of 2" 3291 > 3292 2 3293 </a> 3294 </div> 3295 </div> 3296 <div class="pagination-arrows"> 3297 <div class="pagination-item pagination-item--next"> 3298 <a class="pagination-link" 3299 href="https://www.stringswing.com/shop-all/stringed-instruments/guitar/?page=2" 3300 data-faceted-search-facet 3301 aria-label="Next" 3302 > 3303 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48.71 30.71"> 3304 <g data-name="all"> 3305 <g data-name="right-arrow"> 3306 <line y1="15.35" x2="48" y2="15.35" stroke-miterlimit="10"></line> 3307 <polyline points="33 .35 48 15.35 33 30.35" stroke-miterlimit="10"></polyline> 3308 </g> 3309 </g> 3310 </svg> 3311 </a> 3312 </div> 3313 </div> 3314 </div> 3315</nav> 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 </div> 3326 3327 <div class="page-content collection-
3327products getProduct" id="subcat-guitar"> 3328 <div class="get-products"> 3329 <div class="collection-loader"> 3330 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3331 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3332 <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3333 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3334 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3335 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3336 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3337 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3338 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3339 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3340 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3341 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3342 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3343 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3344 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3345 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3346 </circle> 3347 </svg> 3348 </div> 3349 </div> 3350 </div> 3351 <div class="page-content collection-products getProduct" id="subcat-ukulele"> 3352 <div class="get-products"> 3353 <div class="collection-loader"> 3354 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3355 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3356 <animate attributeName="r" repeatCount="indef
3356inite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3357 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3358 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3359 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3360 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3361 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3362 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3363 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3364 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3365 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3366 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3367 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3368 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3369 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3370 </circle> 3371 </svg> 3372 </div> 3373 </div> 3374 </div> 3375 <div class="page-content collection-products getProduct" id="subcat-violin"> 3376 <div class="get-products"> 3377 <div class="collection-loader"> 3378 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3379 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3380 <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3381 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3382 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3383 <animate attributeName="r" repeatCount="indef
3383inite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3384 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3385 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3386 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3387 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3388 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3389 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3390 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3391 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3392 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3393 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3394 </circle> 3395 </svg> 3396 </div> 3397 </div> 3398 </div> 3399 <div class="page-content collection-products getProduct" id="subcat-banjo"> 3400 <div class="get-products"> 3401 <div class="collection-loader"> 3402 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3403 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3404 <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3405 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3406 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3407 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3408 <animate attributeName="cx" repeatCount="indef
3408inite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3409 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3410 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3411 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3412 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3413 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3414 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3415 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3416 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3417 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3418 </circle> 3419 </svg> 3420 </div> 3421 </div> 3422 </div> 3423 <div class="page-content collection-products getProduct" id="subcat-cello"> 3424 <div class="get-products"> 3425 <div class="collection-loader"> 3426 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3427 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3428 <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3429 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3430 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3431 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3432 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3433 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3434 <animate attributeName="r" repeatCount="indef
3434inite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3435 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3436 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3437 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3438 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3439 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3440 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3441 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3442 </circle> 3443 </svg> 3444 </div> 3445 </div> 3446 </div> 3447 <div class="page-content collection-products getProduct" id="subcat-dulcimer"> 3448 <div class="get-products"> 3449 <div class="collection-loader"> 3450 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; display: block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 3451 <circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3452 <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate> 3453 <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#2c2c2c;#2c2c2c;#e4fe9f;#2c2c2c;#e4fe9f" begin="0s"></animate> 3454 </circle><circle cx="16" cy="50" r="10" fill="#2c2c2c"> 3455 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3456 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate> 3457 </circle><circle cx="50" cy="50" r="10" fill="#e4fe9f"> 3458 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3459 <animate attributeName="cx" repeatCount="indef
3459inite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate> 3460 </circle><circle cx="84" cy="50" r="10" fill="#2c2c2c"> 3461 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3462 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate> 3463 </circle><circle cx="16" cy="50" r="10" fill="#e4fe9f"> 3464 <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3465 <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate> 3466 </circle> 3467 </svg> 3468 </div> 3469 </div> 3470 </div> 3471 </div> 3472 </div> 3473</div> 3474 3475<!-- Following var assign use inside the following script to change lang base quote boxes information --> 3476 3477 3478 3479
3480<script> 3481 // $(document).on('click', '#faceted-search-container .sidebarBlock .navList-item .navList-action', function (e) { 3482 $(document).on('click', '#faceted-search-container .sidebarBlock .dropdown-content .dropdown-item a', function (e) { 3483 const href = $(this).attr('href'); 3484 3485 // sirf wahi allow karo jisme # ho 3486 if (!href || href.indexOf('#') === -1) { 3487 return; // ignore normal links 3488 } 3489 3490 e.preventDefault(); 3491 3492 const categoryId = href; 3493 // e.preventDefault(); 3494 // const categoryId = $(this).attr('href') 3495 3496 3497 $('.page-sidebar .dropdown-item').removeClass('is-active'); 3498 $(this).parent().addClass('is-active'); 3499 3500 $('#product-listing-container').hide(); 3501 $('.getProduct').hide(); 3502 $(categoryId).fadeIn(); 3503 3504 const categoryUrl = $(this).closest('.dropdown-item').data('categoryurl'); 3505 getProductsFromCategory(categoryUrl, categoryId); 3506 }); 3507 function getProductsFromCategory(categoryUrl, categoryId) { 3508 const templatePath = 'category/product-listing-collection'; 3509 if (categoryUrl) { 3510 window.stencilUtils.api.getPage(categoryUrl, { template: templatePath }, (err, response) => { 3511 if (response) { 3512 $(categoryId+' .get-products').html(response); 3513 if (window.StampedFn && typeof StampedFn.loadBadges === 'function') { 3514 StampedFn.loadBadges(); 3515 } 3516 setTimeout(function(){ 3517 const totalCollectionProducts = $(categoryId+' .get-products .productGrid .product').length; 3518 // $('.collection-main .product-amount').html(totalCollectionProducts+ ' Products'); 3519 $('.collection-main .product-amount #product-val').html(totalCollectionProducts); 3520 $('.collection-nav .product-amount #product-val').show(); 3521 $('.collection-nav .product-amount #product-val-default').hide(); 3522 $('.collection-main .collection-nav .actionBar .SortWrap').hide(); 3523 if ($(categoryId+' .get-products .productGrid .product').length >= 1) { 3524 const adHTML = ` 3525 <li class="product testimony space-between"> 3526 <div class="testimony-quote heading2">"I ordered tuba, alto saxophone, soprano saxophone, clarinet and trumpet mounts ... I get compliments from all our friends and most importantly, my husband can grab them from the mount and <span class="bold">play anytime he wants.</span>"</div> 3527 <div class="text-box6"> 3528 <div class="testimony-name heading4">Olga B.</div> 3529 <div class="testimony-position body-text2 black"> 3530 <div class="svg-verified small2 thin"> 3531 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 3532 <g id="c" data-name="all"> 3533 <path d="M18.3,1.12l4.24,2.49c1.25.73,2.8.73,4.05,0l4.24-2.49c2.29-1.34,5.22-.13,5.89,2.44l1.23,4.76c.36,1.4,1.46,2.5,2.86,2.86l4.76,1.23c2.57.67,3.78,3.6,2.44,5.89l-2.49,4.24c-.73,1.25-.73,2.8,0,4.05l2.49,4.24c1.34,2.29.13,5.22-2.44,5.89l-4.76,1.23c-1.4.36-2.5,1.46-2.86,2.86l-1.23,4.76c-.67,2.57-3.6,3.78-5.89,2.44l-4.24-2.49c-1.25-.73-2.8-.73-4.05,0l-4.24,2.49c-2.29,1.34-5.22.13-5.89-2.44l-1.23-4.76c-.36-1.4-1.46-2.5-2.86-2.86l-4.76-1.23c-2.57-.67-3.78-3.6-2.44-5.89l2.49-4.24c.73-1.25.73-2.8,0-4.05l-2.49-4.24c-1.34-2.29-.13-5.22,2.44-5.89l4.76-1.23c1.4-.36,2.5-1.46,2.86-2.86l1.23-4.76c.67-2.57,3.6-3.78,5.89-2.44ZM15.58,24.56l5.99,5.99,11.97-11.97" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path> 3534 </g> 3535 </svg> 3536 </div> 3537 Verified Customer 3538 </div> 3539 </div> 3540 </li> 3541 `; 3542 // const adHTML = $('#testimonial-template').html(); 3543 // Insert after the 3rd item (index 2) 3544 $(categoryId+' .get-products .productGrid .product').eq(1).after(adHTML); 3545 } 3546 if ($(categoryId+' .get-products .productGrid .product').length >= 5) { 3547 const adHTML = ` 3548 <li class="product testimony space-between"> 3549 <div class="testimony-quote heading2">"I ordered tuba, alto saxophone, soprano saxophone, clarinet and trumpet mounts ... I get compliments from all our friends and most importantly, my husband can grab them from the mount and <span class="bold">
3549play anytime he wants.</span>"</div> 3550 <div class="text-box6"> 3551 <div class="testimony-name heading4">Olga B.</div> 3552 <div class="testimony-position body-text2 black"> 3553 <div class="svg-verified small2 thin"> 3554 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 3555 <g id="c" data-name="all"> 3556 <path d="M18.3,1.12l4.24,2.49c1.25.73,2.8.73,4.05,0l4.24-2.49c2.29-1.34,5.22-.13,5.89,2.44l1.23,4.76c.36,1.4,1.46,2.5,2.86,2.86l4.76,1.23c2.57.67,3.78,3.6,2.44,5.89l-2.49,4.24c-.73,1.25-.73,2.8,0,4.05l2.49,4.24c1.34,2.29.13,5.22-2.44,5.89l-4.76,1.23c-1.4.36-2.5,1.46-2.86,2.86l-1.23,4.76c-.67,2.57-3.6,3.78-5.89,2.44l-4.24-2.49c-1.25-.73-2.8-.73-4.05,0l-4.24,2.49c-2.29,1.34-5.22.13-5.89-2.44l-1.23-4.76c-.36-1.4-1.46-2.5-2.86-2.86l-4.76-1.23c-2.57-.67-3.78-3.6-2.44-5.89l2.49-4.24c.73-1.25.73-2.8,0-4.05l-2.49-4.24c-1.34-2.29-.13-5.22,2.44-5.89l4.76-1.23c1.4-.36,2.5-1.46,2.86-2.86l1.23-4.76c.67-2.57,3.6-3.78,5.89-2.44ZM15.58,24.56l5.99,5.99,11.97-11.97" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path> 3557 </g> 3558 </svg> 3559 </div> 3560 Verified Customer 3561 </div> 3562 </div> 3563 </li> 3564 `; 3565 // const adHTML = $('#testimonial-template').html(); 3566 // Insert after the 3rd item (index 2) 3567 $(categoryId+' .get-products .productGrid .product').eq(5).after(adHTML); 3568 } 3569 3570 },500) 3571 } else { 3572 // console.error('Error fetching category products:', err); 3573 } 3574 }); 3575 } else { 3576 $('#product-val').hide(); 3577 $('#product-val-default').show(); 3578 $('.collection-main .collection-nav .actionBar .SortWrap').show(); 3579 } 3580 } 3581 3582 3583 /* following script use for load stamped reviews after pagination */ 3584 (function() { 3585 var checkInterval; 3586 function runStampedValidation() { 3587 var grid = document.querySelector('.productGrid'); 3588 if (!grid) return; 3589 3590 var badges = grid.querySelectorAll('.stamped-product-reviews-badge'); 3591 if (badges.length === 0) return; 3592 var missingRatings = Array.from(badges).filter(function(badge) { 3593 return badge.innerHTML.trim() === ""; 3594 }); 3595 3596 if (missingRatings.length > 0) { 3597 if (window.StampedFn && typeof window.StampedFn.loadBadges === 'function') { 3598 window.StampedFn.loadBadges(); 3599 } 3600 } else { 3601 clearInterval(checkInterval); 3602 // console.log('Success: Tamam products ki ratings load ho chuki hain.'); 3603 } 3604 } 3605 var observer = new MutationObserver(function(mutations) { 3606 clearInterval(checkInterval); 3607 checkInterval = setInterval(runStampedValidation, 800); 3608 }); 3609 observer.observe(document.body, { childList: true, subtree: true }); 3610 })(); 3611</script>
3611 3612 3613 </div> 3614 <div id="spend-save"> 3615 <div class="page-section normal spend-save ss-global"> 3616 <div class="section-header4"> 3617 <div class="text-box4"> 3618 <!--<div class="subheading1">Why Trust Us</div>--> 3619 <div class="heading2">Spend & Save</div> 3620 </div> 3621 <div class="body-text">Earn cash back with each purchase using String Swing’s savings tier system. Follow the chart to see how close you are to the next savings level, or check your progress on the Spend & Save bar in your cart.</div> 3622 </div> 3623 <div class="spend-save-wrapper"> 3624 <div class="spend-save-grid"> 3625 <div class="content-rows"> 3626 <div class="content-row"> 3627 <div class="body-text2">Spend $500</div> 3628 <div class="right-side"> 3629 <div class="bar"></div> 3630 <div class="body-text2">Save $40*</div> 3631 </div> 3632 </div> 3633 <div class="content-row"> 3634 <div class="body-text2">Spend $750</div> 3635 <div class="right-side"> 3636 <div class="bar"></div> 3637 <div class="body-text2">Save $75*</div> 3638 </div> 3639 </div> 3640 <div class="content-row"> 3641 <div class="body-text2">Spend $1,000</div> 3642 <div class="right-side"> 3643 <div class="bar"></div> 3644 <div class="body-text2">Save $100*</div> 3645 </div> 3646 </div> 3647 <div class="content-row"> 3648 <div class="body-text2">Spend $2,000</div> 3649 <div class="right-side"> 3650 <div class="bar"></div> 3651 <div class="body-text2">Save $200*</div> 3652 </div> 3653 </div> 3654 </div> 3655 </div> 3656 <div class="body-text2 black">*Only valid on retail priced orders.</div> 3657 </div> 3658 </div> 3659</div> 3660 3661 3662 3663 3664 3665 3666 3667 </div> 3668</div> 3669 3670 3671 3672 <div class="container"> 3673 3674 </div> 3675 <div id="modal" class="modal" data-reveal data-prevent-quick-search-close> 3676 <button class="modal-close" 3677 type="button" 3678 title="Close" 3679 3680> 3681 <span class="aria-description--hidden">Close</span> 3682 <span aria-hidden="true">×</span> 3683</button> 3684 <div id="modal-content" class="modal-content"></div> 3685 <div class="loadingOverlay"></div> 3686</div> 3687 <div id="alert-modal" class="modal modal--alert modal--small" data-reveal data-prevent-quick-search-close> 3688 <div class="alert-icon error-icon"> 3689 <span class="icon-content"> 3690 <span class="line line-left"></span> 3691 <span class="line line-right"></span> 3692 </span> 3693 </div> 3694 3695 <div class="alert-icon warning-icon"> 3696 <div class="icon-content">!</div> 3697 </div> 3698 3699 <div class="modal-content"></div> 3700 3701 <div class="button-container"> 3702 <button type="button" class="confirm button" data-reveal-close>OK</button> 3703 <button type="button" class="cancel button" data-reveal-close>Cancel</button> 3704 </div> 3705</div> 3706</div> 3707 3708<footer class="footer" role="contentinfo"> 3709 <div class="page-section wide ss-global"> 3710 <div class="footer-wrapper"> 3711 <!-- Footer Top --> 3712 <div class="footer-top"> 3713 <div class="text-box2"> 3714 <div class="heading2 black">Sign up for our monthly giveaway!</div> 3715 <!-- BC Orignal Form: --> 3716 <!-- Klaviyo Form ID: --> 3717
3717<script src='https://static.klaviyo.com/onsite/js/W2Z4PW/klaviyo.js?company_id=W2Z4PW' async ></script>
3717 3718 3719<div class="klaviyo-form-ULR9Lp"></div> 3720 3721 3722 </div> 3723 <div class="scroll-to-top body-text2 black link-wrapper"> 3724 <div class="link">Back To Top</div> 3725 <div class="svg-up-arrow small2 thin"> 3726 <!--?xml version="1.0" encoding="UTF-8"?--> 3727 <svg id="b" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30.707 48.707"> 3728 <g data-name="all"> 3729 <g data-name="right-arrow"> 3730 <line x1="15.354" y1="48.707" x2="15.354" y2=".707" fill="none" stroke="#000" stroke-miterlimit="10"></line> 3731 <polyline points=".354 15.707 15.354 .707 30.354 15.707" fill="none" stroke="#000" stroke-miterlimit="10"></polyline> 3732 </g> 3733 </g> 3734 </svg> 3735 </div> 3736 </div> 3737 </div> 3738 <!-- Footer Main --> 3739 <div class="footer-main"> 3740 <div class="address text-box7"> 3741 <div class="body-text2">27515 State Hwy 131</div> 3742 <div class="body-text2">Ontario, WI 54651</div> 3743 <div class="body-text2">United States</div> 3744 </div> 3745 <div class="contact-info text-box7"> 3746 <a href="tel:1 (888) 455-6628" class="link body-text2">+1 (888) 455-6628</a> 3747 <a href="mailto:[email protected]" class="link body-text2">[email protected]</a> 3748 <div class="body-text2">M–F: 8am–5pm CST</div> 3749 </div> 3750 <div class="pages-1 text-box5"> 3751 <div class="body-text2"> 3752 <a href="https://www.stringswing.com/about-us/" title="About Us" class="link body-text2"> 3753 About Us 3754 </a> 3755 </div> 3756 <div class="body-text2"> 3757 <a id="loginForDealerRequest" href="##" data-reveal-id="modalLoginForm" title="Dealer Request Form">Dealer Request Form</a> 3758 </div> 3759 <div class="body-text2"> 3760 <a href="https://www.stringswing.com/sales-tax-exemption-form/" title="Tax Exempt Form" class="link body-text2"> 3761 Tax Exempt Form 3762 </a> 3763 </div> 3764 <div class="body-text2"> 3765 <a href="https://www.stringswing.com/nitrocellulose-statement/" title="Nitro. Statement" class="link body-text2"> 3766 Nitro. Statement 3767 </a> 3768 </div> 3769 <div class="body-text2"> 3770 <a id="loginForMemberRequest" class="link body-text2" href="##" data-reveal-id="modalLoginForm" title="Request of Service Member Pricing">Service Member Pricing</a> 3771 </div> 3772 </div> 3773 <div class="pages-2 text-box5"> 3774 <div class="body-text2"> 3775 <a href="https://www.stringswing.com/shipping-policies/" class="link body-text2"> 3776 Shipping & Returns 3777 </a> 3778 </div> 3779 <div class="body-text2"> 3780 <a href="https://www.stringswing.com/terms-conditions-of-sale/" class="link body-text2"> 3781 Terms & Conditions 3782 </a> 3783 </div> 3784 <div class="body-text2"> 3785 <a href="https://www.stringswing.com/disclaimer/" class="link body-text2"> 3786 Disclaimer 3787 </a> 3788 </div> 3789 <div class="body-text2"> 3790 <a href="https://www.stringswing.com/warranty/" class="link body-text2"> 3791 Warranty 3792 </a> 3793 </div> 3794 <div class="body-text2"> 3795 <a href="https://www.stringswing.com/privacy/" class="link body-text2"> 3796 Privacy Policy 3797 </a> 3798 </div> 3799 </div> 3800 <div class="social text-box5"> 3801 <div class="body-text2"> 3802 <a href="https://www.instagram.com/stringswing/" class="link body-text2" target="_blank">Instagram</a> 3803 </div> 3804 <div class="body-text2"> 3805 <a href="https://www.facebook.com/StringSwing/" class="link body-text2" target="_blank">Facebook</a> 3806 </div> 3807 </div> 3808 </div> 3809 <div class="footer-bottom text-box3"> 3810 <hr> 3811 <div class="space-between"> 3812 <div class="body-text2 black">
3812Copyright © String Swing 2026</div> 3813 <div class="body-text2 black"> 3814 <a href="https://www.stringswing.com/privacy/" class="body-text2 black link"> 3815 Privacy Policy 3816 </a> 3817 </div> 3818 </div> 3819 </div> 3820 </div> 3821 </div> 3822 3823 <div data-content-region="ssl_site_seal--global"></div> 3824
3824<script> 3825 $(document).ready(function () { 3826 const addOnsVideoModal = $("#add-ons-videoModal"); 3827 const addOnsVideoPlayer = $("#add-ons-videoPlayer"); 3828 const addOnsCloseModal = $("#add-ons-closeModal"); 3829 3830 // Click on the whole add-on box (inside <a>) 3831 $(".video-link .add-on.video-popup").on("click", function (e) { 3832 e.preventDefault(); 3833 3834 // Find the parent <a> tag and get href = video link 3835 const videoURL = $(this).closest("a.video-link").attr("href"); 3836 3837 if (videoURL) { 3838 addOnsVideoPlayer.attr("src", videoURL); 3839 addOnsVideoModal.css("display", "flex"); 3840 } 3841 }); 3842 3843 // Close popup 3844 addOnsCloseModal.on("click", function () { 3845 addOnsVideoModal.css("display", "none"); 3846 addOnsVideoPlayer.attr("src", ""); 3847 }); 3848 3849 // Close when clicking outside modal content 3850 addOnsVideoModal.on("click", function (e) { 3851 if (e.target === this) { 3852 addOnsVideoModal.css("display", "none"); 3853 addOnsVideoPlayer.attr("src", ""); 3854 } 3855 }); 3856 3857 }); 3858 </script>
3858 3859 3860</footer> 3861 3862<div id="modalLoginForm" class="login-popup modal modal--small ss-global" data-reveal> 3863 <div class="SignInPopupInner"> 3864 <div class="popup-header"> 3865 <div class="text-box6"> 3866 <div class="modal-header-title body-text black bold">Service Member</div> 3867 <div class="modal-header-description body-text2">Please sign in or create an account to request service member pricing.</div> 3868 </div> 3869 <div class="svg-x small thin modal-close"> 3870 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.12 49.12"> 3871 <g> 3872 <path d="M.56.56l48,48M48.56.56L.56,48.56" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.12px"></path> 3873 </g> 3874 </svg> 3875 </div> 3876 </div> 3877 <div class="line-break"></div> 3878 <div class="SignInPopupForm"> 3879 <form action="#" id="headerLoginForm" method="post" onsubmit="ExpressCheckout.Login(); return false;"> 3880 <div class="LoadingIndicator" style="display: none"><img src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/img/loading.svg" alt="Loading" /></div> 3881 <div style="display: none" class="ErrorMessage" id="CheckoutLoginError"> </div> 3882 <div class="input-column"> 3883 <div class="form-field"> 3884 <input class="form-input body-text2" name="login_email" id="footer_login_email" type="email" placeholder="Email Address"> 3885 <span style="display:none;" class="form-inlineMessage">You must enter a valid email.</span> 3886 </div> 3887 <div class="form-field"> 3888 <input class="form-input body-text2" id="footer_login_pass" type="password" name="login_pass" placeholder="Password"> 3889 <span style="display:none;" class="form-inlineMessage">You must enter a password.</span> 3890 </div> 3891 <a class="body-text2 link ul black forgot-password" href="https://www.stringswing.com/login.php?action=reset_password" title="Forgot your password">Forgot Password</a> 3892 </div> 3893 <div class="button-row"> 3894 <input id="LoginButton" value="Sign in" class="button-n body-text2" type="submit"> 3895 <a href="https://www.stringswing.com/login.php?action=create_account" class="button-n body-text2" title="Create New Account">Sign Up</a> 3896 </div> 3897 </form> 3898 3899
3899<script> 3900 var ExpressCheckout = { 3901 Login: function(){ 3902 $('#headerLoginForm #CheckoutLoginError').hide(); 3903 ExpressCheckout.anonymousCheckout = 0; 3904 ExpressCheckout.createAccount = 0; 3905 3906 if (ExpressCheckout.validateEmailAddress($('#headerLoginForm #footer_login_email').val()) === false) { 3907 $('#headerLoginForm #footer_login_email') 3908 .parent().closest('.form-field') 3909 .addClass('form-field--error'); 3910 3911 $('#headerLoginForm #footer_login_email') 3912 .siblings('.form-inlineMessage') 3913 .show(); 3914 3915 $('#headerLoginForm #footer_login_email').focus().select(); 3916 return false; 3917 } else { 3918 $('#headerLoginForm #footer_login_email') 3919 .parent().closest('.form-field') 3920 .removeClass('form-field--error'); 3921 3922 $('#headerLoginForm #footer_login_email') 3923 .siblings('.form-inlineMessage') 3924 .hide(); 3925 } 3926 3927 if ($('#headerLoginForm #footer_login_pass').val() === '') { 3928 $('#headerLoginForm #footer_login_pass') 3929 .parent().closest('.form-field') 3930 .addClass('form-field--error'); 3931 3932 $('#headerLoginForm #footer_login_pass') 3933 .siblings('.form-inlineMessage') 3934 .show(); 3935 3936 $('#headerLoginForm #footer_login_pass').focus(); 3937 return false; 3938 } else { 3939 $('#headerLoginForm #footer_login_pass') 3940 .parent().closest('.form-field') 3941 .removeClass('form-field--error'); 3942 3943 $('#headerLoginForm #footer_login_pass') 3944 .siblings('.form-inlineMessage') 3945 .hide(); 3946 } 3947 3948 ExpressCheckout.ShowLoadingIndicator('#headerLoginForm '); 3949 u = window.location.port 3950 ? window.location.protocol + "//" + window.location.hostname + ":" + window.location.port 3951 : window.location.protocol + "//" + window.location.hostname; 3952 3953 $.ajax({
3954 url: u + "/login.php?action=check_login", 3955 type: 'post', 3956 data: $('#headerLoginForm').serialize(), 3957 success: ExpressCheckout.HandleResponse 3958 }); 3959 return false; 3960 }, 3961 3962 HandleResponse: function(response){ 3963 ExpressCheckout.HideLoadingIndicators(); 3964 ExpressCheckout.HandleResponseStatus(response); 3965 }, 3966 3967 HandleResponseStatus: function(response){ 3968 var $errorboxlen = $(response).find('.alertBox--error').length; 3969 if ($errorboxlen > 0) { 3970 var $errorbox = $(response).find('.alertBox--error').html(); 3971 3972 $('#headerLoginForm #footer_login_pass') 3973 .parent().closest('.form-field') 3974 .addClass('form-field--error server-error') 3975 .find('.form-inlineMessage') 3976 .show(); 3977 3978 $('#headerLoginForm #CheckoutLoginError') 3979 .html($errorbox) 3980 .addClass('alertBox alertBox--error') 3981 .show(); 3982 } else { 3983 location.reload(); 3984 } 3985 }, 3986 3987 ShowLoadingIndicator: function() { 3988 $('body').find('#headerLoginForm .LoadingIndicator').show(); 3989 }, 3990 3991 HideLoadingIndicators: function(){ 3992 $('#headerLoginForm .LoadingIndicator').hide(); 3993 }, 3994 3995 validateEmailAddress: function(email){ 3996 if (email.indexOf('@') === -1 || email.indexOf('.') === -1) { 3997 return false; 3998 } 3999 return true; 4000 }, 4001 }; 4002 4003 /* ===================== 4004 BLUR HANDLERS (ADDED) 4005 ===================== */ 4006 4007 $('#headerLoginForm #footer_login_email').on('blur', function () { 4008 if ($(this).val() !== '') { 4009 $(this).closest('.form-field') 4010 .removeClass('form-field--error') 4011 .find('.form-inlineMessage') 4012 .hide(); 4013 } 4014 }); 4015 4016 $('#headerLoginForm #footer_login_pass').on('blur', function () { 4017 const $field = $(this); 4018 const $formField = $field.closest('.form-field'); 4019 4020 if ($field.val() !== '' && !$formField.hasClass('server-error')) { 4021 $formField 4022 .removeClass('form-field--error') 4023 .find('.form-inlineMessage') 4024 .hide(); 4025 } 4026 }); 4027 </script>
4027 4028 4029 </div> 4030 </div> 4031</div> 4032
4033<script> 4034$(document).ready(function(e) { 4035 deleteCookie("popupFor"); 4036 $('#loginForDealerRequest').click(function(){ 4037 setCookie("popupFor", 'dealer', 1); 4038 $('#modalLoginForm .popup-header .modal-header-title').text('Dealer Request Form'); 4039 $('#modalLoginForm .popup-header .modal-header-description').text('Please sign in or create an account to request industry pricing'); 4040 $('body').addClass('dealer-footer-form'); 4041 $('body').removeClass('member-footer-form'); 4042 }); 4043 $('#loginForMemberRequest').click(function(){ 4044 setCookie("popupFor", 'member', 1); 4045 $('#modalLoginForm .popup-header .modal-header-title').text('Service Member'); 4046 $('#modalLoginForm .popup-header .modal-header-description').text('Please sign in or create an account to request service member pricing.'); 4047 $('body').addClass('member-footer-form'); 4048 $('body').removeClass('dealer-footer-form'); 4049 }); 4050}); 4051 4052$(document).on('click', '#modalLoginForm .modal-close', function(){ 4053 deleteCookie("popupFor"); 4054 $('body').removeClass('dealer-footer-form'); 4055 $('body').removeClass('member-footer-form'); 4056}); 4057$(document).on('click', '#modalDealerRequest .modal-close', function(){ 4058 deleteCookie("popupFor"); 4059 $('body').removeClass('dealer-footer-form'); 4060 $('body').removeClass('member-footer-form'); 4061}); 4062$(document).on('click', '#modalServiceMemberRequest .modal-close', function(){ 4063 deleteCookie("popupFor"); 4064 $('body').removeClass('dealer-footer-form'); 4065 $('body').removeClass('member-footer-form'); 4066}); 4067$(document).on('click', '.modal-background', function(){ 4068 deleteCookie("popupFor"); 4069 $('body').removeClass('footer-modal-bg'); 4070 $('body').removeClass('dealer-footer-form'); 4071 $('body').removeClass('member-footer-form'); 4072}); 4073 4074function setCookie(cname, cvalue, exdays) { 4075 var d = new Date(); 4076 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 4077 var expires = "expires="+d.toUTCString(); 4078 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 4079} 4080function getCookie(cname) { 4081 var name = cname + "="; 4082 var ca = document.cookie.split(';'); 4083 for(var i = 0; i < ca.length; i++) { 4084 var c = ca[i]; 4085 while (c.charAt(0) == ' ') { 4086 c = c.substring(1); 4087 } 4088 if (c.indexOf(name) == 0) { 4089 return c.substring(name.length, c.length); 4090 } 4091 } 4092 return ""; 4093} 4094function deleteCookie(cname) { 4095 cvalue = "No value"; 4096 document.cookie = cname + "=" +cvalue+ "; expires=Thu, 01 Jan 1970 00:00:00 GMT"; 4097} 4098</script>
4098 4099 4100<div class="add-ons-video-link-modal" id="add-ons-videoModal" style="display: none;"> 4101 <div class="add-ons-modal-content"> 4102 <div class="add-ons-close-button" id="add-ons-closeModal"> 4103 <svg xmlns="http://www.w3.org/2000/svg" width="13.435" height="13.435" viewBox="0 0 13.435 13.435"> 4104 <g id="Icon_feather-arrow-down" data-name="Icon feather-arrow-down" transform="translate(-9.782 23.218) rotate(-90)"> 4105 <path id="Path_153" data-name="Path 153" d="M18,7.5v18" transform="translate(-7.895 17.561) rotate(-45)" fill="none" stroke="#191919" stroke-linejoin="round" stroke-width="1"></path> 4106 <path id="Path_154" data-name="Path 154" d="M25.5,18H7.5" transform="translate(-7.895 15.439) rotate(-45)" fill="none" stroke="#191919" stroke-linejoin="bevel" stroke-width="1"></path> 4107 </g> 4108 </svg> 4109 </div> 4110 <iframe id="add-ons-videoPlayer" src="" frameborder="0" allow="autoplay; fullscreen" allowfullscreen="" data-gtm-yt-inspected-11="true"></iframe> 4111 </div> 4112</div> 4113 4114<!-- following model for cart preview content (Cart Popup) --> 4115<div id="previewModal" class="modal modal--large ss-global" data-reveal> 4116 <button class="modal-close" 4117 type="button" 4118 title="Close" 4119 4120> 4121 <span class="aria-description--hidden">Close</span> 4122 <span aria-hidden="true">×</span> 4123</button> 4124 <div class="modal-content"></div> 4125 <div class="loadingOverlay"></div> 4126</div> 4127 4128<!-- other scripting put at the script manager by name: StoreCredit - Display Script by WEP --> 4129 4130 4131 4132 4133 4134 4135 4136 4137
4137<script nonce="">window.__webpack_public_path__ = "https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/";</script>
4137 4138
4138<script nonce=""> 4139 function onThemeBundleMain() { 4140 window.stencilBootstrap("category", "{\"categoryProductsPerPage\":11,\"zoomSize\":\"1280x1280\",\"productSize\":\"500x659\",\"genericError\":\"Oops! Something went wrong.\",\"urls\":{\"home\":\"https://www.stringswing.com/\",\"brands\":\"https://www.stringswing.com/brands/\",\"search\":\"https://www.stringswing.com/search.php\",\"compare\":\"https://www.stringswing.com/compare\",\"sitemap\":\"https://www.stringswing.com/sitemap.php\",\"contact_us_submit\":\"https://www.stringswing.com/pages.php?action=sendContactForm\",\"subscribe\":{\"action\":\"https://www.stringswing.com/subscribe.php\"},\"checkout\":{\"single_address\":\"https://www.stringswing.com/checkout\",\"multiple_address\":\"https://www.stringswing.com/checkout.php?action=multiple\"},\"account\":{\"orders\":{\"all\":\"https://www.stringswing.com/account.php?action=order_status\",\"completed\":\"https://www.stringswing.com/account.php?action=view_orders\",\"save_new_return\":\"https://www.stringswing.com/account.php?action=save_new_return\"},\"returns\":\"https://www.stringswing.com/account.php?action=view_returns\",\"addresses\":\"https://www.stringswing.com/account.php?action=address_book\",\"inbox\":\"https://www.stringswing.com/account.php?action=inbox\",\"send_message\":\"https://www.stringswing.com/account.php?action=send_message\",\"add_address\":\"https://www.stringswing.com/account.php?action=add_shipping_address\",\"update_action\":\"https://www.stringswing.com/account.php?action=update_account\",\"details\":\"https://www.stringswing.com/account.php?action=account_details\",\"recent_items\":\"https://www.stringswing.com/account.php?action=recent_items\",\"index\":\"https://www.stringswing.com/account.php\",\"wishlists\":{\"all\":\"https://www.stringswing.com/wishlist.php\",\"add\":\"https://www.stringswing.com/wishlist.php?action=addwishlist\",\"edit\":\"https://www.stringswing.com/wishlist.php?action=editwishlist\",\"delete\":\"https://www.stringswing.com/wishlist.php?action=deletewishlist\"}},\"auth\":{\"login\":\"https://www.stringswing.com/login.php\",\"check_login\":\"https://www.stringswing.com/login.php?action=check_login\",\"create_account\":\"https://www.stringswing.com/login.php?action=create_account\",\"save_new_account\":\"https://www.stringswing.com/login.php?action=save_new_account\",\"forgot_password\":\"https://www.stringswing.com/login.php?action=reset_password\",\"send_password_email\":\"https://www.stringswing.com/login.php?action=send_password_email\",\"save_new_password\":\"https://www.stringswing.com/login.php?action=save_new_password\",\"logout\":\"https://www.stringswing.com/login.php?action=logout\"},\"cart\":\"https://www.stringswing.com/cart.php\",\"product\":{\"post_review\":\"https://www.stringswing.com/postreview.php\"},\"gift_certificate\":{\"purchase\":\"https://www.stringswing.com/giftcertificates.php\",\"redeem\":\"https://www.stringswing.com/giftcertificates.php?action=redeem\",\"balance\":\"https://www.stringswing.com/giftcertificates.php?action=balance\"},\"rss\":{\"products\":[]}},\"secureBaseUrl\":\"https://www.stringswing.com\",\"cartId\":null,\"template\":\"pages/category\",\"validationDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_messages.valid_email\\\":\\\"en\\\",\\\"validation_messages.password\\\":\\\"en\\\",\\\"validation_messages.password_match\\\":\\\"en\\\",\\\"validation_messages.invalid_password\\\":\\\"en\\\",\\\"validation_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"en\\\"}
4140,\\\"translations\\\":{\\\"validation_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationFallbackDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"en\\\",\\\"validation_fallback_messages.password\\\":\\\"en\\\",\\\"validation_fallback_messages.password_match\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"en\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_fallback_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_fallback_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationDefaultDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_default_messages.valid_email\\\":\\\"en\\\",\\\"validation_default_messages.password\\\":\\\"en\\\",\\\"validation_default_messages.password_match\\\":\\\"en\\\",\\\"validation_default_messages.invalid_password\\\":\\\"en\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_max_n
4140ot_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_default_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_default_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_default_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_default_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"The field cannot be blank.\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"carouselArrowAndDotAriaLabel\":\"Go to slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"carouselActiveDotAriaLabel\":\"active\",\"carouselContentAnnounceMessage\":\"You are currently on slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"giftWrappingRemoveMessage\":\"Are you sure you want to remove the gift wrapping from this item?\",\"noCompareMessage\":\"You must select at least two products to compare\"}").load(); 4141 4142 function browserSupportsFormData() { 4143 return typeof FormData !== 'undefined' 4144 && !!FormData.prototype.keys; 4145 } 4146 function loadFormDataPolyfillScript(src) { 4147 var formDataPolyfillScript = document.createElement('script'); 4148 formDataPolyfillScript.src = src; 4149 formDataPolyfillScript.onerror = function () { 4150 console.error('Failed to load formData polyfill script ' + src); 4151 }; 4152 document.body.appendChild(formDataPolyfillScript); 4153 } 4154 4155 if (!browserSupportsFormData()) { 4156 loadFormDataPolyfillScript('https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/theme-bundle.polyfill_form_data.js'); 4157 } 4158 } 4159 </script>
4159 4160
4160<script id="theme-bundle-main" nonce="" async defer src="https://cdn11.bigcommerce.com/s-5r2w8tg1gb/stencil/c5819130-30ff-013f-db21-0604126aaccc/e/21435df0-9971-013f-45bc-4e388f6f202b/dist/theme-bundle.main.js"></script>
4160 4161
4161<script nonce=""> 4162 const scriptElement = document.getElementById('theme-bundle-main'); 4163 4164 if (scriptElement) { 4165 addEventListener('load', onThemeBundleMain); 4166 } else { 4167 console.error('Could not find script element with id "theme-bundle-main"'); 4168 } 4169 </script>
4169 4170
4170<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/csrf-protection-header-5eeddd5de78d98d146ef4fd71b2aedce4161903e.js"></script>
vendor: 1 bytes, line 4170
4170
4171<script src='https://widget.privy.com/assets/widget.js' defer></script>
4171<script src='https://na.shgcdn3.com/collector.js' async ></script>
4171<script src='https://static.klaviyo.com/onsite/js/W2Z4PW/klaviyo.js?company_id=W2Z4PW' async ></script>
4171<script type='text/javascript'> 4172</script>
4172 4173
4174<script async id='stamped-script-widget' data-store-hash='5r2w8tg1gb' src='https://cdn1.stamped.io/files/bigcommerce.min.js'></script>
4174<!-- Reddit Pixel -->
4175<script> 4176!function(w,d){if(!w.rdt){var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)};p.callQueue=[];var t=d.createElement("script");t.src="https://www.redditstatic.com/ads/pixel.js",t.async=!0;var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s)}}(window,document);rdt('init','t2_5uu5nizt');rdt('track', 'PageVisit');rdt('track', 'ViewContent');rdt('track', 'AddToCart');rdt('track', 'Purchase'); 4177</script>
4177 4178<!-- DO NOT MODIFY --> 4179<!-- End Reddit Pixel -->
4179<script type="text/javascript"> 4180</script>
4180<script> 4181var css = `.z-intl .GiftCard, 4182 .z-intl .cart-totals li:nth-child(1), 4183 .z-intl .cart-totals li:nth-child(2), 4184 .z-intl .cart-totals li:nth-child(3), 4185 .z-intl .cart-totals li:nth-child(4), 4186 .z-intl .cart-additionalCheckoutButtons, 4187 .z-intl .previewCartCheckout-additionalCheckoutButtons { display: none; }`; 4188 //use string templates for cleaner css code - ES6 String templates 4189 head = document.head || document.getElementsByTagName('head')[0], 4190 style = document.createElement('style'); 4191 style.type = 'text/css'; 4192 if (style.styleSheet){ 4193 style.styleSheet.cssText = css; 4194 } else { 4195 style.appendChild(document.createTextNode(css)); 4196 } 4197 head.appendChild(style); 4198 </script>
4198<script> 4199 var CallbackRegistry = {}; 4200 4201var urlParam=function(e,n){n||(n=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var r=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(n);return r?r[2]?decodeURIComponent(r[2].replace(/\+/g," ")):"":null}; 4202 4203function changeCurrency(id){ 4204 try { 4205 var currencyId = localStorage.getItem('currencyId'); //getCookie('currencyId'); 4206 if(currencyId && currencyId == id){ return; } 4207 4208 var xhr = new XMLHttpRequest(); 4209 var proto = window.location.toString().indexOf('https') == -1 ? 'http' : 'https', 4210 url = proto + "://" + window.location.hostname + "?setCurrencyId=" + id; 4211 4212 xhr.open('POST', url); 4213 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 4214 xhr.onload = function () { 4215 if (xhr.status === 200) { 4216 try { 4217 localStorage.setItem('currencyId', id); // setCookie('currencyId', id, 1); 4218 window.location.reload(true); 4219 } catch (e) { 4220 //console.log(e); 4221 } 4222 } 4223 }; 4224 xhr.send(); 4225 } catch (e) { 4226 //console.log(e); 4227 } 4228} 4229 4230function setCookie(cname, cvalue, exdays) { 4231 var d = new Date(); 4232 d.setTime(d.getTime() + (exdays*24*60*60*1000)); 4233 var expires = "expires="+ d.toUTCString(); 4234 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 4235} 4236 4237function getCookie(cname) { 4238 var name = cname + "="; 4239 var decodedCookie = decodeURIComponent(document.cookie); 4240 var ca = decodedCookie.split(';'); 4241 for(var i = 0; i <ca.length; i++) { 4242 var c = ca[i]; 4243 while (c.charAt(0) == ' ') { 4244 c = c.substring(1); 4245 } 4246 if (c.indexOf(name) == 0) { 4247 return c.substring(name.length, c.length); 4248 } 4249 } 4250 return ""; 4251} 4252 4253function scriptRequest(url, onSuccess, onError) { 4254 var scriptOk = false; 4255 // generating JSONP function name 4256 var callbackName = 'cb' + String(Math.random()).slice(-6); 4257 // add name in url 4258 url += ~url.indexOf('?') ? '&' : '?'; 4259 url += 'callback=CallbackRegistry.' + callbackName; 4260 CallbackRegistry[callbackName] = function (data) { 4261 scriptOk = true; 4262 delete CallbackRegistry[callbackName]; 4263 onSuccess(data); 4264 }; 4265 function checkCallback() { 4266 if (scriptOk) return; 4267 delete CallbackRegistry[callbackName]; 4268 onError(url); 4269 } 4270 var script = document.createElement('script'); 4271 // for IE 4272 script.onreadystatechange = function () { 4273 if (this.readyState == 'complete' || this.readyState == 'loaded') { 4274 this.onreadystatechange = null; 4275 setTimeout(checkCallback, 0); 4276 } 4277 } 4278 4279 script.onload = script.onerror = checkCallback; 4280 script.src = url; 4281 document.head.appendChild(script); 4282} 4283 4284function afterSuccess(data) { 4285 changeCurrency(data); 4286} 4287 4288function afterError(data) { 4289 changeCurrency('1'); 4290} 4291 4292 4293if (getCookie('currencyId') === '') { 4294 setCookie('currencyId', localStorage.getItem('currencyId'), 1); 4295} 4296 4297document.addEventListener("z-country-change", function(e){ 4298 var currencyObj = JSON.stringify(e.detail.data.currency); 4299 4300 setCookie('currencyCode', e.detail.data.currency.currency, 1); 4301 if(window.location.href.indexOf("/checkout") == -1) { 4302 scriptRequest("https://bigcommerce-hello-prod.herokuapp.com/bigcommerce/getCurrencyId?sh=5r2w8tg1gb¤cyObj=" + currencyObj, afterSuccess, afterError); 4303 } 4304}); 4305</script>
4305<script>function waitForZonos(callback) { 4306 var interval = setInterval(function() { 4307 if (typeof zonos !== 'undefined') { 4308 clearInterval(interval); 4309 callback(); 4310 } 4311 }, 100); // check every 100ms 4312 } 4313 4314 waitForZonos( 4315 (function () { 4316 var urlParam=function(e,n){n||(n=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var r=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(n);return r?r[2]?decodeURIComponent(r[2].replace(/\+/g," ")):"":null}; 4317 4318 var css = ".z-intl .paypal-button { display: none; }, .z-intl .PayPalExpressCheckout { display: none; }, .z-intl .PayPalExpressCreditCheckout { display: none; }", 4319 head = document.head || document.getElementsByTagName('head')[0], 4320 style = document.createElement('style'); 4321 4322 style.type = 'text/css'; 4323 if (style.styleSheet){ 4324 style.styleSheet.cssText = css; 4325 } else { 4326 style.appendChild(document.createTextNode(css)); 4327 } 4328 head.appendChild(style); 4329 4330 //Very handy for ajax created buttons. Does not need JQuery to run. see https://github.com/uzairfarooq/arrive for more info 4331 var Arrive=function(e,t,n){"use strict";function r(e,t,n){l.addMethod(t,n,e.unbindEvent),l.addMethod(t,n,e.unbindEventWithSelectorOrCallback),l.addMethod(t,n,e.unbindEventWithSelectorAndCallback)}function i(e){e.arrive=f.bindEvent,r(f,e,"unbindArrive"),e.leave=d.bindEvent,r(d,e,"unbindLeave")}if(e.MutationObserver&&"undefined"!=typeof HTMLElement){var o=0,l=function(){var t=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector;return{matchesSelector:function(e,n){return e instanceof HTMLElement&&t.call(e,n)},addMethod:function(e,t,r){var i=e[t];e[t]=function(){return r.length==arguments.length?r.apply(this,arguments):"function"==typeof i?i.apply(this,arguments):n}},callCallbacks:function(e,t){t&&t.options.onceOnly&&1==t.firedElems.length&&(e=[e[0]]);for(var n,r=0;n=e[r];r++)n&&n.callback&&n.callback.call(n.elem,n.elem);t&&t.options.onceOnly&&1==t.firedElems.length&&t.me.unbindEventWithSelectorAndCallback.call(t.target,t.selector,t.callback)},checkChildNodesRecursively:function(e,t,n,r){for(var i,o=0;i=e[o];o++)n(i,t,r)&&r.push({callback:t.callback,elem:i}),i.childNodes.length>0&&l.checkChildNodesRecursively(i.childNodes,t,n,r)},mergeArrays:function(e,t){var n,r={};for(n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);for(n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);return r},toElementsArray:function(t){return n===t||"number"==typeof t.length&&t!==e||(t=[t]),t}}}(),c=function(){var e=function(){this._eventsBucket=[],this._beforeAdding=null,this._beforeRemoving=null};return e.prototype.addEvent=function(e,t,n,r){var i={target:e,selector:t,options:n,callback:r,firedElems:[]};return this._beforeAdding&&this._beforeAdding(i),this._eventsBucket.push(i),i},e.prototype.removeEvent=function(e){for(var t,n=this._eventsBucket.length-1;t=this._eventsBucket[n];n--)if(e(t)){this._beforeRemoving&&this._beforeRemoving(t);var r=this._eventsBucket.splice(n,1);r&&r.length&&(r[0].callback=null)}},e.prototype.beforeAdding=function(e){this._beforeAdding=e},e.prototype.beforeRemoving=function(e){this._beforeRemoving=e},e}(),a=function(t,r){var i=new c,o=this,a={fireOnAttributesModification:!1};return i.beforeAdding(function(n){var i,l=n.target;(l===e.document||l===e)&&(l=document.getElementsByTagName("html")[0]),i=new MutationObserver(function(e){r.call(this,e,n)});var c=t(n.options);i.observe(l,c),n.observer=i,n.me=o}),i.beforeRemoving(function(e){e.observer.disconnect()}),this.bindEvent=function(e,t,n){t=l.mergeArrays(a,t);for(var r=l.toElementsArray(this),o=0;o<r.length;o++)i.addEvent(r[o],e,t,n)},this.unbindEvent=function(){var e=l.toElementsArray(this);i.removeEvent(function(t){for(var r=0;r<e.length;r++)if(this===n||t.target===e[r])return!0;return!1})},this.unbindEventWithSelectorOrCallback=function(e){var t,r=l.toElementsArray(this),o=e;t="function"==typeof e?function(e){for(var t=0;t<r.length;t++)if((this===n||e.target===r[t])&&e.callback===o)return!0;return!1}:function(t){for(var i=0;i<r.length;i++)if((this===n||t.target===r[i])&&t.selector===e)return!0;return!1},i.removeEvent(t)},this.unbindEventWithSelectorAndCallback=function(e,t){var r=l.toElementsArray(this);i.removeEvent(function(i){for(var o=0;o<r.length;o++)if((this===n||i.target===r[o])&&i.selector===e&&i.callback===t)return!0;return!1})},this},s=function(){function e(e){var t={attributes:!1,childList:!0,subtree:!0};return e.fireOnAttributesModification&&(t.attributes=!0),t}function t(e,t){e.forEach(function(e){var n=e.addedNodes,i=e.target,o=[];null!==n&&n.length>0?l.checkChildNodesRecursively(n,t,r,o):"attributes"===e.type&&r(i,t,o)&&o.push({callback:t.callback,elem:i}),l.callCallbacks(o,t)})}function r(e,t){return l.matchesSelector(e,t.selector)&&(e._id===n&&(e._id=o++),-1==t.firedElems.indexOf(e._id))?(t.firedElems.push(e._id),!0):!1}var i={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};f=new a(e,t);var c=f.bindEvent;return f.bindEvent=function(e,t,r){n===r?(r=t,t=i):t=l.mergeArrays(i,t);var o=l.toElementsArray(this);if(t.existing){for(var a=[],s=0;s<o.length;s++)for(var u=o[s].querySelectorAll(e),f=0;f<u.length;f++)a.push({callback:r,elem:u[f]});if(t.onceOnly&&a.length)return r.call(a[0].elem,a[0].elem);setTimeout(l.callCallbacks,1,a)}c.call(this,e,t,r)},f},u=function(){function e(){var e={childList:!0,subtree:!0};return e}function t(e,t){e.forEach(function(e){var n=e.removedNodes,i=[];null!==n&&n.length>0&&l.checkChildNodesRecursively(n,t,r,i),l.callCallbacks(i,t)})}function r(e,t){return l.matchesSelector(e,t.selector)}var i={};d=new a(e,t);var o=d.bindEvent;return d.bindEvent=function(e,t,r){n===r?(r=t,t=i):t=l.mergeArrays(i,t),o.call(this,e,t,r)},d},f=new s,d=new u;t&&i(t.fn),i(HTMLElement.prototype),i(NodeList.prototype),i(HTMLCollection.prototype),i(HTMLDocument.prototype),i(Window.prototype);var h={};return r(f,h,"unbindAllArrive"),r(d,h,"unbindAllLeave"),h}}(window,"undefined"==typeof jQuery?null:jQuery,void 0); 4332 4333 var Zonos = { 4334 api: "https://bigcommerce-v3.zonos.com/bigcommerceV3/checkout", 4335 cid: '', 4336 clientId: "", 4337 cartData: { 4338 domesticShippingCharge: "", 4339 misc1: "", 4340 misc2: "", 4341 misc3: "", 4342 misc4: "", 4343 misc5: "", 4344 misc6: "", 4345 shippingAmountOverride: "", 4346 vendorPassedCurrencyCode: "USD", 4347 customFields: "" 4348 }, 4349 checkout: function() { 4350 function n(n, i, t, e) { if (o) return o[n]; for (i = document.cookie.split("; "), o = {}, e = i.length - 1; e >= 0; e--) t = i[e].split("="), o[t[0]] = t[1]; return o[n] } 4351 var o; 4352 var f = document.createElement("form"); 4353 var d = { cartId: Zonos.cid, cartData: JSON.stringify(Zonos.cartData), country: n("zCountry"), sh: '5r2w8tg1gb', site: window.location.origin ,clientId: Zonos.clientId, returnUrl: "true"}; 4354 f.setAttribute('method',"post"); 4355 f.setAttribute('action',Zonos.api); 4356 4357 for (var i in d) { 4358 var c = document.createElement("input"); 4359 c.setAttribute('type',"hidden"); 4360 c.setAttribute('name', i); 4361 c.setAttribute('value', d[i]); 4362 4363 f.appendChild(c); 4364 } 4365 document.body.appendChild(f); 4366 f.submit(); 4367 } 4368 }; 4369 4370 window.zonosIsLoading = false 4371 function zonosCheckout(e) { 4372 if (window.zonosIsLoading) return 4373 window.zonosIsLoading = true 4374 4375 e = (e === undefined) ? null : e; 4376 let testMode = false;
4377 4378 if (!zonos.isDomestic() && (!testMode || urlParam('zonos'))) { 4379 if(e){ 4380 e.preventDefault(); 4381 } 4382 document.body.style.cursor='wait'; 4383 4384 try { 4385 var xhr = new XMLHttpRequest(); 4386 var i = 0; 4387 xhr.open('GET', '/api/storefront/carts'); 4388 xhr.setRequestHeader('Content-Type', 'application/json'); 4389 xhr.onload = function () { 4390 if (xhr.status === 200) { 4391 try { 4392 var cid = JSON.parse(xhr.responseText); 4393 Zonos.cid = cid[0].id; 4394 Zonos.checkout(); 4395 } catch (e) { 4396 alert("No items in cart found. Please add an item to cart before checkout."); 4397 } 4398 } 4399 }; 4400 xhr.send(); 4401 xhr.onreadystatechange = function() { 4402 if(xhr.status === 0 || xhr.status === 400){//catch for cross domain issue with test sites on bigcommerce 4403 setTimeout(function(){window.location.href = "/cart.php"}, 20000); //adding a wait time for Firefox sending multiple requests at once 4404 } 4405 }; 4406 } catch (e) { 4407 alert("No items in cart found. Please add an item to cart before checkout."); 4408 } 4409 } 4410 isLoading = false 4411 }; 4412 4413 function getButtons() { 4414 let selectors = { 4415 '.previewCartCheckout .button--primary': 'checkout', 4416 '.cart-actions .button--primary': 'Check out', 4417 '.previewCartAction-checkout': 'Check out now', 4418 '.ProceedToCheckout .btn': 'Proceed To Checkout', 4419 '.CheckoutLink': 'Checkout', 4420 '.button--primary': 'Checkout', 4421 '.button-primary': 'Checkout', 4422 '.button': 'Check out', 4423 '.btn': 'Proceed To Checkout', 4424 '.CheckoutButton': 'Proceed To Checkout' 4425 }; 4426 4427 for (let key in selectors) { 4428 let button = contains(key,selectors[key]); 4429 for (i = 0; i < button.length; i++) { 4430 button[i].addEventListener("click", function(e) { zonosCheckout(e); }, true); 4431 } 4432 } 4433 }; 4434 4435 function changeGetButtons(newSelectors) { 4436 getButtons = function() { 4437 let selectors = newSelectors; 4438 4439 for (let key in selectors) { 4440 let button = contains(key,selectors[key]); 4441 for (i = 0; i < button.length; i++) { 4442 button[i].addEventListener("click", function(e) { zonosCheckout(e); }, true); 4443 } 4444 } 4445 } 4446 } 4447 4448 function contains(selector, text) { 4449 var elements = document.querySelectorAll(selector); 4450 return [].filter.call(elements, function(element){ 4451 return RegExp(text, 'i').test(element.textContent); 4452 }); 4453 }; 4454 4455 try { 4456 document.arrive(".previewCartAction-checkout", function() { 4457 getButtons(); 4458 }); 4459 document.arrive(".previewCartCheckout", function() { 4460 getButtons(); 4461 }); 4462 if(window.location.href.indexOf("cart") > -1) { 4463 document.arrive(".cart-actions", function() { 4464 getButtons(); 4465 }); 4466 } 4467 if(window.location.href.indexOf("/checkout") > -1) { 4468 document.arrive("#countryCodeInput", {existing: true}, function() { 4469 var elementExists = document.getElementById("checkoutBillingAddress"); 4470 if(!elementExists){ 4471 document.getElementById("countryCodeInput").addEventListener("focusout", function(e){ 4472 var countryCode = document.getElementById("countryCodeInput").value; 4473 countryCode = countryCode.replace("string:", ""); 4474 4475 zonos.changeCountry(countryCode); 4476 if(!zonos.isDomestic()){ 4477 domesticCheckoutRedirect(); 4478 } 4479 4480 }); 4481 } 4482 }); 4483 } 4484 getButtons(); 4485 }catch(e){} 4486 4487 function domesticCheckoutRedirect(){ 4488 var halfWindowHeight = Math.round(window.innerHeight / 2); 4489 var obj = document.createElement('div'); 4490 obj.id = "loading"; 4491 obj.style.cssText = 'position:fixed;top:0px;left: 0px;width:100%;height:100%;background: white; text-align: center;padding: '+halfWindowHeight+'px 10px; font-size: 20px'; 4492 obj.innerHTML = 'Redirecting to International Checkout'; 4493 4494 if(document.getElementById("appBody") != null){ 4495 document.getElementById("appBody").appendChild(obj); 4496 }else{ 4497 document.getElementById("checkout-app").appendChild(obj); 4498 } 4499 4500 //loading bar 4501 var loadingBar = document.createElement('div'); 4502 loadingBar.id = 'load-bar'; 4503 var bar = document.createElement('div'); 4504 bar.className = 'bar'; 4505 4506 document.getElementById("loading").appendChild(loadingBar); 4507 document.getElementById('load-bar').appendChild(bar); 4508 var bar = document.createElement('div'); 4509 bar.className = 'bar'; 4510 document.getElementById('load-bar').appendChild(bar); 4511 var bar = document.createElement('div'); 4512 bar.className = 'bar'; 4513 document.getElementById('load-bar').appendChild(bar); 4514 4515 4516 var css = "#load-bar { position: relative; margin-top: 20px; width: 100%; height: 6px; background-color: #46CAE5; } .bar { content: ''; display: inline; position: absolute; width: 0; height: 100%; left: 50%; text-align: center; } .bar:nth-child(1) { background-color: #288AE3; animation: loading 3s linear infinite; } .bar:nth-child(2) { background-color: #E4E4E4; animation: loading 3s linear 1s infinite; } .bar:nth-child(3) { background-color: #46CAE5; animation: loading 3s linear 2s infinite; } @keyframes loading { from {left: 50%; width: 0;z-index:100;} 33.3333% {left: 0; width: 100%;z-index: 10;} to {left: 0; width: 100%;} }"; 4517 head = document.head || document.getElementsByTagName('head')[0], 4518 style = document.createElement('style'); 4519 4520 style.type = 'text/css'; 4521 if (style.styleSheet){ 4522 style.styleSheet.cssText = css; 4523 } else { 4524 style.appendChild(document.createTextNode(css)); 4525 } 4526 head.appendChild(style); 4527 4528 setTimeout(function(){ zonosCheckout(); },1000); 4529 } 4530 4531 let shippingObserve = new MutationObserver(() => { 4532 shippingObserve.disconnect(); 4533 let observer = new MutationObserver((element, observer) => { 4534 let countryCode = document.getElementById("countryCodeInput").value; 4535 countryCode = countryCode.replace("string:", ""); 4536 4537 zonos.changeCountry(countryCode); 4538 if(!zonos.isDomestic()){ 4539 domesticCheckoutRedirect(); 4540 } 4541 }); 4542 4543 let interval = window.setInterval(() => { 4544 let shippingOptions = document.getElementById("checkout-shipping-options"); 4545 if (shippingOptions) { 4546 window.clearInterval(interval); 4547 observer.observe(shippingOptions, { 4548 childList: true, 4549 subtree: true 4550 }); 4551 } 4552 }, 200); 4553 }); 4554 4555 shippingObserve.observe(document.querySelector(".checkout-step.optimizedCheckout-checkoutStep.checkout-step--shipping"), { 4556 childList: true, 4557 subtree: true 4558 }); 4559 })() 4560);</script>
4560<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
4560 4561
4562<script> 4563 4564var modal_html = `<div id="get-store-hash" data-store_hash="5r2w8tg1gb"></div> 4565<div id="ult-upsell-popup-modal" class="tds-new-modal new-modal"> 4566 <div class="new-modal-content ult-upsell-modal-body"> 4567 4568 </div> 4569</div>`; 4570 4571var product_id = $("input[name='product_id']").val(); 4572var store_hash = "5r2w8tg1gb"; 4573var product_qty = 1; 4574var trigger_product_variant_id = 0; 4575var trigger_product_variants = []; 4576var offer_id = null; 4577var cart_id = ''; 4578var cart_items = []; 4579var hasOffer = false; 4580var apiUri = "https://peasisoft.com"; 4581var position = 1; 4582var offer_showed = false; 4583var trigger_product_ids = []; 4584var products_in_cart = []; 4585var req_data; 4586var currency_v1 = { 4587 token_location: "left", 4588 token: "$", 4589 decimal_token: ".", 4590 thousands_token: ",", 4591 decimal_places: 2, 4592 is_transactional: true, 4593}; 4594var base_currency_code = "USD"; 4595var dest_currency_code = base_currency_code; 4596var rate = 1; 4597var trigger_clicked = false; 4598var loading = true; 4599var cartValue = 0; 4600var qtyCart = 0; 4601var is_has_coupons_in_cart = 0; 4602var is_user_logged_in = 0; 4603var token_user = '' 4604 4605$(function() { 4606 $('body').prepend(modal_html); 4607 4608 var start_time = new Date().getTime(); 4609 4610 if (window.location.pathname.includes("order-confirmation")) { 4611 position = 3; 4612 } else if (window.location.pathname.includes("checkout")) { 4613 position = 2; 4614 } else if (window.location.pathname.includes("cart.php")) { 4615 position = 4; 4616 } 4617 4618 $('head').append('<link rel="stylesheet" href="https://peasisoft.com/storefront/css/loader.css?v=' + new Date().getTime() +'" type="text/css" media="all" />'); 4619 $('head').append('<link rel="stylesheet" href="https://peasisoft.com/css/css/app.css?v=' + new Date().getTime() +'"" type="text/css" media="all" />'); 4620 4621 req_data = { 4622 id: product_id, 4623 store_hash: store_hash, 4624 position: position, 4625 trigger_product_ids: trigger_product_ids, 4626 products_in_cart: products_in_cart, 4627 cartValue : cartValue, 4628 qtyCart : qtyCart, 4629 is_has_coupons_in_cart: is_has_coupons_in_cart, 4630 offerIDs: [], 4631 is_user_logged_in: is_user_logged_in, 4632 user_token: token_user, 4633 triggerVariantIds: [], 4634 currency_code: '' 4635 }; 4636 4637 $.getScript("https://peasisoft.com/storefront/js/popup-widget.js", () => { 4638 4639 $.get({ 4640 url: '/customer/current.jwt?app_client_id=qbwksajte9ec5bceih54u0207z7j6sv', 4641 success: function (response) { 4642 req_data.is_user_logged_in = 1 4643 req_data.user_token = response 4644 getPopupContent(); 4645 }, 4646 error: function (error) { 4647 console.log('failed to get current user') 4648 console.log(error); 4649 getPopupContent(); 4650 } 4651 }) 4652 4653 function getPopupContent() { 4654 $.get('/api/storefront/carts', function(cart_data) { 4655 if (cart_data && cart_data.length > 0) { 4656 for (var cart_item of cart_data) { 4657 if (cart_item.coupons.length > 0) { 4658 req_data.is_has_coupons_in_cart = 1; 4659 break; 4660 } 4661 } 4662 cart_id = cart_data[0]['id']; 4663 cart_items = cart_data[0]["lineItems"]["physicalItems"].concat(cart_data[0]["lineItems"]["digitalItems"].concat(cart_data[0]["lineItems"]["customItems"])); 4664 req_data.products_in_cart = cart_items.map(x => x.productId); 4665 4666 req_data.cartValue = cart_data[0]['baseAmount']; 4667 req_data.qtyCart = getQtyCart(cart_items); 4668 if (position == 2) { 4669 req_data.trigger_product_ids = cart_items.map(x => x.productId); 4670 localStorage.setItem('cart_items', req_data.trigger_product_ids); 4671 localStorage.setItem('cartValue', req_data.cartValue); 4672 localStorage.setItem('qtyCart', req_data.qtyCart); 4673 if (localStorage.getItem('offer_showed_before_co')) { 4674 return false;
4675 } 4676 } 4677 4678 if (position == 4) { 4679 req_data.trigger_product_ids = cart_items.map(x => x.productId); 4680 if (localStorage.getItem('offer_showed_in_cart')) { 4681 return false; 4682 } 4683 } 4684 4685 if(position == 2 || position == 4) { 4686 req_data.triggerVariantIds = getTriggerProductsVariants(cart_items) 4687 localStorage.setItem('triggerVariantIds',JSON.stringify(req_data.triggerVariantIds)) 4688 } 4689 } 4690 4691 localStorage.removeItem('offer_showed_before_co'); 4692 localStorage.removeItem('offer_showed_in_cart'); 4693 4694 if (position == 3 && localStorage.getItem('cart_items')) { 4695 req_data.trigger_product_ids = localStorage.getItem('cart_items').split(","); 4696 req_data.products_in_cart = req_data.trigger_product_ids.slice(); 4697 req_data.cartValue = localStorage.getItem('cartValue'); 4698 req_data.qtyCart = localStorage.getItem('qtyCart'); 4699 req_data.triggerVariantIds = JSON.parse(localStorage.getItem('triggerVariantIds')); 4700 localStorage.removeItem('cart_items'); 4701 localStorage.removeItem('cartValue'); 4702 localStorage.removeItem('cart_items'); 4703 localStorage.removeItem('triggerVariantIds'); 4704 } 4705 4706 // dest_currency_code = $('#currencySelection strong').parent().attr('data-currency-code') 4707 dest_currency_code = $('.body').attr('data-currency-code'); 4708 4709 console.log(dest_currency_code); 4710 if (typeof dest_currency_code !== "undefined" && dest_currency_code !== base_currency_code) { 4711 req_data.currency_code = dest_currency_code; 4712 localStorage.setItem('dest_currency_code', dest_currency_code); 4713 } 4714 else if (typeof dest_currency_code !== "undefined" && dest_currency_code === base_currency_code) { 4715 dest_currency_code = base_currency_code; 4716 localStorage.setItem('dest_currency_code', dest_currency_code); 4717 } 4718 else { 4719 if (localStorage.getItem('dest_currency_code') && localStorage.getItem('dest_currency_code') !== base_currency_code) { 4720 dest_currency_code = localStorage.getItem('dest_currency_code'); 4721 req_data.currency_code = dest_currency_code; 4722 } 4723 else { 4724 dest_currency_code = base_currency_code; 4725 } 4726 } 4727 req_data.currency_code = dest_currency_code 4728 let offerIDs = getCookieMatch('_v1_offerId_'); 4729 req_data.offerIDs = offerIDs; 4730 if (req_data.trigger_product_ids.length < 1 && product_id == null) {
4731 console.log('Request data invalid. Request fail.'); 4732 hasOffer = false; 4733 return false; 4734 } 4735 4736 $.ajax({ 4737 url: apiUri + "/api/popup-content", 4738 headers: { 4739 "Access-Control-Allow-Headers": "*" 4740 }, 4741 type: "GET", 4742 crossDomain: true, 4743 data: req_data, 4744 dataType: "json", 4745 success: function(res) { 4746 if (res.responseText) { 4747 handleOfferExist(res); 4748 } 4749 console.log("Load completed. Request time: ", new Date().getTime() - start_time); 4750 }, 4751 error: function(res) { 4752 $('.ult-upsell-modal-body').html(res.responseText); 4753 console.log("Error occured. Request time: ", new Date().getTime() - start_time); 4754 console.log(res); 4755 }, 4756 }); 4757 }) 4758 } 4759 }) 4760}); 4761</script>
4761 4762
4762<script> 4763 (function() { 4764 window.shogunVariables = {}; 4765 window.shogunVariables.orderId = ''; 4766 })(); 4767 </script>
4767 4768
4768<script>function myInit(){ StampedFn.init({ apiKey: 'pubkey-K3ERbXi418zz93I5El195sg43N1d5B', storeUrl: '118950' }); }</script>
vendor: 1 bytes, line 4768
4768
4769<script async onload="myInit()" type="text/javascript" src="https://cdn1.stamped.io/files/widget.min.js"></script>
4769<script> 4770 var dfCurrencyCode = 'USD'; 4771 var dfGroupId = parseInt(""); 4772 var dfChannelId = parseInt("1"); 4773 var dfPageType = 'category'; 4774 var dfProductId = ''; 4775 4776 var dfCategoryName = ''; 4777 var dfBreadcrumbs = [{"url":"https:\u002f\u002fwww.stringswing.com\u002f","name":"Home"},{"url":"https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002f","name":"Shop All"},{"url":"https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002fstring-instruments-1\u002f","name":"String Instruments"},{"url":"https:\u002f\u002fwww.stringswing.com\u002fshop-all\u002fstringed-instruments\u002fguitar\u002f","name":"Guitar"}]; 4778 var items = dfBreadcrumbs.slice(1); 4779 if (dfPageType === 'product') { 4780 items = items.slice(0, -1); 4781 } 4782 if (items.length > 0) { 4783 dfCategoryName = items 4784 .map(function(item) { return item.name; }) 4785 .join(' > '); 4786 } 4787 4788</script>
vendor: 1 bytes, line 4788
4788
4789<script src="https://us1-config.doofinder.com/2.x/e7f58881-2a64-4f14-9f3b-c304e50628f3.js" async></script>
4789<script> 4790 window.b3CheckoutConfig = { 4791 routes: { 4792 dashboard: "/account.php?action=order_status", 4793 }, 4794 }; 4795 window.B3 = { 4796 setting: { 4797 store_hash: "5r2w8tg1gb", 4798 channel_id: 1, 4799 platform: "bigcommerce", 4800 b2b_client_id: "dl7c39mdpul6hyc489yk0vzxl6jesyx", 4801 b2b_url: "https://api.bundleb2b.net", 4802 captcha_setkey: "6LdGN_sgAAAAAGYFg1lmVoakQ8QXxbhWqZ1GpYaJ",environment: "production" 4803 }, 4804 "dom.checkoutRegisterParentElement": "#checkout-app", 4805 "dom.registerElement": '[href^="/login.php"], #checkout-customer-login, [href="/login.php"] .navUser-item-loginLabel, #checkout-customer-returning .form-legend-container [href="#"]', 4806 "dom.openB3Checkout": "checkout-customer-continue", 4807 before_login_goto_page: "/account.php?action=order_status", 4808 checkout_super_clear_session: "true", 4809 "dom.navUserLoginElement": ".navUser-item.navUser-item--account", 4810 }; 4811</script>
vendor: 1 bytes, line 4811
4811
4812<script type="module" crossorigin integrity="sha384-lT06KoRDvQ2ik89FrgEDWAO5SsoaU1JCdXvHIWsGieXbViV+VW3QcBI6dakyl93C" src="https://microapps.bigcommerce.com/b2b-buyer-portal/polyfills.BwIfQWgi.js"></script>
vendor: 1 bytes, line 4812
4812
4813<script type="module" crossorigin integrity="sha384-6i3cXr5vlFEyTWQ58OUkfUz5hnxizTmWhwVfDuALuiq+JpdMIsGRvhfp2Jv++9ZY" src="https://microapps.bigcommerce.com/b2b-buyer-portal/index.BZhersGa.js"></script>
vendor: 1 bytes, line 4813
4813
4814<script> 4815(function () { 4816// Rendered by BigCommerce (Handlebars) when this page was served to a logged-in customer. 4817// Empty when the page was served to a guest, for example the login page the portal takes over. 4818 4819var pageCustomerId = ''; 4820var pageValue = Number(''); 4821var pageText = ''; 4822var storefrontToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5zdHJpbmdzd2luZy5jb20iXSwiZWF0IjoxNzkwNTk5MDE3LCJpYXQiOjE3OTA0MjYyMTcsImlzcyI6IkJDIiwic2lkIjoxMDAwOTU0NTEzLCJzdWIiOiJCQyIsInN1Yl90eXBlIjowLCJ0b2tlbl90eXBlIjoxfQ.yl-KKelpkCXk0NKLpTeAPFjOez5yoLciM5OtVmy86Cjc-awlbOQYTJnVbyre3oKPSr26__0hBE2F0uDhpQre6g'; 4823var FRAME = '.bundle-namespace .bundle-app > iframe'; 4824var NAV = 'nav[aria-labelledby="nested-list-subheader"]'; 4825var BLOCK_ID = 'hud-store-credit'; 4826var FLOATING_ID = 'floating-store-credit'; // the card rendered in the parent page, after the iframe 4827var balance = null; // { value: number, text: string } once known for the current login 4828var generation = 0; // bumped whenever a login may change, so late replies are ignored 4829var fetching = false; 4830var fetchAttempts = 0; 4831var lastAttempt = 0; 4832var observedDoc = null; 4833var hooked = false; 4834function portalDoc() { 4835var frame = document.querySelector(FRAME); 4836return frame && frame.contentDocument; // same-origin: the frame has no src and no sandbox 4837} 4838function portalFrame() { 4839return document.querySelector(FRAME); 4840} 4841function removeBlock() { 4842var doc = portalDoc(); 4843var old = doc && doc.getElementById(BLOCK_ID); 4844if (old) { old.parentNode.removeChild(old); } 4845} 4846// The portal logs customers out and back in without reloading the page, so a balance must never 4847// outlive a login. Forget everything, including the page's own values, whenever the portal shows 4848// its login or registration page in this document. The next balance is then fetched for whoever logs in. 4849function forgetBalance() { 4850generation += 1; 4851balance = null; 4852pageCustomerId = ''; 4853fetching = false; 4854fetchAttempts = 0; 4855removeBlock(); 4856} 4857function hookPortalEvents() { 4858if (hooked || !(window.b2b && window.b2b.callbacks && typeof window.b2b.callbacks.addEventListener === 4859'function')) { return; } 4860hooked = true; 4861window.b2b.callbacks.addEventListener('on-logout', forgetBalance); 4862} 4863function haveBalance(callback) { 4864if (balance) { callback(balance); return; } 4865if (pageCustomerId) { // page was rendered logged in: use the page's 4866values 4867balance = { value: isNaN(pageValue) ? 0 : pageValue, text: pageText }; 4868callback(balance); 4869return; 4870} 4871if (fetching || fetchAttempts >= 20 || !storefrontToken) { return; } 4872if (Date.now() - lastAttempt < 1000) { return; } // at most one attempt per second 4873 4874lastAttempt = Date.now(); 4875fetching = true; 4876fetchAttempts += 1; 4877var gen = generation; 4878fetch('/graphql', { // same native balance, for the logged-in customer 4879method: 'POST', 4880credentials: 'same-origin', // the session cookie identifies the customer 4881headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + storefrontToken }, 4882body: JSON.stringify({ query: '{ customer { storeCredit { value currencyCode } } }' }) 4883}).then(function (r) { return r.json(); }).then(function (d) { 4884fetching = false; 4885if (gen !== generation) { return; } // a logout happened meanwhile: ignore this reply 4886var c = d && d.data && d.data.customer; 4887if (!c) { return; } // not logged in yet: try again on a later pass 4888var m = (c.storeCredit || [])[0]; 4889var v = m ? Number(m.value) : 0; 4890var text = m ? new Intl.NumberFormat(undefined, { style: 'currency', currency: m.currencyCode || 'USD' 4891}).format(v) : ''; 4892balance = { value: isNaN(v) ? 0 : v, text: text }; 4893callback(balance); 4894}).catch(function () { fetching = false; }); 4895} 4896function menuLabel(doc, label) { 4897var nav = doc.querySelector(NAV); 4898if (!nav) { return null; } 4899var nodes = nav.getElementsByTagName('*'); 4900var i; 4901for (i = 0; i < nodes.length; i++) { 4902if (nodes[i].childElementCount) { continue; } 4903var text = (nodes[i].textContent || '').replace(/\s+/g, ' ').trim().toLowerCase(); 4904if (text !== label) { continue; } 4905var node = nodes[i]; 4906return node.closest ? (node.closest('.MuiButtonBase-root, a, button, li') || node.parentElement) : node.parentElement; 4907} 4908return null; 4909} 4910function accountLink(doc) { 4911return menuLabel(doc, 'account settings'); 4912} 4913function ordersButton(doc) { 4914var nav = doc.querySelector(NAV); 4915var selected = nav && nav.querySelector('.Mui-selected'); 4916if (selected && selected.getBoundingClientRect().width > 40) { return selected; } 4917return menuLabel(doc, 'my orders'); 4918} 4919function fitAmount(el) { 4920var nodes = el.getElementsByTagName('*'); 4921var i; 4922var amountNode = null; 4923for (i = 0; i < nodes.length; i++) { 4924if (/\$[\d,]+\.\d{2}/.test(nodes[i].textContent || '')) { amountNode = nodes[i]; } 4925} 4926if (!amountNode || amountNode === el) { return; } 4927var line = amountNode; 4928var own = amountNode.childElementCount ? '' : (amountNode.textContent || '').replace(/\s+/g, ' ').trim(); 4929if (/^\$[\d,]+\.\d{2}$/.test(own) && amountNode.parentElement && amountNode.parentElement !== el) { 4930line = amountNode.parentElement; 4931} 4932line.style.setProperty('font-size', '22px', 'important'); 4933line.style.setProperty('line-height', '1.2', 'important'); 4934line.style.setProperty('white-space', 'nowrap', 'important'); 4935line.style.setProperty('display', 'block', 'important'); 4936for (i = 0; i < line.children.length; i++) { 4937line.children[i].style.setProperty('display', 'inline', 'important'); 4938line.children[i].style.setProperty('font-size', '22px', 'important'); 4939line.children[i].style.setProperty('white-space', 'nowrap', 'important'); 4940} 4941} 4942// The blue card stays in the parent page. Only its screen position is updated, and only 4943// when that position actually changes, so nothing observes or rewrites it in a loop. 4944function placeCard() { 4945var el = document.getElementById(FLOATING_ID);
4946var frame = portalFrame(); 4947var doc = frame && frame.contentDocument; 4948var anchor = doc && accountLink(doc); 4949var orders = doc && ordersButton(doc); 4950if (!el || !anchor) { return; } 4951var a = anchor.getBoundingClientRect(); 4952var box = (orders || anchor).getBoundingClientRect(); 4953var f = frame.getBoundingClientRect(); 4954if (a.width < 8 || a.height < 8 || box.width < 40) { return; } 4955if (a.bottom < 0 || a.top > window.innerHeight) { return; } 4956var top = Math.round(f.top + a.bottom + 12); 4957var left = Math.round(f.left + box.left); 4958var width = Math.round(box.width); 4959if (top < 0 || left < 0 || top > window.innerHeight) { return; } 4960// The card's own markup is display:none. Keep it shown, and above the portal iframe, 4961// or it sits under the menu and looks gone. Do not observe these writes. 4962el.style.setProperty('display', 'block'); 4963el.style.setProperty('visibility', 'visible'); 4964el.style.setProperty('opacity', '1'); 4965// el.style.setProperty('display', 'block', 'important'); 4966// el.style.setProperty('visibility', 'visible', 'important'); 4967// el.style.setProperty('opacity', '1', 'important'); 4968el.style.setProperty('height', 'auto', 'important'); 4969el.style.setProperty('box-sizing', 'border-box', 'important'); 4970el.style.setProperty('z-index', '2147483647', 'important'); 4971fitAmount(el); 4972var mark = top + ',' + left + ',' + width; 4973if (el.getAttribute('data-hud-at') === mark) { return; } 4974el.setAttribute('data-hud-at', mark); 4975el.style.setProperty('position', 'fixed', 'important'); 4976el.style.setProperty('top', top + 'px', 'important'); 4977el.style.setProperty('left', left + 'px', 'important'); 4978el.style.setProperty('right', 'auto', 'important'); 4979el.style.setProperty('bottom', 'auto', 'important'); 4980el.style.setProperty('width', width + 'px', 'important'); 4981el.style.setProperty('margin', '0', 'important'); 4982el.style.setProperty('transform', 'none', 'important'); 4983} 4984function selectedLinkColor(doc) { 4985if (doc.getElementById('hud-selected-link')) { return; } 4986var style = doc.createElement('style'); 4987style.id = 'hud-selected-link'; 4988style.textContent = NAV + ' .Mui-selected,' + NAV + ' .Mui-selected *{color:#fff !important;}'; 4989(doc.head || doc.documentElement).appendChild(style); 4990} 4991function inject() { 4992var doc = portalDoc(); 4993var nav = doc && doc.querySelector(NAV); 4994if (!nav) { return; } 4995if (document.getElementById(FLOATING_ID)) { return; } // the blue card is the balance on screen 4996var next = nav.nextElementSibling; 4997if (next && next.id === BLOCK_ID) { return; } // already in place 4998var stale = doc.getElementById(BLOCK_ID); 4999if (stale) { stale.parentNode.removeChild(stale); } 5000haveBalance(function (b) { 5001if (!(b.value > 0)) { return; } // nothing to show 5002var doc2 = portalDoc(); 5003var nav2 = doc2 && doc2.querySelector(NAV); // re-query: the balance may have arrived later 5004if (!nav2 || doc2.getElementById(BLOCK_ID) || document.getElementById(FLOATING_ID)) { return; } 5005var block = doc2.createElement('div'); // inline styles: parent-page CSS does not reach in 5006here 5007block.id = BLOCK_ID; 5008block.style.cssText = 'margin:16px 0 0;padding:12px 16px;border-top:1px solid #e0e0e0;font-family:Roboto,Helvetica,Arial,sans-serif;color:#333;box-sizing:border-box;'; 5009var title = doc2.createElement('div'); 5010title.style.cssText = 'font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#757575;'; 5011title.textContent = 'Store credit'; 5012var amount = doc2.createElement('div'); 5013amount.style.cssText = 'font-size:18px;font-weight:600;margin:2px 0;'; 5014amount.textContent = b.text; 5015var note = doc2.createElement('div'); 5016note.style.cssText = 'font-size:12px;color:#757575;'; 5017note.textContent = 'Available at checkout'; 5018block.appendChild(title); 5019block.appendChild(amount); 5020block.appendChild(note); 5021var link = accountLink(doc2); 5022if (link) { link.insertAdjacentElement('afterend', block); } 5023else { nav2.insertAdjacentElement('afterend', block); } 5024}); 5025} 5026function tick() { 5027hookPortalEvents(); // the portal's own script may load after this one 5028if (/^#\/(login|register)/.test(window.location.hash)) { forgetBalance(); return; } 5029var doc = portalDoc(); 5030if (!doc) { return; } 5031if (doc !== observedDoc) { 5032// Watch the Document itself. The portal re-runs document.open/write/close on this frame when 5033// its styles load; that keeps the Document object but throws away <body>, so an observer on 5034// <body> or <html> would go dead. 5035observedDoc = doc; 5036new MutationObserver(inject).observe(doc, { childList: true, subtree: true });
5037var frameWindow = portalFrame() && portalFrame().contentWindow; 5038if (frameWindow) { frameWindow.addEventListener('scroll', placeCard, true); } 5039} 5040selectedLinkColor(doc); 5041inject(); 5042placeCard(); 5043} 5044tick(); 5045window.addEventListener('scroll', placeCard, true); 5046window.addEventListener('resize', placeCard); 5047setInterval(tick, 750); // keep polling: the frame can be created or recreated later 5048})(); 5049</script>
5049 5050 5051
5051<script> 5052 var pageBuilderBG = setInterval(function(){ 5053 $('div[data-layout-name="Layout-BlkBg"]').wrap('<div class="BlkBg"></div>'); 5054 $('div[data-layout-name="Layout-GryBg"]').wrap('<div class="GryBg"></div>'); 5055 $('div[data-layout-name="Layout-DgryBg"]').wrap('<div class="DgryBg"></div>'); 5056 clearInterval(pageBuilderBG); 5057 },100); 5058 </script>
5058 5059 5060 5061
5061<script> 5062/* Header Tabs */ 5063document.addEventListener('click', event => { 5064 const clickedTab = event.target.closest('.header-tab'); 5065 const tabsGroup = event.target.closest('.header-tabs'); 5066 5067 if (!clickedTab || !tabsGroup) return; // Clicked outside .tab or not inside .tabs 5068 5069 // Check if the clicked tab was already active 5070 const isActive = clickedTab.classList.contains('active'); 5071 5072 // Remove .active from all .tab children inside this .tabs 5073 tabsGroup.querySelectorAll('.header-tab').forEach(tabButton => { 5074 tabButton.classList.remove('active'); 5075 }); 5076 5077 // If it was not already active, add .active to the clicked .tab 5078 if (!isActive) { 5079 clickedTab.classList.add('active'); 5080 } 5081}); 5082/* So many issues due to add a tag inside the header-tab that's why we roll back it into the orignal code width out a tag*/ 5083//document.addEventListener('click', event => { 5084// const clickedLink = event.target.closest('.header-tab a'); 5085// const tabsGroup = event.target.closest('.header-tabs'); 5086// if (!clickedLink || !tabsGroup) return; // Clicked outside .tab or not inside .tabs 5087// const clickedTab = clickedLink.closest('.header-tab'); 5088// // Check if already active 5089// const isActive = clickedTab.classList.contains('active'); 5090// // Remove active from all tabs 5091// tabsGroup.querySelectorAll('.header-tab').forEach(tab => { 5092// tab.classList.remove('active'); 5093// }); 5094// // Add active only if it wasn't already active 5095// if (!isActive) { 5096// clickedTab.classList.add('active'); 5097// } 5098//}); 5099/* nav- Tabs End */ 5100 5101/* Header Tabs Hover */ 5102document.addEventListener('pointerover', (e) => { 5103 const tab = e.target.closest('.header-tab-hover'); 5104 const group = e.target.closest('.header-tabs-hover'); 5105 if (!tab || !group) return; 5106 5107 // Remove .active from all tabs in the same group 5108 group.querySelectorAll('.header-tab-hover.active').forEach(t => t.classList.remove('active')); 5109 5110 // Add .active to the hovered tab 5111 tab.classList.add('active'); 5112}); 5113/* Header Tabs Hover End */ 5114 5115/* Search Close */ 5116/*document.addEventListener('click', function (e) { 5117 if (!e.target.closest('.search-close')) return; 5118 document.querySelectorAll('.icon.search').forEach(function (icon) { 5119 icon.classList.remove('active'); 5120 }); 5121});*/ 5122/*$(document).on('click', '.search-close', function () { 5123 $('.icon.search').removeClass('active'); 5124});*/ 5125// Close button click 5126$(document).on('click', '.search-close', function (e) { 5127 e.stopPropagation(); 5128 $('.icon.search').removeClass('active'); 5129}); 5130// Search bar ke andar click ho to close na ho 5131$(document).on('click', '.search-bar', function (e) { 5132 e.stopPropagation(); 5133}); 5134// Search icon click (agar yahan se open hoti hai) 5135$(document).on('click', '.icon.search', function (e) { 5136 e.stopPropagation(); 5137 $(this).addClass('active'); 5138}); 5139// Search bar ke ilawa kahin bhi click ho 5140$(document).on('click', function () { 5141 $('.icon.search').removeClass('active'); 5142}); 5143 5144 5145 5146/* Search Close End */ 5147 5148/* Search Closes Nav Menu */ 5149/*document.addEventListener('click', function (e) { 5150 if (!e.target.closest('.icon.search')) return; 5151 document.querySelectorAll('.nav-menu-toggle').forEach(function (icon) { 5152 icon.classList.remove('active'); 5153 }); 5154});*/ 5155$(document).on('click', '.icon.search', function () { 5156 $('.nav-menu-toggle').removeClass('active'); 5157 setTimeout(function () { 5158 const $input = $('.search-input input'); 5159 if ($input.length) { 5160 $input.focus(); 5161 } 5162 }, 300); 5163}); 5164/* Search Closes Nav Menu End */ 5165 5166/* Account Closes Nav Menu */ 5167/*document.addEventListener('click', function (e) { 5168 if (!e.target.closest('.icon.account')) return; 5169 document.querySelectorAll('.nav-menu-toggle').forEach(function (icon) { 5170 icon.classList.remove('active'); 5171 }); 5172});*/ 5173$(document).on('click', '.icon.account', function () { 5174 $('.nav-menu-toggle').removeClass('active'); 5175}); 5176/* Account Closes Nav Menu End */ 5177 5178/* Cart Closes Nav Menu */ 5179/*document.addEventListener('click', function (e) { 5180 if (!e.target.closest('.icon.cart')) return; 5181 document.querySelectorAll('.nav-menu-toggle').forEach(function (icon) { 5182 icon.classList.remove('active'); 5183 });
5184});*/ 5185/* Cart Closes Nav Menu End */ 5186 5187/* Account Popup Close */ 5188/*document.addEventListener('click', function (e) { 5189 if (!e.target.closest('.account-popup-close')) return; 5190 document.querySelectorAll('.icon.account').forEach(function (icon) { 5191 icon.classList.remove('active'); 5192 }); 5193});*/ 5194$(document).on('click', '.account-popup-close', function () { 5195 $('.icon.account').removeClass('active'); 5196}); 5197/* Account Popup Close End */ 5198 5199/* Cart Popup Close */ 5200/*document.addEventListener('click', function (e) { 5201 if (!e.target.closest('.cart-popup-close')) return; 5202 document.querySelectorAll('.icon.cart.active').forEach(function (icon) { 5203 icon.classList.remove('active'); 5204 }); 5205});*/ 5206/* Cart Popup Close End */ 5207 5208/* BG Fade Closes All */ 5209/*document.addEventListener('click', function (e) { 5210 if (!e.target.closest('.bg-fade')) return; 5211 document.querySelectorAll('.nav-menu-toggle').forEach(function (icon) { 5212 icon.classList.remove('active'); 5213 }); 5214 document.querySelectorAll('.icon.search').forEach(function (icon) { 5215 icon.classList.remove('active'); 5216 }); 5217 document.querySelectorAll('.icon.account').forEach(function (icon) { 5218 icon.classList.remove('active'); 5219 }); 5220 document.querySelectorAll('.icon.cart').forEach(function (icon) { 5221 icon.classList.remove('active'); 5222 }); 5223});*/ 5224$(document).on('click', '.bg-fade', function () { 5225 $('.nav-menu-toggle, .icon.search, .icon.account, .icon.cart') 5226 .removeClass('active'); 5227}); 5228 5229/* BG Fade Closes All End */ 5230 5231/* Nav Scroll Color Change */ 5232/*const navWrappers = document.querySelectorAll('.nav-bar-wrapper, .mobile-nav-wrapper'); 5233function updateNavColor() { 5234 const atTop = window.scrollY === 0; 5235 navWrappers.forEach(el => { 5236 el.classList.toggle('nav-scroll-top', atTop); 5237 el.classList.toggle('nav-scrolled', !atTop); 5238 }); 5239}*/ 5240const $navWrappers = $('.nav-bar-wrapper, .mobile-nav-wrapper'); 5241function updateNavColor() { 5242 const atTop = $(window).scrollTop() === 0; 5243 $navWrappers 5244 .toggleClass('nav-scroll-top', atTop) 5245 .toggleClass('nav-scrolled', !atTop); 5246} 5247 5248// run once and on scroll 5249updateNavColor(); 5250// window.addEventListener('scroll', updateNavColor, { passive: true }); 5251$(window).on('scroll', updateNavColor); 5252/* Nav Scroll Color Change End */ 5253 5254 5255 5256 5257 5258/* Custom Tabs Product Description - jQuery */ 5259$(document).on('click', '.pro-description-custom-tab .dropdown-header', function (e) { 5260 const $clickedTab = $(this); 5261 const $tabsGroup = $clickedTab.closest('.pro-description-custom-tabs'); 5262 if ($tabsGroup.length === 0) return; // Not inside a .custom-tabs group 5263 const isActive = $clickedTab.hasClass('active'); 5264 // Remove .active from all .custom-tab in this group 5265 $tabsGroup.find('.pro-description-custom-tab .dropdown-header').removeClass('active'); 5266 // If not already active, add .active to clicked tab 5267 if (!isActive) { 5268 $clickedTab.addClass('active'); 5269 } 5270}); 5271/* Custom Tabs Product Description End */ 5272 5273/* Custom Tabs General - jQuery */ 5274/*$(document).on('click', '.custom-tab', function (e) { 5275 const $clickedTab = $(this); 5276 const $tabsGroup = $clickedTab.closest('.custom-tabs'); 5277 if ($tabsGroup.length === 0) return; // Not inside a .custom-tabs group 5278 const isActive = $clickedTab.hasClass('active'); 5279 // Remove .active from all .custom-tab in this group 5280 $tabsGroup.find('.custom-tab').removeClass('active'); 5281 // If not already active, add .active to clicked tab 5282 if (!isActive) { 5283 $clickedTab.addClass('active'); 5284 } 5285});*/ 5286$(document).on('click', '.custom-tab', function () { 5287 const $clickedTab = $(this); 5288 const $tabsGroup = $clickedTab.closest('.custom-tabs'); 5289 if (!$tabsGroup.length) return; 5290 // If the clicked tab is already active, do nothing 5291 if ($clickedTab.hasClass('active')) { 5292 return; 5293 } 5294 // Remove active from all tabs in this group 5295 $tabsGroup.find('.custom-tab').removeClass('active'); 5296 // Activate the clicked tab 5297 $clickedTab.addClass('active'); 5298}); 5299$('.offers-thumnail-tabs').each(function () { 5300 const $tabsGroup = $(this); 5301 $tabsGroup.on('click', '.offers-thumnail-tab', function () { 5302 const $clickedTab = $(this); 5303 if ($clickedTab.hasClass('active')) return; 5304 $tabsGroup.find('.offers-thumnail-tab').removeClass('active'); 5305 $clickedTab.addClass('active'); 5306 });
5307}); 5308$('.multiOffers-tabs').each(function () { 5309 const $tabsGroup = $(this); 5310 $tabsGroup.on('click', '.multiOffers-tab', function () { 5311 const $clickedTab = $(this); 5312 if ($clickedTab.hasClass('active')) return; 5313 $tabsGroup.find('.multiOffers-tab').removeClass('active'); 5314 $clickedTab.addClass('active'); 5315 }); 5316}); 5317 5318/*following code will use for toggle tabs mean active class add whenever click on tab specially use it in the feature section in home page*/ 5319$(document).on('click', '.toggle-tab', function () { 5320 const $clickedTab = $(this); 5321 const $tabsGroup = $clickedTab.closest('.toggle-tabs'); 5322 if (!$tabsGroup.length) return; 5323 if ($clickedTab.hasClass('active')) { 5324 $clickedTab.removeClass('active'); 5325 } else { 5326 $tabsGroup.find('.toggle-tab').removeClass('active'); 5327 $clickedTab.addClass('active'); 5328 } 5329}); 5330 5331// following custom tab using for FAQ 5332$(document).on('click', '.faq-custom-tab', function (e) { 5333 const $clickedTab = $(this); 5334 const $tabsGroup = $clickedTab.closest('.faq-custom-tabs'); 5335 if ($tabsGroup.length === 0) return; // Not inside a .custom-tabs group 5336 const isActive = $clickedTab.hasClass('active'); 5337 // Remove .active from all .custom-tab in this group 5338 $tabsGroup.find('.faq-custom-tab').removeClass('active'); 5339 // If not already active, add .active to clicked tab 5340 if (!isActive) { 5341 $clickedTab.addClass('active'); 5342 } 5343}); 5344/* Custom Tabs General End */ 5345 5346/* review-scroller Infinite (Manual) Horizontal Scroller */ 5347// Apply to all scrollers 5348$(document).ready(function () { 5349 // following commented code use for with out infinit mean last slide have disable class 5350 /*$('.reviews-infinite-scroller').each(function () { 5351 const $scroller = $(this); 5352 const $wrapper = $scroller.closest('.reviews-wrapper'); 5353 const $reviews = $scroller.find('.review'); 5354 const $leftArrow = $wrapper.find('.left-arrow'); 5355 const $rightArrow = $wrapper.find('.right-arrow'); 5356 const total = $reviews.length; 5357 let currentIndex = 0; 5358 5359 function updateActiveHeading($activeReview) { 5360 const text = $.trim($activeReview.find('.heading5').text()); 5361 if (text) { 5362 $('.review-scroller .section-wrapper .meta #currentQuoteHeading').text(`"${text}"`); 5363 } 5364 } 5365 5366 function setActive(index) { 5367 const reviewWidth = $reviews.outerWidth(true); 5368 $scroller.scrollLeft(reviewWidth * index); 5369 $reviews.removeClass('active'); 5370 const $activeReview = $reviews.eq(index).addClass('active'); 5371 updateActiveHeading($activeReview); 5372 $leftArrow.toggleClass('disabled', index === 0); 5373 $rightArrow.toggleClass('disabled', index === total - 1); 5374 currentIndex = index; 5375 } 5376 5377 function scrollToIndex(index) { 5378 const reviewWidth = $reviews.outerWidth(true);
5379 const scrollPosition = reviewWidth * index; 5380 $scroller.stop().animate({ 5381 scrollLeft: scrollPosition 5382 }, 100, function() { 5383 // Update heading after animation completes 5384 updateActiveHeading($reviews.eq(index)); 5385 }); 5386 $reviews.removeClass('active').eq(index).addClass('active'); 5387 $leftArrow.toggleClass('disabled', index === 0); 5388 $rightArrow.toggleClass('disabled', index === total - 1); 5389 currentIndex = index; 5390 } 5391 5392 $rightArrow.on('click', function () { 5393 if (currentIndex < total - 1) { 5394 scrollToIndex(currentIndex + 1); 5395 } 5396 }); 5397 5398 $leftArrow.on('click', function () { 5399 if (currentIndex > 0) { 5400 scrollToIndex(currentIndex - 1); 5401 } 5402 }); 5403 5404 $reviews.on('click', function () { 5405 scrollToIndex($(this).index()); 5406 }); 5407 5408 // Initialize first slide 5409 scrollToIndex(0); 5410 updateActiveHeading($reviews.eq(0)); 5411 });*/ 5412 5413 // following commented code use for with infinit mean last slide NO have disable class 5414 $('.reviews-infinite-scroller').each(function () { 5415 const $scroller = $(this); 5416 const $wrapper = $scroller.closest('.reviews-wrapper'); 5417 const $leftArrow = $wrapper.find('.left-arrow'); 5418 const $rightArrow = $wrapper.find('.right-arrow'); 5419 let $reviews = $scroller.find('.review'); 5420 const realTotal = $reviews.length; 5421 // ============================== 5422 // 1- CLONE FIRST & LAST SLIDES 5423 // ============================== 5424 const $firstClone = $reviews.first().clone().addClass('clone'); 5425 const $lastClone = $reviews.last().clone().addClass('clone'); 5426 $scroller.append($firstClone); 5427 $scroller.prepend($lastClone); 5428 $reviews = $scroller.find('.review'); 5429 const total = $reviews.length; 5430 let currentIndex = 1; // real first slide index 5431 // ============================== 5432 // 2- UPDATE HEADING 5433 // ============================== 5434 function updateActiveHeading($activeReview) { 5435 const text = $.trim($activeReview.find('.heading5').text()); 5436 if (text) { 5437 $('.review-scroller .section-wrapper .meta #currentQuoteHeading') 5438 .text(`"${text}"`); 5439 } 5440 } 5441 // ============================== 5442 // 3- REAL INDEX FINDER 5443 // ============================== 5444 function getRealIndex(index) { 5445 if (index === 0) return realTotal - 1; 5446 if (index === total - 1) return 0; 5447 return index - 1; 5448 } 5449 // ============================== 5450 // 4- HANDLE INFINITE EDGES 5451 // ============================== 5452 function handleInfiniteEdges(index) { 5453 const reviewWidth = $reviews.outerWidth(true); 5454 // After last real > jump to first real 5455 if (index === total - 1) { 5456 currentIndex = 1; 5457 $scroller.scrollLeft(reviewWidth * currentIndex); 5458 } 5459 // Before first real > jump to last real 5460 if (index === 0) { 5461 currentIndex = total - 2; 5462 $scroller.scrollLeft(reviewWidth * currentIndex); 5463 } 5464 } 5465 // ============================== 5466 // 5- SCROLL FUNCTION 5467 // ============================== 5468 function scrollToIndex(index, animate = true) { 5469 const reviewWidth = $reviews.outerWidth(true);
5470 const scrollPosition = reviewWidth * index; 5471 if (animate) { 5472 $scroller.stop().animate( 5473 { scrollLeft: scrollPosition }, 5474 300, 5475 function () { 5476 handleInfiniteEdges(index); 5477 } 5478 ); 5479 } else { 5480 $scroller.scrollLeft(scrollPosition); 5481 } 5482 $reviews.removeClass('active'); 5483 $reviews.eq(index).addClass('active'); 5484 const realIndex = getRealIndex(index); 5485 updateActiveHeading($scroller.find('.review').eq(index)); 5486 currentIndex = index; 5487 } 5488 // ============================== 5489 // 6- ARROWS (NEVER DISABLE) 5490 // ============================== 5491 $rightArrow.on('click', function () { 5492 scrollToIndex(currentIndex + 1); 5493 }); 5494 $leftArrow.on('click', function () { 5495 scrollToIndex(currentIndex - 1); 5496 }); 5497 // ============================== 5498 // 7- CLICK ON REVIEW 5499 // ============================== 5500 $reviews.on('click', function () { 5501 scrollToIndex($(this).index()); 5502 }); 5503 // ============================== 5504 // 8- INITIAL POSITION 5505 // ============================== 5506 const reviewWidth = $reviews.outerWidth(true); 5507 $scroller.scrollLeft(reviewWidth); // start from real first slide 5508 $reviews.removeClass('active').eq(1).addClass('active'); 5509 updateActiveHeading($reviews.eq(1)); 5510 }); 5511}); 5512 5513/* review-scroller Infinite (Manual) Horizontal Scroller End */ 5514 5515 5516 5517 5518 5519 5520 5521 5522/* ############################ */ 5523 // New js added // 5524/* ############################ */ 5525/* Dropdown Toggle */ 5526(function () { 5527 document.addEventListener('click', function (e) { 5528 // toggle dropdown 5529 const ddButton = e.target.closest('.ss-global .dropdown .dropdown-button'); 5530 if (ddButton) { 5531 const dropdown = ddButton.closest('.ss-global .dropdown'); 5532 if (dropdown) { 5533 // only one dropdown open at a time 5534 document.querySelectorAll('.ss-global .dropdown.active').forEach(d => { if (d !== dropdown) d.classList.remove('active'); }); 5535 dropdown.classList.toggle('active'); 5536 } 5537 return; 5538 } 5539 5540 // clicking a .dropdown-item removes .active from .dropdown 5541 const content = e.target.closest('.ss-global .dropdown .dropdown-content'); 5542 if (content) { 5543 const dropdown = content.closest('.ss-global .dropdown'); 5544 if (!dropdown) return; 5545 5546 // close dropdown after running tab script 5547 const ddTab = e.target.closest('.ss-gobal .tab'); 5548 if (ddTab) { 5549 setTimeout(() => dropdown.classList.remove('active'), 0); 5550 } else { 5551 dropdown.classList.remove('active'); 5552 } 5553 return; 5554 } 5555 5556 // clicking ouside of .dropdown removes .active 5557 if (!e.target.closest('.ss-global .dropdown')) { 5558 document.querySelectorAll('.ss-global .dropdown.active') 5559 .forEach(d => d.classList.remove('active')); 5560 } 5561 }, false); 5562})(); 5563/* Dropdown Toggle End */ 5564 5565 5566/* Scroll to Top */ 5567/*$(document).on('click', '.scroll-to-top', function (e) { 5568 if ($(this).is('a')) { 5569 e.preventDefault(); 5570 } 5571 $('html, body').animate({ scrollTop: 0 }, 'slow'); 5572});*/ 5573/* Scroll to Top */ 5574document.addEventListener('click', (e) => { 5575 const scrollToTop = e.target.closest('.scroll-to-top'); 5576 if (!scrollToTop) return; 5577 5578 // prevent <a> jumps if you ever make it a link 5579 if (scrollToTop.tagName === 'A') e.preventDefault(); 5580 5581 (document.scrollingElement || document.documentElement) 5582 .scrollTo({ top: 0, behavior: 'smooth' }); 5583}, { capture: true }); // resists earlier stopPropagation() 5584/* Scroll to Top End */ 5585/* Scroll to Top End */ 5586 5587 5588/*Following function use for cart popup instantly show start here*/ 5589$(document).on('click', '.navUser-item--cart', function () { 5590 $('body').addClass('cartPopupOpen'); 5591}); 5592$(document).on('click', '.cart-popup .cart-header .modal-close', function () { 5593 $('body').removeClass('cartPopupOpen'); 5594}); 5595$(document).on('click', '.modal-background', function () { 5596 $('body').removeClass('cartPopupOpen'); 5597}); 5598/*Following function use for cart popup instantly show END here*/ 5599 5600/* Ticker Track scroller for (2/18)) Start Here*/ 5601document.querySelectorAll('.ss-global .ticker-track').forEach(track => { 5602 if (track.dataset.duplicated === 'true') return; 5603 const items = Array.from(track.querySelectorAll('.ticker-item')); 5604 const copies = 4; // Number of copies // (3/23) 5605 for (let i = 0; i < copies; i++) {
5606 items.forEach(item => { 5607 track.appendChild(item.cloneNode(true)); 5608 }); 5609 } 5610 track.dataset.duplicated = 'true'; 5611}); 5612/* Ticker Track scroller (2/18) End Here*/ 5613 5614/* Off Screen Element currently use in product page for add to cart section after scrolling added at 23-02-2026 */ 5615(function () { 5616 function initOffScreenObserver(root = document) { 5617 root.querySelectorAll('.ss-global .off-screen-element').forEach(el => { 5618 if (el.dataset.offScreenInit === "1") return; 5619 5620 const observer = new IntersectionObserver( 5621 ([entry]) => { 5622 // Add .off-screen when NOT visible; remove when visible 5623 el.classList.toggle('off-screen', !entry.isIntersecting || entry.intersectionRatio === 0); 5624 }, 5625 { threshold: 0 } // fire as soon as it leaves/enters the viewport 5626 ); 5627 5628 observer.observe(el); 5629 el.dataset.offScreenInit = "1"; 5630 el._offScreenObserver = observer; // (optional) keep a handle if you ever want to disconnect 5631 }); 5632 } 5633 5634 // Case 1: elements already in DOM (e.g., viewing a component directly) 5635 if (document.readyState === "loading") { 5636 document.addEventListener("DOMContentLoaded", () => initOffScreenObserver()); 5637 } else { 5638 initOffScreenObserver(); 5639 } 5640 5641 // Case 2: elements injected later via loadSection(...) 5642 document.addEventListener("section:loaded", (e) => { 5643 const id = e?.detail?.targetId; 5644 const host = id ? document.getElementById(id) : document; 5645 if (host) initOffScreenObserver(host); 5646 }); 5647 })(); 5648/* Off Screen Element End */ 5649 5650</script>
5650 5651
5651<script>window.__CF$cv$params={r:'a413c197ae7152a6',t:'MTc5MDQ0MTMwNg==',u:'01a0de9e3c6872eeb728e92affaea4e0',ut:'FWP1gfgv3Ox0XcJwpqXH33L4zOD3GRm2ezepZAszk4Q-1790441307-1.2.1.1-agjLHaS.Ybw8AqaQp4J1hbzWmS3Mw7aR1zxrUy43hB3hEXOgxVOqh1zUwzLNtTS8B9hHHLWLGznRbEz3BaaMNkduLHvXiKq.gdE_G3pJR2Q',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();</script>
5651</body> 5652</html> 5653
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.