];
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 cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSettings);
} else {
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.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) {
createRestockRocketScript(window._R
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 retryDelay = 500;
function attemptCartCheck(attempt = 1) {
if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
Open search barGears & Drivetrain
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
// Retuon_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","storefront_form_customer_name_pl
ector_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_selector_collection_type":"af
ing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_u
UrlCollection = '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 - 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) {
Sell Your Bike 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 ||
ou perfectly is a critical part of the process. We have over 20 years of bike fitting experience and data to call upon to ensure your riding position is absolute pinpoint. We offer fittings as part of the ordering process. You can book in herefor a fitting. No obligation.\n \nFrame and Fork Price £2777, Full builds starting from £4500.\n \n",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https:\/\/projektride.co.uk"
},
"headline": "Enigma Edge",
"image": [
"https:\/\/projektride.co.uk\/cdn\/shop\/articles\/Screenshot_2024-09-21_at_10.36.48_1400x.png?v=1726911539"
],
"datePublished": "2024-09-21T10:38:58Z",
"dateCreated": "2024-09-21T10:38:58Z",
"author": {
"@type": "Person",
"name": "andy graham"
},
"publisher": {
"@type": "Organization",
"name": "ProjektRide"
}
}
Tubeless
The Access WS C:62 SLX is an uncompromising off-road mile-eater; fast, light and delightfully direct. We selected suitable components for this: a Fox 32 Performance fork, grippy Schwalbe tires and super-light MT8 Pro disc brakes from Magura. The shifting is done by the unparalleled Shimano XT drivetrain, with 1x12 gears. The finishing touches are the carbon cranks from Praxis and the light but strong Evolution wheels from Newmen. Does this bike look fast? That's because it is.Yes
Frame description
Everything we know about building light and strong carbon frames can be found in the Access WS C:62. Made from our high-quality C:62 carbon, with a short and stiff rear triangle and a tapered head tube for optimal power transfer and direct steering. Typical CUBE: the AgileRide geometry offers a nice mix of agility and stability. But we haven't forgotten about comfort either. You may have noticed the slim seat stays? But the comfortable 27.2 mm seatpost also contributes. This bike is fast without tiring you out prematurely.NoBike Packing
Fox 32 SC Float Performance, 2-Position Remote, Tapered, 15x110mm, 100mmAltura Nevis Nightvison Mens Jacket
Cleaners, Degreasers and Lubrication
a class="product__media product__media--featured"
href="/collections/essentials/products/altura-nevis-nightvison-mens-jacket"
title="Altura Nevis Nightvison Mens Jacket"
aria-label="Altura Nevis Nightvison Mens Jacket"
style="background-image: url(//projektride.co.uk/cdn/shop/products/Screenshot2021-12-28at15.35.50_600x.png?v=1640706098)">
Drive and brakesspan class="visually-hidden">Altura Nevis Nightvison Mens Jacket
Genesis
{"id":15172019913087,"title":"CUBE ACCESS WS C:62 SLX TEAM WS","handle":"cube-access-ws-c-62-slx-team-ws-1","description":"\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\n\u003cdiv class=\"product-detail-section-title\"\u003e\n\u003ch2\u003e\u003cspan\u003eDescription\u003c\/span\u003e\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"offcanvas-header\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"offcanvas-body\"\u003e\n\u003cdiv class=\"product-detail-description tab-pane-container\"\u003e\n\u003cdiv class=\"collapse show\" id=\"productDetailDescriptionCollapse\"\u003e\n\u003cdiv class=\"product-detail-description-text\" id=\"productDetailDescriptionText\"\u003e\n\u003cp\u003e\u003cspan\u003eThe Access WS C:62 SLX is an uncompromising off-road mile-eater; fast, light and delightfully direct. We selected suitable components for this: a Fox 32 Performance fork, grippy Schwalbe tires and super-light MT8 Pro disc brakes from Magura. The shifting is done by the unparalleled Shimano XT drivetrain, with 1x12 gears. The finishing touches are the carbon cranks from Praxis and the light but strong Evolution wheels from Newmen. Does this bike look fast? That's because it is.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003e\u003cspan\u003eFrame description\u003c\/span\u003e\u003c\/strong\u003e\u003cbr\u003e\u003cspan\u003eEverything we know about building light and strong carbon frames can be found in the Access WS C:62. Made from our high-quality C:62 carbon, with a short and stiff rear triangle and a tapered head tube for optimal power transfer and direct steering. Typical CUBE: the AgileRide geometry offers a nice mix of agility and stability. But we haven't forgotten about comfort either. You may have noticed the slim seat stays? But the comfortable 27.2 mm seatpost also contributes. This bike is fast without tiring you out prematurely.\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003eFrame\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eFrame\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eC:62® Monocoque Advanced Twin Mold Technology, ARG2, Tapered Headtube, PressFit Boost BB, Internal Cable Routing, Boost 148, Dropper Post Ready\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"<