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 - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current loca
SELL
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Trek Domane SLR 7 AXS Gen 4",
"url": "https:\/\/projektride.co.uk\/products\/trek-domane-slr-7-axs-gen-4","image": [
"https:\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSLR7AXS-24-41899-F-Portrait_1440x.jpg?v=1728038204"
],"description": "\n\n\n\n\n\n\n\n\n\n\n\n\n\nThe Domane SLR 7 AXS is an ultra-light carbon endurance road bike decked out with the high-end parts made for long and fast, high-performance rides. You get our highest-level 800 Series OCLV Carbon frame with rear IsoSpeed, a wireless SRAM Force AXS D2 electronic drivetrain for precision shifting and OCLV Carbon wheels. Plus, it has an easy-access storage compartment for stowing ride essentials, and versatile 38 mm tyre clearance to keep you floating on rough roads and light gravel.\n\n\n\n\n\n\nHow tall are you?\nTo measure your height, stand up straight, barefoot, with your back, heels, shoulders and head all touching a wall. While looking straight ahead, place a book or straight edge on your head and slowly push it against the wall. Your straight edge should be parallel with the floor. Mark the spot where the bottom of the book is touching the wall. The distance from the marked spot to the floor is your height.\n\n\n\n\n\n\nWhat is your inside leg?\nHow to measure: Stand barefoot with your back straight and against a wall. Tuck a ruler or something that extends to the floor between your legs. Using both hands, and keeping it level, pull the ruler up into your crotch as if you were sitting on the saddle. Measure the distance from the top edge of the ruler to the ground to find your inside leg measurement. Your inside leg is very important to your final bike size so please measure carefully.\n\n\n\n\n\n\n\nSizing\n\n\n\n\nsize-table\n\n\nSize\nRider Height\nInseam\n\n\n\n\n47\n\n152 - 158 cm\n5'0\" - 5'2\"\n\n\n71 - 75 cm\n28\" - 30\"\n\n\n\n50\n\n158 - 163 cm\n5'2\" - 5'4\"\n\n\n74 - 77 cm\n29\" - 30\"\n\n\n\n52\n\n163 - 168 cm\n5'4\" - 5'6\"\n\n\n76 - 79 cm\n30\" - 31\"\n\n\n\n54\n\n168 - 174 cm\n5'6\" - 5'9\"\n\n\n78 - 82 cm\n31\" - 32\"\n\n\n\n56\n\n174 - 180 cm\n5'9\" - 5'11\"\n\n\n81 - 85 cm\n32\" - 33\"\n\n\n\n58\n\n180 - 185 cm\n5'11\" - 6'1\"\n\n\n84 - 87 cm\n33\" - 34\"\n\n\n\n60\n\n185 - 190 cm\n6'1\" - 6'3\"\n\n\n86 - 90 cm\n34\" - 35\"\n\n\n\n62\n\n190 - 195 cm\n6'3\" - 6'5\"\n\n\n89 - 92 cm\n35\" - 36\"\n\n\n\n\n\n\n\n\n\n\nGeometry\n\n\n\n\n\n\nAll measurements provided in cm unless otherwise stated.\n \n\nSizing table\n\n\nFrame size number\nWheel size\n\nA — Seat tube\n\nB — Seat tube angle\n\nC — Head tube length\n\nD — Head angle\n\nE — Effective top tube\n\nG — Bottom bracket drop\n\nH — Chainstay length\n\nI — Offset\n\nJ — Trail\n\nK — Wheelbase\n\nL — Standover\n\nM — Frame reach\n\nN — Frame stack\nSaddle rail height min (w\/short mast)\nSaddle rail height max (w\/short mast)\nSaddle rail height min (w\/tall mast)\nSaddle rail height max (w\/tall mast)\n\n\n\n\n47cm\n700c\n42.0\n74.6°\n11.0\n71.0°\n50.9\n8.0\n42.0\n5.3\n6.1\n98.6\n68.6\n36.4\n52.7\n55.5\n62.0\n58.5\n65.0\n\n\n50cm\n700c\n45.0\n74.6°\n13.0\n71.1°\n51.9\n8.0\n42.0\n5.3\n6.0\n99.6\n71.6\n36.8\n54.6\n58.5\n65.0\n61.5\n68.0\n\n\n52cm\n700c\n47.5\n74.2°\n14.5\n71.3°\n53.0\n8.0\n42.0\n5.3\n5.9\n100.3\n73.5\n37.1\n56.1\n61.5\n68.0\n64.5\n71.0\n\n\n54cm\n700c\n50.0\n73.7°\n16.0\n71.3°\n54.2\n8.0\n42.0\n5.3\n5.9\n101.0\n75.4\n37.4\n57.5\n64.0\n70.5\n67.0\n73.5\n\n\n56cm\n700c\n52.5\n73.3°\n17.5\n71.9°\n55.4\n7.8\n42.0\n4.8\n6.1\n100.8\n77.6\n37.7\n59.1\n67.0\n73.5\n70.0\n76.5\n\n\n58cm\n700c\n54.8\n73.0°\n19.5\n72.0°\n56.7\n7.8\n42.5\n4.8\n6.0\n102.2\n79.6\n38.0\n61.1\n69.0\n75.5\n72.0\n78.5\n\n\n60cm\n700c\n56.7\n72.8°\n22.0\n72.1°\n57.9\n7.5\n42.5\n4.8\n5.9\n103.2\n81.7\n38.3\n63.2\n71.0\n77.5\n74.0\n80.5\n\n\n62cm\n700c\n58.6\n72.5°\n24.5\n72.1°\n59.3\n7.5\n42.5\n4.8\n5.9\n104.2\n83.5\n38.6\n65.6\n73.0\n79.5\n76.0\n82.5\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","sku": "5299520","brand": {
80.0
window._RestockRocketConfig = window._RestockRocketConfig || {}
// Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us')
// This matches the backend's Mobility.normalize_locale behavior
// Returns empty string if locale is empty or invalid (matches original behavior)
function normalizeLocale(locale) {
if (!locale || locale.trim() === '') {
return '';
}
return locale.toString().toLowerCase().replace(/-/g, '_');
}
window._RestockRocketConfig.locale = 'en';
window._RestockRocketConfig.normalizedLocale = normalizeLocale('en');
window._RestockRocketConfig.shop = 'projektride.myshopify.com';
window._RestockRocketConfig.pageType = 'product';window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-11-11T14:27:02.312Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#F<
label for="quantity--template--15326745395426__main">QuantityFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefron
t_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_select>
58.5
or_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again by entering your details below!","preorder_enabled":true,"preorder_buy_button_selector":null,"preorder_add_to_car<
) where on of the team will be more than happy to help.ProjektRide Bike Shop EdinburghI'm looking to buy this product, when will it arrive and how much does postage cost?
72.8°
22.0
72.1°
Extra Small / Blue - Sold Out
adable, so it’s safe for you, your bike and the planet.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e*Only contents are biodegradable.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e120ml\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eIdeal for MTB, Road \u0026amp; Cyclocross\u003c\/li\u003e\n\u003cli\u003eWax based formula excels in dry, dusty conditions\u003c\/li\u003e\n\u003cli\u003eAdded protection against contaminants\u003c\/li\u003e\n\u003cli\u003eProvides smooth and quiet gear shifting\u003c\/li\u003e\n\u003cli\u003eCan be applied to chain, cables, shifters and derailleurs\u003c\/li\u003e\n\u003cli\u003ePipette system for easy application\u003c\/li\u003e\n\u003c\/ul\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {42133782364386 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {42133782364386 : parseInt("14"),};
window._RestockRocketConfig.variantsPreorderCount = {42133782364386 : parseInt(""),};
window._RestockRocketConfig.variantsPreord
Large / Red - Sold Out<
!settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for 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
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.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window.
st 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 retryDelay = 500;
function attemptCartCheck(attempt = 1) {
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:'