1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([["swag-customized-products-file-upload.plugin"],{857:t=>{var e=function(t){var e;return!!t&&"object"==typeof t&&"[object RegExp]"!==(e=Object.prototype.toString.call(t))&&"[object Date]"!==e&&t.$$typeof!==i},i="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(t,e){return!1!==e.clone&&e.isMergeableObject(t)?a(Array.isArray(t)?[]:{},t,e):t}function o(t,e,i){return t.concat(e).map(function(t){return r(t,i)})}function s(t){return Object.keys(t).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[])}function n(t,e){try{return e in t}catch(t){return!1}}function a(t,i,u){(u=u||{}).arrayMerge=u.arrayMerge||o,u.isMergeableObject=u.isMergeableObject||e,u.cloneUnlessOtherwiseSpecified=r;var l,d,c=Array.isArray(i);return c!==Array.isArray(t)?r(i,u):c?u.arrayMerge(t,i,u):(d={},(l=u).isMergeableObject(t)&&s(t).forEach(function(e){d[e]=r(t[e],l)}),s(i).forEach(function(e){(!n(t,e)||Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))&&(n(t,e)&&l.isMergeableObject(i[e])?d[e]=(function(t,e){if(!e.customMerge)return a;var i=e.customMerge(t);return"function"==typeof i?i:a})(e,l)(t[e],i[e],l):d[e]=r(i[e],l))}),d)}a.all=function(t,e){if(!Array.isArray(t))throw Error("first argument should be an array");return t.reduce(function(t,i){return a(t,i,e)},{})},t.exports=a},49:(t,e,i)=>{i.d(e,{Z:()=>o});var r=i(140);class o{static isNode(t){return"object"==typeof t&&null!==t&&(t===document||t===window||t instanceof Node)}static hasAttribute(t,e){if(!o.isNode(t))throw Error("The element must be a valid HTML Node!");return"function"==typeof t.hasAttribute&&t.hasAttribute(e)}static getAttribute(t,e){let i=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(i&&!1===o.hasAttribute(t,e))throw Error('The required property "'.concat(e,'" does not exist!'));if("function"!=typeof t.getAttribute){if(i)throw Error("This node doesn't support the getAttribute function!");return}return t.getAttribute(e)}static getDataAttribute(t,e){let i=!(arguments.length>2)||void 0===arguments[2]||arguments[2],s=e.replace(/^data(|-)/,""),n=r.Z.toLowerCamelCase(s,"-");if(!o.isNode(t)){if(i)throw Error("The passed node is not a valid HTML Node!");return}if(void 0===t.dataset){if(i)throw Error("This node doesn't support the dataset attribute!");return}let a=t.dataset[n];if(void 0===a){if(i)throw Error('The required data attribute "'.concat(e,'" does not exist on ').concat(t,"!"));return a}return r.Z.parsePrimitive(a)}static querySelector(t,e){let i=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(i&&!o.isNode(t))throw Error("The parent node is not a valid HTML Node!");let r=t.querySelector(e)||!1;if(i&&!1===r)throw Error('The required element "'.concat(e,'" does not exist in parent node!'));return r}static querySelectorAll(t,e){let i=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(i&&!o.isNode(t))throw Error("The parent node is not a valid HTML Node!");let r=t.querySelectorAll(e);if(0===r.length&&(r=!1),i&&!1===r)throw Error('At least one item of "'.concat(e,'" must exist in parent node!'));return r}static getFocusableElements(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return t.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]):not([type="hidden"]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n ')}static getFirstFocusableElement(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return this.getFocusableElements(t)[0]}static getLastFocusableElement(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,e=this.getFocusableElements(t);return e[e.length-1]}}},140:(t,e,i)=>{i.d(e,{Z:()=>r});class r{static ucFirst(t){return t.charAt(0).toUpperCase()+t.slice(1)}static lcFirst(t){return t.charAt(0).toLowerCase()+t.slice(1)}static toDashCase(t){return t.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()}static toLowerCamelCase(t,e){let i=r.toUpperCamelCase(t,e);return r.lcFirst(i)}static toUpperCamelCase(t,e){return e?t.split(e).map(t=>
1r.ucFirst(t.toLowerCase())).join(""):r.ucFirst(t.toLowerCase())}static parsePrimitive(t){try{return/^\d+(.|,)\d+$/.test(t)&&(t=t.replace(",",".")),JSON.parse(t)}catch(e){return t.toString()}}}},293:(t,e,i)=>{i.d(e,{Z:()=>u});var r=i(857),o=i.n(r),s=i(49),n=i(140);class a{publish(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new CustomEvent(t,{detail:e,cancelable:i});return this.el.dispatchEvent(r),r}subscribe(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this,o=t.split("."),s=i.scope?e.bind(i.scope):e;if(i.once&&!0===i.once){let e=s;s=function(i){r.unsubscribe(t),e(i)}}return this.el.addEventListener(o[0],s),this.listeners.push({splitEventName:o,opts:i,cb:s}),!0}unsubscribe(t){let e=t.split(".");return this.listeners=this.listeners.reduce((t,i)=>([...i.splitEventName].sort().toString()===e.sort().toString()?this.el.removeEventListener(i.splitEventName[0],i.cb):t.push(i),t),[]),!0}reset(){return this.listeners.forEach(t=>{this.el.removeEventListener(t.splitEventName[0],t.cb)}),this.listeners=[],!0}get el(){return this._el}set el(t){this._el=t}get listeners(){return this._listeners}set listeners(t){this._listeners=t}constructor(t=document){this._el=t,t.$emitter=this,this._listeners=[]}}class u{init(){throw Error('The "init" method for the plugin "'.concat(this._pluginName,'" is not defined.'))}update(){}_init(){this._initialized||(this.init(),this._initialized=!0)}_update(){this._initialized&&this.update()}_mergeOptions(t){let e=n.Z.toDashCase(this._pluginName),i=s.Z.getDataAttribute(this.el,"data-".concat(e,"-config"),!1),r=s.Z.getAttribute(this.el,"data-".concat(e,"-options"),!1),a=[this.constructor.options,this.options,t];i&&a.push(window.PluginConfigManager.get(this._pluginName,i));try{r&&a.push(JSON.parse(r))}catch(t){throw console.error(this.el),Error('The data attribute "data-'.concat(e,'-options" could not be parsed to json: ').concat(t.message))}return o().all(a.filter(t=>t instanceof Object&&!(t instanceof Array)).map(t=>t||{}))}_registerInstance(){window.PluginManager.getPluginInstancesFromElement(this.el).set(this._pluginName,this),window.PluginManager.getPlugin(this._pluginName,!1).get("instances").push(this)}_getPluginName(t){return t||(t=this.constructor.name),t}constructor(t,e={},i=!1){if(!s.Z.isNode(t))throw Error("There is no valid element given.");this.el=t,this.$emitter=new a(this.el),this._pluginName=this._getPluginName(i),this.options=this._mergeOptions(e),this._initialized=!1,this._registerInstance(),this._init()}}},107:(t,e,i)=>{i.d(e,{Z:()=>r});class r{get(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"application/json",r=this._createPreparedRequest("GET",t,i);return this._sendRequest(r,null,e)}post(t,e,i){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";r=this._getContentType(e,r);let o=this._createPreparedRequest("POST",t,r);return this._sendRequest(o,e,i)}delete(t,e,i){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";r=this._getContentType(e,r);let o=this._createPreparedRequest("DELETE",t,r);return this._sendRequest(o,e,i)}patch(t,e,i){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";r=this._getContentType(e,r);let o=this._createPreparedRequest("PATCH",t,r);return this._sendRequest(o,e,i)}abort(){if(this._request)return this._request.abort()}setErrorHandlingInternal(t){this._errorHandlingInternal=t}_registerOnLoaded(t,e){e&&(!0===this._errorHandlingInternal?(t.addEventListener("load",()=>{e(t.responseText,t)}),t.addEventListener("abort",()=>{console.warn("the request to ".concat(t.responseURL," was aborted"))}),t.addEventListener("error",()=>{console.warn("the request to ".concat(t.responseURL," failed with status ").concat(t.status))}),t.addEventListener("timeout",()=>{console.warn("the request to ".concat(t.responseURL," timed out"))})):t.addEventListener("loadend",()=>{e(t.responseText,t)}))}_sendRequest(t,e,i){return this._registerOnLoaded(t,i),t.send(e),t}_getContentType(t,e){return t instanceof FormData&&(e=!1),e}_createPreparedRequest(t,e,i){return this._request=new XMLHttpRequest,this._request.open(t,e),this._request.setRequestHeader("X-Requested-With","XMLHttpRequest"),i&&this._request.setRequestHeader("Content-type",i),this._request}constructor(){this._request=null,this._errorHandlingInternal=!1}}},416:(t,e,i)=>{i.d(e,{Z:()=>n,y:()=>s});var r=i(293),o=i(49);let s=t=>{if("function"==typeof Event)return new Event(t);let e=document.createEvent("Event");return e.initEvent(t,!0,!0),e};class n extends r.Z{_init(){this.options.buyButtonSelector&&"#productDetailPageBuyProductForm .btn-buy"!==this.options.buyButtonSelector&&(this.options.selectors.buyButton=this.options.buyButtonSelector),this._context={customProductsForm:o.Z.querySelector(document,this.options.selectors.customProductsForm),buyForm:o.Z.querySelector(document,this.options.selectors.buyForm),buyWidget:o.Z.querySelector(document,this.options.selectors.buyWidget),buyButton:o.Z.querySelector(document,this.options.selectors.buyButton),subscription:{buyForm:o.Z.querySelector(document,this.options.selectors.subscription.buyForm,!1),buyWidget:o.Z.querySelector(document,this.options.selectors.subscription.buyWidget,!1),buyButton:o.Z.querySelector(document,this.options.selectors.subscription.buy
1Button,!1),oneTimeRadio:o.Z.querySelector(document,this.options.selectors.subscription.oneTimeRadio,!1)}},this._wrapAddEventListener(this._context.buyForm,this._context.subscription.buyForm),this._wrapAddEventListener(this._context.buyButton,this._context.subscription.buyButton),super._init()}get buyForm(){return n._isSubscription?this._context.subscription.buyForm:this._context.buyForm}set buyForm(t){console.error("Custom products: Overriding the buyForm like this is deprecated and could result in flaky behavior. Please use the options object instead."),n._isSubscription?this._context.subscription.buyForm=t:this._context.buyForm=t}get buyButton(){return n._isSubscription?this._context.subscription.buyButton:this._context.buyButton}set buyButton(t){console.error("Custom products: Overriding the buyButton like this is deprecated and could result in flaky behavior. Please use the options object instead."),n._isSubscription?this._context.subscription.buyButton=t:this._context.buyButton=t}get buyWidget(){return n._isSubscription?this._context.subscription.buyWidget:this._context.buyWidget}get customProductsForm(){return this._context.customProductsForm}_wrapAddEventListener(t,e){let i=this._contextSwitchingEventListener.bind(this,t,e);t&&(t.addEventListener=i),e&&(e.addEventListener=i)}_contextSwitchingEventListener(t,e,i,r){for(var o=arguments.length,s=Array(o>4?o-4:0),a=4;a<o;a++)s[a-4]=arguments[a];EventTarget.prototype.addEventListener.apply(t,[i,function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];n._isSubscription||r(...e)},...s]),e&&EventTarget.prototype.addEventListener.apply(e,[i,function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];n._isSubscription&&r(...e)},...s])}}n.options={selectors:{customProductsForm:"form .swag-customized-products",buyForm:"#productDetailPageBuyProductForm",buyWidget:"#productDetailPageBuyProductForm.buy-widget",buyButton:"#productDetailPageBuyProductForm .btn-buy",subscription:{buyForm:"#productDetailPageSubscriptionBuyProductForm",buyWidget:"#productDetailPageSubscriptionBuyProductForm .buy-widget",buyButton:"#productDetailPageSubscriptionBuyProductForm .btn-buy",oneTimeRadio:"#subscription-interval-option-one-time-buy"}}},n._isSubscription=!1},814:(t,e,i)=>{i.r(e),i.d(e,{SWAG_CUSTOMIZED_PRODUCTS_FILE_UPLOAD:()=>u,default:()=>l});var r=i(416),o=i(107),s=i(49);function n(t,e,i){return(n="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=a(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(i||t):o.value}})(t,e,i||t)}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}let u={EVENT:{UPLOAD_FINISHED:"SwagCustomizedProductsFileUploadFinished",UPLOAD_FAILED:"SwagCustomizedProductsFileUploadFailed",UPLOAD_REMOVED:"SwagCustomizedProductsFileUploadRemoved"}};class l extends r.Z{init(){this.fileUpload=this.el,!1!==this._prepareUploadedFilesList()&&(this.stepByStepElement=s.Z.querySelector(this.buyForm,'*[data-swag-customized-product-step-by-step="true"]',!1),this.dropzone=s.Z.querySelector(this.fileUpload,this.options.selectors.dropzonePrefix+this.options.optionId),this.input=s.Z.querySelector(this.dropzone,this.options.selectors.inputPrefix+this.options.optionId),this.browseButton=s.Z.querySelector(this.dropzone,this.options.selectors.browseButtonPrefix+this.options.optionId),this.iconSuccess=s.Z.querySelector(this.fileUpload,this.options.selectors.iconSuccess).innerHTML,this.iconError=s.Z.querySelector(this.fileUpload,this.options.selectors.iconError).innerHTML,this.httpClient=new o.Z,this.registry=new Map,this._registerEventListeners())}_prepareUploadedFilesList(){this.uploadedFilesList=s.Z.querySelector(this.fileUpload,this.options.selectors.uploadedFilesList);let t=s.Z.querySelector(this.uploadedFilesList,this.options.selectors.fileTemplate);return this.fileTemplate=t.cloneNode(!0),this.uploadedFilesList.hasChildNodes()&&this.uploadedFilesList.removeChild(t),null!==this.fileTemplate}_registerEventListeners(){this.input.addEventListener("change",this._onFileInputChanged.bind(this)),this.browseButton.addEventListener("click",this._onBrowse.bind(this)),this.dropzone.addEventListener("drop",this._onDropOnDropzone.bind(this)),document.addEventListener("dragenter",this._onDragEnter.bind(this),!1),document.addEventListener("dragleave",this._onDragLeave.bind(this),!1),document.addEventListener("dragover",this._onDragOver,!1),document.addEventListener("drop",this._onDropOnDocument.bind(this),!1)}_onDragEnter(t){t.preventDefault();let e=t.target,i=this.options.selectors.dropzoneIdPrefix+this.options.optionId;return!!e.closest(i)&&(this.dropzone.classList.add(this.options.classes.dragover),this.browseButton.setAttribute("disabled","disabled"),!0)}_onDragLeave(t){let e=t.target,i=this.options.selectors.dropzoneIdPrefix+this.options.optionId;return!e.closest(i)&&(this.dropzone.classList.remove("dragover"),this.browseButton.removeAttribute("disabled"),!0)}_onDragOver(t){t.preventDefault()}_onDropOnDocument(t){t.preventDefault(),this.dropzone.classList.remove(this.options.classes.dragover),this.browseButton.removeAttribute("disabled")}_onBrowse(t){t.preventDefault(),this.input.click()}_onDropOnDropzone(t){this._onFilesAdded(t.dataTransfer.files)}_onFileInputChanged(t){this._onFilesAdded(t.target.files)}_onFilesAdded(t){Array.from(t).forEach(this._handleFileUpload.bind(this)),this.input.value=""}_handleFileUpload(t){if(this.registry.has(t.name))return!1;if(this.registry.set(t.name,{file:t,element:this._appendNewFileElement(t.name),valid:!1,uploaded:!1}),this.registry.size>this.options.maxCount)return this._onUploadError(t.name,"422"),!1;let e=new FileReader;return e.addEventListener("error",this._onUploadError.bind(this)),e.addEventListener("load",this._sendUploadRequest.bind(this,t)),e.readAsArrayBuffer(t),!0}_appendNewFileElement(t){let e=document.createElement("div");return e.setAttribute("class",this.fileTemplate.getAttribute("class")),e.innerHTML=this.fileTemplate.innerHTML,s.Z.querySelector(e,this.options.selectors.filename).innerHTML=t,this.uploadedFilesList.appendChild(e),e}_sendUploadRequest(t){let e=new FormData;e.append("file",t),e.append("optionId",this.options.optionId),this.httpClient.post(this.options.endpoint,e,this._uploadRequestCallback.bind(this,t.name),"multipart/form-data",!0)}_uploadRequestCallback(t,e,i){let r={};try{r=JSON.parse(e)}catch(e){return this._onUploadError(t,i.status.toString()),!1}return void 0!==r.errors?this._onUploadError(t,i.status.toString()):this._onUploadSuccess(t,r),this.updateBuyButton(),!0}_onUploadSuccess(t,e){let i=this.registry.get(t);if(!i)return;let r=s.Z.querySelector(i.element,this.options.selectors.iconElement);this.resetUploadElement(t),i.valid=!0,i.uploaded=!0,i.element.classList.add(this.options.classes.success),r.innerHTML=this.iconSuccess;let o=this._createMediaIdInput(t,e.mediaId),n=this._createFileNameInput(t);this.input.appendChild(o),this.input.appendChild(n),Array.from(this.registry.values()).map(t=>t.file).forEach(this._handleFileUpload.bind(this)),this.updatePriceDisplay(),s.Z.querySelector(i.element,this.options.selectors.closeButton).addEventListener("click",this._onRemoveValidElement.bind(this,i,o,n)),this.$emitter.publish(u.EVENT.UPLOAD_FINISHED)}resetUploadElement(t){if(!this.registry.has(t))return!1;let e=this.registry.get(t);return e.valid=!1,s.Z.querySelector(e.element,this.options.selectors.errorText).innerHTML="",e.element.classList.remove(this.options.classes.success),e.element.classList.remove(this.options.classes.error),!0}_onUploadError(t,e){let i=this.registry.get(t);if(!i)return;i.valid=!1,i.uploaded=!1;let r=s.Z.querySelector(i.element,this.options.selectors.iconElement);i.element.classList.add(this.options.classes.error),r.innerHTML=this.iconError,s.Z.querySelector(i.element,this.options.selectors.errorText).innerHTML=this.getSnippetByErrorC
1ode(e),s.Z.querySelector(i.element,this.options.selectors.closeButton).addEventListener("click",this._onRemoveInvalidElement.bind(this,i)),this.$emitter.publish(u.EVENT.UPLOAD_FAILED)}_onRemoveValidElement(t,e,i,r){this._removeElement(t,r),e.remove(),i.remove(),this.updatePriceDisplay(),this.updateBuyButton(),this.triggerExclusionValidation(),this.$emitter.publish(u.EVENT.UPLOAD_REMOVED)}_onRemoveInvalidElement(t,e){this._removeElement(t,e),this.triggerExclusionValidation()}updateBuyButton(){let t=s.Z.querySelector(this.buyForm,this.options.selectors.customizedProductContainer,!1);t&&window.PluginManager.getPluginInstanceFromElement(t,"SwagCustomizedProductsFormValidator").onFormChange()}_removeElement(t,e){if(e.preventDefault(),this.uploadedFilesList.contains(t.element)&&this.uploadedFilesList.removeChild(t.element),this.registry.delete(t.file.name),Array.from(this.registry.values()).filter(t=>{let{uploaded:e}=t;return e}).length<this.options.maxCount){let t=Array.from(this.registry.values()).filter(t=>{let{uploaded:e}=t;return!e});t.length&&this._sendUploadRequest(t[0].file)}this.updateBuyButton()}_createMediaIdInput(t,e){let i=document.createElement("input");return i.type="hidden",i.name="customized-products-template[options][".concat(this.options.optionId,"][media][").concat(t,"][id]"),i.value=e,i}_createFileNameInput(t){let e=document.createElement("input");return e.type="hidden",e.name="customized-products-template[options][".concat(this.options.optionId,"][media][").concat(t,"][filename]"),e.value=t,e}updatePriceDisplay(){let t=s.Z.querySelector(document,this.options.selectors.priceDisplayContainer,!1);return!!t&&(window.PluginManager.getPluginInstanceFromElement(t,"SwagCustomizedProductPriceDisplay").onFormChange(),!0)}triggerExclusionValidation(){let t=s.Z.querySelector(document,this.options.selectors.customizedProductContainer,!1);if(!t)return!1;let e=window.PluginManager.getPluginInstanceFromElement(t,"SwagCustomizedProductsExclusionListValidation");return!!e&&(e.onInputChange(),!0)}getSnippetByErrorCode(t){let e=s.Z.getDataAttribute(this.el,"data-swag-customized-products-file-upload-translation-errors");return e[t]||e.generic}}l.options={...n(a(l),"options",l),endpoint:"",optionId:"",maxCount:1,selectors:{...n(a(l),"options",l).selectors,dropzonePrefix:"#customized-products-dropzone-",inputPrefix:"#customized-products-dropzone-input-",browseButtonPrefix:"#customized-products-browse-",dropzoneIdPrefix:"#customized-products-dropzone-",upload:".customized-products-upload",dropzone:".customized-products-upload__dropzone",uploadedFilesList:".customized-products-upload-files",fileTemplate:".customized-products-upload-files-element",filename:".customized-products-upload-files-element__container-filename",iconElement:".customized-products-upload-files-element__container-icon",closeButton:".customized-products-upload-files-element__container-close-button",priceDisplayContainer:'[data-swag-customized-product-price-display="true"]',customizedProductContainer:".swag-customized-products",iconSuccess:".customized-products-upload-icon-success",iconError:".customized-products-upload-icon-error",errorText:".customized-products-error-subtitle"},classes:{dragover:"dragover",success:"is--success",error:"is--error"}}}}]);
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.