Skip to the content
FREE Next day SHIPPING to your nearest acs store
logo mainlogo darklogo light
  • Home
  • Cataloge
  • Rackets
    • Junior Rackets
  • Balls
  • Floky
  • Accessories
  • Bags
  • Nutrition
  • Padel Clubs
  • Padel coaches
1
  • Nox Wristbands Red (x2)

    Accessories, Wristbands

    Nox Wristbands Red (x2)

    €7.00

Total:€7.00
View Cart & Checkout
logo main
  • Home
  • Cataloge
  • Rackets
    • Junior Rackets
  • Balls
  • Floky
  • Accessories
  • Bags
  • Nutrition
  • Padel Clubs
  • Padel coaches
1
  • Nox Wristbands Red (x2)

    Accessories, Wristbands

    Nox Wristbands Red (x2)

    €7.00

Total:€7.00
View Cart & Checkout

What are you looking for?

What are you looking for?

logo main
1
  • Nox Wristbands Red (x2)

    Accessories, Wristbands

    Nox Wristbands Red (x2)

    €7.00

Total:€7.00
View Cart & Checkout
  • Home
  • Cataloge
  • Rackets
    • Junior Rackets
  • Balls
  • Floky
  • Accessories
  • Bags
  • Nutrition
  • Padel Clubs
  • Padel coaches

What are you looking for?

HomeShopAccessoriesOvergrip Wilson Comfort – 1
“Nox Wristbands Red (x2)” has been added to your basket. View basket
Overgrip Wilson Comfort - 1
Overgrip Wilson Comfort - 1 - Image 2

Overgrip Wilson Comfort – 1

€2.50

The Wilson Pro Comfort Overgrip is a comfortable overgrip that offers you a firm grip on your racket.

In stock

]
Categories:Accessories, Overgrips
  • Additional information

Additional information

Brand

Wilson

Related products

  • Babolat Pro Tacky Overgrip White
    Babolat Pro Tacky Overgrip White
    AccessoriesOvergrips
    €2.20
    Add to basket
  • Overgrips Head Padel Pro Green
    Overgrips Head Padel Pro Green
    AccessoriesOvergrips
    €8.50
    Add to basket
  • PRO OVERGRIP PADEL 50PK White
    PRO OVERGRIP PADEL 50PK White
    AccessoriesOvergrips
    €85.00
    Add to basket
  • Wilson Pro Overgrip 1 Piece
    Wilson Pro Overgrip 1 Piece
    AccessoriesOvergrips
    €2.50
    Add to basket
This site is secured with ssl for your safety
FREE Next day SHIPPING to your nearest acs store
all rackets are unopened and never displayed at any store
we do not fake stock. everything you see on the website is immediatly available
Newsletter

