_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","bill
ing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_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_p
img src="//projektride.co.uk/cdn/shop/files/6198_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.o
oll closure offers ultimate practicality for all of your bike tours and weekly grocery-shopping ventures, especially on account of its generous payload. Thanks to its waterproof exterior, easy-to-clean interior and shoulder-bag function, the Back-Roller Free is ideal for all who would like to use their bikes despite having things to carry. With the Quick-Lock2.1 system, the bags attach to any bike rack with a tube diameter of up to 16 mm. Larger hooks (e.g. for e-bikes) are available separately.\u003c\/span\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFabric: PD62\/PS60\u003c\/li\u003e\n\u003cli\u003eFeatures: QL2.1\u003c\/li\u003e\n\u003cli\u003eHeight: 42cm\u003c\/li\u003e\n\u003cli\u003eWidth: 23 \/ 32cm\u003c\/li\u003e\n\u003cli\u003eDepth: 17cm\u003c\/li\u003e\n\u003cli\u003eVolume: 40L\u003c\/li\u003e\n\u003cli\u003eWeight: 1900g\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c!----\u003e","published_at":"2024-08-16T10:46:41+01:00","created_at":"2024-08-16T10:46:41+01:00"Rear Suspension
173x5 mm QR
Formula DC-20, alloy, 6-bolt, 100x5 mm":["Blue"],"price":15000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/1889.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/1887.jpg?v=1723801544","\/\/projektride.co.uk\/cdn\/shop\/files\/6125.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6126.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6127.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6128.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6129.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6130.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6131.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6132.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6133.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6134.jpg?v=1723801545","\/\/projektride.co.uk\/cdn\/shop\/files\/6135.jpg?v=1723801545","
o":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6125.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6125.jpg?v=1723801545","width":768},{"alt":null,"id":34467809329378,"position":4,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6126.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6126.jpg?v=1723801545","width":768},{"alt":null,"id":34467809362146,"position":5,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6127.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6127.jpg?v=1723801545","width":768},{"alt":null,"id":34467809394914,"position":6,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\
/6128.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6128.jpg?v=1723801545","width":768},{"alt":null,"id":34467809427682,"position":7,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6129.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6129.jpg?v=1723801545","width":768},{"alt":null,"id":34467809460450,"position":8,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6130.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6130.jpg?v=1723801545","width":768},{"alt":null,"id":34467809493218,"position":9,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6131.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","
src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6131.jpg?v=1723801545","width":768},{"alt":null,"id":34467809525986,"position":10,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6132.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6132.jpg?v=1723801545","width":768},{"alt":null,"id":34467809558754,"position":11,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6133.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6133.jpg?v=1723801545","width":768},{"alt":null,"id":34467809591522,"position":12,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6134.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6134.jpg?v=1723801545","width":768},{"alt":null,"id":34467809624290,"position":13,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6135.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6135.jpg?v=1723801545","width":768},{"alt":null,"id":34467809657058,"position":14,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6136.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6136.jpg?v=1723801545","width":768},{"alt":null,"id":34467809689826,"position":15,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/12466.jpg?v=1723801545"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/12466.jpg?v=1723801545","width":1200},{"alt":null,"id":34467809722594,"position":16,"preview_image":{
"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/12467.jpg?v=1723801545"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/12467.jpg?v=1723801545","width":1200}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eIn keeping with its commitment to innovation, ORTLIEB has just introduced another PVC-free line of products made of a polyurethane-coated polyester fabric. The base fabric of the products in the Free Line is coated with polyurethane in a manner that ensures lasting waterproof qualities. The result is a waterproof and durable canvas material that is as outstanding as the conventional ORTLIEB canvas material when it comes to durability and service life. The products in the Free Line are available in classic black and two other appealing colours.\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003cspan\u003eThe PVC-free version of th
o":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6125.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6125.jpg?v=1723801545","width":768},{"alt":null,"id":34467809329378,"position":4,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6126.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6126.jpg?v=1723801545","width":768},{"alt":null,"id":34467809362146,"position":5,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6127.jpg?v=1723801545"},"aspect_ratio":1.0,"height":768,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/6127.jpg?v=1723801545","width":768},{"alt":null,"id":34467809394914,"position":6,"preview_image":{"aspect_ratio":1.0,"height":768,"width":768,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\e proven ORTLIEB Back-Roller was developed for cyclists and outdoor enthusiasts who would like to avoid PVC entirely. This rear pannier bag with a roll closure offers ultimate practicality for all of your bike tours and weekly grocery-shopping ventures, especially on account of its generous payload. Thanks to its waterproof exterior, easy-to-clean interior and shoulder-bag function, the Back-Roller Free is ideal for all who would like to use their bikes despite having things to carry. With the Quick-Lock2.1 system, the bags attach to any bike rack with a tube diameter of up to 16 mm. Larger hooks (e.g. for e-bikes) are available separately.\u003c\/span\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFabric: PD62\/PS60\u003c\/li\u003e\n\u003cli\u003eFeatures: QL2.1\u003c\/li\u003e\n\u003cli\u003eHeight: 42cm\u003c\/li\u003e\n\u003cli\u003eWidth: 23 \/ 32cm\u003c\/li\u003e\n\u003cli\u003eDepth: 17cm\u003c\/li\u003e\n\u003cli\u003eVolume: 40L\u003c\/li\u003e\n\u003cli\u003eWeight: 1900g\u003c\/li\u003e\n\u00
img src="//projektride.co.uk/cdn/shop/files/6199_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
Skewer frontFinishing Kit3c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c!----\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {45820519121122 : "deny",45820519153890 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {45820519121122 : parseInt("1"),45820519153890 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {45820519121122 : parseInt(""),45820519153890 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {45820519121122 : null,45820519153890 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {45820519121122 : parseInt(""),45820519153890 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {45820519121122 : null,45820519153890 : null,};
window._RestockRocketConfig.variantsShippingText = {45820519121122 : "",45820519153890 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {45820519121122 : null,45820519153890 : null,};
window._RestockRocketConfig.selected_variant_id = 45820519121122;
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/019c4de0-280f-760f-b566-2e2f8e837eb8/restock-rocket-shopify-454/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019c4de0-280f-760f-b566-2e2f8e837eb8/restock-rocket-shopify-454/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
const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds
// Calculate Liquid cache
freshness once at initialization
const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt;
// Validate timestamp and calculate cache age
if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) {
console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
const now = Math.floor(Date.now() / 1000); // Current time in seconds
const liquidCacheAge = now - liquidRenderedAt; // Age in seconds
// Handle client clock ahead of server
if (liquidCacheAge <
Tyres 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
<
= 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;
}
// 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 locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._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
Trek Thru-Skew
age = Date.now() - updatedAt.getTime();
if (age <
Tubes 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 || !settings.multi_language_enabled) {
return settings;
}
if (!settings.translations)
img src="//projektride.co.uk/cdn/shop/files/6200_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
{
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];
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;
}
}
// Setup event listener for cart selling plan updates
// This must be called before any scripts are loaded to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
if (!settings || !settings.preorder_enabled) {
return;
}
// Listen for stoq:preorder-api-ready event dispatched by preorder.js
window.addEventListener('stoq:preorder-api-ready', function(event) {
console.debug('STOQ - Preorder API ready, 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);
});
}
});
}
// 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 {
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 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 initialize
Hub rearTubelessScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
// Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions
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);
})
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)) {
createRestockRocke
Pedals
img src="//projektride.co.uk/cdn/shop/files/6202_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
- tScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'product') {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`);
}
// Dispatch custom event when app is loaded
// Cart selling plan updates will be triggered by stoq:preorder-api-ready
event
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings,
preorderEnabled: settings.preorder_enabled
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
- BUY Saddles
- SELLimg src="//projektride.co.uk/cdn/shop/files/6201_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img"> Formula DC-22, alloy, 6-bolt, Shimano 8/9/10 freehub, 135x5 mm .restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property: all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10px;}.preorder-detail-item{display:flex;flex-direction:row;justify-content:start;gap:8px;align-items:center;}.restock-rocket-payment-widget{border:1px solid #ebebeb;margin-bottom:20px;}.restock-rocket-payment-option{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:15px 20px;}.restock-rocket-payment-option:not(:last-child){border-bottom:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-al ign:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-
- timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preRIDE CONFIDENT Seat Posts & Clampsorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(-100%)}}@keyframes slide-out-right{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@-webkit-keyframes slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{d isplay:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;}
RimGears & Drivetrain
img src="//projektride.co.uk/cdn/shop/files/6203_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
Components
img src="//projektride.co.uk/cdn/shop/files/6204_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
Spokes
14 g stainless steel, black
Complete Wheels
14 g stainless steel, black
Complete Wheels
Size:img src="//projektride.co.uk/cdn/shop/files/6206_98x.jpg?v=1723804658" alt="" class="product-single__thumbnail-img">
Tools & Maintenance
Bontrager Montrose Comp, wire bead, 30 tpi, 27.5x2.40"
Tools & Maintenance
Bontrager Montrose Comp, wire bead, 30 tpi, 27.5x2.40"
EXPEDITION ACCESSORY POCKET (4.5L) Bike Packing
Bontrager Montrose Comp, wire bead, 30 tpi, 29x2.40"/£53.00
Ortlieb Back-Roller XL PlusGloves
SKU: AWF
SocksShimano, 73 mm, threaded cartridge, 122.5 mm spindle
Cassette
Shimano LINKGLIDE LG300, 11-46, 9-speed
Chain
Pedal
VP-536 nylon platform
<<<<
<<
<roduct__media product__media--featured"
href="/collections/accessories-bike-packing/products/life-systems-pocket-first-aid-kit-hire"
title="Life Systems Pocket First Aid Kit - HIRE"
aria-label="Life Systems Pocket First Aid Kit - HIRE"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)">
span class="visually-hidden">Life Systems Pocket First Aid Kit - HIRE
>