Finishing Kit
Saddles
<
My Account
My Account
Open cart
notify-me-disabled","Touring"],"price":239900,"price_min":239900,"price_max":239900,"available":true,"price_varies":false,"compare_at_price":279900,"compare_at_price_min":279900,"compare_at_price_max":279900,"compare_at_price_varies":false,"variants":[{"id":43916521013474,"title":"48cm","option1":"48cm","option2":null,"option3":null,"sku":"KN23B-SUTLD-48-GN","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Kona Sutra LTD Touring Bike - 2023 - 48cm","public_title":"48cm","options":["48cm"],"price":239900,"weight":0,"compare_at_price":279900,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43916521046242,"title":"50cm","option1":"50cm","option2":null,"option3":null,"sku":"KN23B-SUTLD-50-GN","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Kona Sutra LTD Touring Bike - 2023 - 50cm","public_title":"50cm","options":["50cm"],"price":239900,"weight":0,"compare_at_price":279900,>
throw new Error('Network response was not ok');
}
return response.json();
})
.then(function(settings) {
initializeScripts(settings);
})
.catch(function(error) {
// If request failed and we have cached settings (even if expired), use them as fallback
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 initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
if(settings.enable_app) {
const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) {
return integration.type === 'hijack' && integration.enabp class="result__title">
fig.pageType === 'product') {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`);
}
// Check and update cart selling plans after scripts are loaded
if (settings.preorder_enabled) {
updateCartSellingPlans();
}
// Dispatch custom event when app is loaded
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
function updateCartSellingPlans() {
// Wait for the API to be available with retries
const maxRetries = 10;
const
a href="{{ it.product.url }}">{{ it.product.title }}<
Open search bar
Close search bar
Search text field
\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eSADDLE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eWTB Volt\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 100x12mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR HUB\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eFormula 142x12mm\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\"\u003eWTB KOM Team i27 TCS 2.0\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\"\u003eMaxxis Rekon Race EXO TR 29x2.25\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u0
ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e \u003c\/td\u003e\n\u003ctd class=\"label\"\u003eSIZE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e48\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e50\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e52\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e54\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e56\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e58\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e1\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eST LENGTH\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e410\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e410\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e455\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e455\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e500\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e535\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e2\u003c\/td\u003e\n\u003ctd class=\"
578\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e592\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e609\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e627\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e660\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e5\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eSTANDOVER\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e735\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e739\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e773\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e781\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e827\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e851\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e6\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eHT ANGLE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e69.5\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e69.5\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e69.5\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e69.5\u003Loading mored\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e9\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eCS LENGTH\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e445\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"geo_numbers\"\u003e10\u003c\/td\u003e\n\u003ctd class=\"label\"\u003eBB DROP\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e74\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e74\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e74\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e72\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e72\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e72\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"geo_numbers\"\u003e11\u003c\/td\u003e.d\u003e\n\u003ctd class=\"data\"\u003e636\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e647\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e658\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e670\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e688\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\"\u003e430\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e430\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e430\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e430\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e430\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e430\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\"\u003e55\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e55\u003c\/td\u003e\n\u003ctd class=\"data\"\u003e55\u003c\/td\u003e\.ETRIC\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\u003ctd\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\u00
.3ctd\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\"\u003c\/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\u003cp\u003e \u003cbr\
option1":"56cm","option2":null,"option3":null,"sku":"KN23B-SUTLD-56-GN","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Kona Sutra LTD Touring Bike - 2023 - 56cm","public_title":"56cm","options":["56cm"],"price":239900,"weight":0,"compare_at_price":279900,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43916521177314,"title":"58cm","option1":"58cm","option2":null,"option3":null,"sku":"KN23B-SUTLD-58-GN","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Kona Sutra LTD Touring Bike - 2023 - 58cm","public_title":"58cm","options":["58cm"],"price":239900,"weight":0,"compare_at_price":279900,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-03-13at15.03.07.png?v=1678720397"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot202
nna do! That’s the best part about the Sutra LTD—it broke the mold of what a bike has to be. It’s got bigger tires, burlier construction, and enough mounts to hold a horse. But who needs a horse when this is your horse? \u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sectionwrapper bike_specs_geo\"\u003e\n\u003cdiv class=\"sectiontarget\" data-scroll-index=\"1\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"section\"\u003e\n\u003cdiv class=\"bike_specs\"\u003e\n\u003ch2\u003eSPECIFICATIONS\u003c\/h2\u003e\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 Cromoly 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\"\u003e48, 50, 52, 54, 56, 58\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eRE
03c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eCASSETTE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSRAM PG1130 11-42t 11spd\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\"\u003en\/a\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eR\/D\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSRAM Rival 1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003eSHIFTERS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSRAM Rival 1 w\/ Integrated Dropper Lever\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eBRAKE CALIPERS\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eSRAM Rival HRD Flat Mount\u003c\/td\u003e\n\u003c\/tr\u00
lor\"\u003e\n\u003ctd class=\"label\"\u003eSEATPOST\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eTranzX Dropper +RAD Internal 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 Cork Tape\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eSADDLE\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eWTB Volt\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 100x12mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"label\"\u003eREAR HUB\u003c\/td\u003e\n\u003ctd class=\"data\"\u003eFormula 142x12mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"altercolor\"\u003e\n\u003ctd class=\"label\"\u003
div class="product__tag{{ it.product.badgeClasses }}">003e\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\u003span>{{ it.product.badgeText | safe }}ng, 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\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {43916521013474 : "continue",43916521046242 : "deny",43916521079010 : "deny",43916521111778 : "deny",43916521144546 : "deny",43916521177314 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {43916521013474 : parseInt("0"),43916521046242 : parseInt("0"),43916521079010 : parseInt("0"),43916521111778 : parseInt("0"),43916521144546 : parseInt("0"),43916521177314 : parseInt("0"),};
window._RestockRocketConfig.variantsPreorderCount = {43916521013474 : parseInt(""),43916521046242 : parseInt(""),43916521079010 : parseInt(""),43916521111778 : parseInt(""),43916521144546 : parseInt(""),43916521177314 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {43916521013>window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ ->
{{/if}}
w._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
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 >
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')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings ||
>
translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(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;
}
}
// First try to get settings from metafields with expiry check
const cachedSettili class="result result--full">
{
"@context": "http://schema.org",
"@type": "Organization",
"name": "ProjektRide","sameAs": [
null,
null,
null,
null,
null,
null,
null
],
"url": "https:\/\/projektride.co.uk"
}
