Iceland (ISKkr)
Header Image
Ireland (EUR€)
Italy (EUR€)
Kosovo (EUR€)
Latvia (EUR€)
Madagascar (GBP£) <

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 storefrontGraphql(query, variables) { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disMali (XOFFr)

ing!, $key: String!) { shop { metafield(namespace: $namespace, key: $key) { value } } }'; return storefrontGraphql(query, { namespace: cfg.metafieldNamespace, key: key }) .then(function(data) { const value = data && data.shop && data.shop.metafield && data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no ' + key + ' metafield value'); } return JSON.parse(value); }); } function fetchStorefrontSettings() { const query = 'query StoqSettings($namespace: String!) { shop { settings: metafield(namespace: $namespace, key: "settings") { value } translations: metafield(namespace: $namespace, key: "settings_translations") { value } } }'; return storefrontGraphql(query, { namespace: window._RestockRocketConfig.metafieldNamespace }) .then(function(data) { const settings = JSON.parse(data.shop.settings.value); if (!settings.updated_at) { throw new Error('settings metafield is not a settings payload'); } if (settings.single_locale
rsion; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } const storefrontRead = window._RestockRocketConfig.readFlags?.enable_storefront_settings_read === true ? Promise.race([ fetchStorefrontSettings(), new Promise(function(_, reject) { setTimeout(function() { reject(new Error('timed out')); }, 1500); }) ]).catch(function(error) { console.debug('STOQ - Storefront settings read failed, using setting.json:', error.message); }) : Promise.resolve(); storefrontRead .then(function(settings) { return settings || 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) { initializeScri }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function refreshShopConfig(source) { const cfg = window._RestockRocketConfig; const viaEmbed = function() { return fetchEmbedConfig(source.endpoint, source.apply); }; const flagOn = !!cfg.readFlags && cfg.readFlags[source.flag] === true; if (!flagOn || source.embedOnly === true) { return viaEmbed(); } return fetchStorefrontShopMetafield(source.metafieldKey) .then(function(value) { if (!source.isValid(value)) { throw new Error(source.metafieldKey + ' metafield is not a valid ' + source.endpoint + ' payload'); } source.apply(value); console.debug('STOQ - refreshed ' + source.endpoint + ' from the Storefront API'); }) .catch(function(error) { console.debug('STOQ - Storefront ' + source.endpoint + ' read failed, using embed:', error.message); return viaEmbed(); }); } function refreshIntegrations() { c
} function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); const forceEmbedSellingPlans = settings.force_embed_selling_plans === true; const staleRefresh = !window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid; if (forceEmbedSellingPlans || staleRefresh) { console.debug('STOQ - refreshing selling_plans' + (staleRefresh ? ' + integrations (Liquid cache stale)' : ' (force_embed_selling_plans)')); const refreshes = [refreshSellingPlans(forceEmbedSellingPlans)]; if (staleRefresh) { refreshes.push(refreshIntegrations()); } Promise.race([ Promise.all(refreshes), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(setMalta (EUR€)
? 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._RestockRocketConfig.scriptUrlCollection); } else if(usePreorderBuild) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${pageType}`); } const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType,
Mauritania (GBP£)
Mauritius (MUR₨)
Mayotte (EUR€) selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57602996699519,"title":"52cm \/ Shaggy Carpet","option1":"52cm","option2":"Shaggy Carpet","option3":null,"sku":"SURLY-SURLY-STRAGGLER-FRAMESET-SHAGGY-CARPET-52CM","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Straggler Frameset - 52cm \/ Shaggy Carpet","public_title":"52cm \/ Shaggy Carpet","options":["52cm","Shaggy Carpet"],"price":89999,"weight":2900,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57602996732287,"title":"54cm \/ Shaggy Carpet","option1":"54cm","option2":"Shaggy Carpet","option3":null,"sku":"SURLY-SURLY-STRAGGLER-FRAMESET-SHAGGY-CARPET-54CM","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Straggler Frameset - 54cm \/ Shaggy Carpet","public_title":"54cm \/ Shaggy Carpet","optio ue,"taxable":true,"featured_image":null,"available":true,"name":"Surly Straggler Frameset - 58cm \/ Shaggy Carpet","public_title":"58cm \/ Shaggy Carpet","options":["58cm","Shaggy Carpet"],"price":89999,"weight":2900,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57602996830591,"title":"60cm \/ Shaggy Carpet","option1":"60cm","option2":"Shaggy Carpet","option3":null,"sku":"SURLY-SURLY-STRAGGLER-FRAMESET-SHAGGY-CARPET-60CM","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Straggler Frameset - 60cm \/ Shaggy Carpet","public_title":"60cm \/ Shaggy Carpet","options":["60cm","Shaggy Carpet"],"price":89999,"weight":2900,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57602996863359,"title":"6ow.klarnaAppBlocksManager) { window.klarnaAppBlocksManager.push({ productVariants: [{"id":43936664879330,"title":"Xs","option1":"Xs","option2":null,"option3":null,"sku":"FMSUPA230K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Preamble Frameset - black - Xs","public_title":"Xs","options":["Xs"],"price":65000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":43936664912098,"title":"S","option1":"S","option2":null,"option3":null,"sku":"FMSUPA231K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Preamble Frameset - black - S","public_title":"S","options":["S"],"price":65000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"incremenl,"sku":"FMSUPA234K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Preamble Frameset - black - XL","public_title":"XL","options":["XL"],"price":65000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}], templateName: 'product', dataKey: 'top-strip-promotion-badge', storefrontCurrency: 'GBP', storefrontCountry: 'GB', storefrontLanguage: 'en', shopLocale: 'en', shopDomain: 'projektride.co.uk', variantPrice: '65000', cartPrice: '0', selector: 'shopify-osm-AZVZWMXA0Y041VmdBL__klarna_on_site_messaging_app_block_8gNReH', topPadding: '0', bottomPadding: '30', }); } else { window.appBlockPlacements.push({ productVariants: [{"id":43936664879330,"title":"Xs","option1":"Xs","option2":null,"option3":null,"sku":"FMSU
me":"Surly Preamble Frameset - black - Md","public_title":"Md","options":["Md"],"price":65000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":43936664977634,"title":"Lg","option1":"Lg","option2":null,"option3":null,"sku":"FMSUPA233K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Preamble Frameset - black - Lg","public_title":"Lg","options":["Lg"],"price":65000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":43936665010402,"title":"XL","option1":"XL","option2":null,"option3":null,"sku":"FMSUPA234K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Preamble Frameset - black - XL","public_title":"XL","options":["XL"],"pric
Add to Cart
£650.00

 

 





window.appB