1class PrintessEditor{constructor(settings){if(this.calculateCurrentPrices=async(priceInfo,context)=>{const r=await this.getPriceCategories(context);let basePrice=r.basePrice;return priceInfo.snippetPriceCategories&&priceInfo.snippetPriceCategories.forEach(x=>{x&&x.amount>0&&context.snippetPrices[x.priceCategory-1]&&(basePrice+=context.snippetPrices[x.priceCategory-1].priceInCent)}),r.price=context.formatMoney(basePrice),r},!settings||!settings.shopToken)throw"No shop token provided";this.Settings={...settings};const hasUiSettings=typeof this.Settings.uiSettings<"u"&&this.Settings.uiSettings!==null,startupSettings={};hasUiSettings&&(startupSettings.showAnimation=this.Settings.uiSettings.showStartupAnimation===!0||this.Settings.uiSettings.showStartupAnimation=="true",this.Settings.uiSettings.startupLogoUrl&&(startupSettings.imageUrl=this.Settings.uiSettings.startupLogoUrl),this.Settings.uiSettings.startupBackgroundColor&&(startupSettings.background=this.Settings.uiSettings.startupBackgroundColor)),this.ClassicEditorUrl=this.getClassicEditorUrl(this.Settings.editorUrl,this.Settings.editorVersion,startupSettings)+"#"+encodeURIComponent(JSON.stringify(startupSettings))}stripEditorVersion(editorVersion){if(editorVersion=(editorVersion||"").trim(),typeof editorVersion<"u"&&editorVersion!=null)if(!editorVersion)editorVersion="";else{for(;editorVersion.indexOf("/")==0;)editorVersion=editorVersion.substring(1);for(;editorVersion.length>0&&editorVersion[editorVersion.length-1]==="/";)editorVersion=editorVersion.substring(0,editorVersion.length-1)}return editorVersion}sanitizeHost(host){return host?(host=host.trim(),host.endsWith("/")?host:host+"/"):host||""}getClassicEditorUrl(editorDomain,editorVersion,startupSettings){editorDomain=editorDomain||"https://editor.printess.com/";const hashIndex=editorDomain.indexOf("#");if(hashIndex>0){let json=editorDomain.substring(hashIndex+1);if(json)try{const decodedJson=JSON.parse(decodeURIComponent(json));if(decodedJson)for(let propertyName in decodedJson)decodedJson.hasOwnProperty(propertyName)&&(startupSettings[propertyName]=decodedJson[propertyName])}catch{}editorDomain=editorDomain.substring(0,hashIndex)}return editorDomain.toLowerCase().endsWith(".html")||(editorDomain=this.sanitizeHost(editorDomain),editorVersion&&(editorVersion=this.stripEditorVersion(editorVersion),editorDomain+=editorVersion+(editorVersion?"/":"")),editorDomain+="printess-editor/embed.html"),editorDomain.toLowerCase().indexOf("https://")!==0&&editorDomain.toLowerCase().indexOf("http://")!==0&&(editorDomain="https://"+editorDomain),editorDomain}getLoaderUrl(editorDomain,editorVersion,urlSettings){editorDomain=editorDomain||"https://editor.printess.com/";const hashIndex=editorDomain.indexOf("#");if(hashIndex>0){let json=editorDomain.substring(hashIndex+1);if(json)try{const decodedJson=JSON.parse(decodeURIComponent(json));if(decodedJson)for(let propertyName in decodedJson)decodedJson.hasOwnProperty(propertyName)&&(urlSettings[propertyName]=decodedJson[propertyName])}catch{}editorDomain=editorDomain.substring(0,hashIndex)}return editorDomain.toLocaleLowerCase().endsWith("embed.html")&&(editorDomain=editorDomain.substring(0,editorDomain.length-10)),editorDomain.toLowerCase().endsWith(".html")||(editorDomain=this.sanitizeHost(editorDomain),editorVersion&&(editorVersion=this.stripEditorVersion(editorVersion),editorDomain+=editorVersion+(editorVersion?"/":"")),editorDomain.toLowerCase().endsWith("printess-editor/")||(editorDomain+="printess-editor/"),editorDomain+="loader.js"),editorDomain.toLowerCase().indexOf("https://")!==0&&editorDomain.toLowerCase().indexOf("http://")!==0&&(editorDomain="https://"+editorDomain),editorDomain}getPrintessComponent(){return document.querySelector("printess-component")||null}applyFormFieldMappings(formFields,mappings){const ret=[];if(!mappings)for(const ffName in formFields)formFields.hasOwnProperty(ffName)&&ret.push({name:ffName,value:formFields[ffName]});if(formFields){for(const property in formFields)if(formFields.hasOwnProperty(property)){const ff=formFields[property],ffName=typeof mappings[property]<"u"&&typeof mappings[property].formField<"u"?mappings[property].formField:property;let ffValue=ff;typeof mappings[property]<"u"&&typeof mappings[property].values<"u"&&typeof mappings[property].values[ffValue]<"u"&&(ffValue=mappings[property].values[ff]),ret.pu
1sh({name:ffName,value:ffValue})}}return ret}reverseFormFieldMapping(formFieldName,formFieldValue,mappings){let name=formFieldName||"",value=formFieldValue||"";if(mappings){for(let optionName in mappings)if(mappings.hasOwnProperty(optionName)&&mappings[optionName].formField===formFieldName){if(name=optionName,mappings[optionName].values){for(let optionValue in mappings[optionName].values)if(mappings[optionName].values.hasOwnProperty(optionValue)&&mappings[optionName].values[optionValue]===formFieldValue){value=optionValue;break}}break}}return{name,value}}setViewportMeta(){const headElements=document.getElementsByTagName("head");if(headElements&&headElements.length>0){let metaTag=headElements[0].querySelector("meta[name=viewport]");metaTag||(metaTag=document.createElement("meta"),metaTag.setAttribute("name","viewport"),headElements[0].appendChild(metaTag));let content=metaTag.getAttribute("content");content?content.indexOf("interactive-widget")<0&&(content+=content?", ":"",content+="interactive-widget=resizes-content",metaTag.setAttribute("content",content)):metaTag.setAttribute("content","interactive-widget=resizes-content")}}async initializeIFrame(callbacks,context,settings){const that=this;let iFrame=document.getElementById("printess");const closeTabListener=evt=>{callbacks&&typeof callbacks.onCloseTab=="function"&&callbacks.onCloseTab(evt)},eventListener=evt=>{switch(evt.data.cmd){case"back":window.removeEventListener("message",eventListener),window.removeEventListener("beforeunload",closeTabListener),window.removeEventListener("unload",closeTabListener),iFrame.setAttribute("printessHasListener","false"),callbacks&&typeof callbacks.onBack=="function"&&callbacks.onBack();break;case"basket":window.removeEventListener("message",eventListener),window.removeEventListener("beforeunload",closeTabListener),window.removeEventListener("unload",closeTabListener),iFrame.setAttribute("printessHasListener","false"),callbacks&&typeof callbacks.onAddToBasketAsync=="function"&&callbacks.onAddToBasketAsync(evt.data.token,evt.data.thumbnailUrl).then(()=>{});break;case"formFieldChanged":callbacks&&typeof callbacks.onFormFieldChangedAsync=="function"&&callbacks.onFormFieldChangedAsync(evt.data.n||evt.data.name,evt.data.v||evt.data.value,evt.data.ffCaption||"",evt.data.l||evt.data.label).then(()=>{});break;case"priceChanged":{callbacks&&typeof callbacks.onPriceChangedAsync=="function"&&callbacks.onPriceChangedAsync(evt.data.priceInfo).then(()=>{});break}case"renderFirstPageImage":{callbacks&&typeof callbacks.onRenderedFirstPageImageAsync=="function"&&callbacks.onRenderedFirstPageImageAsync(evt.data.result);break}case"save":{callbacks&&typeof callbacks.onSaveAsync=="function"&&callbacks.onSaveAsync(evt.data.token);break}case"load":{callbacks&&typeof callbacks.onLoadAsync=="function"&&callbacks.onLoadAsync(context.templateNameOrSaveToken);break}case"loaded":{callbacks&&typeof callbacks.onLoadedAsync=="function"&&callbacks.onLoadedAsync(context.templateNameOrSaveToken);break}default:break}};return new Promise(resolve=>{if(iFrame)iFrame.getAttribute("printessHasListener")!=="true"&&(window.addEventListener("message",eventListener),settings.showAlertOnTabClose===!0&&(window.addEventListener("beforeunload",closeTabListener),window.addEventListener("unload",closeTabListener)),iFrame.setAttribute("printessHasListener","true")),resolve(iFrame);else{const container=document.createElement("div");container.setAttribute("id","printess-container"),container.setAttribute("style","display: none; position: absolute; top: 0; bottom: 0; right: 0; left: 0; width: 100%; height: 100%; z-index: 100000;"),iFrame=document.createElement("iframe"),iFrame.setAttribute("src",this.ClassicEditorUrl),iFrame.setAttribute("id","printess"),iFrame.setAttribute("style","width:100%; heigth:100%;"),iFrame.setAttribute("data-attached","false"),iFrame.setAttribute("allow","xr-spatial-tracking; clipboard-read; clipboard-write;"),iFrame.setAttribute("allowfullscreen","true"),iFrame.classList.add("printess-owned"),container.appendChild(iFrame),iFrame.onload=()=>{resolve(iFrame)},window.addEventListener("message",eventListener),settings.showAlertOnTabClose===!0&&(window.addEventListener("beforeunload",closeTabListener),window.addEventListener("unload",closeTabListener)),iFrame.setAttribute("printessHasListener","true"),window.visualVie
1wport&&window.visualViewport.addEventListener("scroll",()=>{iFrame.contentWindow?.postMessage({cmd:"viewportScroll",height:window.visualViewport?.height,offsetTop:window.visualViewport?.offsetTop},"*")},{passive:!0}),that.setViewportMeta(),document.body.append(container)}})}async getPriceCategories(context,formFieldValues=null){let price=0;return formFieldValues||(formFieldValues=context.getCurrentFormFieldValues()),typeof context.getPriceForFormFieldsAsync=="function"?price=await context.getPriceForFormFieldsAsync(formFieldValues):typeof context.getPriceForFormFields=="function"&&(price=context.getPriceForFormFields(formFieldValues)),{snippetPrices:context.snippetPrices.map(x=>x?x.label:null),priceCategories:{},price:context.formatMoney(price),basePrice:price,productName:context.getProductName(),legalNotice:context.legalText,infoUrl:context.legalTextUrl}}async onPriceChanged(priceChangedInfo,context){try{let priceInfo=null;try{priceChangedInfo.snippetPriceCategories&&priceChangedInfo.snippetPriceCategories.length>0?context.stickers=priceChangedInfo.snippetPriceCategories.filter(x=>context.snippetPrices&&context.snippetPrices.length>=x.priceCategory).map(x=>({productVariantId:context.snippetPrices[x.priceCategory-1].variantId,quantity:x.amount})):context.stickers=[],priceInfo=await this.calculateCurrentPrices(priceChangedInfo,context)}catch(e){console.error(e)}const iframe=document.getElementById("printess");iframe&&!context.hidePricesInEditor&&setTimeout(()=>{iframe.contentWindow.postMessage({cmd:"refreshPriceDisplay",priceDisplay:priceInfo},"*")},0);const component=this.getPrintessComponent();component&&component.editor&&component.editor.ui.refreshPriceDisplay(priceInfo)}catch{}}hideBcUiVersion(context,closeButtonClicked){const editor=this.getPrintessComponent();editor&&editor.editor&&editor.editor.ui.hide(),typeof context.editorClosed=="function"&&context.editorClosed(closeButtonClicked===!0)}async showBcUiVersion(context,callbacks){const that=this,priceInfo=context.getPriceInfo();let isSaveToken=context&&context.templateNameOrSaveToken&&context.templateNameOrSaveToken.indexOf("st:")===0,formFields=null,mergeTemplates=null;isSaveToken||(formFields=that.applyFormFieldMappings(context.getCurrentFormFieldValues(),context.getFormFieldMappings()),mergeTemplates=context.getMergeTemplates());const startupParams={},printessLoader=await import(that.getLoaderUrl(this.Settings.editorUrl,this.Settings.editorVersion,startupParams));let printessComponent=that.getPrintessComponent();if(printessComponent&&printessComponent.editor)printessComponent.style.display="block",context.renderFirstPageImageAsync=async(maxThumbnailWidth,maxThumbnailHeight)=>{const url=await printessComponent.editor.api.renderFirstPageImage("thumbnail.png",void 0,maxThumbnailWidth,maxThumbnailHeight);context&&typeof context.onRenderFirstPageImageAsync=="function"?await context.onRenderFirstPageImageAsync(url):context&&typeof context.onRenderFirstPageImage=="function"&&context.onRenderFirstPageImage(url)},await printessComponent.editor.api.loadTemplateAndFormFields(context.templateNameOrSaveToken,mergeTemplates,formFields,null),printessComponent.editor.ui.show();else{const attachParams={domain:that.Settings.apiDomain,mergeTemplates,formFields,token:that.Settings.shopToken,templateName:context.templateNameOrSaveToken,translationKey:"",basketId:typeof context.getBasketId=="function"&&context.getBasketId()||"Some-Unique-Basket-Or-Session-Id",shopUserId:typeof context.getUserId=="function"?context.getUserId()||"Some-Unique-Basket-Or-Session-Id":"Some-Unique-Shop-User-Id",snippetPriceCategoryLabels:priceInfo&&priceInfo.snippetPrices?priceInfo.snippetPrices:null,theme:that.Settings.uiSettings&&that.Settings.uiSettings.theme||"",addToBasketCallback:(token,thumbnailUrl)=>{callbacks&&typeof callbacks.onAddToBasketAsync=="function"&&callbacks.onAddToBasketAsync(token,thumbnailUrl).then(()=>{})},formFieldChangedCallback:(name,value,tag,label,ffLabel)=>{callbacks&&typeof callbacks.onFormFieldChangedAsync=="function"&&callbacks.onFormFieldChangedAsync(name,value,ffLabel,label).then(()=>{})},priceChangeCallback:priceInfo2=>{callbacks&&typeof callbacks.onPriceChangedAsync=="function"&&callbacks.onPriceChangedAsync(priceInfo2).then(()=>{})},backButtonCallback:saveToken=>{that.hideBcUiVersion(context,!0)},saveTemplateCallback:(saveToken,type)=>{typeof callbacks.onSaveAsync=="function"&&callbacks.onSaveAsync(saveToken)},loadTemplateCallback:param=>{callbacks.onLoadAsync(attachParams.templateName)}},printess=await printessLoader.load(attachParams);printessComponent=that.getPrintessComponent(),printessComponent&&(printessComponent.editor=printess)}}async show(context){const that=this;let isSaveToken=context&&context.templateNameOrSaveToken&&context.templateNameOrSaveToken.indexOf("st:")===0;const callbacks={onBack:()=>{that.hide(context,!0)},onAddToBasketAsync:async(saveToken,thumbnailUrl)=>{let result=null;typeof context.onAddToBasketAsync=="function"?result=await context.onAddToBasketAsync(saveToken,thumbnailUrl):result=context.onAddToBasket(saveToken,thumbnailUrl),result&&result.waitUntilClosingMS?setTimeout(function(){typeof result.executeBeforeClosing=="function"&&result.executeBeforeClosing(),that.hide(context,!1)},result.waitUntilClosingMS):(result&&typeof result.executeBeforeClosing=="function"&&result.executeBeforeClosing(),that.hide(context,!1))},onFormFieldChangedAsync:async(formFieldName,formFieldValue,formFieldLabel,formFieldValueLabel)=>{const formField=that.reverseFormFieldMapping(formFieldName,formFieldValue,context.getFormFieldMappings());
1typeof context.onFormFieldChangedAsync=="function"?await context.onFormFieldChanged(formField.name,formField.value,formFieldLabel,formFieldValueLabel):typeof context.onFormFieldChanged=="function"&&context.onFormFieldChanged(formField.name,formField.value,formFieldLabel,formFieldValueLabel)},onPriceChangedAsync:async priceInfo=>{await that.onPriceChanged(priceInfo,context)},onRenderedFirstPageImageAsync:async result=>{typeof context.onRenderFirstPageImageAsync=="function"?await context.onRenderFirstPageImageAsync(result):typeof context.onRenderFirstPageImage=="function"&&context.onRenderFirstPageImage(result)},onSaveAsync:async saveToken=>{typeof context.onSaveAsync=="function"?await context.onSaveAsync(saveToken,""):typeof context.onSave=="function"&&context.onSave(saveToken,"")},onLoadAsync:async currentTemplateNameOrSaveToken=>{typeof context.onLoadAsync=="function"?await context.onLoadAsync(currentTemplateNameOrSaveToken):typeof context.onLoad=="function"&&context.onLoad(currentTemplateNameOrSaveToken)},onLoadedAsync:async currentTemplateNameOrSaveToken=>{typeof context.onLoadedAsync=="function"?await context.onLoadedAsync(currentTemplateNameOrSaveToken):typeof context.onLoaded=="function"&&context.onLoaded(currentTemplateNameOrSaveToken)},onCloseTab:evt=>{evt.preventDefault(),evt.returnValue=""}};if(this.Settings.uiSettings&&this.Settings.uiSettings.uiVersion==="bcui")that.showBcUiVersion(context,callbacks);else{const priceInfo=context.getPriceInfo();let formFields=null,mergeTemplates=null;isSaveToken||(formFields=this.applyFormFieldMappings(context.getCurrentFormFieldValues(),context.getFormFieldMappings()),mergeTemplates=context.getMergeTemplates());const iFrame=await this.initializeIFrame(callbacks,context,this.Settings);if(context.renderFirstPageImageAsync=(maxThumbnailWidth,maxThumbnailHeight)=>(setTimeout(function(){iFrame.contentWindow.postMessage({cmd:"renderFirstPageImage",properties:{}},"*")},0),Promise.resolve()),iFrame.getAttribute("data-attached")==="false")try{const attachParams={domain:that.Settings.apiDomain,token:this.Settings.shopToken||"",templateName:context.templateNameOrSaveToken,showBuyerSide:!0,templateUserId:"",basketId:typeof context.getBasketId=="function"&&context.getBasketId()||"Some-Unique-Basket-Or-Session-Id",shopUserId:typeof context.getUserId=="function"?context.getUserId()||"Some-Unique-Basket-Or-Session-Id":"Some-Unique-Shop-User-Id",formFields,snippetPriceCategoryLabels:priceInfo&&priceInfo.snippetPrices?priceInfo.snippetPrices:null,mergeTemplates};if(typeof context.showSplitterGridSizeButton<"u"&&context.showSplitterGridSizeButton!==null&&(attachParams.showSplitterGridSizeButton=context.showSplitterGridSizeButton===!0||context.showSplitterGridSizeButton==="true"),this.Settings.uiSettings&&this.Settings.uiSettings.theme&&(attachParams.theme=this.Settings.uiSettings.theme),this.Settings.attachParams)for(const paramName in this.Settings.attachParams)this.Settings.attachParams.hasOwnProperty(paramName)&&(attachParams[paramName]=this.Settings.attachParams[paramName]);if(typeof context.additionalAttachParams<"u"||context.additionalAttachParams!==null)for(const prop in context.additionalAttachParams)context.additionalAttachParams.hasOwnProperty(prop)&&(attachParams[prop]=context.additionalAttachParams[prop]);iFrame.contentWindow.postMessage({cmd:"attach",properties:attachParams},"*"),iFrame.setAttribute("data-attached","true"),setTimeout(function(){iFrame.contentWindow.focus()},0)}catch(e){console.error(e)}else{const loadParams={templateNameOrToken:context.templateNameOrSaveToken,mergeTemplates,formFields,snippetPriceCategoryLabels:priceInfo&&priceInfo.snippetPrices?priceInfo.snippetPrices:null,formFieldProperties:void 0,clearExchangeCaches:!0};this.Settings.attachParams&&(this.Settings.attachParams.formFieldProperties&&(loadParams.formFieldProperties=this.Settings.attachParams.formFieldProperties),typeof this.Settings.attachParams.clearExchangeCaches<"u"&&(loadParams.clearExchangeCaches=this.Settings.attachParams.clearExchangeCaches!==!1)),context&&context.additionalAttachParams&&(context.additionalAttachParams.formFieldProperties&&(loadParams.formFieldProperties=context.additionalAttachParams.formFieldProperties),typeof context.additionalAttachParams.clearExchangeCaches<"u"&&(loadParams.clearExchangeCaches=context.additionalAttachParams.clearExchangeCaches!==!1)),iFrame.contentWindow.postMessage({cmd:"loadTemplateAndFormFields",parameters:[loadParams.templateNameOrToken,loadParams.mergeTemplates,loadParams.formFields,loadParams.snippetPriceCategoryLabels,loadParams.formFieldProperties,loadParams.clearExchangeCaches]},"*"),setTimeout(function(){iFrame.contentWindow.focus()},0)}}document.body.classList.add("hideAll");var root=document.getElementsByTagName("html");root&&root.length>0&&root[0].classList.add("printess-editor-open");const iframeWrapper=document.getElementById("printess-container");iframeWrapper&&iframeWrapper.style.setProperty("display","block","important")}hide(context,closeButtonClicked){if(this.Settings.uiSettings&&this.Settings.uiSettings.uiVersion==="bcui"){const editor=this.getPrintessComponent();editor&&editor.editor&&editor.editor.ui.hide()}else{const iframeWrapper=document.getElementById("printess-container");iframeWrapper&&(iframeWrapper.style.display="none")}document.body.classList.remove("hideAll");var root=document.getElementsByTagName("html");root&&root.length>
10&&root[0].classList.remove("printess-editor-open"),typeof context.editorClosed=="function"&&context.editorClosed(closeButtonClicked===!0)}static getGlobalShopSettings(){return window&&window.printessGlobalConfig?window.printessGlobalConfig:{}}static getGlobalFormFields(){const settings=PrintessEditor.getGlobalShopSettings();let formFields;if(typeof settings.formFields!=null&&settings.formFields)if(typeof settings.formFields=="function")try{formFields=settings.formFields()}catch(e){console.error(e)}else formFields=settings.formFields;return formFields||{}}}function initPrintessEditor(shopToken,editorUrl,editorVersion,startupLogoUrl,showStartupAnimation,theme,startupBackgroundColor=""){let editorSettings;return shopToken&&typeof shopToken!="string"?editorSettings={apiDomain:shopToken.apiDomain?shopToken.apiDomain:null,shopToken:shopToken.shopToken?shopToken.shopToken:"",editorUrl:shopToken.editorUrl?shopToken.editorUrl:"",editorVersion:shopToken.editorVersion?shopToken.editorVersion:"",attachParams:shopToken.attachParams?shopToken.attachParams:"",showAlertOnTabClose:typeof shopToken.showTabClosingAlert<"u"&&shopToken.showTabClosingAlert!==null?shopToken.showTabClosingAlert===!0:!1,uiSettings:{showStartupAnimation:typeof shopToken.showStartupAnimation<"u"&&shopToken.showStartupAnimation!==null?shopToken.showStartupAnimation===!0:!0,startupBackgroundColor:shopToken.startupBackgroundColor||"#ffffff",theme:shopToken.theme||"",startupLogoUrl:shopToken.startupLogoUrl||"",uiVersion:shopToken.uiVersion||""},...shopToken}:editorSettings={apiDomain:null,shopToken:shopToken||"",editorUrl,editorVersion,uiSettings:{showStartupAnimation,startupBackgroundColor,startupLogoUrl,theme}},new PrintessEditor(editorSettings)}class PrintessShopifyGraphQlApi{constructor(graphQlToken){this.graphQlToken=graphQlToken}static strEscapeRegExp(str){return str.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}static strReplaceAll(str,find,replace){return str.replace(new RegExp(PrintessShopifyGraphQlApi.strEscapeRegExp(find),"g"),replace)}getSubObjectByPath(root,path){if(path=path?path.trim():"",!root||!path)return null;const splits=path.split(".");let result=root;for(let i=0;i<splits.length;++i)if(result.hasOwnProperty(splits[i])&&result[splits[i]])result=result[splits[i]];else return null;return result}async sendGQl(query,resultVarName){const response=await fetch("/api/unstable/graphql.json",{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":this.graphQlToken,Accept:"application/json"},body:JSON.stringify(query)});if(!response.ok)return console.log("Failed query: ["+response.status+"] "+response.statusText),null;const json=await response.json();return json.errors&&json.errors.length>0?(console.log("Failed query: "+JSON.stringify(json.errors)),null):(console.log(json),this.get
1SubObjectByPath(json.data,resultVarName))}async getProductOptions(productId){const that=this,query={variables:{productId:"gid://shopify/Product/"+productId.toString()},query:` 2 query GetProductsById($productId: ID!) { 3 product(id: $productId) { 4 options(first: 4) { 5 name, 6 id, 7 optionValues { 8 id, 9 name 10 } 11 } 12 } 13 }`};return(await this.sendGQl(query,"product.options")).map(x=>({...x,id:PrintessShopifyGraphQlApi.parseShopifyId(x.id),optionValues:x.optionValues.map(y=>({...y,id:PrintessShopifyGraphQlApi.parseShopifyId(y.id)}))}))}static parseShopifyId(id){const split=(id||"").split("/");return parseInt(split[split.length-1])}async getProductById(id,autoloadOptions){const query={query:` 14 query GetProductsById($productId: ID!) { 15 product(id: $productId) { 16 title 17 handle 18 templateName: metafield(namespace: "printess", key: "templateName") { 19 value 20 }, 21 optionNameMapping: metafield(namespace: "printess", key: "optionNameMapping") { 22 value 23 }, 24 productType: metafield(namespace: "printess", key: "productType") { 25 value 26 }, 27 productDefinitionId: metafield(namespace: "printess", key: "productDefinitionId") { 28 value 29 }, 30 mergeTemplates: metafield(namespace: "printess", key: "mergeTemplates") { 31 value 32 }, 33 outputDpi: metafield(namespace: "printess", key: "dpi") { 34 value 35 }, 36 outputFormat: metafield(namespace: "printess", key: "outputFormat") { 37 value 38 }, 39 tableQuantityFormField: metafield(namespace: "printess", key: "tableQuantityFormField") { 40 value 41 }, 42 ignoreDropshipBundling: metafield(namespace: "printess", key: "ignoreDropshipBundling") { 43 value 44 }, 45 dropshipBundlingId: metafield(namespace: "printess", key: "dropshipBundlingId") { 46 value 47 } 48 } 49 }`,variables:{productId:"gid://shopify/Product/"+id.toString()}},product=await this.sendGQl(query,"product");return product?(product.id=id,autoloadOptions&&(product.productOptions=await this.getProductOptions(id)),product):null}async GetProductVariantByOptions(id,options,returnDefault=!1){const queryVariables={};queryVariables.productId="gid://shopify/Product/"+id.toString();let count=0,variantFilter="",methodArguments="$productId: ID!";const defaulVariantQuery=` 50 defaultVariant: selectedOrFirstAvailableVariant { 51 title, 52 id, 53 available: availableForSale, 54 sku, 55 requires_shipping: requiresShipping, 56 taxable, 57 price {amount}, 58 printessTemplateName: metafield(namespace: "printess", key: "templateName") { 59 value 60 }, 61 optionLookup: selectedOptions { 62 name, 63 value 64 } 65 }, 66 `;for(const propertyName in options)if(options.hasOwnProperty(propertyName)){const optionName="optionName"+count,valueName="valueName"+count;queryVariables[optionName]=propertyName,queryVariables[valueName]=options[propertyName],variantFilter&&(variantFilter+=","),variantFilter+="{name: $"+optionName+", value: $"+valueName+"}",methodArguments+=",$"+optionName+": String!,$"+valueName+": String!",count+=1}variantFilter="selectedOptions: ["+variantFilter+"]";const query={query:` 67 query GetProductsById({METHOD_ARGUMENTS}) { 68 product(id: $productId) { 69 {DEFAULT_VARIANT}
70 variantBySelectedOptions({VARIANT_FILTER}){ 71 title, 72 id, 73 available: availableForSale, 74 requires_shipping: requiresShipping, 75 taxable, 76 sku, 77 printessTemplateName: metafield(namespace: "printess", key: "templateName") { 78 value 79 }, 80 price {amount}, 81 optionLookup: selectedOptions { 82 name, 83 value 84 } 85 } 86 } 87 }`,variables:queryVariables};query.query=query.query.replace("{METHOD_ARGUMENTS}",methodArguments).replace("{DEFAULT_VARIANT}",returnDefault?defaulVariantQuery:"").replace("{VARIANT_FILTER}",variantFilter);const variantResponse=await this.sendGQl(query,"product");if(variantResponse){const mapVariant=variant=>({...variant,id:PrintessShopifyGraphQlApi.parseShopifyId(variant.id),option1:variant.optionLookup&&variant.optionLookup.length>0?variant.optionLookup[0].value:null,option2:variant.optionLookup&&variant.optionLookup.length>1?variant.optionLookup[1].value:null,option3:variant.optionLookup&&variant.optionLookup.length>2?variant.optionLookup[2].value:null,options:variant.optionLookup?variant.optionLookup.map(x=>x.value):null,price:variant.price&&typeof variant.price.amount=="string"?{amount:parseFloat(variant.price.amount)}:variant.price});return variantResponse.defaultVariant||variantResponse.variantBySelectedOptions?{defaultVariant:variantResponse.defaultVariant?mapVariant(variantResponse.defaultVariant):null,variantBySelectedOptions:variantResponse.variantBySelectedOptions?mapVariant(variantResponse.variantBySelectedOptions):null}:null}return null}}class PrintessShopifyCart{constructor(printessSettings){this.onFirstPageImageToken="",this.settings=printessSettings,this.shopifyApi=new PrintessShopifyGraphQlApi(printessSettings.graphQlToken)}async initialize(productId){if((!this.product||this.product.id!==productId)&&(this.product=await this.shopifyApi.getProductById(productId,!0),!this.product)){console.error("Unable to load produt with id "+productId.toString());return}}static sleepAsync(timeoutMs){return new Promise(resolve=>setTimeout(resolve,timeoutMs))}async getVariantForFormFields(formFields=null){if(!formFields)formFields=this.basketItemVariantOptions;else{const variantOptionNameLookup={};this.product&&this.product.productOptions&&this.product.productOptions.forEach(x=>variantOptionNameLookup[x.name]=!0);const filteredFormFields={};for(const ffName in formFields)formFields.hasOwnProperty(ffName)&&variantOptionNameLookup[ffName]&&(filteredFormFields[ffName]=formFields[ffName]);formFields=filteredFormFields}if(!this.product||!formFields)return null;let variants=this.variantCache;for(const optionName in formFields)formFields.hasOwnProperty(optionName)&&(variants=variants.filter(x=>x.optionLookup&&x.optionLookup.filter(y=>y.name===optionName&&y.value===formFields[optionName]).length>0));if(variants.length===0){const variants2=await this.shopifyApi.GetProductVariantByOptions(this.product.id,formFields,this.defaultVariant===null);return variants2&&(variants2.defaultVariant&&(this.defaultVariant=variants2.defaultVariant),variants2.variantBySelectedOptions)?(this.variantCache=this.variantCache.concat(variants2.variantBySelectedOptions),variants2.variantBySelectedOptions):this.defaultVariant}else return variants[0]}handleTableQuantityVariants(formField,value,formFieldLabel,valueLabel){if(this.tableQuantityVariants.tableName===formField||this.tableQuantityVariants.tableName===formFieldLabel){try{const table=JSON.parse(value);table&&table.length>0&&(this.tableQuantityVariants.variants=[],table.forEach(row=>{const currentEntry={quantity:0,values:{}};for(const property in row)row.hasOwnProperty(property)&&(property===this.tableQuantityVariants.quantityColumnName?currentEntry.quantity=parseInt(row[property]||"0"):currentEntry.values[property]=row[property]);this.tableQuantityVariants.variants.push(currentEntry)}))}catch(e){console.error(e)}return!0}return!1}async splitSaveToken(showParams,saveToken,quantityColumnName){let thumbnailWidth=0,thumbnailHeight=0,intValue=0;showParams.additionalAttachParams&&(typeof showParams.additionalAttachParams.basketThumbnailMaxWidth<"u"&&showParams.additionalAttachParams.basketThumbnailMaxWidth&&(intValue=parseInt(""+showParams.additionalAttachParams.basketThumbnailMaxWidth),!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(thumbnailWidth=intValue)),typeof showParams.additionalAttachParams.basketThumbnailMaxHeight<"u"&&showParams.additionalAttachParams.basketThumbnailMaxHeight&&(intValue=parseInt(""+showParams.additionalAttachParams.basketThumbnailMaxHeight),!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(thumbnailHeight=intValue)));const response=await fetch("https://api.printess.com/shop/savetoken/split",{method:"POST",redirect:"follow",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.settings.shopToken}`},body:JSON.stringify({saveToken,zeroCheckFieldName:quantityColumnName,width:thumbnailWidth,height:thumbnailHeight})});return response.ok?await response.json():(console.error("Unable to split save token: ["+response.status+"] "+response.statusText),[])}static mapRecord(record,callback){const ret={};if(record){for(const property in record)if(record.hasOwnProperty(property)){const result=callback(property,record[property]);result&&(ret[result.key]=result.value)}}return ret}isProductOption(optionName){return this.product&&this.product.productOptions?this.product.productOptions.filter(x=>x.name===optionName).length>0:!1}async addTableQuantityItems(settings,saveToken,thumbnailUrl){const that=this,additionalLineItemProperties=this.cartItemConfig.additionalSettings?{...this.cartItemConfig.additionalSettings}:{};this.cartItemConfig.tableQuantityField&&this.tableQuantityVariants&&this.tableQuantityVariants.tableName&&(additionalLineItemProperties.tableQuantityField=this.cartItemConfig.tableQuantityField);const values=await this.splitSaveToken(settings,saveToken,this.tableQuantityVariants.quantityColumnName),basketItems=[];for(let i=0;i<values.length;++i){const value=values[i],currentVariantValues={...this.basketItemOptions,...this.basketItemVariantOptions,...value.dataRow},basketItemProperties={...PrintessShopifyCart.mapRecord(currentVariantValues,(key,value2)=>{const namesToIgnore=["quantity","fix","newsletter"],ret={key,value:value2};return(key||"").startsWith("contact[")||namesToIgnore.includes((key||"").toLowerCase())||this.isProductOption(key)?null:ret}),_printessSaveToken:value.saveToken,_printessThumbnail:value.previewUrl,_printessProductDefinitionId:""+this.cartItemConfig.productDefinitionId,_printessOutputType:""+this.cartItemConfig.outputType||"pdf",_printessOptionValueMappings:this.cartItemConfig.formFieldMappings,_printessDpi:""+this.cartItemConfig.outputDpi||"300",_printessAdditionalProperties:additionalLineItemProperties,_printessTheme:this.cartItemConfig.theme,_printessProductType:this.cartItemConfig.productType};let quantity=1;if(typeof value.dataRow[this.tableQuantityVariants.quantityColumnName]<"u"&&value.dataRow[this.tableQuantityVariants.quantityColumnName]){const intValue=parseInt(""+value.dataRow[this.tableQuantityVariants.quantityColumnName]||"1");!isNaN(intValue)&&isFinite(intValue)&&(quantity=intValue)}if(quantity>0){const valuesToWrite={id:(await this.getVariantForFormFields()).id,quantity,properties:basketItemProperties};basketItems.push(valuesToWrite)}}const result=await fetch("/cart/add",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:basketItems})});window.location.replace("/cart")}hasVariantRelatedOptions(){if(this.basketItemVariantOptions){for(const option in this.basketItemVariantOptions)if(this.basketItemVariantOptions.hasOwnProperty(option))return!0}return!1}async getBasketItemForSaveToken(saveToken){const result=await fetch("/cart.js",{headers:{"Content-Type":"application/json"}});if(!result||!result.ok)return result;const json=await result.json(),{items}=json;return items.find(item=>item.properties&&item.properties._printessSaveToken?item.properties&&item.properties._printessSaveToken===this.cartItemConfig.templateNameOrSaveToken:!1)}
87async addNewItemToBasket(saveToken,valuesToWrite,retries=0){const result=await fetch("/cart/add",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:[valuesToWrite]})});result.ok||(console.error("Unable to add item to basket: ["+result.status.toString()+"] "+result.statusText),retries>4?console.error("Unable to add item to basket giving up ("+saveToken+")"):(await PrintessShopifyCart.sleepAsync(250),await this.addNewItemToBasket(saveToken,valuesToWrite,retries+1)))}async deleteBasketItem(saveToken,retries=0){const basketItem=await this.getBasketItemForSaveToken(saveToken);if(typeof basketItem.ok<"u"&&!basketItem)console.error("Unable to delete item from basket: ["+basketItem.status.toString()+"] "+basketItem.statusText),retries>4?console.error("Unable to remove item from basket giving up ("+saveToken+")"):(await PrintessShopifyCart.sleepAsync(250),await this.deleteBasketItem(saveToken,retries+1));else if(basketItem){const{key}=basketItem,result=await fetch("/cart/change.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:key,quantity:0})});(!result||!result.ok)&&(console.error("!Unable to delete item from basket: ["+basketItem.status.toString()+"] "+basketItem.statusText),retries>4?console.error("!Unable to remove item from basket giving up ("+saveToken+")"):(await PrintessShopifyCart.sleepAsync(250),await this.deleteBasketItem(saveToken,retries+1)))}}async replaceBasketItem(settings,saveToken,thumbnailUrl){const namesToIgnore=["fix","newsletter"];if(this.cartItemConfig.tableQuantityField&&this.tableQuantityVariants){await this.addTableQuantityItems(settings,saveToken,thumbnailUrl),settings.keepOriginalBasketItem||await this.deleteBasketItem(this.cartItemConfig.templateNameOrSaveToken);return}const selectedVariant=await this.getVariantForFormFields(),basketItem=await this.getBasketItemForSaveToken(this.cartItemConfig.templateNameOrSaveToken);(!basketItem||typeof basketItem.ok<"u"&&!basketItem.ok)&&console.error("Could not find basket item for save token "+this.cartItemConfig.templateNameOrSaveToken);let basketItemProperties={...basketItem.properties?basketItem.properties:{}};if(settings.basketItemOptions)for(let property in settings.basketItemOptions)!property.startsWith("contact[")&&!namesToIgnore.includes(property)&&basketItemProperties&&basketItemProperties.hasOwnProperty(property)&&settings.basketItemOptions.hasOwnProperty(property)&&(basketItemProperties[property]=settings.basketItemOptions[property]);const additionalProperties=this.cartItemConfig.additionalSettings?this.cartItemConfig.additionalSettings:{};additionalProperties.deletedBasketItem=this.cartItemConfig.templateNameOrSaveToken,basketItemProperties={...basketItemProperties,_printessSaveToken:saveToken,_printessThumbnail:thumbnailUrl,_printessProductDefinitionId:""+this.cartItemConfig.productDefinitionId,_printessOutputType:""+this.cartItemConfig.outputType||"pdf",_printessOptionValueMappings:this.cartItemConfig.formFieldMappings,_printessDpi:""+this.cartItemConfig.outputDpi||"300",_printessAdditionalProperties:JSON.stringify(additionalProperties),_printessTheme:this.cartItemConfig.theme,_printessProductType:this.cartItemConfig.productType};let quantity=typeof settings.quantity<"u"&&settings.quantity>1?settings.quantity:1;if(this.cartItemConfig.basketItemId){const temp=PrintessShopifyCart.readBasketItemQuantityInput(this.cartItemConfig.basketItemId);temp!=null&&(quantity=temp)}const valuesToWrite={id:basketItem.id,quantity,properties:basketItemProperties};this.hasVariantRelatedOptions()&&(valuesToWrite.id=selectedVariant.id);const price=selectedVariant.price.amount,globalSettings=PrintessEditor.getGlobalShopSettings(),callbackParams={lastSaveToken:this.lastSaveToken,initialSaveToken:this.initialSaveToken,originalSaveToken:this.originalSaveToken,selectedVariant:await this.getVariantForFormFields(),formFieldValues:basketItemProperties,basketItemId:settings.basketItemId||null,product:this.product};if(typeof settings.onAddToBasket=="function")try{settings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}if(typeof globalSettings.onAddToBasket=="function")try{globalSettings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}if(typeof globalSettings.getPriceForFormFields=="function")try{const newPrice=globalSettings.getPriceForFormFields(basketItemProperties,price,callbackParams);typeof newPrice=="number"&&newPrice!=price&&(valuesToWrite[price]=newPrice)}catch(e){console.error(e)}await this.addNewItemToBasket(saveToken,valuesToWrite),settings.keepOriginalBasketItem||await this.deleteBasketItem(this.cartItemConfig.basketItemId),window.location.replace("/cart")}createShopContext(showSettings){const that=this,conf=PrintessEditor&&PrintessEditor.getGlobalShopSett
87ings?PrintessEditor.getGlobalShopSettings():{},attachParams=showSettings.additionalAttachParams?showSettings.additionalAttachParams:{},context={templateNameOrSaveToken:that.cartItemConfig.templateNameOrSaveToken,stickers:[],legalText:showSettings.legalText||"",legalTextUrl:showSettings.legalTextUrl||"",snippetPrices:[],chargeEachStickerUsage:!1,hidePricesInEditor:typeof this.settings.hidePricesInEditor<"u"&&this.settings.hidePricesInEditor===!0,showSplitterGridSizeButton:showSettings.showSplitterGridSizeButton,additionalAttachParams:attachParams,cameFromSave:!1,getProductName:function(){return typeof showSettings.displayProductName<"u"&&showSettings.displayProductName===!1?"":that.product&&that.product.title||""},getPriceInfo:function(){return null},getMergeTemplates:function(){let mergeTemplates=that.product.mergeTemplates?.value||showSettings.mergeTemplates||null;return mergeTemplates?typeof mergeTemplates=="string"?PrintessShopifyCart.parseMergeTemplates(mergeTemplates):mergeTemplates:[]},formatMoney:function(price){const format=that.settings.shopMoneyFormat?that.settings.shopMoneyFormat:"${{amount}}";let ret=PrintessShopifyCart.formatMoney(price*100,format);if(that.settings.priceDisplayElementSelector)try{const priceDisplay=document.querySelector(that.settings.priceDisplayElementSelector);priceDisplay&&(ret=priceDisplay.textContent)}catch(e){console.error(e)}return ret},onFormFieldChanged:function(formField,value,formFieldLabel,valueLabel){let optionFound=!1,formFieldChangedCallback=null;if(PrintessEditor&&PrintessEditor.getGlobalShopSettings){const settings=PrintessEditor.getGlobalShopSettings();typeof settings.onFormFieldChanged=="function"&&(formFieldChangedCallback=settings.onFormFieldChanged)}if(that.cartItemConfig.tableQuantityField){if(that.handleTableQuantityVariants(formField,value,formFieldLabel,valueLabel)&&formFieldChangedCallback)try{const callbackParams={selectedVariant:that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:showSettings.basketItemId||null,product:that.product};formFieldChangedCallback(formField,value,formFieldLabel,valueLabel,callbackParams)}catch(e){console.error(e)}return}if(that.basketItemVariantOptions)for(const itemName in that.basketItemVariantOptions)that.basketItemVariantOptions.hasOwnProperty(itemName)&&(itemName===formField?(optionFound=!0,that.basketItemVariantOptions[itemName]=value):itemName===formFieldLabel&&(optionFound=!0,that.basketItemVariantOptions[itemName]=valueLabel));if(that.basketItemOptions)for(const itemName in that.basketItemOptions)that.basketItemOptions.hasOwnProperty(itemName)&&(itemName===formField?(optionFound=!0,that.basketItemOptions[itemName]=value):itemName===formFieldLabel&&(optionFound=!0,that.basketItemOptions[itemName]=valueLabel));if(formFieldChangedCallback)try{const callbackParams={selectedVariant:that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:showSettings.basketItemId,product:that.product};formFieldChangedCallback(formField,value,formFieldLabel,valueLabel,callbackParams)}catch(e){console.error(e)}},onAddToBasket:function(saveToken,thumbnailUrl){that.originalSaveToken&&(that.cartItemConfig.additionalSettings||(that.cartItemConfig.additionalSettings={}),that.cartItemConfig.additionalSettings.originalSaveToken=that.originalSaveToken);const callbackParams={lastSaveToken:that.lastSaveToken,initialSaveToken:that.initialSaveToken,originalSaveToken:that.originalSaveToken,selectedVariant:that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:showSettings.basketItemId,product:that.product};try{typeof showSettings.onAddToBasket=="function"&&showSettings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}const conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onAddToBasket=="function"&&conf2.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}that.replaceBasketItem(showSettings,saveToken,thumbnailUrl).then(()=>{that.lastSaveToken=saveToken})},getCurrentFormFieldValues:function(){return{...that.basketItemVariantOptions,...that.basketItemOptions,cartItem:"true"}},getPriceForFormFieldsAsync:async formFields=>{let callback=null;
87if(PrintessEditor&&PrintessEditor.getGlobalShopSettings){const settings=PrintessEditor.getGlobalShopSettings();typeof settings.getPriceForFormFields=="function"&&(callback=settings.getPriceForFormFields)}if(that.cartItemConfig.tableQuantityField){let price=0;if(that.tableQuantityVariants)for(let i=0;i<that.tableQuantityVariants.variants.length;++i){const tableVariant=that.tableQuantityVariants.variants[i],variantValues={...formFields,...tableVariant.values},variant=await that.getVariantForFormFields(variantValues);price+=variant.price.amount*tableVariant.quantity}if(callback)try{const callbackParams={lastSaveToken:that.lastSaveToken,initialSaveToken:that.initialSaveToken,originalSaveToken:that.originalSaveToken,selectedVariant:await that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:showSettings.basketItemId||null,product:that.product};return callback(formFields,price,callbackParams)}catch(e){console.error(e)}return price}else{const variant=await that.getVariantForFormFields(),callbackParams={selectedVariant:variant,formFieldValues:formFields,basketItemId:showSettings.basketItemId||null,product:that.product};if(callback)try{return callback(formFields,variant.price.amount,callbackParams)}catch(e){console.error(e)}return variant.price.amount}},getFormFieldMappings:function(){let ret={};if(context.__ffMappings)return context.__ffMappings;const formFieldMappings=that.cartItemConfig.formFieldMappings||that.product.optionNameMapping?.value||"";if(formFieldMappings)try{let mappings;try{mappings=JSON.parse(formFieldMappings)}catch{var txt=document.createElement("textarea");txt.innerHTML=formFieldMappings,mappings=JSON.parse(txt.value)}mappings&&typeof mappings!="string"&&typeof mappings!="number"&&!Array.isArray(mappings)&&typeof mappings!="boolean"&&typeof mappings=="object"&&(ret=mappings,context.__ffMappings=ret)}catch{}return ret},onRenderFirstPageImageAsync:async thumbnailUrl=>{if(context.cameFromSave&&that.onFirstPageImageToken){try{await context.onSaveAsync(that.onFirstPageImageToken,thumbnailUrl,!0)}catch(e){console.error(e)}that.onFirstPageImageToken="",context.cameFromSave=!1}},onSaveAsync:async(saveToken,thumbnailUrl,cameFromFirstpageImage=!1)=>{if(context.cameFromSave=!0,!cameFromFirstpageImage&&typeof context.renderFirstPageImageAsync=="function"){let maxThumbnailWidth=400,maxThumbnailHeight=400;if(showSettings.additionalAttachParams){if(typeof showSettings.additionalAttachParams.basketThumbnailMaxWidth<"u"&&showSettings.additionalAttachParams.basketThumbnailMaxWidth){const intValue=parseInt(""+showSettings.additionalAttachParams.basketThumbnailMaxWidth);!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(maxThumbnailWidth=intValue)}if(typeof showSettings.additionalAttachParams.basketThumbnailMaxHeight<"u"&&showSettings.additionalAttachParams.basketThumbnailMaxHeight){const intValue=parseInt(""+showSettings.additionalAttachParams.basketThumbnailMaxHeight);!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(maxThumbnailHeight=intValue)}}that.onFirstPageImageToken=saveToken,await context.renderFirstPageImageAsync(maxThumbnailWidth,maxThumbnailHeight)}else{const callbackParams={lastSaveToken:that.lastSaveToken,initialSaveToken:that.initialSaveToken,originalSaveToken:that.originalSaveToken,selectedVariant:await that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:that.cartItemConfig.basketItemId||null,product:that.product,templateNameOrSaveToken:that.cartItemConfig.templateNameOrSaveToken};try{typeof showSettings.onSave=="function"&&showSettings.onSave(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}const conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onSave=="function"&&conf2.onSave(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}that.lastSaveToken=saveToken}},onLoadAsync:async currentTemplateNameOrSaveToken=>{const callbackParams={lastSaveToken:that.lastSaveToken,initialSaveToken:that.initialSaveToken,originalSaveToken:that.originalSaveToken,selectedVariant:await that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:that.cartItemConfig.basketItemId||null,product:that.product}
87,conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onLoad=="function"&&conf2.onLoad(currentTemplateNameOrSaveToken,callbackParams)}catch(e){console.error(e)}},onLoadedAsync:async currentTemplateNameOrSaveToken=>{const callbackParams={lastSaveToken:that.lastSaveToken,initialSaveToken:that.initialSaveToken,originalSaveToken:that.originalSaveToken,selectedVariant:await that.getVariantForFormFields(),formFieldValues:{...that.basketItemOptions,...that.basketItemVariantOptions},basketItemId:that.cartItemConfig.basketItemId||null,product:that.product},conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onLoaded=="function"&&conf2.onLoaded(currentTemplateNameOrSaveToken,callbackParams)}catch(e){console.error(e)}}};return context}static parseMergeTemplates(valueString){let ret=null;if(!valueString)return ret;try{const json=JSON.parse(valueString);typeof json=="string"?ret=[{templateName:json,mergeMode:"layout-snippet-no-repeat"}]:Array.isArray(json)?ret=json:ret=[json]}catch{ret=[{templateName:valueString,mergeMode:"layout-snippet-no-repeat"}]}return ret&&ret.forEach(x=>{x.mergeMode||(x.mergeMode="layout-snippet-no-repeat")}),ret}static parseBasketItemConfig(product,basketItemOptions,unknownSettings,variantSettings){const basketItemConfig={templateNameOrSaveToken:null,productDefinitionId:null,outputType:null,outputDpi:null,formFieldMappings:null,theme:null,additionalSettings:null,tableQuantityField:null,basketItemId:null},variantOptionNameLookup={};if(product&&product.productOptions&&product.productOptions.forEach(x=>variantOptionNameLookup[x.name]=!0),basketItemOptions){for(const prop in basketItemOptions)if(basketItemOptions.hasOwnProperty(prop)){const value=basketItemOptions[prop]||"";switch(prop){case"_printessSaveToken":{basketItemConfig.templateNameOrSaveToken=value;break}case"_printessThumbnailUrl":break;case"_printessProductDefinitionId":{basketItemConfig.productDefinitionId=parseInt(value||"-1"),(isNaN(basketItemConfig.productDefinitionId)||!isFinite(basketItemConfig.productDefinitionId))&&(basketItemConfig.productDefinitionId=-1);break}case"_printessOutputType":{basketItemConfig.outputType=value||"pdf";break}case"_printessDpi":{basketItemConfig.outputDpi=parseInt(value||"300"),(isNaN(basketItemConfig.outputDpi)||!isFinite(basketItemConfig.outputDpi))&&(basketItemConfig.outputDpi=300);break}case"_printessOptionValueMappings":{basketItemConfig.formFieldMappings=value;break}case"_printessTheme":{!basketItemConfig.theme&&value&&(basketItemConfig.theme=value);break}case"_printessProductType":{!basketItemConfig.productType&&value&&(basketItemConfig.productType=value);break}case"_printessAdditionalProperties":{try{basketItemConfig.additionalSettings=typeof value=="string"?JSON.parse(value):value}catch{var txt=document.createElement("textarea");txt.innerHTML=value,basketItemConfig.additionalSettings=typeof value=="string"?JSON.parse(txt.value):value}if(basketItemConfig.additionalSettings)for(const settingName in basketItemConfig.additionalSettings)basketItemConfig.additionalSettings.hasOwnProperty(settingName)&&settingName==="tableQuantityField"&&(basketItemConfig.tableQuantityField=basketItemConfig.additionalSettings[settingName]);break}default:variantOptionNameLookup[prop]?variantSettings[prop]=value:unknownSettings[prop]=value}}}return basketItemConfig}static formatMoney(cents,format){typeof cents=="string"&&(cents=parseInt(cents.replace(".","")));var value="",placeholderRegex=/\{\{\s*(\w+)\s*\}\}/,formatString=format;function defaultOption(opt,def){return typeof opt>"u"||opt===null?def:opt}function formatWithDelimiters(number,precision,thousands=null,decimal=null){if(precision=defaultOption(precision,2),thousands=defaultOption(thousands,","),decimal=defaultOption(decimal,"."),isNaN(number)||number==null)return"0";var parts=(number/100).toFixed(precision).split("."),dollars=parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+thousands),cents2=parts[1]?decimal+parts[1]:"";return dollars+cents2}switch(formatString.match(placeholderRegex)[1]){case"amount":value=formatWithDelimiters(cents,2);break;case"amount_no_decimals":value=formatWithDelimiters(cents,0);break;case"amount_with_comma_separator":value=formatWithDelimiters(cents,2,".",",");break;case"amount_no_decimals_with_comma_separator":value=formatWithDelimiters(cents,0,".",",");break}return formatString.replace(placeholderRegex,value)}static parseTableQuantityField(fieldName){const ret={tableName:fieldName||"",quantityColumn:""};if(fieldName){const ptPos=fieldName.indexOf(".");ptPos>=0&&ptPos<fieldName.length&&(ret.tableName=fieldName.substring(0,ptPos),ptPos<fieldName.length-1&&(ret.quantityColumn=fieldName.substring(ptPos+1)))}return ret}static readBasketItemQuantityInput(basketItemId){const customizeButton=document.getElementById("printessCustomizeButton"+(basketItemId||"").toString().replace(":","_"));
87if(!customizeButton)return null;const parent=customizeButton.closest(".cart-item");if(!parent)return null;const input=parent.querySelector("input.quantity__input");return input?parseInt(input.getAttribute("value")):null}initTableQuantityVariants(settings){if(this.cartItemConfig.tableQuantityField){const names=PrintessShopifyCart.parseTableQuantityField(this.cartItemConfig.tableQuantityField);if(names.quantityColumn){let quantity=PrintessShopifyCart.readBasketItemQuantityInput(settings.basketItemId);this.tableQuantityVariants={tableName:names.tableName,quantityColumnName:names.quantityColumn,variants:[{quantity,values:{...this.basketItemOptions,...this.basketItemVariantOptions}}]}}}}async show(showSettings){if(await this.initialize(showSettings.productId),!this.product){console.error("Printess integration not initialized properly.");return}this.basketItemOptions={},this.basketItemVariantOptions={},this.variantCache=[],this.defaultVariant=null,this.tableQuantityVariants=null,this.lastSaveToken="",this.originalSaveToken="",this.cartItemConfig=PrintessShopifyCart.parseBasketItemConfig(this.product,showSettings.basketItemOptions,this.basketItemOptions,this.basketItemVariantOptions)||{},this.cartItemConfig.basketItemId=showSettings.basketItemId,this.initialSaveToken=this.cartItemConfig.templateNameOrSaveToken&&this.cartItemConfig.templateNameOrSaveToken.indexOf("st:")===0?this.cartItemConfig.templateNameOrSaveToken:"",this.initTableQuantityVariants(showSettings),showSettings.theme&&(this.cartItemConfig.theme=showSettings.theme);const context=this.createShopContext(showSettings);this.cartItemConfig.additionalSettings&&this.cartItemConfig.additionalSettings.originalSaveToken?this.originalSaveToken=this.cartItemConfig.additionalSettings.originalSaveToken:this.initialSaveToken&&(this.originalSaveToken=this.initialSaveToken),typeof window.initPrintessEditor=="function"?window.initPrintessEditor(this.settings).show(context):typeof initPrintessEditor=="function"&&initPrintessEditor(this.settings).show(context)}static async deleteUndeletedBasketItem(){if(!PrintessShopifyCart.deleteUndeletedBasketItem.running)PrintessShopifyCart.deleteUndeletedBasketItem.running=!0;else return;const result=await fetch("/cart.js",{headers:{"Content-Type":"application/json"}});if(!result||!result.ok){console.error("Unable to retrieve basket items");return}const json=await result.json();let{items}=json;items=items.filter(item=>item.properties&&item.properties._printessSaveToken?item.properties&&item.properties._printessSaveToken:!1);const saveTokensToDelete={};items.forEach(x=>{if(x.properties&&x.properties._printessAdditionalProperties){try{x.properties._printessAdditionalProperties=typeof x.properties._printessAdditionalProperties=="string"?JSON.parse(x.properties._printessAdditionalProperties):x.properties._printessAdditionalProperties}catch{var txt=document.createElement("textarea");txt.innerHTML=x.properties._printessAdditionalProperties,x.properties._printessAdditionalProperties=typeof x.properties._printessAdditionalProperties=="string"?JSON.parse(txt.value):x.properties._printessAdditionalProperties}x.properties._printessAdditionalProperties.deletedBasketItem&&(saveTokensToDelete[x.properties._printessAdditionalProperties.deletedBasketItem]=!0)}});for(let i=0;i<items.length;++i)if(items[i].properties&&items[i].properties._printessSaveToken&&saveTokensToDelete[items[i].properties._printessSaveToken]){const result2=await fetch("/cart/change.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:items[i].key,quantity:0})});result2.ok||console.error("Unable to delete basket item "+items[i].properties._printessSaveToken+"["+result2.status.toString()+"] "+result2.statusText),window.location.replace("/cart");break}}}const showPrintessEditorFallback=(itemId,loopCount=0,keepOriginalBasketItem=!1)=>{const showMethodName1="openPrintessEditor"+itemId,showMethodName2="showPrintessEditor"+itemId;if(typeof window[showMethodName1]>"u"&&typeof window[showMethodName2]>"u"){const scriptTag=document.getElementById("printess_script_"+itemId);if(scriptTag){const newTag=document.createElement("script");newTag.setAttribute("id","printess_script_"+itemId),newTag.type="text/javascript",newTag.text=scriptTag.text,scriptTag.replaceWith(newTag),loopCount<10?setTimeout(function(){showPrintessEditorFallback(itemId,++loopCount,keepOriginalBasketItem)},200):console.error(showMethodName1+"/"+showMethodName2+" not found.")}}else typeof window[showMethodName1]<"u"&&window[showMethodName1](keepOriginalBasketItem),typeof window[showMethodName2]<"u"&&window[showMethodName2](null,keepOriginalBasketItem)},initPrintessShopifyEditor=printessSettings=>{if(typeof window.printessShopifyEditor>"u"){const addToBasketButtonSelector=printessSettings&&printessSettings.productButtonSelector?printessSettings.productButtonSelector:'button[type="submit"][name="add"], button.product-form__add-button[data-action="add-to-cart"],button#AddToCart',editor={productCache:{},productFormSelector:printessSettings&&printessSettings.productFormSelector?printessSettings.productFormSelector:'form[data-type="add-to-cart-form"],form.product-single__form,form.shopify-product-form[id^=product-form-template],form[action="/cart/add"]',tableQuantityVariants:null,lastSaveToken:"",initialSaveToken:"",originalSaveToken:"",onRenderFirstPageImageToken:"",ignoreDataOptionIndex:printessSettings&&typeof printessSettings.ignoreDataOptionIndex<"u"&&printessSettings.ignoreDataOptionIndex===!0,debounce:function(func,timeout=300){let timer;return(...args)=>{clearTimeout(timer),timer=setTimeout(()=>{func.apply(this,args)},timeout)}},mapOptionValue:(optionName,optionIndex,value,product)=>{let ret=null;
87if(product.optionDetails)for(let currentOption=0;currentOption<product.optionDetails.length;++currentOption){const option=product.optionDetails[currentOption];if((optionName===option.name||optionIndex===option.position)&&option.values){for(let currentValue=0;currentValue<option.values.length;++currentValue){const _value=option.values[currentValue];if(_value.name===value||_value.id===parseInt(value)){ret=_value.name;break}}break}if(ret!=null)break}return ret||value},evaluateInputName(product,name,dataOptionPosition,dataOptionName,dataOptionValueId){let _name=(dataOptionName||name||"").trim(),optionPosition=0;_name&&_name.length>2&&_name[_name.length-2]=="\r"&&_name[_name.length-2]==` 88`&&(_name=_name.substring(0,_name.length-2)),_name&&_name.length>1&&_name[_name.length-1]==` 89`&&(_name=_name.substring(0,_name.length-1));let hyphenIndex=-1;if(_name.length>2&&(hyphenIndex=_name.indexOf("-"))>0){const optionIndex=parseInt(_name.substring(hyphenIndex+1,_name.length));optionIndex>=0&&!isNaN(optionIndex)&&isFinite(optionIndex)&&(_name=_name.substring(0,hyphenIndex))}if(_name.indexOf("properties[")===0&&_name.lastIndexOf("]")===_name.length-1?_name=_name.substring(11,_name.length-1):_name.indexOf("options[")===0&&_name.lastIndexOf("]")===_name.length-1&&(_name=_name.substring(8,_name.length-1)),!dataOptionPosition&&_name&&product.options&&_name.indexOf("option")===0){const index=parseInt(_name.substring(6,_name.length));!isNaN(index)&&isFinite(index)&&index>0&&index<=product.options.length&&(optionPosition=index)}if(product&&product.optionDetails&&!dataOptionPosition&&optionPosition<1&&dataOptionValueId){typeof dataOptionValueId!="number"&&(dataOptionValueId=parseInt(dataOptionValueId));for(let i=0;i<product.optionDetails.length;++i){if(product.optionDetails[i].values){for(let j=0;j<product.optionDetails[i].values.length;++j)if(product.optionDetails[i].values[j].id===dataOptionValueId){optionPosition=i+1;break}}if(optionPosition>0)break}}if(dataOptionPosition){const index=parseInt(dataOptionPosition);!isNaN(index)&&isFinite(index)&&index>0&&index<=product.options.length&&(optionPosition=index)}return product.optionDetails&&optionPosition>0&&optionPosition<=product.options.length&&(_name=product.options[optionPosition-1]),_name},evaluateInputValue(product,optionName,optionIndex,value,dataOptionValueId){if(product.options&&optionName&&!optionIndex){for(let i=0;i<product.options.length;++i)if(product.options[i]===optionName){optionIndex=(i+1).toString();break}}if(product&&!optionIndex&&dataOptionValueId){typeof dataOptionValueId!="number"&&(dataOptionValueId=parseInt(dataOptionValueId));for(let i=0;i<product.optionDetails.length;++i){if(product.optionDetails[i].values){for(let j=0;j<product.optionDetails[i].values.length;++j)if(product.optionDetails[i].values[j].id===dataOptionValueId){optionIndex=(i+1).toString();break}}if(optionIndex)break}}if(product.options&&optionIndex){const index=parseInt(optionIndex);if(!isNaN(index)&&isFinite(index)&&index>0&&index<=product.options.length)return editor.mapOptionValue(optionName,index,value,product)}return value},getInputs(){const ret=[];return document.querySelectorAll('select,input[type="radio"]:checked,input[type="checkbox"]:checked,input[type="color"],input[type="date"],input[type="datetime-local"],input[type="email"],input[type="hidden"],input[type="month"],input[type="number"],input[type="password"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]').forEach(x=>{ret.push(x)}),ret},hasVariantRelatedOptions(product,selectedOptions){const variantRelatedOptions=editor.getProductOptionValuesForVariants(selectedOptions,product);for(const propertyName in variantRelatedOptions)if(variantRelatedOptions.hasOwnProperty(propertyName))return!0;return!1},getCurrentProductOptionValues:product=>{const ret={};if(PrintessEditor&&PrintessEditor.getGlobalFormFields){const globalFormFields=PrintessEditor.getGlobalFormFields();for(const property in globalFormFields)globalFormFields.hasOwnProperty(property)&&(ret[property]=globalFormFields[property])}
89if(editor.getInputs().forEach(input=>{let dataOptionPosition=input.getAttribute("data-option-position")||input.getAttribute("data-option-index"),dataOptionName=input.getAttribute("data-option-name")||input.getAttribute("data-name")||input.getAttribute("name")||input.getAttribute("aria-label")||input.getAttribute("data-index"),name=editor.evaluateInputName(product,input.getAttribute("name"),editor.ignoreDataOptionIndex?"":dataOptionPosition,dataOptionName,input.getAttribute("data-option-value-id")),value=editor.evaluateInputValue(product,name,editor.ignoreDataOptionIndex?"":dataOptionPosition,input.value,input.getAttribute("data-option-value-id"));const namesToIgnore=["form_type","utf8","id","product-id","section-id"];name&&name[0]!=="_"&&namesToIgnore.indexOf(name)===-1&&name.indexOf("printess")!==0&&(ret[name]=value)}),PrintessEditor&&PrintessEditor.getGlobalShopSettings){const settings=PrintessEditor.getGlobalShopSettings();if(typeof settings.filterFormFields=="function")try{return settings.filterFormFields(ret)}catch(e){console.error(e)}}return ret},getOptionsLookup:product=>{const optionLookup={};if(!product||!product.options)return optionLookup;for(let i=0;i<product.options.length;++i)optionLookup[product.options[i]]=i,optionLookup["option"+(i+1)]=i;return optionLookup},isProductOption:(product,optionaName)=>{const lowerName=(optionaName||"").toLowerCase();if(product||product.options){for(let i=0;i<product.options.length;++i)if((product.options[i]||"").toLowerCase()===lowerName)return!0}return!1},mapRecord:(record,callback)=>{const ret={};if(record){for(const property in record)if(record.hasOwnProperty(property)){const result=callback(property,record[property]);result&&(ret[result.key]=result.value)}}return ret},getProductOptionValuesForVariants:(productOptions,product)=>{const optionLookup=editor.getOptionsLookup(product),ret={};for(const optionName in productOptions)productOptions.hasOwnProperty(optionName)&&optionLookup[optionName]>=0&&(ret[optionName]=productOptions[optionName]);return ret},parseInputName:name=>{name=(name||"").trim();let hyphenIndex=-1;if(name.length>2&&(hyphenIndex=name.indexOf("-"))>0){const optionIndex=parseInt(name.substring(hyphenIndex+1,name.length));optionIndex>=0&&!isNaN(optionIndex)&&isFinite(optionIndex)&&(name=name.substring(0,hyphenIndex))}if(name&&name[name.length-1]==="]"){name=name.substr(0,name.length-1);const index=name.indexOf("[");index>-1&&(name=name.substr(index+1))}return name},addVariantChangeHandler:(product,variantChangeCallback)=>{const getFormFieldsKey=function(formFields){let ret="";for(const ffName in formFields)formFields.hasOwnProperty(ffName)&&(ret+=ffName+";"+formFields[ffName]+"_");return ret},triggerVariantChange=()=>{editor.debounce(()=>{const key=getFormFieldsKey(editor.getProductOptionValuesForVariants(editor.getCurrentProductOptionValues(product),product));editor.addVariantChangeHandler.lastValue!=key&&(editor.addVariantChangeHandler.lastValue=key,typeof variantChangeCallback=="function"&&variantChangeCallback(editor.getVariantByProductOptions(editor.getCurrentProductOptionValues(product),product,!0)))},100)()},form=editor.getAddToBasketForm(editor.productFormSelector);if(form){const inputs=[];form.querySelectorAll("input,select").forEach(x=>inputs.push(x)),document.querySelectorAll("input[form='"+form.getAttribute("id")+"'],select[form='"+form.getAttribute("id")+"']").forEach(x=>inputs.push(x)),inputs.forEach(x=>{(x.nodeName.toLowerCase()==="select"||(x.getAttribute("type")||"").toLowerCase()==="radio"||x.getAttribute("name")==="id"&&x.getAttribute("type")==="hidden")&&(x.setAttribute("printessAddedEventHandler","true"),x.addEventListener("change",triggerVariantChange),console.log("Name: "+x.name+"; node: "+x.nodeName+": type: "+x.getAttribute("type")))})}},getVariantByProductOptions:(formFields,product,returnDefaultVariantOnFail=!1)=>{const variantProductOptionValues=editor.getProductOptionValuesForVariants(formFields,product),optionLookup=editor.getOptionsLookup(product);let variants=product.variants;for(const x in variantProductOptionValues)if(variantProductOptionValues.hasOwnProperty(x)){let optionIndex=typeof optionLookup[x]<"u"&&optionLookup[x]>=0?optionLookup[x]:-1;optionIndex>-1&&(variants=variants.filter(variant=>{if(variant.options&&variant.options.length>optionIndex&&variant.options[optionIndex]==variantProductOptionValues[x]
89)return!0}))}if(variants.length===0){variants=product.variants;for(const x in variantProductOptionValues)variantProductOptionValues.hasOwnProperty(x)&&x.indexOf("option")===0&&(variants=variants.filter(variant=>{if(typeof variant[x]<"u"&&variant[x]===variantProductOptionValues[x])return!0}))}return variants.length===0&&!returnDefaultVariantOnFail?null:variants.length===0?product.variants[0]:variants[0]},postMessage:(cmd,properties)=>{const iFrame=document.getElementById("printess");iFrame&&setTimeout(function(){iFrame.contentWindow.postMessage({cmd,properties:properties||{}},"*")},0)},setFormFieldValue:(product,formField,value,formFieldLabel,valueLabel)=>{let inputs=document.querySelectorAll('input[type="radio"]');inputs&&inputs.length>0&&inputs.forEach(el=>{const dataOptionPosition=el.getAttribute("data-option-position")||el.getAttribute("data-option-index"),dataOptionName=el.getAttribute("data-option-name")||el.getAttribute("data-name")||el.getAttribute("name")||el.getAttribute("aria-label")||el.getAttribute("data-index"),initialName=editor.evaluateInputName(product,el.getAttribute("name"),editor.ignoreDataOptionIndex?"":dataOptionPosition,dataOptionName,el.getAttribute("data-option-value-id")),initialValue=editor.evaluateInputValue(product,initialName,editor.ignoreDataOptionIndex?"":dataOptionPosition,el.value,el.getAttribute("data-option-value-id"));let valueChanged=!1;(initialName===formField||initialName===formFieldLabel)&&(initialValue===value||initialValue===valueLabel?(!valueChanged&&!el.checked&&(valueChanged=!0),el.setAttribute("checked","true"),el.checked=!0):(!valueChanged&&el.checked===!0&&(valueChanged=!0),el.removeAttribute("checked"),el.checked=!1)),valueChanged&&el.dispatchEvent(new Event("change"))}),inputs=document.querySelectorAll("select"),inputs.forEach(el=>{const dataOptionPosition=el.getAttribute("data-option-position")||el.getAttribute("data-option-index"),dataOptionName=el.getAttribute("data-option-name")||el.getAttribute("data-name")||el.getAttribute("name")||el.getAttribute("aria-label")||el.getAttribute("data-index"),initialName=editor.evaluateInputName(product,el.getAttribute("name"),editor.ignoreDataOptionIndex?"":dataOptionPosition,dataOptionName,el.getAttribute("data-option-value-id"));let valueChanged=!1;if(el.options)for(let i=0;i<el.options.length;++i){const initialValue=editor.evaluateInputValue(product,initialName,editor.ignoreDataOptionIndex?"":dataOptionPosition,el.options[i].getAttribute("value"),el.getAttribute("data-option-value-id"));(initialName===formField||initialName===formFieldLabel)&&(initialValue===value||initialValue===valueLabel?(!valueChanged&&!el.options[i].selected&&(valueChanged=!0),el.options[i].setAttribute("selected","true"),el.options[i].selected=!0,el.setAttribute("value",value),el.value=initialValue===value?value:valueLabel):(!valueChanged&&el.options[i].selected===!0&&(valueChanged=!0),el.options[i].removeAttribute("selected"),el.options[i].selected=!1))}valueChanged&&el.dispatchEvent(new Event("change"))}),inputs=document.querySelectorAll('input[type="text"],input[type="color"],input[type="date"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="tel"],input[type="time"],input[type="url"],input[type="week"]'),inputs&&inputs.length>0&&inputs.forEach(el=>{const dataOptionPosition=el.getAttribute("data-option-position")||el.getAttribute("data-option-index"),dataOptionName=el.getAttribute("data-option-name")||el.getAttribute("data-name")||el.getAttribute("name")||el.getAttribute("aria-label")||el.getAttribute("data-index"),initialName=editor.evaluateInputName(product,el.getAttribute("name"),editor.ignoreDataOptionIndex?"":dataOptionPosition,dataOptionName,el.getAttribute("data-option-value-id")),initialValue=editor.evaluateInputValue(product,initialName,editor.ignoreDataOptionIndex?"":dataOptionPosition,el.value,el.getAttribute("data-option-value-id"));let valueChanged=!1;initialName===formField?(!valueChanged&&el.getAttribute("value")!==initialValue&&(valueChanged=!0),el.setAttribute("value",initialValue)):initialName===formFieldLabel&&(!valueChanged&&el.getAttribute("value")!==valueLabel&&(value
89Changed=!0),el.setAttribute("value",valueLabel)),valueChanged&&el.dispatchEvent(new Event("change"))})},setProductProperty:(settings,formField,value,formFieldLabel,valueLabel,useFallback=!1)=>{settings.basketItemOptions||(settings.basketItemOptions={});const formFieldName=useFallback?formFieldLabel:formField,formFieldValue=useFallback&&valueLabel||value;typeof settings.basketItemOptions[formFieldName]<"u"?settings.basketItemOptions[formFieldName]=formFieldValue:useFallback?settings.basketItemOptions[formField]=value:editor.setProductProperty(settings,formField,value,formFieldLabel,valueLabel,!0)},initProductPage:(initialTemplateName,product,variantMetaData)=>{const settings=PrintessEditor.getGlobalShopSettings();if(initialTemplateName===null)return;const showOrHideCustomizeButton=function(variant=null,initialCall=void 0){const selectedVariant=variant!==null?variant:editor.getVariantByProductOptions(editor.getCurrentProductOptionValues(product),product,!0);let templateNameToUse=initialTemplateName||"";selectedVariant&&selectedVariant.templateName&&(templateNameToUse=selectedVariant.templateName),settings&&settings.staticTemplateName&&(templateNameToUse=settings.staticTemplateName);const printessButton=window.document.getElementById("printessCustomizeButton"+product.id),showPrintessButton=!!(selectedVariant!==null&&!(typeof selectedVariant.available<"u"&&selectedVariant.available===!1)&&templateNameToUse);editor.showOrHideElement({elementSelector:'button[name="add"], button.product-form__add-button[data-action="add-to-cart"],button#AddToCart'},!showPrintessButton,"block"),editor.showOrHideElement({elementSelector:'button[type="button"].shopify-payment-button__button'},!showPrintessButton,"block"),printessButton&&(printessButton.style.display=showPrintessButton?"flex":"none",initialCall===!0&&(window["printessEditor"+product.id]=editor))};editor.addVariantChangeHandler(product,showOrHideCustomizeButton),settings.variantChangeEventName&&window.document.addEventListener(settings.variantChangeEventName,event=>{showOrHideCustomizeButton()}),showOrHideCustomizeButton(null,!0)},showOrHideElement:(elementSelector,show,displayValue="block",retryCount=10)=>{const settings=PrintessEditor.getGlobalShopSettings();if(retryCount<=0)return;let element=typeof elementSelector.elementId<"u"?window.document.getElementById(elementSelector.elementId):window.document.querySelectorAll(elementSelector.elementSelector);element&&typeof element.length<"u"&&(settings.handleMultipleAddButtons||(element.length>0?element=[element[0]]:element=null));for(let i=0;i<element.length;++i)element[i]&&(element[i].originalDisplayStyle||(element[i].originalDisplayStyle=element[i].style.display||displayValue),element[i].style.display=show?element[i].originalDisplayStyle:"none");(!element||element.length===0)&&setTimeout(function(){editor.showOrHideElement(elementSelector,show,displayValue,retryCount-1)},200)},parseTableQuantityField:fieldName=>{const ret={tableName:fieldName||"",quantityColumn:""};if(fieldName){const ptPos=fieldName.indexOf(".");ptPos>=0&&ptPos<fieldName.length&&(ret.tableName=fieldName.substring(0,ptPos),ptPos<fieldName.length-1&&(ret.quantityColumn=fieldName.substring(ptPos+1)))}return ret},initTableQuantityVariants:settings=>{if(settings.tableQuantityField){const names=editor.parseTableQuantityField(settings.tableQuantityField);if(names.quantityColumn){const currentValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product);let quantity=currentValues.quantity&&parseInt(currentValues.quantity)||1;typeof settings.basketItemId<"u"&&settings.basketItemId&&(quantity=editor.readBasketItemQuantityInput(settings.basketItemId)),editor.tableQuantityVariants={tableName:names.tableName,quantityColumnName:names.quantityColumn,variants:[{quantity,values:currentValues}]}}}},show:settings=>{const globalSettings=PrintessEditor.getGlobalShopSettings();if(globalSettings&&typeof globalSettings.onValidateEditorOpen=="function")try{if(!globalSettings.onValidateEditorOpen(settings))return}catch(e){console.error(e)}
89const shopContext=editor.createShopContext(settings);editor.lastSaveToken="",editor.originalSaveToken="",editor.initialSaveToken=settings.templateNameOrSaveToken&&settings.templateNameOrSaveToken.indexOf("st:")===0?settings.templateNameOrSaveToken:"",editor.initTableQuantityVariants(settings),settings.additionalLineItemProperties&&settings.additionalLineItemProperties.originalSaveToken?editor.originalSaveToken=settings.additionalLineItemProperties.originalSaveToken:editor.initialSaveToken&&(editor.originalSaveToken=editor.initialSaveToken),typeof window.initPrintessEditor=="function"?window.initPrintessEditor(printessSettings).show(shopContext):typeof initPrintessEditor=="function"&&initPrintessEditor(printessSettings).show(shopContext)},getAddToBasketForm(formSelector){const forms=document.querySelectorAll(formSelector),formsToConsider=[];for(let i=0;i<forms.length;++i)forms[i].querySelector('input[name="id"],select[name="id"]')&&formsToConsider.push(forms[i]);if(formsToConsider.length===1)return forms[0];const button=document.querySelector(addToBasketButtonSelector);let ret;if(button){const form=formsToConsider.forEach(form2=>{!ret&&form2.contains(button)&&(ret=form2)})}return ret||forms[0]},handleTableQuantityVariants:(formField,value,formFieldLabel,valueLabel)=>{if(editor.tableQuantityVariants.tableName===formField||editor.tableQuantityVariants.tableName===formFieldLabel){try{const table=JSON.parse(value);table&&table.length>0&&(editor.tableQuantityVariants.variants=[],table.forEach(row=>{const currentEntry={quantity:0,values:{}};for(const property in row)row.hasOwnProperty(property)&&(property===editor.tableQuantityVariants.quantityColumnName?currentEntry.quantity=parseInt(row[property]||"0"):currentEntry.values[property]=row[property]);editor.tableQuantityVariants.variants.push(currentEntry)}))}catch(e){console.error(e)}return!0}return!1},createShopContext:settings=>{const conf=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{},attachParams=settings.additionalAttachParams?settings.additionalAttachParams:{};if(conf&&conf.attachParams)for(const prop in conf.attachParams)conf.attachParams.hasOwnProperty(prop)&&(attachParams[prop]=conf.attachParams[prop]);const context={cameFromSave:!1,templateNameOrSaveToken:settings.templateNameOrSaveToken,stickers:[],legalText:settings.legalText||"",legalTextUrl:settings.legalUrl||"",snippetPrices:[],chargeEachStickerUsage:!1,hidePricesInEditor:typeof printessSettings.hidePricesInEditor<"u"&&printessSettings.hidePricesInEditor===!0,showSplitterGridSizeButton:settings.showSplitterGridSizeButton,additionalAttachParams:attachParams,getProductName:()=>typeof printessSettings.displayProductName<"u"&&printessSettings.displayProductName===!1?"":settings.product&&settings.product.name||"",getPriceInfo:()=>null,getFormFieldMappings:()=>{let ret={};if(context.__ffMappings)return context.__ffMappings;if(settings.optionValueMappings)try{let mappings;try{mappings=JSON.parse(settings.optionValueMappings)}catch{var txt=document.createElement("textarea");txt.innerHTML=settings.optionValueMappings,mappings=JSON.parse(txt.value)}mappings&&typeof mappings!="string"&&typeof mappings!="number"&&!Array.isArray(mappings)&&typeof mappings!="boolean"&&typeof mappings=="object"&&(ret=mappings,context.__ffMappings=ret)}catch{}return ret},getMergeTemplates:()=>settings.mergeTemplates?typeof settings.mergeTemplates=="string"?editor.parseMergeTemplates(settings.mergeTemplates):settings.mergeTemplates:[],formatMoney:price=>{const format=printessSettings.shopMoneyFormat?printessSettings.shopMoneyFormat:"${{amount}}";let ret=editor.formatMoney(price,format);if(settings.priceDisplayElementSelector)try{const priceDisplay=document.querySelector(settings.priceDisplayElementSelector);priceDisplay&&(ret=priceDisplay.textContent)}catch(e){console.error(e)}return ret},onFormFieldChanged:(formField,value,formFieldLabel,valueLabel)=>{let formFieldChangedCallback=null;if(PrintessEditor&&PrintessEditor.getGlobalShopSettings){const settings2=PrintessEditor.getGlobalShopSettings();typeof settings2.onFormFieldChanged=="function"&&(formFieldChangedCallback=settings2.onFormFieldChanged)}if(settings.tableQuantityField&&editor.handleTableQuantityVariants(formField,value,formFieldLabel,valueLabel)){if(formFieldChangedCallback)try{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product};formFieldChangedCallback(formField,value,formFieldLabel,valueLabel,callbackParams)}catch(e){console.error(e)}return}if(typeof settings.basketItemId<"u"?editor.setProductProperty(settings,formField,value,formFieldLabel,valueLabel):editor.setFormFieldValue(settings.product,formField,value,formFieldLabel,valueLabel),formFieldChangedCallback)try{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product};formFieldChangedCallback(formField,value,formFieldLabel,valueLabel,callbackParams)}catch(e){console.error(e)}},onAddToBasket:(saveToken,thumbnailUrl)=>{const isSave=typeof settings.basketItemId<"u";
89editor.originalSaveToken&&(settings.additionalLineItemProperties||(settings.additionalLineItemProperties={}),settings.additionalLineItemProperties.originalSaveToken=editor.originalSaveToken);const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product};try{typeof settings.onAddToBasket=="function"&&settings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}const conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onAddToBasket=="function"&&conf2.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}isSave?editor.replaceBasketItem(settings,saveToken,thumbnailUrl):editor.addNewItemToBasket(settings,saveToken,thumbnailUrl),editor.lastSaveToken=saveToken},getCurrentFormFieldValues:()=>{let ret;if(typeof settings.basketItemId<"u"&&settings.basketItemId.length>0?ret={cartItem:"true",...settings.basketItemOptions}:ret={cartItem:"false",...editor.getCurrentProductOptionValues(settings.product)},settings.tableQuantityField&&editor.tableQuantityVariants){const rows=[];
89editor.tableQuantityVariants.variants.forEach(variant=>{const value={...variant.values};value[editor.tableQuantityVariants.quantityColumnName]=variant.quantity,rows.push(value)}),ret[editor.tableQuantityVariants.tableName]=JSON.stringify(rows)}return ret},getPriceForFormFields:formFields=>{let callback=null;if(PrintessEditor&&PrintessEditor.getGlobalShopSettings){const settings2=PrintessEditor.getGlobalShopSettings();typeof settings2.getPriceForFormFields=="function"&&(callback=settings2.getPriceForFormFields)}if(settings.tableQuantityField){let price=0;if(editor.tableQuantityVariants&&editor.tableQuantityVariants.variants.forEach(tableVariant=>{const variantValues={...formFields,...tableVariant.values},variant=editor.getVariantByProductOptions(variantValues,settings.product,!0);price+=variant.price*tableVariant.quantity}),callback)try{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(formFields,settings.product,!0),formFieldValues:formFields,basketItemId:settings.basketItemId||null,product:settings.product};return callback(formFields,price,callbackParams)}catch(e){console.error(e)}return price}else{const variantRelevantOptions=editor.getProductOptionValuesForVariants(formFields,settings.product),variant=editor.getVariantByProductOptions(formFields,settings.product,!0),callbackParams={selectedVariant:variant,formFieldValues:formFields,basketItemId:settings.basketItemId||null,product:settings.product};if(callback)try{return callback(formFields,variant.price,callbackParams)}catch(e){console.error(e)}return variant.price}},getBasketId:()=>"Not yet implemented",onRenderFirstPageImage:thumbnailUrl=>{if(context.cameFromSave&&editor.onRenderFirstPageImageToken){try{context.onSave(editor.onRenderFirstPageImageToken,thumbnailUrl,!0)}catch(e){console.error(e)}context.cameFromSave=!1,editor.onRenderFirstPageImageToken=""}},onSave:(saveToken,thumbnailUrl,cameFromFirstpageImage=!1)=>{if(context.cameFromSave=!0,!cameFromFirstpageImage)editor.onRenderFirstPageImageToken=saveToken,editor.postMessage("renderFirstPageImage",null);else{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product,templateNameOrSaveToken:settings.templateNameOrSaveToken};try{typeof settings.onSave=="function"&&settings.onSave(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}const conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onSave=="function"&&conf2.onSave(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}editor.lastSaveToken=saveToken}},onLoad:(currentTemplateNameOrSaveToken,params)=>{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product},conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onLoad=="function"&&conf2.onLoad(currentTemplateNameOrSaveToken,callbackParams)}catch(e){console.error(e)}},onLoaded:(currentTemplateNameOrSaveToken,params)=>{const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(currentProductValues,settings.product,!0),formFieldValues:currentProductValues,basketItemId:settings.basketItemId||null,product:settings.product}
89,conf2=PrintessEditor&&PrintessEditor.getGlobalShopSettings?PrintessEditor.getGlobalShopSettings():{};try{conf2&&typeof conf2.onLoad=="function"&&conf2.onLoaded(currentTemplateNameOrSaveToken,callbackParams)}catch(e){console.error(e)}},editorClosed:closeButtonClicked=>{closeButtonClicked&&editor.addOrRemoveTextField(editor.productFormSelector,"",["printessSaveTokenEdit"+settings.product.id,"printessThumbnailEdit"+settings.product.id,"printessProductDefinitionIdEdit"+settings.product.id,"printessOutputTypeEdit"+settings.product.id,"printessDpiEdit"+settings.product.id,"printessOptionValueMappingsEdit"+settings.product.id,"printessProductTypeEdit"+settings.product.id,"printessThemeEdit"+settings.product.id,"printessAdditionalPropertiesEdit"+settings.product.id],"")}};if(!context.templateNameOrSaveToken){const currentVariant=editor.getVariantByProductOptions(context.getCurrentFormFieldValues(),settings.product,!1);currentVariant&¤tVariant.templateName&&(context.templateNameOrSaveToken=currentVariant.templateName)}return context},parseMergeTemplates:valueString=>{let ret=null;if(!valueString)return ret;try{const json=JSON.parse(valueString);typeof json=="string"?ret=[{templateName:json,mergeMode:"layout-snippet-no-repeat"}]:Array.isArray(json)?ret=json:ret=[json]}catch{ret=[{templateName:valueString,mergeMode:"layout-snippet-no-repeat"}]}return ret&&ret.forEach(x=>{x.mergeMode||(x.mergeMode="layout-snippet-no-repeat")}),ret},getProductByHandle:async function(productHandle){if(editor.productCache[productHandle])return editor.productCache[productHandle];let ret=null;return await fetch("/products/"+encodeURIComponent(productHandle)+".js").then(function(response){return response.json()}).then(function(product){const result={optionDetails:[],...product,name:product.title,options:product.options?product.options.map(x=>x.name):[]};editor.productCache[productHandle]=result,ret=result}),ret},formatMoney:(cents,format)=>{typeof cents=="string"&&(cents=parseInt(cents.replace(".","")));var value="",placeholderRegex=/\{\{\s*(\w+)\s*\}\}/,formatString=format;function defaultOption(opt,def){return typeof opt>"u"||opt===null?def:opt}function formatWithDelimiters(number,precision,thousands=null,decimal=null){if(precision=defaultOption(precision,2),thousands=defaultOption(thousands,","),decimal=defaultOption(decimal,"."),isNaN(number)||number==null)return"0";var parts=(number/100).toFixed(precision).split("."),dollars=parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+thousands),cents2=parts[1]?decimal+parts[1]:"";return dollars+cents2}switch(formatString.match(placeholderRegex)[1]){case"amount":value=formatWithDelimiters(cents,2);break;case"amount_no_decimals":value=formatWithDelimiters(cents,0);break;case"amount_with_comma_separator":value=formatWithDelimiters(cents,2,".",",");break;case"amount_no_decimals_with_comma_separator":value=formatWithDelimiters(cents,0,".",",");break}return formatString.replace(placeholderRegex,value)},addOrRemoveTextField:(formSelector,textFieldName,textFieldId,value)=>{if(value=typeof value!=null&&value!==null?""+value:"",Array.isArray(textFieldId))textFieldId.forEach(id=>{editor.addOrRemoveTextField(formSelector,textFieldName,id,value)});else{let button=document.getElementById(textFieldId);if(value){const form=typeof formSelector=="string"?editor.getAddToBasketForm(formSelector):formSelector;!button&&form&&(button=document.createElement("input"),button.setAttribute("id",textFieldId),button.setAttribute("name",textFieldName),button.setAttribute("type","hidden"),button.style.display="none",form.appendChild(button)),button&&button.setAttribute("value",value)}else button&&button.remove()}},splitSaveToken:async(showParams,saveToken,quantityColumnName)=>{let thumbnailWidth=0,thumbnailHeight=0,intValue=0;showParams.additionalAttachParams&&(typeof showParams.additionalAttachParams.basketThumbnailMaxWidth<"u"&&showParams.additionalAttachParams.basketThumbnailMaxWidth&&(intValue=parseInt(""+showParams.additionalAttachParams.basketThumbnailMaxWidth),!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(thumbnailWidth=intValue)),typeof showParams.additionalAttachParams.basketThumbnailMaxHeight<"u"&&showParams.additionalAttachParams.basketThumbnailMaxHeight&&(intValue=parseInt(""+showParams.additionalAttachParams.basketThumbnailMaxHeight),!isNaN(intValue)&&isFinite(intValue)&&intValue>-1&&(thumbnailHeight=intValue)));const response=await fetch("https://api.printess.com/shop/savetoken/split",{method:"POST",redirect:"follow",headers:{"Content-Type":"application/json",Authorization:`Bearer ${printessSettings.shopToken}`},body:JSON.stringify({saveToken,zeroCheckFieldName:quantityColumnName,width:thumbnailWidth,height:thumbnailHeight})});return response.ok?await response.json():(console.error("Unable to split save token: ["+response.status+"] "+response.statusText),[])},addTableQuantityItems(settings,saveToken,thumbnailUrl){const currentProductValues=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),additionalLineItemProperties=settings.additionalLineItemProperties?{...settings.additionalLineItemProperties}:{};settings.tableQuantityField&&editor.tableQuantityVariants&&editor.tableQuantityVariants.tableName&&(additionalLineItemProperties.tableQuantityField=settings.tableQuantityField),editor.splitSaveToken(settings,saveToken,editor.tableQuantityVariants.quantityColumnName).then(values=>{const basketItems=[];
89values.forEach(value=>{const currentVariantValues={...currentProductValues,...value.dataRow},currentVariant=editor.getVariantByProductOptions(currentVariantValues,settings.product,!0),basketItemProperties={...editor.mapRecord(currentVariantValues,(key,value2)=>{const namesToIgnore=["quantity","fix","newsletter"],ret={key,value:value2};return(key||"").startsWith("contact[")||namesToIgnore.includes((key||"").toLowerCase())||editor.isProductOption(settings.product,key)?null:ret}),_printessSaveToken:value.saveToken,_printessThumbnail:value.previewUrl,_printessProductDefinitionId:""+settings.productDefinitionId,_printessOutputType:""+settings.outputFormat||"pdf",_printessOptionValueMappings:settings.optionValueMappings,_printessDpi:""+settings.outputDpi||"300",_printessAdditionalProperties:additionalLineItemProperties};let quantity=1;if(typeof value.dataRow[editor.tableQuantityVariants.quantityColumnName]<"u"&&value.dataRow[editor.tableQuantityVariants.quantityColumnName]){const intValue=parseInt(""+value.dataRow[editor.tableQuantityVariants.quantityColumnName]||"1");!isNaN(intValue)&&isFinite(intValue)&&(quantity=intValue)}if(quantity>0){const valuesToWrite={id:currentVariant.id,quantity,properties:basketItemProperties};basketItems.push(valuesToWrite)}}),fetch("/cart/add",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:basketItems})}).then(()=>{window.location.replace("/cart")})})},addNewItemToBasket:(settings,saveToken,thumbnailUrl)=>{if(settings&&settings.legacyAddToBasket===!0){const selectedOptions2=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product),variantRelatedOptions=editor.getProductOptionValuesForVariants(selectedOptions2,settings.product),selectedVariant=editor.getVariantByProductOptions(variantRelatedOptions,settings.product,!0);let basketItemProperties=settings.basketItemOptions?Object.assign({},settings.basketItemOptions):{};basketItemProperties=Object.assign(Object.assign({},basketItemProperties),{_printessSaveToken:saveToken,_printessThumbnail:thumbnailUrl,_printessProductDefinitionId:""+settings.productDefinitionId,_printessOutputType:""+settings.outputFormat||"pdf",_printessDpi:""+settings.outputDpi||"300"});const items=[{id:selectedVariant?selectedVariant.id:settings&&settings.product&&settings.product.variants&&settings.product.variants.length>0?settings.product.variants[0].id:settings.product.id,quantity:typeof settings.quantity<"u"&&settings.quantity>1?settings.quantity:1,properties:basketItemProperties}];fetch("/cart/add",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items})}).then(()=>{window.location.replace("/cart")});return}if(settings.tableQuantityField&&editor.tableQuantityVariants){editor.addTableQuantityItems(settings,saveToken,thumbnailUrl);return}editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessSaveToken]","printessSaveTokenEdit"+settings.product.id,saveToken),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessThumbnail]","printessThumbnailEdit"+settings.product.id,thumbnailUrl),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessProductDefinitionId]","printessProductDefinitionIdEdit"+settings.product.id,settings.productDefinitionId),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessOutputType]","printessOutputTypeEdit"+settings.product.id,""+settings.outputFormat||"pdf"),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessDpi]","printessDpiEdit"+settings.product.id,""+settings.outputDpi||"300"),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessOptionValueMappings]","printessOptionValueMappingsEdit"+settings.product.id,""+settings.optionValueMappings||""),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessProductType]","printessProductTypeEdit"+settings.product.id,settings.productType||""),editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessTheme]","printessThemeEdit"+settings.product.id,printessSettings.theme||""),settings.additionalLineItemProperties&&editor.addOrRemoveTextField(editor.productFormSelector,"properties[_printessAdditionalProperties]","printessAdditionalPropertiesEdit"+settings.product.id,JSON.stringify(settings.additionalLineItemProperties)||"");const selectedOptions=typeof settings.basketItemId<"u"&&settings.basketItemId?settings.basketItemOptions:editor.getCurrentProductOptionValues(settings.product);if(editor.hasVariantRelatedOptions(settings.product,selectedOptions)){const variantRelatedOptions=editor.getProductOptionValuesForVariants(selectedOptions,settings.product),selectedVariant=editor.getVariantByProductOptions(variantRelatedOptions,settings.product,!0);if(selectedVariant){const productForm=editor.getAddToBasketForm(editor.productFormSelector);let idSelectList;if(productForm&&(idSelectList=productForm.querySelectorAll("select[name='id']")),(!idSelectList||idSelectList.length===0)&&(idSelectList=document.querySelectorAll("select[name='id']")),idSelectList&&idSelectList.length>0){const idSelect=idSelectList[0];idSelect.value=selectedVariant.id.toString(),idSelect.setAttribute("value",selectedVariant.id.toString());for(let i=0;i<idSelect.options.length;++i)idSelect.options[i].selected=idSelect.options[i].getAttribute("value")===selectedVariant.id.toString()}
89else{let idInputs=null;productForm&&productForm.length>0&&(idInputs=productForm.querySelectorAll("input[name='id']")),(!idInputs||idInputs.length===0)&&(idInputs=document.querySelectorAll("input[name='id']")),idInputs&&idInputs.length>0&&idInputs.forEach(idInput=>{idInput.setAttribute("value",selectedVariant.id.toString())})}}}const addToBasketButton=document.querySelector(addToBasketButtonSelector);addToBasketButton&&addToBasketButton.click()},deleteBasketItem:async settings=>{const cartItems=await fetch("/cart.js",{headers:{"Content-Type":"application/json"}});if(!cartItems.ok){console.error("Unable to load read cart items: ["+cartItems.status+"] "+cartItems.statusText);return}const curr=(await cartItems.json()).items.find(item=>item.properties&&item.properties._printessSaveToken?item.properties&&item.properties._printessSaveToken===settings.templateNameOrSaveToken:item.id===(settings&&settings.product&&settings.product.variants&&settings.product.variants.length>0?settings.product.variants[0].id:settings.product.id));if(curr){const{key}=curr,deleted=await fetch("/cart/change.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:key,quantity:0})});deleted.ok||console.error("Unable to delete cart item with id "+settings.basketItemId+": ["+deleted.status+"] "+deleted.statusText)}else console.error("Could not find basket item with id "+settings.basketItemId)},replaceBasketItem:(settings,saveToken,thumbnailUrl)=>{if(settings.tableQuantityField&&editor.tableQuantityVariants){settings.keepOriginalBasketItem===!0?editor.addTableQuantityItems(settings,saveToken,thumbnailUrl):editor.deleteBasketItem(settings).then(()=>{editor.addTableQuantityItems(settings,saveToken,thumbnailUrl)});return}const variantRelatedOptions=editor.getProductOptionValuesForVariants(settings.basketItemOptions,settings.product),selectedVariant=editor.getVariantByProductOptions(variantRelatedOptions,settings.product,!0);fetch("/cart.js",{headers:{"Content-Type":"application/json"}}).then(result=>{const namesToIgnore=["fix","newsletter"];result.json().then(json=>{const{items}=json,curr=items.find(item=>item.properties&&item.properties._printessSaveToken?item.properties&&item.properties._printessSaveToken===settings.templateNameOrSaveToken:item.id===(settings&&settings.product&&settings.product.variants&&settings.product.variants.length>0?settings.product.variants[0].id:settings.product.id));if(curr){const{key}=curr;let basketItemProperties={...curr.properties};if(settings.basketItemOptions)for(let property in settings.basketItemOptions)!property.startsWith("contact[")&&!namesToIgnore.includes(property)&&curr.properties&&curr.properties.hasOwnProperty(property)&&settings.basketItemOptions.hasOwnProperty(property)&&(basketItemProperties[property]=settings.basketItemOptions[property]);basketItemProperties={...basketItemProperties,_printessSaveToken:saveToken,_printessThumbnail:thumbnailUrl,_printessProductDefinitionId:""+settings.productDefinitionId,_printessOutputType:""+settings.outputFormat||"pdf",_printessOptionValueMappings:settings.optionValueMappings,_printessDpi:""+settings.outputDpi||"300",_printessAdditionalProperties:settings.additionalLineItemProperties?JSON.stringify(settings.additionalLineItemProperties):"{}"};const valuesToWrite={id:curr.id,quantity:typeof settings.quantity<"u"&&settings.quantity>1?settings.quantity:1,properties:basketItemProperties};editor.hasVariantRelatedOptions(settings.product,settings.basketItemOptions)&&(valuesToWrite.id=selectedVariant.id);const price=selectedVariant.price,globalSettings=PrintessEditor.getGlobalShopSettings(),callbackParams={lastSaveToken:editor.lastSaveToken,initialSaveToken:editor.initialSaveToken,originalSaveToken:editor.originalSaveToken,selectedVariant:editor.getVariantByProductOptions(basketItemProperties,settings.product,!0),formFieldValues:basketItemProperties,basketItemId:settings.basketItemId||null,product:settings.product};if(typeof settings.onAddToBasket=="function")try{settings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}if(typeof globalSettings.onAddToBasket=="function")try{globalSettings.onAddToBasket(saveToken,thumbnailUrl,callbackParams)}catch(e){console.error(e)}if(typeof globalSettings.getPriceForFormFields=="function")try{const newPrice=globalSettings.getPriceForFormFields(basketItemProperties,price,callbackParams);typeof newPrice=="number"&&newPrice!=price&&(valuesToWrite[price]=newPrice)}catch(e){console.error(e)}const addToBasket=()=>{fetch("/cart/add",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:[valuesToWrite]})}).then(()=>{window.location.replace("/cart")})};settings.keepOriginalBasketItem===!0?addToBasket():fetch("/cart/change.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:key,quantity:0})}).then(x=>{addToBasket()})}})})},readBasketItemQuantityInput:basketItemId=>{const customizeButton=document.getElementById("printessCustomizeButton"+(basketItemId||"").toString().replace(":","_"));
89if(!customizeButton)return null;const parent=customizeButton.closest(".cart-item");if(!parent)return null;const input=parent.querySelector("input.quantity__input");return input?parseInt(input.getAttribute("value")):null}};window.printessShopifyEditor=editor}return window.printessShopifyEditor}; 90//# sourceMappingURL=/cdn/shop/t/13/assets/printessEditor.js.map?v=32885747869351188821746652836
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.