PageSourceSearch

https://www.dermalogica.co.uk/cdn/shop/t/333/assets/custom-recharge-widget.js?v=153920168456992058221771403212

js dermalogica.co.uk collected 2026-10-02 07:41:29 UTC 7,200 bytes, 42 lines download raw bytes

1class RechargeWidgetCustomizer{constructor(){this.widgetSelector="recharge-subscription-widget",this.observer=null,this.styleId="recharge-custom-styles",this.pollingInterval=null,this.maxPollingAttempts=50,this.pollingAttempts=0,this.init()}init(){this.startWidgetPolling(),this.observeWidgetChanges(),this.setupEventListeners(),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.applyCustomStyles()}):this.applyCustomStyles()}setupEventListeners(){document.addEventListener("recharge:widget:loaded",()=>{this.applyCustomStyles()}),document.addEventListener("variant:update",()=>{console&&console.debug&&console.debug("Variant update detected, restarting Recharge widget styling"),setTimeout(()=>{this.restartPolling(),this.applyCustomStyles()},150)}),document.addEventListener("variant:changed",()=>{setTimeout(()=>this.applyCustomStyles(),100)})}startWidgetPolling(){this.pollingInterval||(this.pollingInterval=setInterval(()=>{document.querySelector(this.widgetSelector)?.shadowRoot?(this.applyCustomStyles(),this.stopWidgetPolling()):this.pollingAttempts>=this.maxPollingAttempts&&this.stopWidgetPolling(),this.pollingAttempts++},200))}restartPolling(){this.stopWidgetPolling(),this.startWidgetPolling()}stopWidgetPolling(){this.pollingInterval&&(clearInterval(this.pollingInterval),this.pollingInterval=null,this.pollingAttempts=0)}applyCustomStyles(){const widget=document.querySelector(this.widgetSelector);widget&&(this.addWidgetTitle(widget),widget.shadowRoot?this.handleShadowRootStyling(widget.shadowRoot):this.waitForShadowRoot(widget))}waitForShadowRoot(widget){let attempts=0;const maxAttempts=20,checkShadowRoot=()=>{widget.shadowRoot?this.handleShadowRootStyling(widget.shadowRoot):attempts<maxAttempts&&(attempts++,setTimeout(checkShadowRoot,200))};setTimeout(checkShadowRoot,200)}handleShadowRootStyling(shadowRoot){shadowRoot.querySelector(`#${this.styleId}`)?this.setupButtonTextUpdates(shadowRoot):(this.injectStyles(shadowRoot),console&&console.debug&&console.debug("Recharge widget custom styles applied successfully"))}addWidgetTitle(widget){if(!widget||widget.previousElementSibling?.classList.contains("h5"))return;const title=document.createElement("h3");title.classList.add("h5");const themeData=window.theme;title.textContent=themeData&&themeData.recharge_frequency_title||"Choose your frequency:",widget.parentNode&&widget.parentNode.insertBefore(title,widget)}setupButtonTextUpdates(shadowRoot){if(!shadowRoot.querySelector('.rc-purchase-option__input[value="subscription"]'))return;this.updateButtonText(shadowRoot),shadowRoot.querySelectorAll(".rc-purchase-option__input").forEach(radio=>{radio.addEventListener("change",()=>this.updateButtonText(shadowRoot))})}updateButtonText(shadowRoot){const subscriptionRadio=shadowRoot.querySelector('.rc-purchase-option__input[value="subscription"]'),buttonSpan=document.querySelector(".add-to-cart-text__content"),submitButton=document.querySelector('button[name="add"]');if(!buttonSpan||!subscriptionRadio)return;const productForm=document.querySelector("product-form-component");if(productForm&&productForm.getAttribute("data-is-preorder")==="true"){const themeData2=window.theme,preorderText=themeData2&&themeData2.preorder_text||"Preorder";buttonSpan.textContent=preorderText;return}const themeData=window.theme,subscribeText=themeData&&themeData.subscribe_button_text||"Subscribe",addToCartText=themeData&&themeData.add_to_cart_text||"Add to bag";if(subscriptionRadio.checked?buttonSpan.textContent=subscribeText:buttonSpan.textContent=addToCartText,submitButton&&submitButton.hasAttribute("data-button-label")){const customLabel=submitButton.getAttribute("data-button-label");customLabel&&(buttonSpan.textContent=customLabel)}}injectStyles(shadowRoot){if(shadowRoot.querySelector(`#${this.styleId}`))return;const style=document.createElement("style");style.id=this.styleId,style.textContent=this.getCustomCSS(),shadowRoot.appendChild(style),this.setupButtonTextUpdates(shadowRoot)}getCustomCSS(){return`
2      .rc-purchase-option {
3        margin-bottom: 0 !important;
4        border-color: #d0d5dd !important;
5      }
6
7      .rc-purchase-option__label {
8        padding: 12px 20px !important;
9      }
10
11      .rc-purchase-option__selector {
12        font-size: 14px !important;
13        font-weight: 400 !important;
14        line-height: 18px !important;
15      }
16
17      .rc-purchase-option[rc-selected] .rc-purchase-option__selector {
18        font-weight: 600 !important;
19      }
20
21      .rc-purchase-option[rc-selected] {
22        border-color: #5b6670 !important;
23      }
24
25      .rc-selection__onetime {
26        border-radius: 3px 3px 0 0 !important;
27      }
28
29      .rc-purchase-option__subscription {
30        border-radius: 0 0 3px 3px !important;
31        margin-top: -1px !important;
32      }
33
34      .rc-purchase-option__subscription[rc-not-selected] {
35        border-top: 1px solid #5b6670 !important;
36      }
37
38      .rc-purchase-option__sub-container {
39        flex-direction: column-reverse !important;
40      }
41    `}observeWidgetChanges(){this.observer=new MutationObserver(mutations=>{let foundWidget=!1;mutations.forEach(mutation=>{mutation.addedNodes.forEach(node=>{if(node.nodeType===Node.ELEMENT_NODE){const element=node,widget=element.matches&&element.matches(this.widgetSelector)?element:element.querySelector&&element.querySelector(this.widgetSelector);widget&&(foundWidget=!0,this.addWidgetTitle(widget),widget.shadowRoot?this.handleShadowRootStyling(widget.shadowRoot):this.waitForShadowRoot(widget))}}),mutation.type==="childList"&&mutation.target instanceof Element&&mutation.target.querySelectorAll(this.widgetSelector).forEach(widget=>{widget&&!foundWidget&&(foundWidget=!0,this.addWidgetTitle(widget),widget.shadowRoot?this.handleShadowRootStyling(widget.shadowRoot):this.waitForShadowRoot(widget))})})}),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1,attributeOldValue:!1})}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.stopWidgetPolling()}}function initializeRechargeCustomizer(){window.rechargeWidgetCustomizer||(window.rechargeWidgetCustomizer=new RechargeWidgetCustomizer)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",initializeRechargeCustomizer):initializeRechargeCustomizer(),window.addEventListener("load",initializeRechargeCustomizer),setTimeout(initializeRechargeCustomizer,1e3);function initializePreorderText(){const productForm=document.querySelector("product-form-component");if(productForm&&productForm.getAttribute("data-is-preorder")==="true"){const buttonTextElements=document.querySelectorAll(".add-to-cart-text__content"),themeData=window.theme,preorderText=themeData&&themeData.preorder_text||"Preorder";buttonTextElements.forEach(element=>{element&&element.textContent!==preorderText&&(element.textContent=preorderText)})}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",initializePreorderText):initializePreorderText(),window.addEventListener("load",initializePreorderText),setTimeout(initializePreorderText,500);
42//# sourceMappingURL=/cdn/shop/t/333/assets/custom-recharge-widget.js.map?v=153920168456992058221771403212

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.