We have all of the best products
from all of the top brands.

    cYPRUS
    +357 94596941
    Mon-Sun: 09:00-19:00
    • privacy policy
    • Return Policy
    • Contact Us

    © 2025 Padel point cy, All Rights Reserved

    • Home
    • Our Brands
    • Shop
      • Cataloge
    (function($){ // Helper function to apply the progressive variation UI function applyProgressiveVariation($context) { $context = $context || $(document); $context.find('.variations_form').each(function() { var $form = $(this); var $rows = $form.find('table.variations > tbody > tr'); if ($rows.length <= 1) return; // Skip if only 1 attribute // Hide all but first row $rows.hide().eq(0).show(); // Show next row on swatch or select $rows.each(function(i){ var $row = $(this); // Swatch plugin: listen for click on ul > li $row.find('ul.variable-items-wrapper').off('.cascade').on('click.cascade', 'li', function(){ setTimeout(function() { // Check if selected, then show next row or hide others var $select = $row.find('select'); if ($select.val()) $rows.eq(i+1).show(); else $rows.slice(i+1).hide(); }, 20); }); // For hidden select $row.find('select').off('.cascade').on('change.cascade', function(){ if ($(this).val()) $rows.eq(i+1).show(); else $rows.slice(i+1).hide(); }); }); // On load, show next rows if preselected $rows.each(function(i){ var $select = $(this).find('select'); if ($select.val()) $rows.eq(i+1).show(); }); // Handle reset $form.off('.cascade').on('click.cascade', '.reset_variations', function() { setTimeout(function(){ $rows.hide().eq(0).show(); }, 50); }); }); } // --- Only run on shop page --- if(window.location.pathname === "/shop/" || window.location.pathname === "/shop" || "/"){ // Initial run applyProgressiveVariation($(document)); // If you have AJAX grid reload/infinite scroll, re-apply after reload: // (adjust the event name if your theme uses a different one) $(document).on('dunker_trigger_get_new_posts', function(e, $holder){ setTimeout(function(){ applyProgressiveVariation($holder || $(document)); }, 100); }); } })(jQuery); jQuery(function($) { function initializeAllVariationForms(context) { context = context || $(document); context.find('.variations_form').each(function() { var $form = $(this); if ($form.data('wc_variation_form_initialized')) return; $form.data('wc_variation_form_initialized', true); // Attach Woo variation logic $form.wc_variation_form(); // When a variation is found (all attributes selected) $form.on('found_variation', function(event, variation) { if (variation && variation.variation_id) { $form.find('input.variation_id').val(variation.variation_id); $form.find('.single_add_to_cart_button').prop('disabled', false); } }); $form.on('show_variation', function(event, variation) { // Find the main product image in the product card var $img = $form.closest('.qodef-e-inner').find('.qodef-e-media-image img').first(); if (variation && variation.image && variation.image.src) { $img.attr('src', variation.image.src); // Optionally update alt or data-default if you want // $img.attr('alt', variation.image.alt || ''); } }); // When variation selection is reset $form.on('reset_data', function() { var $img = $form.closest('.qodef-e-inner').find('.qodef-e-media-image img').first(); $img.attr('src', $img.data('default')); }); // On attribute change, disable button if not all selected $form.on('change', '.variations select', function() { var allSelected = true; $form.find('.variations select').each(function(){ if (!$(this).val()) allSelected = false; }); // Only enable if all attributes selected and variation id is valid var variationId = $form.find('input.variation_id').val(); $form.find('.single_add_to_cart_button').prop('disabled', !(allSelected && variationId && variationId !== "0")); }); // Initial state var initialVariationId = $form.find('input.variation_id').val(); $form.find('.single_add_to_cart_button').prop('disabled', !(initialVariationId && initialVariationId !== "0")); }); } // On initial load initializeAllVariationForms(); // Re-initialize after AJAX grid reload $(document).on('dunker_trigger_get_new_posts', function(e, $holder) { initializeAllVariationForms($holder || $(document)); }); }); // 1. Global function for refreshing the Qode/Dunker mini-cart(s) function refreshQodeCart() { jQuery.ajax({ url: '/?wc-ajax=get_refreshed_fragments', type: 'POST', success: function(data) { // Replace dropdown cart(s) if (data.fragments && data.fragments['.qodef-widget-dropdown-cart-inner']) { jQuery('.qodef-widget-dropdown-cart-inner').each(function() { jQuery(this).replaceWith(data.fragments['.qodef-widget-dropdown-cart-inner']); }); } // Replace side cart(s) if (data.fragments && data.fragments['.qodef-widget-side-area-cart-inner']) { jQuery('.qodef-widget-side-area-cart-inner').each(function() { jQuery(this).replaceWith(data.fragments['.qodef-widget-side-area-cart-inner']); }); } // Optionally update Woo default mini-cart as well if (data.fragments && data.fragments['div.widget_shopping_cart_content']) { jQuery('div.widget_shopping_cart_content').each(function() { jQuery(this).replaceWith(data.fragments['div.widget_shopping_cart_content']); }); } } }); } // 2. Main variation form AJAX logic jQuery(function($){ $('body').off('submit', '.variations_form.cart'); $('body').on('submit', '.variations_form.cart', function(e){ if ($(this).closest('.single-product').length) return true; var $form = $(this); var $button = $form.find('button.single_add_to_cart_button'); var variationId = $form.find('input.variation_id').val(); if (!variationId || variationId === "0") { e.preventDefault(); if ($('.woocommerce-notices-wrapper').length) { $('.woocommerce-notices-wrapper').html('
    • Please select product options before adding to cart.
    '); } else { $form.before('
    • Please select product options before adding to cart.
    '); } $button.prop('disabled', true); refreshQodeCart(); // <--- always refresh even if selection is missing! return false; } e.preventDefault(); $button.prop('disabled', true); var formData = $form.serialize(); $.ajax({ url: (typeof wc_add_to_cart_params !== 'undefined' && wc_add_to_cart_params.wc_ajax_url) ? wc_add_to_cart_params.wc_ajax_url.replace('%%endpoint%%', 'add_to_cart') : '/?wc-ajax=add_to_cart', type: 'POST', data: formData, dataType: 'json', success: function(response) { $button.prop('disabled', false); // WooCommerce default fragment update if (response && response.fragments) { $.each(response.fragments, function(key, value){ $(key).replaceWith(value); }); $(document.body).trigger('wc_fragment_refresh'); } // Notices/messages as before if (response && response.fragments && response.fragments['div.woocommerce-notices-wrapper']) { if ($('.woocommerce-notices-wrapper').length) { $('.woocommerce-notices-wrapper').replaceWith(response.fragments['div.woocommerce-notices-wrapper']); } else { $form.before(response.fragments['div.woocommerce-notices-wrapper']); } $('html, body').animate({scrollTop: $('.woocommerce-notices-wrapper').offset().top - 100}, 400); } else if (response && response.messages) { if ($('.woocommerce-notices-wrapper').length) { $('.woocommerce-notices-wrapper').html(response.messages); } else { $form.before('
    ' + response.messages + '
    '); } } // Always refresh the Qode cart! refreshQodeCart(); }, error: function(xhr, status, error){ $button.prop('disabled', false); alert('Error adding to cart: ' + (xhr.responseText || status)); refreshQodeCart(); // Also refresh cart on error (just in case) } }); }); }); (function() { // Only run on /shop/ (ignores domain and query params) if (!/^\/shop\/?($|\?)/.test(window.location.pathname + (window.location.search || ''))) return; function cropImage(img) { if (!img.complete || img.naturalWidth === 0) { img.onload = () => cropImage(img); return; } // Save the original src to not re-crop if already processed if (img.getAttribute('data-cropped-src') === img.src) return; // CROP const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; ctx.drawImage(img, 0, 0); const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); const { data, width, height } = imgData; let top = 0, bottom = height - 1; // Find first non-transparent pixel row from top outer: for (; top < height; top++) { for (let x = 0; x < width; x++) { if (data[(top * width + x) * 4 + 3] > 32) break outer; } } // Find first non-transparent pixel row from bottom outer: for (; bottom > top; bottom--) { for (let x = 0; x < width; x++) { if (data[(bottom * width + x) * 4 + 3] > 32) break outer; } } const margin = 10; const cropTop = Math.max(0, top - margin); const cropHeight = Math.min(height, bottom - cropTop + margin); const cropped = document.createElement('canvas'); cropped.width = width; cropped.height = cropHeight; const croppedCtx = cropped.getContext('2d'); croppedCtx.drawImage( img, 0, cropTop, width, cropHeight, 0, 0, width, cropHeight ); img.src = cropped.toDataURL('image/png'); img.style.objectFit = 'cover'; img.style.height = 'auto'; img.style.width = '100%'; img.setAttribute('data-cropped-src', img.src); } function processAllImages() { document.querySelectorAll('.qodef-product-main-image').forEach(cropImage); } // Initial run after DOM is loaded document.addEventListener('DOMContentLoaded', () => setTimeout(processAllImages, 500)); // Watch for DOM changes or attribute (src) changes on product images const grid = document.querySelector('.products, .qodef-woo-product-list, body'); const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { // For new images if (mutation.addedNodes) { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { if (node.classList.contains('qodef-product-main-image')) { cropImage(node); } // If any child is a product image node.querySelectorAll && node.querySelectorAll('.qodef-product-main-image').forEach(cropImage); } }); } // For changed attributes (like src) if (mutation.type === 'attributes' && mutation.target.classList && mutation.target.classList.contains('qodef-product-main-image') && mutation.attributeName === 'src' ) { cropImage(mutation.target); } }); }); if (grid) { observer.observe(grid, { childList: true, subtree: true, attributes: true, attributeFilter: ['src'] }); } // Re-crop on AJAX complete (jQuery based) if (window.jQuery) { jQuery(document).ajaxComplete(() => setTimeout(processAllImages, 200)); } })(); document.addEventListener('DOMContentLoaded', function() { var el = document.querySelector('.woocommerce-result-count'); if (el) { var match = el.textContent.match(/of\s+(\d+)\s+results/i); if (match) { el.textContent = 'Showing ' + match[1] + ' results'; } } }); (function() { // Declare observer in outer scope so we can disconnect/reconnect var observer; function reorderButtons() { var submitBlock = document.querySelector('.wc-block-cart__submit.wp-block-woocommerce-proceed-to-checkout-block'); var expressBlock = document.querySelector('.wc-block-components-express-payment'); if (submitBlock && expressBlock) { // Check if expressBlock is already after submitBlock if (submitBlock.nextSibling !== expressBlock) { // Disconnect observer while moving to prevent infinite loop if (observer) observer.disconnect(); submitBlock.parentNode.insertBefore(expressBlock, submitBlock.nextSibling); // Reconnect observer if (observer) observer.observe(document.body, { childList: true, subtree: true }); } } } // Run once on page load reorderButtons(); // Set up observer for dynamic cart block updates observer = new MutationObserver(function() { reorderButtons(); }); observer.observe(document.body, { childList: true, subtree: true }); })(); jQuery(async function ($) { console.log('🛠 Checking variations on cart...'); async function getVariations(productId) { const response = await fetch('/wp-admin/admin-ajax.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ action: 'get_variations_for_product', product_id: productId }) }); const result = await response.json(); return result.success ? result.data.variations : []; } $('.wc-block-components-order-summary-item__description').each(async function () { const $item = $(this); const productName = $item.find('h3').text().trim(); const size = $item.find('li.wc-block-components-product-details__size .wc-block-components-product-details__value').text().trim(); const colour = $item.find('li.wc-block-components-product-details__colour .wc-block-components-product-details__value').text().trim(); /* const productId = 🔎 You'll need to find a way to store the product_id in the HTML, e.g., in a hidden field or data attribute */; if (!productId) { console.warn(⚠️ Missing product ID for "${productName}"); return; } const variations = await getVariations(productId); const match = variations.find(v => v.attributes.attribute_size?.toLowerCase() === size.toLowerCase() && v.attributes.attribute_colour?.toLowerCase() === colour.toLowerCase() ); if (match) { console.log(✅ Matched variation ID ${match.variation_id} for ${productName}); } else { console.warn(❌ No match for ${productName} (${size}, ${colour})); } }); }); (function($){ // Optionally: fetch global attribute slugs from Woo REST API (if you want to make it 100% dynamic) // For this demo, let's hardcode the typical mapping based on your attribute list var globalAttributes = [ 'colors:', 'sizes', 'balances:', 'beams', 'brands', 'collections', 'game-types', 'head-sizes', 'lengths', 'levels', 'shapes', 'sizes-inch', 'sweet-spots', 'weights' ]; // Helper to slugify attribute name function slugify(str) { return str.toLowerCase() .replace(/[\s\/]+/g, '-') // Spaces/slashes to dash .replace(/[^a-z0-9-_]/g, ''); // Remove special chars } // Normalize attribute key for WooCommerce function normalizeAttrKey(label) { var slug = slugify(label); if (globalAttributes.includes(slug)) { return 'attribute_pa_' + slug; } return 'attribute_' + label.trim(); } // Fix attribute names and values on add-to-cart form before submit $('body').on('submit', '.variations_form.cart', function(e){ var $form = $(this); $form.find('select').each(function(){ var $select = $(this); // Try to get label text (Woo default structure) var label = $select.closest('tr').find('label').text().trim(); if (!label) return; // Fix key var correctKey = normalizeAttrKey(label); if ($select.attr('name') !== correctKey) { $select.attr('name', correctKey); } // Optionally fix value (to match case/spaces exactly): // You could fetch the allowed values for this product/variation from the DOM or a JS object }); }); // (Optional) Console log cart items for verification if (window.wc && wc.cart) { // Not always available, depends on how your theme structures it console.log('WooCommerce cart JS:', wc.cart); } else { // Custom: Loop over visible cart items in the DOM $('.cart_item').each(function(){ var $row = $(this); var productName = $row.find('.product-name').text().trim(); var attrs = {}; $row.find('.variation').each(function(){ var txt = $(this).text(); var m = txt.match(/(.*?):\s*(.*)/); if (m) attrs[m[1].trim()] = m[2].trim(); }); console.log('Cart item:', productName, attrs); }); } })(jQuery); (function () { var minimumAmount = 20; function parsePrice(priceStr) { var cleaned = priceStr.replace(/[^\d\.,]/g, '').replace(',', '.'); return parseFloat(cleaned); } function createMiniShopSection() { let shop = document.querySelector('#min-cart-shop'); if (shop) return; // Already exists shop = document.createElement('div'); shop.id = 'min-cart-shop'; shop.innerHTML =

    🛍 Add more to reach the minimum:

    ; shop.style.borderTop = '1px solid #ccc'; shop.style.paddingTop = '20px'; const cartContainer = document.querySelector('.wp-block-woocommerce-cart'); if (cartContainer) cartContainer.appendChild(shop); loadMiniProducts(); } function loadMiniProducts() { const container = document.querySelector('#mini-shop-products'); if (!container) return; fetch('/wp-admin/admin-ajax.php?action=get_random_products_from_category') .then(res => res.json()) .then(data => { if (!data.success || !data.data) return; container.innerHTML = ''; // Clear previous if needed data.data.forEach(p => { const div = document.createElement('div'); div.className = 'qodef-e qodef-grid-item qodef-item--custom product type-product'; div.style.width = '250px'; div.innerHTML =
    ${p.name}
    ${p.name}
    ${p.price}
    ; container.appendChild(div); }); }); } function updateCartUI() { let subtotal = 0; // Find the subtotal dynamically based on the label text const items = document.querySelectorAll('.wc-block-components-totals-item'); items.forEach(item => { const label = item.querySelector('.wc-block-components-totals-item__label'); const value = item.querySelector('.wc-block-components-totals-item__value'); if (label && value && label.textContent.trim().toLowerCase() === 'subtotal') { subtotal = parsePrice(value.textContent); } }); const checkoutBtn = document.querySelector('.wc-block-cart__submit-button, .checkout-button, .wc-proceed-to-checkout a, .wc-proceed-to-checkout button'); const expressWrapper = document.querySelector('.wc-block-components-express-payment'); const orDivider = document.querySelector('.wc-block-components-express-payment-continue-rule--cart'); let warning = document.querySelector('#min-cart-warning'); if (subtotal < minimumAmount) { if (checkoutBtn) checkoutBtn.style.display = "none"; if (expressWrapper) expressWrapper.style.display = "none"; if (orDivider) orDivider.style.display = "none"; if (!warning && checkoutBtn) { warning = document.createElement('div'); warning.id = "min-cart-warning"; warning.style.color = "red"; warning.style.margin = "10px 0"; warning.style.fontWeight = "bold"; warning.textContent = "Your cart subtotal must be at least €" + minimumAmount + " to proceed to checkout."; checkoutBtn.parentNode.insertBefore(warning, checkoutBtn); } createMiniShopSection(); } else { if (checkoutBtn) checkoutBtn.style.display = ""; if (expressWrapper) expressWrapper.style.display = ""; if (orDivider) orDivider.style.display = ""; if (warning) warning.remove(); const shop = document.querySelector('#min-cart-shop'); if (shop) shop.remove(); } return true; } updateCartUI(); var observer = new MutationObserver(function () { updateCartUI(); }); observer.observe(document.body, { childList: true, subtree: true }); })(); (function($){ function refreshQodeCart() { $.ajax({ url: '/?wc-ajax=get_refreshed_fragments', type: 'POST', success: function(data) { if (data.fragments && data.fragments['.qodef-widget-dropdown-cart-inner']) { $('.qodef-widget-dropdown-cart-inner').each(function() { $(this).replaceWith(data.fragments['.qodef-widget-dropdown-cart-inner']); }); } if (data.fragments && data.fragments['.qodef-widget-side-area-cart-inner']) { $('.qodef-widget-side-area-cart-inner').each(function() { $(this).replaceWith(data.fragments['.qodef-widget-side-area-cart-inner']); }); } if (data.fragments && data.fragments['div.widget_shopping_cart_content']) { $('div.widget_shopping_cart_content').each(function() { $(this).replaceWith(data.fragments['div.widget_shopping_cart_content']); }); } // Call subtotal logic if needed if (typeof updateCartUI === 'function') updateCartUI(); } }); } $('body').on('click', '.mini-shop-add-to-cart', function(e){ e.preventDefault(); const $btn = $(this); const productId = $btn.data('product_id'); if (!productId) return; $btn.prop('disabled', true).addClass('loading').text('Adding...'); $.ajax({ url: '/?wc-ajax=add_to_cart', type: 'POST', data: { product_id: productId, quantity: 1 }, success: function(response) { $btn.removeClass('loading').prop('disabled', false).text('Added!'); setTimeout(() => $btn.text('Add to basket'), 2000); if (response && response.fragments) { $.each(response.fragments, function(key, value){ $(key).replaceWith(value); }); $(document.body).trigger('wc_fragment_refresh'); } refreshQodeCart(); // ⛔ WooCommerce Cart Block does NOT update automatically // ✅ If we're on the cart page, do a hard reload to reflect changes if (window.location.pathname.includes('/cart')) { setTimeout(() => { window.location.reload(); }, 300); // slight delay allows UX feedback } }, error: function() { $btn.removeClass('loading').prop('disabled', false).text('Error!'); setTimeout(() => $btn.text('Add to basket'), 2000); } }); }); })(jQuery); (function($){ // Only run if slider exists and touch events are supported if ($('.ui-slider').length && 'ontouchstart' in window) { $('.ui-slider').each(function() { var slider = this; var $slider = $(this); // For each handle $slider.find('.ui-slider-handle').each(function(i, handle){ handle.addEventListener('touchstart', function(e){ e.preventDefault(); var moveHandler = function(e2){ var touch = e2.touches[0]; var rect = slider.getBoundingClientRect(); var percent = ((touch.clientX - rect.left) / rect.width); percent = Math.max(0, Math.min(1, percent)); var value = $slider.slider('option', 'min') + percent * ($slider.slider('option', 'max') - $slider.slider('option', 'min')); // Round to nearest step var step = $slider.slider('option', 'step') || 1; value = Math.round(value / step) * step; $slider.slider('value', value); }; var upHandler = function(e3){ document.removeEventListener('touchmove', moveHandler); document.removeEventListener('touchend', upHandler); }; document.addEventListener('touchmove', moveHandler, {passive: false}); document.addEventListener('touchend', upHandler, {passive: false}); }, {passive: false}); }); }); } })(jQuery); (function ($) { const MINI_CART_SELECTOR = '.qodef-widget-dropdown-cart-inner'; const CART_BLOCK_SELECTOR = '.wp-block-woocommerce-cart'; const CART_ITEMS_CONTAINER = '.wc-block-cart-items'; // this div contains the items const AJAX_URL = '/?wc-ajax=get_refreshed_fragments'; const log = (...args) => console.log('%c[Mini-Cart]', 'color:#0af', ...args); function refreshMiniCart() { log('Refreshing...'); $.post(AJAX_URL, function(data) { if (data?.fragments?.[MINI_CART_SELECTOR]) { $(MINI_CART_SELECTOR).each(function () { $(this).replaceWith(data.fragments[MINI_CART_SELECTOR]); }); $(document.body).trigger('wc_fragment_refresh'); log('Updated ✅'); } else { log('⚠️ Mini-cart fragment missing'); } }); } // Classic WooCommerce triggers $(document.body).on('added_to_cart wc_fragments_refreshed', refreshMiniCart); // 🕵️ React-based Cart Block observer with debounce const cartBlock = document.querySelector(CART_ITEMS_CONTAINER); if (cartBlock) { log('🕵️ Watching Cart Block changes...'); let debounce; const observer = new MutationObserver(() => { clearTimeout(debounce); debounce = setTimeout(() => { log('🗑 Detected cart change – refreshing mini-cart'); refreshMiniCart(); }, 300); }); observer.observe(cartBlock, { childList: true, subtree: true }); } else { log('❌ No Cart Block item container found'); } // Optional: refresh once on load $(refreshMiniCart); })(jQuery); document.addEventListener('DOMContentLoaded', function () { if (window.location.pathname.includes('/cart')) { // Check if the button already exists if (!document.querySelector('.mini-return-to-shop')) { const container = document.querySelector('.wc-block-cart__main') || document.querySelector('.woocommerce-cart-form') || document.body; const returnBtn = document.createElement('a'); returnBtn.href = '/cataloge/'; returnBtn.className = 'mini-return-to-shop qodef-button qodef-m qodef-button-outline'; returnBtn.style.display = 'inline-block'; returnBtn.style.marginTop = '30px'; returnBtn.style.textAlign = 'center'; returnBtn.style.padding = '12px 24px'; returnBtn.style.borderRadius = '8px'; returnBtn.style.border = '2px solid #111'; returnBtn.style.color = '#111'; returnBtn.style.fontWeight = '600'; returnBtn.textContent = '← Return to Shop'; container.appendChild(returnBtn); } } }); document.addEventListener('DOMContentLoaded', function () { const CITY_LIST = ['Larnaca', 'Nicosia', 'Limassol', 'Paphos', 'Famagusta']; function waitForCheckoutFields() { const countrySelect = document.querySelector('#shipping-country'); const cityInput = document.querySelector('#shipping-city'); if (!countrySelect || !cityInput) { setTimeout(waitForCheckoutFields, 300); return; } function renderCityDropdown() { const wrapper = cityInput.closest('.wc-block-components-text-input'); if (!wrapper || document.querySelector('#custom-city-select')) return; // Hide original city input cityInput.style.display = 'none'; const dropdown = document.createElement('select'); dropdown.id = 'custom-city-select'; dropdown.className = 'wc-block-components-text-input__input'; dropdown.innerHTML = + CITY_LIST.map(city => ).join(''); dropdown.addEventListener('change', function () { cityInput.value = this.value; cityInput.dispatchEvent(new Event('input', { bubbles: true })); // Trigger React reactivity }); wrapper.appendChild(dropdown); } function removeCityDropdown() { const dropdown = document.querySelector('#custom-city-select'); if (dropdown) dropdown.remove(); // Show original city input again cityInput.style.display = ''; } // On load if (countrySelect.value === 'CY') { renderCityDropdown(); } // On country change countrySelect.addEventListener('change', function () { if (this.value === 'CY') { renderCityDropdown(); } else { removeCityDropdown(); } }); } waitForCheckoutFields(); }); jQuery(function ($) { $('.add_to_cart_button').on('click', function () { const $btn = $(this); const originalHTML = $btn.html(); $btn.html('Adding...'); $btn.prop('disabled', true); // Listen for the WooCommerce event $(document.body).on('added_to_cart', function () { $btn.html(originalHTML); $btn.prop('disabled', false); }); }); }); console.log('✔ Hook initialized via jQuery'); document.addEventListener('DOMContentLoaded', function () { const breadcrumbLinks = document.querySelectorAll('.qodef-breadcrumbs a.qodef-breadcrumbs-link'); breadcrumbLinks.forEach(link => { const href = link.getAttribute('href'); const label = link.textContent.trim(); // Replace "Shop" link with /cataloge/ if (label === 'Shop') { link.setAttribute('href', '/cataloge/'); } // If it's a product category URL else if (href.includes('/product-category/')) { const slug = href.split('/product-category/')[1].replace(/\/$/, ''); // get the slug from the URL link.setAttribute('href', /shop-${slug}/); } }); });