PageSourceSearch

https://www.juliska.com/cdn/shop/t/724/assets/gift-message.js?v=111614371484339735271790257450

js juliska.com collected 2026-10-03 22:10:30 UTC 6,000 bytes, 2 lines download raw bytes

1class GiftMessage extends HTMLElement{constructor(){super(),this.sectionId=this.dataset.sectionId,this.debounceTimeout=500,this.maxCharacters=80,this.allowedPattern=/^[a-zA-Z0-9\s.,!?'"()-]*$/,this.checkbox=null,this.form=null,this.toInput=null,this.fromInput=null,this.noteTextarea=null,this.debouncedUpdate=null}connectedCallback(){this.initializeElements(),this.setupEventListeners(),this.loadExistingData()}initializeElements(){if(this.checkbox=this.querySelector(`#gift-message-toggle-${this.sectionId}`),this.form=this.querySelector(`#gift-message-form-${this.sectionId}`),this.toInput=this.querySelector(`#gift-message-to-${this.sectionId}`),this.fromInput=this.querySelector(`#gift-message-from-${this.sectionId}`),this.noteTextarea=this.querySelector(`#gift-message-note-${this.sectionId}`),!this.checkbox||!this.form||!this.toInput||!this.fromInput||!this.noteTextarea){console.error("GiftMessage: Required elements not found");return}this.noteTextarea.setAttribute("maxlength",this.maxCharacters),this.noteCounter=this.createCharacterCounter(this.noteTextarea),this.debouncedUpdate=FoxTheme.utils.debounce(this.handleFormUpdate.bind(this),this.debounceTimeout)}createCharacterCounter(inputElement){const counter=document.createElement("div");counter.className="gift-message-counter",counter.style.cssText="font-size: 10px; color: #666; text-align: left;";const currentLength=inputElement.value.length;return counter.textContent=`${currentLength}/${this.maxCharacters} No special characters.`,inputElement.parentNode.insertBefore(counter,inputElement.nextSibling),counter}updateCharacterCounter(inputElement,counterElement){if(!inputElement||!counterElement)return;const currentLength=inputElement.value.length;counterElement.textContent=`${currentLength}/${this.maxCharacters} No special characters.`,currentLength>=this.maxCharacters?counterElement.style.color="#dc3545":currentLength>=this.maxCharacters*.9?counterElement.style.color="#ffc107":counterElement.style.color="#666"}sanitizeInput(value){return value.replace(/[^\w\s.,!?'"()-]/g,"").replace(/[\u{1F600}-\u{1F6FF}|\u{1F300}-\u{1F5FF}|\u{1F680}-\u{1F6FF}|\u{1F1E0}-\u{1F1FF}|\u{2600}-\u{26FF}|\u{2700}-\u{27BF}|\u{FE00}-\u{FE0F}|\u{1F900}-\u{1F9FF}|\u{1FA00}-\u{1FA6F}|\u{1FA70}-\u{1FAFF}|\u{231A}-\u{231B}|\u{23E9}-\u{23F3}|\u{23F8}-\u{23FA}|\u{25AA}-\u{25AB}|\u{25B6}|\u{25C0}|\u{25FB}-\u{25FE}|\u{2614}-\u{2615}|\u{2648}-\u{2653}|\u{267F}|\u{2693}|\u{26A1}|\u{26AA}-\u{26AB}|\u{26BD}-\u{26BE}|\u{26C4}-\u{26C5}|\u{26CE}|\u{26D4}|\u{26EA}|\u{26F2}-\u{26F3}|\u{26F5}|\u{26FA}|\u{26FD}|\u{2702}|\u{2705}|\u{2708}-\u{270D}|\u{270F}|\u{2712}|\u{2714}|\u{2716}|\u{271D}|\u{2721}|\u{2728}|\u{2733}-\u{2734}|\u{2744}|\u{2747}|\u{274C}|\u{274E}|\u{2753}-\u{2755}|\u{2757}|\u{2763}-\u{2764}|\u{2795}-\u{2797}|\u{27A1}|\u{27B0}|\u{27BF}|\u{2934}-\u{2935}|\u{2B05}-\u{2B07}|\u{2B1B}-\u{2B1C}|\u{2B50}|\u{2B55}|\u{3030}|\u{303D}|\u{3297}|\u{3299}]/gu,"")}handleInputWithSanitization(inputElement,counterElement){const originalValue=inputElement.value,sanitizedValue=this.sanitizeInput(originalValue);originalValue!==sanitizedValue&&(inputElement.value=sanitizedValue),this.updateCharacterCounter(inputElement,counterElement)}setupEventListeners(){!this.checkbox||!this.debouncedUpdate||(this.checkbox.addEventListener("change",this.handleToggleChange.bind(this)),this.toInput&&this.toInput.addEventListener("input",()=>{this.debouncedUpdate()}),this.fromInput&&this.fromInput.addEventListener("input",()=>{this.debouncedUpdate()}),this.noteTextarea&&this.noteTextarea.addEventListener("input",()=>{this.handleInputWithSanitization(this.noteTextarea,this.noteCounter),this.debouncedUpdate()}))}loadExistingData(){this.hasExistingData()&&(this.checkbox.checked=!0,this.showForm())}hasExistingData(){return this.toInput&&this.toInput.value.trim()!==""||this.fromInput&&this.fromInput.value.trim()!==""||this.noteTextarea&&this.noteTextarea.value.trim()!==""}handleToggleChange(event){event.target.checked?this.showForm():(this.hideForm(),this.clearFormData())}showForm(){this.form&&(this.form.style.display="",this.form.setAttribute("aria-hidden","false"))}hideForm(){this.form&&(this.form.style.display="none",this.form.setAttribute("aria-hidden","true"))}clearFormData(){this.toInput&&(this.toInput.value="",this.toInput.classList.remove("field-error")),this.fromInput&&(this.fromInput.value="",this.fromInput.classList.remove("field-error")),this.noteTextarea&&(this.noteTextarea.value="",this.noteTextarea.classList.remove("field-error"),this.updateCharacterCounter(this.noteTextarea,this.noteCounter)),this.updateCartAttributes({to:"",from:"",note:""})}areAllFieldsFilled(){return this.toInput&&this.toInput.value.trim()!==""&&this.fromInput&&this.fromInput.value.trim()!==""&&this.noteTextarea&&this.noteTextarea.value.trim()!==""}validateRequiredFields(){if(!this.form)return!0;const requiredFields=[this.toInput,this.fromInput,this.noteTextarea];let isValid=!0;return requiredFields.forEach(field=>{field&&!field.checkValidity()?(isValid=!1,field.classList.add("field-error")):field&&field.classList.remove("field-error")}),isValid}collectFormData(){return{to:this.toInput?this.toInput.value.trim():"",from:this.fromInput?this.fromInput.value.trim():"",note:this.noteTextarea?this.noteTextarea.value.trim():""}}handleFormUpdate(){if(this.checkbox.checked&&this.validateRequiredFields()&&this.areAllFieldsFilled()){const formData=this.collectFormData();this.updateCartAttributes(formData)}}updateCartAttributes(data){const requestBody=JSON.stringify({note:`to: ${data.to}, from: ${data.from}, message: ${data.note}`});fetch(`${FoxTheme.routes.cart_update_url}`,{...FoxTheme.utils.fetchConfig(),body:requestBody}).then(response=>{if(!response.ok)throw new Error("Network response was not ok");return response.json()}).catch(error=>{console.error("Error updating gift message:",error)})}}customElements.define("gift-message",GiftMessage);
2//# sourceMappingURL=/cdn/shop/t/724/assets/gift-message.js.map?v=111614371484339735271790257450

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.