&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const age = Date.now() - updatedAt.getTime();
if (age
lizedLocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
function setupCartSellingPlanUpdater(settings) {
window.addEventListener('stoq:inventory-data-loaded', function(event) {
console.debug('STOQ - Inventory data loaded, updating cart selling plans');
if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
console.debug('STOQ - cart selling plans updated successfully');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart selling plans:', error);
});
}
});
}
(function loadStorefrontSettings() {
const cfg = window._RestockRocket
SETTINGS_CACHE_DURATION) {
console.debug('STOQ - settings changed recently, skipping cache');
return null;
}
return settings;
} catch (error) {
console.debug('STOQ - Error checking settings cache:', error);
return null;
}
}
function createRestockRocketContainer() {
const restockRocketContainer = document.createElement('div');
restockRocketContainer.id = 'restock-rocket';
document.body.appendChild(restockRocketContainer);
}
function createRestockRocketScript(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
try {
const _stoqInitConfig = window._RestockRocketConfig;
const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqI
Tubeless liquid_cache_age: _stoqInitConfig.liquidCacheAge,
inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '',
inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId],
});
} catch (e) {
console.debug('STOQ - stoq_initialized publish failed:', e);
}
try {
var _sqTrack = window._RestockRocketConfig;
if (_sqTrack.preordersConfigured) {
document.addEventListener('click', function (e) {
try {
var t = e.target;
if (!t || !t.closest) return;
var host = t.closest('.shopify-payment-button, shopify-payment-terms');
if (!host) return;
var channel = host.matches && host.matches('shopify-payment-terms')
? 'shop_pay_installments' : 'buy_now';
var form = host.closest('form');
var vidEl = form && form.querySelector('[name="id"]');
var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '',
block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout),
gate_armed: !!_sqTrack.acceleratedGateArmed,
gate_active_at_click: !!(document.documentElement &&
document.documentElement.classList.contains('stoq-buy-now-pending')),
blocked: (function () {
try {
var rr = window._RestockRocket;
return !!(rr && typeof rr.willBlockAcceleratedClick === 'function' &&
rr.willBlockAcceleratedClick(e));
} catch (err) { return false; }
})(),
},
});
} catch (err) { }
}, true);
}
} catch (e) { }
function applyTranslations(settings) {
try {
if (!settings || !settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translati
cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function fetchEmbedConfig(endpoint, apply) {
return fetch(
`${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`,
{
headers: {
'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop,
'ngrok-skip-browser-warning': 'skip'
}
}
)
.then(function(response) {
if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`);
return response.json();
})
.then(function(data) {
try {
apply(data);
} catch (applyError) {
console.error('STOQ - apply failed for ' + endpoint + ':', applyError);
throw applyError;
}
})
.catch(function(error) {
console.debug(`STOQ - using cached ${endpoint}:`, error.message);
});
}
function initializeScripts(settings) {
settings = ap
| R/D Sudan (GBP£) Gabon (XOFFr) | Namibia (GBP£) Armenia (AMDդր.) France (EUR€)Shimano Deore ProjektRide Merchandise |
| SHIFTERS | Shimano Deore Sweden (SEKkr) Georgia (GBP£) Gloves | Niger (XOFFr) Austria (EUR€) Gabon (XOFFr)
| BRAKE CALIPERS Switzerland (CHFCHF) Germany (EUR€) | Nigeria (NGN₦) Belarus (GBP£) Gambia (GMDD)Clarks M2 Hydraulic Socks |
| FRONT BRAKE ROTOR | Clarks M2 160mm Togo (XOFFr) Gibraltar (GBP£) | Norway (GBP£) Benin (XOFFr) EssentialsGermany (EUR€)
| REAR BRAKE ROTOR Tristan da Cunha (GBP£) Greece (EUR€) | Poland (PLNzł) Bosnia & Herzegovina (BAMКМ) Ghana (GBP£)Clarks M2 160mm | Cleaners, Degreasers and Lubrication
| BRAKE LEVERS Accessories | Clarks M2 Hydraulic Türkiye (GBP£) Guadeloupe (EUR€) | Réunion (EUR€) British Indian Ocean Territory (USD$) MaintenanceGreece (EUR€)
| HEADSET Uganda (UGXUSh) Guernsey (GBP£) | Romania (RONLei) Bulgaria (EUR€) Greenland (DKKkr.)Feimin FP-H863 | Sell Your Bike
| HANDLEBAR Contact Us | Kona Aluminum Riser United Kingdom (GBP£) Guinea-Bissau (XOFFr) | San Marino (EUR€) Burundi (BIFFr) FinanceGuernsey (GBP£)
| STEM United States (GBP£) Hungary (HUFFt) | São Tomé & Príncipe (STDDb) Cameroon (XAFCFA) Guinea (GNFFr)Kona Control |
| SEATPOST | Kona Commuter 27.2mm Western Sahara (MADد.م.) Ireland (EUR€) Log in | Serbia (RSDРСД) Central African Republic (XAFCFA) Hungary (HUFFt)
| SEAT CLAMP Zambia (GBP£) Isle of Man (GBP£) Create account | Seychelles (GBP£) Chad (XAFCFA) Iceland (ISKkr)Kona Clamp |
| GRIPS Search | Kona Key Grip Jersey (GBP£) | Slovakia (EUR€) Congo - Brazzaville (XAFCFA) Isle of Man (GBP£)
| SADDLE Kenya (KESKSh) Country | Slovenia (EUR€) Congo - Kinshasa (CDFFr) Italy (EUR€)Kona Commuter© 2026, | ProjektRide GBP£
| FRONT HUB Powered by | Shopify Åland Islands (EUR€)Shimano 100x9mm. Latvia (EUR€) | South Africa (GBP£) Croatia (EUR€) Kenya (KESKSh)
| REAR HUBAmerican Express Lesotho (GBP£) | South Sudan (GBP£) Cyprus (EUR€) Kosovo (EUR€)Shimano 135x10mm | Apple Pay Algeria (DZDد.ج)
| SPOKESDiners Club | Andorra (EUR€)Stainless Black 14gDiscover Libya (GBP£) | St. Helena (SHP£) Denmark (DKKkr.) Lesotho (GBP£)
| RIMS Liechtenstein (CHFCHF) | KlarnaSudan (GBP£) Djibouti (DJFFdj) Liberia (GBP£)Double Wall alloy | Maestro Armenia (AMDդր.)
| FRONT TIRE | Ascension Island (SHP£)WTB Horizon Comp 650x47c PayPalLuxembourg (EUR€) | Sweden (SEKkr) Equatorial Guinea (XAFCFA) Liechtenstein (CHFCHF)
| REAR TIRE Madagascar (GBP£) | Switzerland (CHFCHF) Union Pay Eritrea (GBP£) Lithuania (EUR€)WTB Horizon Comp 650x47c | VisaBelarus (GBP£)
| PAINT COLOR | Belgium (EUR€)Gloss Titian or Gloss Black w/ Charcoal & Nimbus Decals Mali (XOFFr) | Togo (XOFFr) Madagascar (GBP£) Eswatini (GBP£)
| EXTRAS Malta (EUR€) | Tristan da Cunha (GBP£) Malawi (MWKMK) Ethiopia (ETBBr)Kickstand | Bosnia & Herzegovina (BAMКМ)
All specifications are subject to change without notice Mauritius (MUR₨)
Türkiye (GBP£) Malta (EUR€) Finland (EUR€)
British Indian Ocean Territory (USD$)
GEOMETRY Mayotte (EUR€) mmUganda (UGXUSh) Mauritania (GBP£) France (EUR€) inches Bulgaria (EUR€)
Moldova (MDLL)
Ukraine (UAH₴)
Mauritius (MUR₨)
French Southern Territories (EUR€)
Burkina Faso (XOFFr)
Monaco (EUR€)
SELL#productTemplate--template--26482384994687__main {
--PT: 60px;
--PB: 30px;
}Mauritius (MUR₨)
RIDE CONFIDENT| Burundi (BIFFr) | SIZE Montenegro (EUR€) | United States (GBP£) Moldova (MDLL) Gambia (GMDD)S | Cameroon (XAFCFA)M Morocco (MADد.م.) | Vatican City (EUR€) Monaco (EUR€) Georgia (GBP£)L | Cape Verde (CVE$)XL Mozambique (GBP£) | Western Sahara (MADد.م.) Montenegro (EUR€) Germany (EUR€)
| 1 Namibia (GBP£) | Zambia (GBP£) Morocco (MADد.م.) Ghana (GBP£)ST LENGTH Close | Chad (XAFCFA)420 Netherlands (EUR€) | Zimbabwe (USD$) Mozambique (GBP£) Gibraltar (GBP£)470 | Comoros (KMFFr)520 Niger (XOFFr) | Namibia (GBP£) Greece (EUR€)580 |
| 3e\n\u003cdiv class=\"table_wrapper\"\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eFRAME MATERIAL\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona 6061 Aluminum Butted\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eSIZES\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eS, M, L, XL\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR SHOCK\u003c\/td\u003e\n\u003ctd class=\"data\"\u003en\/a\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eFORK\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSuntour NEX Coil Spring 80mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eCRANKARMS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eShimano\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eCHAINRINGS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e22\/32\/42t\u French Southern Territories (EUR€) 003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eB\/B\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eFSA 68mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003ePEDALS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona JS2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eCHAIN\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKMC Z8.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eCASSETTE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eShimano Altus 11-34t 8spd\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eCHAINGUIDE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003en\/a\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eF\/D\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eShimano Tourney\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eR\ | /D\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eShimano Tourney\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eSHIFTERS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eShimano Altus\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eBRAKE CALIPERS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eClarks M2 Hydraulic\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eFRONT BRAKE ROTOR\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eClarks M2 160mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR BRAKE ROTOR\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eClarks M2 160mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eBRAKE LEVERS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eClarks M2 Hydraulic\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eHEADSET\u003c\/td\u00370.0 e\n\u003ctd class=\"data\"\u003eFeimin FP-H863\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eHANDLEBAR\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Aluminum Riser\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eSTEM\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Control\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eSEATPOST\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Thumb w\/Offset 31.6mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eSEAT CLAMP\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Clamp\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eGRIPS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Key Grip Slip on\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eSADDLE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eKona Cross | trail\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eFRONT HUB\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eFormula 100x9mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR HUB\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eFormula 135x10mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eSPOKES\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eStainless Black 14g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eRIMS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eDouble Wall alloy\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eFRONT TIRE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eWTB Riddler 700x45c\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR TIRE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eWTB Riddler 700x45c\u003c\/td\u003e\n\u003c\/tr\u0 South Africa (GBP£) Slovenia (EUR€) Liechtenstein (CHFCHF) 03e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003ePAINT COLOR\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSatin Black w\/ Metallic Mint \u0026amp; Metallic Silver Decals\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eEXTRAS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003en\/a\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cp class=\"specs_disclaimer\"\u003eAll specifications are subject to change without notice\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"bike_geometry\"\u003e\n\u003ch2\u003eGEOMETRY\u003cspan class=\"s-geo\"\u003e\u003cspan class=\"s-current\" id=\"s-geo_mm\"\u003emm\u003c\/span\u003e\u003cspan id=\"s-geo_inch\"\u003einches\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cdiv id=\"geo_mm\"\u003e\n\u003cdiv class=\"table_wrapper\"\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e \u003c\/td\u003e\n\u003ctd class=\"la||||
| 003e\n\u003ctd class=\"data\"\u003e302\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e12\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eWHEELBASE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e1072\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e1100\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e1127\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e1153\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e13\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eFRONT CENTER\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e638\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e666\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e692\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e718\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e14\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eFORK LENGTH\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e467\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e467\u003c\/td\u0037 e\n\u003ctd class=\"data\"\u003e467\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e467\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e15\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eFORK OFFSET\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e42\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e42\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e42\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e42\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"geo_diagram\"\u003e\u003cimg alt=\"KONA Geometry\" src=\"https:\/\/images.konaworld.com\/36e\/geo_diagram.png\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sectionwrapper bike_sizing\"\u003e\n\u003cdiv data-scroll-index=\"2\" class=\"sectiontarget\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"section\"\u003e\n\u003ch2\u003eSIZING + FIT\u003c\/h2\u003e\n\u003ch4\u003eGRA | VEL \/ DROP BAR \/ URBAN\u003c\/h4\u003e\n\u003cdiv class=\"table_wrapper\"\u003e\n\u003ctable class=\"sizing_chart\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eHEIGHT\/INCHES\u003c\/th\u003e\n\u003cth\u003eHEIGHT\/METRIC\u003c\/th\u003e\n\u003cth\u003eINSEAM\/INCHES\u003c\/th\u003e\n\u003cth\u003eINSEAM\/METRIC\u003c\/th\u003e\n\u003cth\u003eROVE\u003c\/th\u003e\n\u003cth\u003eLIBRE\u003c\/th\u003e\n\u003cth\u003eSUTRA\u003c\/th\u003e\n\u003cth\u003eDEWS\u003c\/th\u003e\n\u003cth\u003eCOCO\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e4'10\"-5'1\"\u003c\/td\u003e\n\u003ctd\u003e147-155cm\u003c\/td\u003e\n\u003ctd\u003e24”-27”\u003c\/td\u003e\n\u003ctd\u003e61-69cm\u003c\/td\u003e\n\u003ctd\u003e48cm\u003c\/td\u003e\n\u003ctd\u003e50cm\u003c\/td\u003e\n\u003ctd\u003e48cm\u003c\/td\u003e\n\u003ctd\u003eN\/A\u003c\/td\u003e\n\u003ctd\u003eXS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'0\"-5'3\"\u003c\/td\u003e\n\u South Sudan (GBP£) Somalia (GBP£) Lithuania (EUR€) 003ctd\u003e152-160cm\u003c\/td\u003e\n\u003ctd\u003e26\"-29\"\u003c\/td\u003e\n\u003ctd\u003e66-74cm\u003c\/td\u003e\n\u003ctd\u003e48-50cm\u003c\/td\u003e\n\u003ctd\u003e50cm\u003c\/td\u003e\n\u003ctd\u003e48-50cm\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'2\"-5'7\"\u003c\/td\u003e\n\u003ctd\u003e157-170cm\u003c\/td\u003e\n\u003ctd\u003e27\"-30\"\u003c\/td\u003e\n\u003ctd\u003e69-76cm\u003c\/td\u003e\n\u003ctd\u003e48-52cm\u003c\/td\u003e\n\u003ctd\u003e50-52cm\u003c\/td\u003e\n\u003ctd\u003e48-52cm\u003c\/td\u003e\n\u003ctd\u003eSmall, Medium\u003c\/td\u003e\n\u003ctd\u003eSmall, Medium\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'6\"-5'10\"\u003c\/td\u003e\n\u003ctd\u003e168-178cm\u003c\/td\u003e\n\u003ctd\u003e29\"-31\"\u003c\/td\u003e\n\u003ctd\u003e74-79cm\u003c\/td\u003e\n\u003ctd\u003e52-54cm\u003c\/td\u003e\n\u003ctd\u003e52-54cm\u003c\/td\u003e\n\u003ctd\u003e52-54cm\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'9\"-6'0\"\u003c\/td\u003e\n\u003ctd\u003e175-183cm\u003c\/td\u003e\n\u003ctd\u003e30\"-33\"\u003c\/td\u003e\n\u003ctd\u003e76-84cm\u003c\/td\u003e\n\u003ctd\u003e52-56cm\u003c\/td\u003e\n\u003ctd\u003e54-56cm\u003c\/td\u003e\n\u003ctd\u003e54-56cm\u003c\/td\u003e\n\u003ctd\u003eMedium, Large\u003c\/td\u003e\n\u003ctd\u003eMedium, Large\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'11\"-6'2\"\u003c\/td\u003e\n\u003ctd\u003e180-188cm\u003c\/td\u003e\n\u003ctd\u003e32\"-35\"\u003c\/td\u003e\n\u003ctd\u003e81-89cm\u003c\/td\u003e\n\u003ctd\u003e54-58cm\u003c\/td\u003e\n\u003ctd\u003e54-58cm\u003c\/td\u003e\n\u003ctd\u003e54-58cm\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003ctd\u003eLarge\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6'1\"-6'5\"\u003c\/td\u003e\n\u003ctd\u003e185-196cm\u003c\/td\u003e\n\u003ctd\u003e33\"-36\"\u00HT LENGTH 3c\/td\u003e\n\u003ctd\u003e84-91cm\u003c\/td\u003e\n\u003ctd\u003e56-58cm\u003c\/td\u003e\n\u003ctd\u003e58cm\u003c\/td\u003e\n\u003ctd\u003e56-58cm\u003c\/td\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003eN\/A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003ch4\u003eMTB \/ ALL MOUNTAIN \/ SPLICE\u003c\/h4\u003e\n\u003cdiv class=\"table_wrapper\"\u003e\n\u003ctable class=\"sizing_chart\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eHEIGHT\/INCHES\u003c\/th\u003e\n\u003cth\u003eHEIGHT\/METRIC\u003c\/th\u003e\n\u003cth\u003eINSEAM\/INCHES\u003c\/th\u003e\n\u003cth\u003eINSEAM\/METRIC\u003c\/th\u003e\n\u003cth\u003eMTB\/XC TRAIL\/FAT\u003c\/th\u003e\n\u003cth\u003eALL MOUNTAIN\/ENDURO\u003c\/th\u003e\n\u003cth\u003eSPLICE\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e4'10\"-5'1\"\u003c\/td\u003e\n\u003ctd\u003e147-155cm\u003c\/td\u003e\n\u003ctd\u003e24”-27”\u003c\/td\u003e\n\u0 | 03ctd\u003e61-69cm\u003c\/td\u003e\n\u003ctd\u003eXS\u003c\/td\u003e\n\u003ctd\u003eXS\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'0\"-5'3\"\u003c\/td\u003e\n\u003ctd\u003e152-160cm\u003c\/td\u003e\n\u003ctd\u003e26\"-29\"\u003c\/td\u003e\n\u003ctd\u003e66-74cm\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003ctd\u003eSmall\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'2\"-5'7\"\u003c\/td\u003e\n\u003ctd\u003e157-170cm\u003c\/td\u003e\n\u003ctd\u003e27\"-30\"\u003c\/td\u003e\n\u003ctd\u003e69-76cm\u003c\/td\u003e\n\u003ctd\u003eSmall, Medium\u003c\/td\u003e\n\u003ctd\u003eSmall, Medium\u003c\/td\u003e\n\u003ctd\u003eSmall, Medium\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'6\"-5'10\"\u003c\/td\u003e\n\u003ctd\u003e168-178cm\u003c\/td\u003e\n\u003ctd\u003e29\"-31\"\u003c\/td\u003e\n\u003ctd\u003e74-79cm\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u00 Gambia (GMDD) 3ctd\u003eMedium\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'9\"-6'0\"\u003c\/td\u003e\n\u003ctd\u003e175-183cm\u003c\/td\u003e\n\u003ctd\u003e30\"-33\"\u003c\/td\u003e\n\u003ctd\u003e76-84cm\u003c\/td\u003e\n\u003ctd\u003eMedium, Large\u003c\/td\u003e\n\u003ctd\u003eMedium, Large\u003c\/td\u003e\n\u003ctd\u003eMedium, Large\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5'11\"-6'2\"\u003c\/td\u003e\n\u003ctd\u003e180-188cm\u003c\/td\u003e\n\u003ctd\u003e32\"-35\"\u003c\/td\u003e\n\u003ctd\u003e81-89cm\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6'1\"-6'5\"\u003c\/td\u003e\n\u003ctd\u003e185-196cm\u003c\/td\u003e\n\u003ctd\u003e33\"-36\"\u003c\/td\u003e\n\u003ctd\u003e84-91cm\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003ctd\u003eLarge, XL\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sizing_help\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sizing_help\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"sizing_help\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThanks for considering ProjektRide for your next purchase. All bikes are fully assembled and test rode before leaving our bike shop in Edinburgh. Please allow 5-7 days for bicycle delivery although we aim to post bikes out the same day.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eIf any purchases are to be made using any cycle to work schemes, please either pop into the shop or get in touch via email\/phone to get the ball rolling. If you are not 100% sure with bike sizing, please feel free to contact us to double check.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAll bike sales include a free running in service after 6-10 weeks.\u003c\/p\u003e\n\u003c\/d135 iv\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};window._RestockRocketConfig.variantsInventoryPolicy = {43916695011554 : "deny",43916695044322 : "deny",43916695077090 : "deny",43916695109858 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {43916695011554 : parseInt("0"),43916695044322 : parseInt("0"),43916695077090 : parseInt("0"),43916695109858 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {43916695011554 : parseInt(""),43916695044322 : parseInt(""),43916695077090 : parseInt(""),43916695109858 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {43916695011554 : null,43916695044322 : null,43916695077090 : null,43916695109858 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {43916695011554 : parseInt(""),43916695044322 : parseInt(""),43916695077090 : parseInt(""),43916695109858 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {43916695011554 : null,43916695044322 : null, | 43916695077090 : null,43916695109858 : null,}; window._RestockRocketConfig.variantsShippingText = {43916695011554 : "",43916695044322 : "",43916695077090 : "",43916695109858 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {43916695011554 : null,43916695044322 : null,43916695077090 : null,43916695109858 : null,}; window._RestockRocketConfig.selected_variant_id = 43916695011554; window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available; try { var _sqCfg = window._RestockRocketConfig; var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); } ca Spain (EUR€) South Africa (GBP£) Luxembourg (EUR€) tch (e) { } try { var _sqc = window._RestockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersConfigured) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); } else { _sqArm = (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); } } catch (e) { } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/01a0141e-6f2a-7bbb-b429-5a0e333a31f5/restockrocket-1-564/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/01a0141e-6f2a-7bbb-b429-5a0e333a31f5/restockrocket-1-564/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a0141e-6f2a-7bbb-b429-5a0e333a31f5/restockrocket-1-564/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a0141e-6f2a-7bbb-b429-5a0e333a31f5/restockrocket-1-564/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = (window._RestockRocketConf175 ig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; const LIQUID_CACHE_MAX_AGE = 15 * 60; const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); const liquidCacheAge = now - liquidRenderedAt; window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCa | cheAge); if (liquidCacheAge Georgia (GBP£) <0) { console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else if (liquidCacheAge 215 < | = LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } function checkSettingsExpiry(settings) { try { if (!settings || !settings.updated_at) { console.debug('STOQ - Invalid settings data structure'); return null; } if (!settings.cache) { console.debug('STOQ - settings caching disabled'); return null; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale & St. Helena (SHP£) South Sudan (GBP£) Madagascar (GBP£) & !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } } const updatedAt = new Date(settings.updated_at); if (isNaN(updatedAt.getTime())) { console.debug('STOQ - Invalid updated_at date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (age<255 SETTINGS_CACHE_DURATION) { console.debug('STOQ - settings changed recently, skipping cache'); return null; } return settings; } catch (error) { console.debug('STOQ - Error checking settings cache:', error); return null; } } function createRestockRocketContainer() { const restockRocketContainer = document.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scriptUrl) { const restockRocketScriptElement = document.createElement('script'); restockRocketScriptElement.setAttribute('defer', 'defer'); restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') try { const _stoqInitConfig = window._RestockRocketConfig; const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqI | nitConfig.product.variants)) ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) : []; const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; var _stoqPageSeq = 0; try { _stoqPageSeq = (parseInt(window.sessionStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1; window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq)); } catch (e) { } Shopify?.analytics?.publish?.('stoq_initialized', { cart_token: _stoqInitConfig.cartToken || '', page_url: window.location.href, page_type: _stoqInitConfig.pageType || '', shop_domain: _stoqInitConfig.shop || '', market_id: _stoqInitConfig.marketId || '', country_code: _stoqInitConfig.countryIsoCode || '', detected_variant_ids: _stoqDetectedVariantIds, selected_variant_id: _stoqSelectedVariantId || '', page_load_seq: _stoqPageSeq, liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', Germany (EUR€) liquid_cache_age: _stoqInitConfig.liquidCacheAge, inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } try { var _sqTrack = window._RestockRocketConfig; if (_sqTrack.preordersConfigured) { document.addEventListener('click', function (e) { try { var t = e.target; if (!t || !t.closest) return; var host = t.closest('.shopify-payment-button, shopify-payment-terms'); if (!host) return; var channel = host.matches && host.matches('shopify-payment-terms') ? 'shop_pay_installments' : 'buy_now'; var form = host.closest('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
| (function(key) { const value = translatedFields[key]; if (value !== null && value !== undefined && value !== '') { settings[key] = value; } }); } else { console.debug('STOQ - No translated fields found for locale:', normalizedLocale); } delete settings.translations; return settings; } catch (e) { console.debug('STOQ - error applying translations:', e); return settings; } } function setupCartSellingPlanUpdater(settings) { window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ 8 - no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } (function loadStorefrontSettings() { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; function run() { const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2025-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.s | tatus); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.storefrontSettings = JSON.parse(value); console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); }) .catch(function(e) { console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); const cachedSettings = window._RestockRocketConfig.cachedSett Ghana (GBP£) ings; const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; if (validCachedSettings) { console.debug('STOQ - using cached settings'); initializeScripts(validCachedSettings); } else { console.debug('STOQ - fetching fresh settings'); const headers = { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.theme?.role === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } fetch( `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, { headers } ) .then(function(response) { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function fetchEmbedConfig(endpoint, apply) { return fetch( `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) { ST ANGLE console.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } }), fetchEmbed | Config('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { setupCartSellingPlanUpdater(settings); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && w Svalbard & Jan Mayen (GBP£) St. Helena (SHP£) Mali (XOFFr) indow._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const collectionScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlCollection : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; const pageType = window._RestockRocketConfig.pageType; const collectionPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { createRestockRocketScript(collectionScriptUrl); } else if(pageType === 'product') { createRestockRocketScript(productScriptUrl); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketCSweden (SEKkr) Sudan (GBP£) Malta (EUR€) | 73.0 | Greece (EUR€)72.0 | Switzerland (CHFCHF) Svalbard & Jan Mayen (GBP£) Mauritania (GBP£)|
| 9 | Tanzania (TZSSh) Sweden (SEKkr) Mauritius (MUR₨)CS LENGTH | Guadeloupe (EUR€)450 | Togo (XOFFr) Switzerland (CHFCHF) Mayotte (EUR€)450 | Guernsey (GBP£)450 | Tristan da Cunha (GBP£) Tanzania (TZSSh) Moldova (MDLL)450 | Guinea (GNFFr)
| 10 | Guinea-Bissau (XOFFr)BB DROP | Türkiye (GBP£) Tristan da Cunha (GBP£) Montenegro (EUR€)70 | Hungary (HUFFt)70 | Uganda (UGXUSh) Tunisia (GBP£) Morocco (MADد.م.)70 | Iceland (ISKkr)70 | Ukraine (UAH₴) Türkiye (GBP£) Mozambique (GBP£)
| 11 | United Kingdom (GBP£) Uganda (UGXUSh) Namibia (GBP£)BB HEIGHT | Isle of Man (GBP£)272 | United States (GBP£) Ukraine (UAH₴) Netherlands (EUR€)272 | Italy (EUR€)272 | Vatican City (EUR€) United Kingdom (GBP£) Niger (XOFFr)272 | Jersey (GBP£)
| 12 | Kenya (KESKSh)WHEELBASE | Zambia (GBP£) Vatican City (EUR€) North Macedonia (MKDден)1077 | Kosovo (EUR€)1116 Home | Zimbabwe (USD$) / Western Sahara (MADد.م.) Norway (GBP£)1146 | Latvia (EUR€)Zambia (GBP£) Poland (PLNzł) |
| Zimbabwe (USD$) | Liberia (GBP£) | Shop All | Libya (GBP£) | Liechtenstein (CHFCHF) | |
| Lithuania (EUR€) | Luxembourg (EUR€) | Madagascar (GBP£) | |||
| Mali (XOFFr) | BUY | SELL | Malta (EUR€)RIDE CONFIDENT | Mauritania (GBP£) |

Brooks Proofide
Sudan (GBP£)
Brooks Proofide
Türkiye (GBP£)
Réunion (EUR€)
Namibia (GBP£)
Svalbard & Jan Mayen (GBP£)
Netherlands (EUR€)
Quantity
-
1Niger (XOFFr)
North Macedonia (MKDден)
Switzerland (CHFCHF) Nigeria (NGN₦) 1
Tanzania (TZSSh)
- 2 Norway (GBP£) 4 Portugal (EUR€)



Maintenance




