Close
html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}
no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart selling plans:', error);
});
}
});
}
(function loadStorefrontSettings() {
const cfg = window._RestockRocketConfig;
if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return;
function run() {
const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }';
fetch(
`https://${cfg.shop}/api/2026-07/graphql.json`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken,
},
body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }),
}
)
.then(function(response) {
if (!response.ok) { throw new Error('Storefront API HTTP ' + response.st
atus); }
return response.json();
})
.then(function(body) {
if (body && body.errors && body.errors.length) {
throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', '));
}
const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value;
if (!value) { throw new Error('Storefront API returned no settings metafield value'); }
cfg.storefrontSettings = JSON.parse(value);
console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings');
})
.catch(function(e) {
console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message);
});
}
if (typeof window.requestIdleCallback === 'function') {
window.requestIdleCallback(run, { timeout: 5000 });
} else {
setTimeout(run, 0);
}
})();
const cachedSettings = window._RestockRocketConfig.cachedSetti._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; });
const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds)
&& window._RestockRocketConfig.disabledSellingPlanIds.length > 0;
const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds;
const collectionScriptUrl = usePreorderBuild
? window._RestockRocketConfig.scriptUrlCollection
: window._RestockRocketConfig.scriptUrlCollectionBis;
const productScriptUrl = usePreorderBuild
? 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(collectio
nScriptUrl);
} 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,
enabled: settings.enable_app,
settings: settings,
preorderEnabled: settings.preorder_enabled
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
Charter+ 5 Auto 540 Wh Lowstep
Quantity
NEW ARRIVALS
/
- Domane AL 2 Gen 4 Domane AL 2 Gen 41
- 2 Colour
- 3
- 4
- 9
- Matte Dark Star Black10 +
| Shimano MT401 / MT420 hydraulic disc | |
| Brake Rotor | Shimano RT26, 6-bolt, 180 mm // Shimano RT30, CentreLock, 203 mm |
| Pedals | £950.00Bontrager City pedals |
| Saddle | Selle Royal ON relaxed |
| Seatpost | Aluminium with suspension, 300 mm long, with adjustable spring rate |
| Handlebar | |
| b.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430350207,"title":"Lavender Haze \/ 58","option1":"Lavender Haze","option2":"58","option3":null,"sku":"5350601","requires_shipping":true,"taxable":true,"featured_image":{"id":86929811964287,"product_id":15846731972991,"position":13,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-D-Primary_5ed8da48-c27c-4951-b9dc-4628a32f666b.jpg?v=1787065214","variant_ids":[58205430186367,58205430219135,58205430251903,58205430284671,58205430317439,58205430350207,58205430382975]},"available":false,"name":"Domane AL 2 Gen 4 - Lavender Haze \/ 58","public_title":"Lavender Haze \/ 58","options":["Lavender Haze","58"],"price":95000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"197216436980","featured_mediStema":{"alt":"Domane AL 2 Gen 4","id":72254265459071,"position":13,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-D-Primary_5ed8da48-c27c-4951-b9dc-4628a32f666b.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430382975,"title":"Lavender Haze \/ 61","option1":"Lavender Haze","option2":"61","option3":null,"sku":"5350602","requires_shipping":true,"taxable":true,"featured_image":{"id":86929811964287,"product_id":15846731972991,"position":13,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-D-Primary_5ed8da48-c27c-4951-b9dc-4628a32f666b.jpg?v=1787065214","variant_ids":[58205430186367,58205430219135,58205430251903,58205430284671,58205430317439,58205430350207,58205430382975]},"available":true, | "name":"Domane AL 2 Gen 4 - Lavender Haze \/ 61","public_title":"Lavender Haze \/ 61","options":["Lavender Haze","61"],"price":95000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"197216436997","featured_media":{"alt":"Domane AL 2 Gen 4","id":72254265459071,"position":13,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-D-Primary_5ed8da48-c27c-4951-b9dc-4628a32f666b.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430415743,"title":"Matte Dark Star Black \/ 44","option1":"Matte Dark Star Black","option2":"44","option3":null,"sku":"5350575","requires_shipping":true,"taxable":true,"featured_image":{"id":86929812160895,"product_id":15846731972991,"position":19,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214","variant_ids":[58205430415743,58205430448511,58205430481279,58205430514047,58205430546815,58205430579583,58205430612351]},"available":false,"name":"Domane AL 2 Gen 4 - Matte Dark Star Black \/ 44","public_title":"Matte Dark Star Black \/ 44","options":["Matte Dark Star Black","44"],"price":95000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"197216436720","featured_media":{"alt":"Domane AL 2 Gen 4","id":72254265655679,"position":19,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430448511,"title":"Matte Dark Star Black \/ 49","option1":"Matte Dark Star Black","option2":"49","option3":null,"sku"Bontrager alloy, 31.8mm clamp, adjustable rise, Blendr compatible, 80mm length:"5350576","requires_shipping":true,"taxable":true,"featured_image":{"id":86929812160895,"product_id":15846731972991,"position":19,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214","variant_ids":[58205430415743,58205430448511,58205430481279,58205430514047,58205430546815,58205430579583,58205430612351]},"available":true,"name":"Domane AL 2 Gen 4 - Matte Dark Star Black \/ 49","public_title":"Matte Dark Star Black \/ 49","options":["Matte Dark Star Black","49"],"price":95000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"197216436737","featured_media":{"alt":"Domane AL 2 Gen 4","id":72254265655679,"position":19,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468 | b-98d6-0050719709a7.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430481279,"title":"Matte Dark Star Black \/ 52","option1":"Matte Dark Star Black","option2":"52","option3":null,"sku":"5350577","requires_shipping":true,"taxable":true,"featured_image":{"id":86929812160895,"product_id":15846731972991,"position":19,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214","variant_ids":[58205430415743,58205430448511,58205430481279,58205430514047,58205430546815,58205430579583,58205430612351]},"available":true,"name":"Domane AL 2 Gen 4 - Matte Dark Star Black \/ 52","public_title":"Matte Dark Star Black \/ 52","options":["Matte Dark Star Black","52"],"price":95000,"weight":0,"compare_at_price":null,"inventory_mana gement":"shopify","barcode":"197216436744","featured_media":{"alt":"Domane AL 2 Gen 4","id":72254265655679,"position":19,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":58205430514047,"title":"Matte Dark Star Black \/ 54","option1":"Matte Dark Star Black","option2":"54","option3":null,"sku":"5350578","requires_shipping":true,"taxable":true,"featured_image":{"id":86929812160895,"product_id":15846731972991,"position":19,"created_at":"2026-08-18T16:00:09+01:00","updated_at":"2026-08-18T16:00:14+01:00","alt":"Domane AL 2 Gen 4","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneAL2-27-80164-A-Primary_c4272026-7ce9-468b-98d6-0050719709a7.jpg?v=1787065214","variant_ids":[58205430415743,58205430448511,58205430481279,582054




Cleaners, Degreasers and Lubrication







&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
}
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
<
} catch (err) { }
}, true);
}
} catch (e) { }
function applyTranslations(settings) {
try {
if (!settings || !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) {
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;
}
}
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 -
onsole.error('STOQ - apply failed for ' + endpoint + ':', applyError);
throw applyError;
}
})
.catch(function(error) {
console.debug(`STOQ - using cached ${endpoint}:`, error.message);
});
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) {
console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations');
Promise.race([
Promise.all([
fetchEmbedConfig('selling_plans', function(data) {
if (data && Array.isArray(data.plans)) {
window._RestockRocketConfig.sellingPlans = data.plans;
window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || [];
}
if (data && data.read_f
lags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) {
window._RestockRocketConfig.readFlags = data.read_flags;
}
}),
fetchEmbedConfig('integrations', function(data) {
if (Array.isArray(data)) {
window._RestockRocketConfig.integrations = data;
}
})
]),
new Promise(function(resolve) { setTimeout(resolve, 1000); })
]).then(function() { loadScripts(settings); });
return;
}
loadScripts(settings);
}
function loadScripts(settings) {
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);
})
const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans)
&& window