PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.12.0
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.12.0
6.12.1 6.12.0 6.11.0 6.10.0 6.9.1 6.9.0 6.8.1 6.8.0 6.7.4 6.7.3 6.7.2 6.7.0 4.21.7 4.22.0 4.22.1 4.23.0 4.23.1 4.23.2 4.23.3 4.24.0 4.24.1 4.24.10 4.24.11 4.24.12 4.24.13 4.24.14 4.24.15 4.24.16 4.24.17 4.24.18 4.24.19 4.24.2 4.24.4 4.24.6 4.24.7 4.24.8 4.24.9 4.25.0 4.25.1 4.25.2 4.25.4 4.25.5 4.25.6 4.25.7 4.25.8 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 4.8.0 4.8.1 4.8.3 4.8.4 4.8.5 4.9.0 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.2.0 5.3.0 5.3.1 5.3.3 5.3.4 5.3.5 6.0.0 6.1.0 6.1.1 6.1.2 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.3.0 trunk 6.4.0 1.4 6.4.1 1.4.1 6.4.2 1.5 6.4.3 1.6 6.4.5 1.6.1 6.5.0 1.6.2 6.5.1 1.7 6.5.2 1.8 6.5.3 1.9 6.5.4 1.9.1 6.5.5 1.9.10 6.5.6 1.9.11 6.5.7 1.9.12 6.5.8 1.9.2 6.6.0 1.9.3 6.6.1 1.9.4 6.6.2 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.1 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.6 3.0.7 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.11.4 3.12.0 3.13.0 3.14.0 3.14.1 3.14.2 3.14.3 3.14.4 3.15.0 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.2.0 3.3.1 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.8.0 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.9 4.0.0 4.0.1 4.0.10 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.11.0 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 4.11.6 4.11.7 4.11.8 4.11.9 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.14.0 4.14.1 4.14.2 4.15.0 4.16.0 4.16.1 4.16.2 4.17.0 4.18.0 4.18.1 4.18.2 4.18.3 4.18.4 4.18.5 4.18.6 4.19.0 4.19.1 4.2.0 4.20.0 4.20.1 4.20.2 4.20.3 4.21.0 4.21.1 4.21.2 4.21.3 4.21.4 4.21.5
flexible-shipping / assets / js / shipping-method-block-checkout.min.js
flexible-shipping / assets / js Last commit date
admin.js 1 week ago admin.min.js 1 week ago beacon-clicked.js 1 week ago beacon-clicked.min.js 1 week ago contextual-info.js 1 week ago contextual-info.min.js 1 week ago dashboard.js 1 week ago duplicate-methods.js 1 week ago duplicate-methods.min.js 1 week ago new-rules-table-popup.js 1 week ago onboarding.js 1 week ago rules-settings.js 1 week ago shipping-method-block-checkout.js 1 week ago shipping-method-block-checkout.min.js 1 week ago
shipping-method-block-checkout.min.js
30 lines
1 (function(){const config=window.__fsShippingMethodLogoBlocks||{};const ensureArray=(value)=>(Array.isArray(value)?value:[]);const getMetaValue=(metaData,key)=>{if(!Array.isArray(metaData)){return null}
2 const item=metaData.find((entry)=>entry&&entry.key===key);return item?item.value:null};const decodeBase64=(value)=>{if(!value||'string'!==typeof value){return''}
3 try{return window.atob(value)}catch(error){return''}};const getRateDescription=(rate)=>{if(!rate){return''}
4 const encodedDescription=getMetaValue(rate.meta_data,config.description_encoded_key||'description_base64encoded');if(encodedDescription){const decodedDescription=decodeBase64(encodedDescription);if(decodedDescription){return decodedDescription}}
5 return getMetaValue(rate.meta_data,config.description_key||'description')||''};const getNormalizedText=(value)=>(value||'').replace(/\s+/g,' ').trim();const getNormalizedHtmlText=(value)=>{const wrapper=document.createElement('div');wrapper.innerHTML=value||'';return getNormalizedText(wrapper.textContent||'')};const isVisible=(element)=>{let current=element;while(current&&current!==document.body){const style=window.getComputedStyle(current);if('none'===style.display||'hidden'===style.visibility){return!1}
6 current=current.parentElement}
7 return Boolean(element)};const descriptionMatchesElement=(description,element)=>{if(!description||!isVisible(element)){return!1}
8 const descriptionText=getNormalizedHtmlText(description);return''!==descriptionText&&getNormalizedText(element.textContent||'').includes(descriptionText)};const getRateId=(rate)=>rate?.rate_id||rate?.id||'';const isFlexibleShippingRate=(rate)=>{if(!rate){return!1}
9 return ensureArray(config.method_ids).includes(rate.method_id)};const escapeCssValue=(value)=>{if(window.CSS&&'function'===typeof window.CSS.escape){return window.CSS.escape(value)}
10 return value.replace(/["\\]/g,'\\$&')};const getOptionForRate=(rateId)=>{if(!rateId){return null}
11 const selector=`.wc-block-components-radio-control__option input[value="${ escapeCssValue( rateId ) }"]`;const input=document.querySelector(selector);return input?input.closest('.wc-block-components-radio-control__option'):null};const findDescriptionElement=(option,input)=>{const selector='[id$="__secondary-description"], [id$="__description"]';if(input){const describedBy=input.getAttribute('aria-describedby');if(describedBy){const descriptionIds=describedBy.split(/\s+/).filter(Boolean);for(const id of descriptionIds){const element=document.getElementById(id);if(element&&element.matches(selector)){return element}}}}
12 return option?option.querySelector(selector):null};const getInsertionAnchor=(option,input)=>{if(!option){return null}
13 const labelGroup=option.querySelector('.wc-block-components-radio-control__label-group');if(labelGroup){return labelGroup}
14 return findDescriptionElement(option,input)||option.querySelector('label')||option};const createLogoNode=(logoUrl,logoAlt)=>{const wrapper=document.createElement('span');wrapper.classList.add(config.wrapper_class||'flexible-shipping-method-logo-block');wrapper.style.display='block';wrapper.style.marginTop='6px';const image=document.createElement('img');image.src=logoUrl;image.alt=logoAlt||'';image.style.maxHeight='40px';image.style.width='auto';image.loading='lazy';wrapper.appendChild(image);return wrapper};const createDescriptionNode=(description)=>{const wrapper=document.createElement('div');wrapper.className=config.description_class||'shipping-method-description flexible-shipping-method-description-block wc-block-components-radio-control__secondary-description';wrapper.innerHTML=description;return wrapper};const getRatesFromCart=(cartData)=>{if(!cartData||!Array.isArray(cartData.shippingRates)){return[]}
15 const rates=[];cartData.shippingRates.forEach((shippingPackage)=>{const packageRates=shippingPackage?.shipping_rates??[];packageRates.forEach((rate)=>rates.push(rate))});return rates};const renderLogos=()=>{if(!window.wp||!window.wp.data||'function'!==typeof window.wp.data.select){return}
16 const cartStore=window.wp.data.select('wc/store/cart');if(!cartStore||'function'!==typeof cartStore.getCartData){return}
17 const rates=getRatesFromCart(cartStore.getCartData());if(!rates.length){return}
18 rates.forEach((rate)=>{if(!isFlexibleShippingRate(rate)){return}
19 const description=getRateDescription(rate);const logoUrl=getMetaValue(rate.meta_data,config.logo_url_key||'method_logo_url');const option=getOptionForRate(getRateId(rate));if(!option){return}
20 const wrapperClass=config.wrapper_class||'flexible-shipping-method-logo-block';const descriptionClass=(config.description_class||'shipping-method-description flexible-shipping-method-description-block wc-block-components-radio-control__secondary-description').split(' ').filter(Boolean).map((className)=>`.${ className }`).join('');const existingDescription=descriptionClass?option.querySelector(descriptionClass):null;const existingLogo=option.querySelector(`.${ wrapperClass }`);const input=option.querySelector('input');const nativeDescription=findDescriptionElement(option,input);const insertionAnchor=getInsertionAnchor(option,input);const logoAlt=getMetaValue(rate.meta_data,config.logo_alt_key||'method_logo_alt')||'';const hasNativeDescription=descriptionMatchesElement(description,nativeDescription);if(description){if(hasNativeDescription){if(existingDescription){existingDescription.remove()}}else if(existingDescription){if(existingDescription.innerHTML!==description){existingDescription.innerHTML=description}}else if(insertionAnchor){insertionAnchor.insertAdjacentElement('afterend',createDescriptionNode(description))}}else if(existingDescription){existingDescription.remove()}
21 const descriptionAnchor=option.querySelector(descriptionClass)||nativeDescription||insertionAnchor;if(!logoUrl){if(existingLogo){existingLogo.remove()}
22 return}
23 if(existingLogo){const existingImage=existingLogo.querySelector('img');if(existingImage){if(existingImage.src!==logoUrl){existingImage.src=logoUrl}
24 if(existingImage.alt!==logoAlt){existingImage.alt=logoAlt}}
25 if(descriptionAnchor&&existingLogo.previousElementSibling!==descriptionAnchor){descriptionAnchor.insertAdjacentElement('afterend',existingLogo)}
26 return}
27 const logoNode=createLogoNode(logoUrl,logoAlt);if(descriptionAnchor){descriptionAnchor.insertAdjacentElement('afterend',logoNode);return}
28 const label=option.querySelector('label')||option;label.appendChild(logoNode)})};const boot=()=>{let scheduled=!1;const scheduleRender=()=>{if(scheduled){return}
29 scheduled=!0;window.requestAnimationFrame(()=>{scheduled=!1;renderLogos()})};if(window.wp&&window.wp.data&&'function'===typeof window.wp.data.subscribe){window.wp.data.subscribe(scheduleRender)}
30 new MutationObserver(scheduleRender).observe(document.body,{childList:!0,subtree:!0,});scheduleRender()};if('loading'===document.readyState){document.addEventListener('DOMContentLoaded',boot)}else{boot()}}())