// Zoid JS !function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("zoid",[],e):"object"==typeof exports?exports.zoid=e():n.zoid=e()}("undefined"!=typeof self?self:this,(function(){return function(n){var e={};function r(t){if(e[t])return e[t].exports;var o=e[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=n,r.c=e,r.d=function(n,e,t){r.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},r.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.t=function(n,e){if(1&e&&(n=r(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var t=Object.create(null);if(r.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)r.d(t,o,function(e){return n[e]}.bind(null,o));return t},r.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(e,"a",e),e},r.o=function(n,e){return{}.hasOwnProperty.call(n,e)},r.p="",r(r.s=0)}([function(n,e,r){"use strict";function t(n,e){return(t=Object.setPrototypeOf||function(n,e){return n.__proto__=e,n})(n,e)}function o(n,e){n.prototype=Object.create(e.prototype),n.prototype.constructor=n,t(n,e)}function i(){return(i=Object.assign||function(n){for(var e=1;e>>0)+"__",function(){if("undefined"==typeof WeakMap)return!1;if(void 0===Object.freeze)return!1;try{var n=new WeakMap,e={};return Object.freeze(e),n.set(e,"__testvalue__"),"__testvalue__"===n.get(e)}catch(n){return!1}}())try{this.weakmap=new WeakMap}catch(n){}this.keys=[],this.values=[]}var e=n.prototype;return e._cleanupClosedWindows=function(){for(var n=this.weakmap,e=this.keys,r=0;r=3)return"stringifyError stack overflow";try{if(!n)return"";if("string"==typeof n)return n;if(n instanceof Error){var r=n&&n.stack,t=n&&n.message;if(r&&t)return-1!==r.indexOf(t)?r:t+"\n"+r;if(r)return r;if(t)return t}return n&&n.toString&&"function"==typeof n.toString?n.toString():{}.toString.call(n)}catch(n){return"Error while stringifying error: "+wn(n,e+1)}}function hn(n){return"string"==typeof n?n:n&&n.toString&&"function"==typeof n.toString?n.toString():{}.toString.call(n)}function pn(n,e){if(!e)return n;if(Object.assign)return Object.assign(n,e);for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);return n}function vn(n){return n}function mn(n,e){var r;return function t(){r=setTimeout((function(){n(),t()}),e)}(),{cancel:function(){clearTimeout(r)}}}function yn(n){return[].slice.call(n)}function gn(n){return null!=n}function bn(n){return"[object RegExp]"==={}.toString.call(n)}function En(n,e,r){if(n.hasOwnProperty(e))return n[e];var t=r();return n[e]=t,t}function _n(n){var e,r=[],t=!1,o={set:function(e,r){return t||(n[e]=r,o.register((function(){delete n[e]}))),r},register:function(n){var o=ln((function(){return n(e)}));return t?n(e):r.push(o),{cancel:function(){var n=r.indexOf(o);-1!==n&&r.splice(n,1)}}},all:function(n){e=n;var o=[];for(t=!0;r.length;){var i=r.shift();o.push(i())}return h.all(o).then(sn)}};return o}function xn(n,e){if(null==e)throw new Error("Expected "+n+" to be present");return e}dn.clear=function(){cn=un},dn((function(n){if(Object.values)return Object.values(n);var e=[];for(var r in n)n.hasOwnProperty(r)&&e.push(n[r]);return e}));var Pn=function(n){function e(e){var r;return(r=n.call(this,e)||this).name=r.constructor.name,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(function(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}(r),r.constructor):r.stack=new Error(e).stack,r}return o(e,n),e}(K(Error));function On(){var n=document.body;if(!n)throw new Error("Body element not found");return n}function Cn(){return Boolean(document.body)&&"complete"===document.readyState}function Wn(){return Boolean(document.body)&&"interactive"===document.readyState}function Sn(n){return encodeURIComponent(n)}function Dn(n){return function(e,r,t){void 0===t&&(t=[]);var o=e.__inline_memoize_cache__=e.__inline_memoize_cache__||{},i=on(t);return o.hasOwnProperty(i)?o[i]:o[i]=function(){var e={};if(!n)return e;if(-1===n.indexOf("="))return e;for(var r=0,t=n.split("&");r { ... }":"<"+typeof n+">"})).join(", ")+") failed\n\n")+n.stack),n}))})).then((function(n){return{result:n,id:o,name:i}}))}))}));var c=r.__id__||tn();n=Ie.unwrap(n);var d=r.__name__||r.name||t;return"string"==typeof d&&"function"==typeof d.indexOf&&0===d.indexOf("anonymous::")&&(d=d.replace("anonymous::",t+"::")),Ie.isProxyWindow(n)?(ze(c,r,d,n,e),n.awaitWindow().then((function(n){ze(c,r,d,n,e)}))):ze(c,r,d,n,e),pe("cross_domain_function",{id:c,name:d})}function Ue(n,e,r,t){var o,i=t.on,a=t.send;return function(n,e){void 0===e&&(e=ye);var r=JSON.stringify(n,(function(n){var r=this[n];if(we(this))return r;var t=he(r);if(!t)return r;var o=e[t]||me[t];return o?o(r,n):r}));return void 0===r?"undefined":r}(r,((o={}).promise=function(r,t){return function(n,e,r,t,o){return pe("cross_domain_zalgo_promise",{then:Me(n,e,(function(n,e){return r.then(n,e)}),t,{on:o.on,send:o.send})})}(n,e,r,t,{on:i,send:a})},o.function=function(r,t){return Me(n,e,r,t,{on:i,send:a})},o.object=function(n){return q(n)||Ie.isProxyWindow(n)?pe("cross_domain_window",Ie.serialize(n,{send:a})):n},o))}function Le(n,e,r,t){var o,i=t.send;return function(n,e){if(void 0===e&&(e=be),"undefined"!==n)return JSON.parse(n,(function(n,r){if(we(this))return r;var t,o;if(we(r)?(t=r.__type__,o=r.__val__):(t=he(r),o=r),!t)return o;var i=e[t]||ge[t];return i?i(o,n):o}))}(r,((o={}).cross_domain_zalgo_promise=function(n){return function(n,e,r){return new h(r.then)}(0,0,n)},o.cross_domain_function=function(r){return function(n,e,r,t){var o=r.id,i=r.name,a=t.send,u=function(r){function t(){var u=arguments;return Ie.toProxyWindow(n,{send:a}).awaitWindow().then((function(n){var c=Fe(n,o);if(c&&c.val!==t)return c.val.apply({source:window,origin:P()},u);var d=[].slice.call(u);return r.fireAndForget?a(n,"postrobot_method",{id:o,name:i,args:d},{domain:e,fireAndForget:!0}):a(n,"postrobot_method",{id:o,name:i,args:d},{domain:e,fireAndForget:!1}).then((function(n){return n.data.result}))})).catch((function(n){throw n}))}return void 0===r&&(r={}),t.__name__=i,t.__origin__=e,t.__source__=n,t.__id__=o,t.origin=e,t},c=u();return c.fireAndForget=u({fireAndForget:!0}),c}(n,e,r,{send:i})},o.cross_domain_window=function(n){return Ie.deserialize(n,{send:i})},o))}var Be={};function qe(n,e,r,t){var o=t.on,i=t.send;return h.try((function(){var t=ae().getOrSet(n,(function(){return{}}));return t.buffer=t.buffer||[],t.buffer.push(r),t.flush=t.flush||h.flush().then((function(){if(T(n))throw new Error("Window is closed");var r,a=Ue(n,e,((r={}).__post_robot_10_0_46__=t.buffer||[],r),{on:o,send:i});delete t.buffer;for(var u=Object.keys(Be),c=[],d=0;d1?e-1:0),o=1;o1?r-1:0),i=1;i iframe {\n display: inline-block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n transition: opacity .2s ease-in-out;\n }\n\n #"+e+" > iframe.zoid-invisible {\n opacity: 0;\n }\n\n #"+e+" > iframe.zoid-visible {\n opacity: 1;\n }\n ")),f.appendChild(r),f.appendChild(t),f.appendChild(s),t.classList.add("zoid-visible"),r.classList.add("zoid-invisible"),a.on(Lr.RENDERED,(function(){t.classList.remove("zoid-visible"),t.classList.add("zoid-invisible"),r.classList.remove("zoid-invisible"),r.classList.add("zoid-visible"),setTimeout((function(){Bn(t)}),1)})),a.on(Lr.RESIZE,(function(n){var e=n.width,r=n.height;"number"==typeof e&&(f.style.width=Kn(e)),"number"==typeof r&&(f.style.height=Kn(r))})),f}}function rt(n){var e=n.doc,r=n.props,t=e.createElement("html"),o=e.createElement("body"),i=e.createElement("style"),a=e.createElement("div");return a.classList.add("spinner"),r.cspNonce&&i.setAttribute("nonce",r.cspNonce),t.appendChild(o),o.appendChild(a),o.appendChild(i),i.appendChild(e.createTextNode("\n html, body {\n width: 100%;\n height: 100%;\n }\n\n .spinner {\n position: fixed;\n max-height: 60vmin;\n max-width: 60vmin;\n height: 40px;\n width: 40px;\n top: 50%;\n left: 50%;\n box-sizing: border-box;\n border: 3px solid rgba(0, 0, 0, .2);\n border-top-color: rgba(33, 128, 192, 0.8);\n border-radius: 100%;\n animation: rotation .7s infinite linear;\n }\n\n @keyframes rotation {\n from {\n transform: translateX(-50%) translateY(-50%) rotate(0deg);\n }\n to {\n transform: translateX(-50%) translateY(-50%) rotate(359deg);\n }\n }\n ")),t}var tt=_n(),ot=_n();function it(n){var e,r,t=function(n){var e=n.tag,r=n.url,t=n.domain,o=n.bridgeUrl,a=n.props,u=void 0===a?{}:a,c=n.dimensions,d=void 0===c?{}:c,f=n.autoResize,s=void 0===f?{}:f,l=n.allowedParentDomains,w=void 0===l?"*":l,h=n.attributes,p=void 0===h?{}:h,v=n.defaultContext,m=void 0===v?Ur.IFRAME:v,y=n.containerTemplate,g=void 0===y?et:y,b=n.prerenderTemplate,E=void 0===b?rt:b,_=n.validate,x=n.eligible,P=void 0===x?function(){return{eligible:!0}}:x,O=n.logger,C=void 0===O?{info:sn}:O,W=n.exports,S=void 0===W?sn:W,D=n.method,N=n.children,j=void 0===N?function(){return{}}:N,A=e.replace(/-/g,"_"),k=i({},{window:{type:Fr.OBJECT,sendToChild:!1,required:!1,allowDelegate:!0,validate:function(n){var e=n.value;if(!Dr(e)&&!Ie.isProxyWindow(e))throw new Error("Expected Window or ProxyWindow");if(Dr(e)){if(Er(e))throw new Error("Window is closed");if(!lr(e))throw new Error("Window is not same domain")}},decorate:function(n){return er(n.value)}},timeout:{type:Fr.NUMBER,required:!1,sendToChild:!1},cspNonce:{type:Fr.STRING,required:!1},onDisplay:{type:Fr.FUNCTION,required:!1,sendToChild:!1,allowDelegate:!0,default:Xr,decorate:$r},onRendered:{type:Fr.FUNCTION,required:!1,sendToChild:!1,default:Xr,decorate:$r},onRender:{type:Fr.FUNCTION,required:!1,sendToChild:!1,default:Xr,decorate:$r},onClose:{type:Fr.FUNCTION,required:!1,sendToChild:!1,allowDelegate:!0,default:Xr,decorate:$r},onDestroy:{type:Fr.FUNCTION,required:!1,sendToChild:!1,allowDelegate:!0,default:Xr,decorate:$r},onResize:{type:Fr.FUNCTION,required:!1,sendToChild:!1,allowDelegate:!0,default:Xr},onFocus:{type:Fr.FUNCTION,required:!1,sendToChild:!1,allowDelegate:!0,default:Xr},close:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.close}},focus:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.focus}},resize:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.resize}},uid:{type:Fr.STRING,required:!1,sendToChild:!1,childDecorate:function(n){return n.uid}},tag:{type:Fr.STRING,required:!1,sendToChild:!1,childDecorate:function(n){return n.tag}},getParent:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.getParent}},getParentDomain:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.getParentDomain}},show:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.show}},hide:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.hide}},export:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.export}},onError:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.onError}},onProps:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.onProps}},getSiblings:{type:Fr.FUNCTION,required:!1,sendToChild:!1,childDecorate:function(n){return n.getSiblings}}},u);if(!g)throw new Error("Container template required");return{name:A,tag:e,url:r,domain:t,bridgeUrl:o,method:D,propsDef:k,dimensions:d,autoResize:s,allowedParentDomains:w,attributes:p,defaultContext:m,containerTemplate:g,prerenderTemplate:E,validate:_,logger:C,eligible:P,children:j,exports:"function"==typeof S?S:function(n){for(var e=n.getExports,r={},t=function(n,t){var o=t[n],i=S[o].type,a=e().then((function(n){return n[o]}));r[o]=i===Fr.FUNCTION?function(){for(var n=arguments.length,e=new Array(n),r=0;r{let _,t,n,g,i,b,p,u=Math.round,a="string"==typeof e;return"number"!=typeof r||r<-1||r>1||"string"!=typeof $||"r"!=$[0]&&"#"!=$[0]||e&&!a?null:(p=$.length>9,p=a?e.length>9||"c"==e&&!p:p,i=pSBC.pSBCr($),g=r<0,b=e&&"c"!=e?pSBC.pSBCr(e):g?{r:0,g:0,b:0,a:-1}:{r:255,g:255,b:255,a:-1},g=1-(r=g?-1*r:r),i&&b)?(l?(_=u(g*i.r+r*b.r),t=u(g*i.g+r*b.g),n=u(g*i.b+r*b.b)):(_=u((g*i.r**2+r*b.r**2)**.5),t=u((g*i.g**2+r*b.g**2)**.5),n=u((g*i.b**2+r*b.b**2)**.5)),a=i.a,b=b.a,a=(i=a>=0||b>=0)?a<0?b:b<0?a:a*g+b*r:0,p)?"rgb"+(i?"a(":"(")+_+","+t+","+n+(i?","+u(1e3*a)/1e3:"")+")":"#"+(4294967296+16777216*_+65536*t+256*n+(i?u(255*a):0)).toString(16).slice(1,i?void 0:-2):null};pSBC.pSBCr=r=>{let $=parseInt,e=r.length,l={};if(e>9){let[_,t,n,g]=r=r.split(",");if((e=r.length)<3||e>4)return null;l.r=$("a"==_[3]?_.slice(5):_.slice(4)),l.g=$(t),l.b=$(n),l.a=g?parseFloat(g):-1}else{if(8==e||6==e||e<4)return null;e<6&&(r="#"+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]+(e>4?r[4]+r[4]:"")),r=$(r.slice(1),16),9==e||5==e?(l.r=r>>24&255,l.g=r>>16&255,l.b=r>>8&255,l.a=Math.round((255&r)/.255)/1e3):(l.r=r>>16,l.g=r>>8&255,l.b=255&r,l.a=-1)}return l}; var frontEndpoint = 'www.ordertracker.com' var apiEndpoint = 'api.ordertracker.com' var ordertrackerProperties = { id: { type: 'string', required: false }, language: { type: 'string', required: false }, size: { type: 'string', required: false }, theme: { type: 'string', required: false }, shape: { type: 'string', required: false }, font: { type: 'string', required: false }, trackingNumber: { type: 'string', required: false }, buttonIcon: { type: 'string', required: false }, buttonLabel: { type: 'string', required: false }, buttonColor: { type: 'string', required: false }, buttonLabelColor: { type: 'string', required: false }, inputPlaceholder: { type: 'string', required: false }, inputColor: { type: 'string', required: false }, inputBorder: { type: 'string', required: false }, trackingPrimaryColor: { type: 'string', required: false }, trackingSecondaryColor: { type: 'string', required: false }, trackingBarColor: { type: 'string', required: false }, showCouriersDetails: { type: 'string', required: false }, showTrackingDetails: { type: 'string', required: false }, showCustomClearanceDetails: { type: 'string', required: false }, deliveryForecast: { type: 'string', required: false }, showFailoverEvent: { type: 'string', required: false }, courierLabel: { type: 'string', required: false }, shipmentOriginCountry: { type: 'string', required: false }, customSemantics: { type: 'object', required: false }, customEvents: { type: 'array', required: false }, customCss: { type: 'string', required: false }, shopifyPageTitle: { type: 'string', required: false }, shopifyTopMargin: { type: 'string', required: false }, shopifyBottomMargin: { type: 'string', required: false } } var Ordertracker = zoid.create({ tag: 'ordertracker', url: 'https://' + frontEndpoint + '/embed', dimensions: { width: '100%' }, autoResize: { height: true }, props: ordertrackerProperties }) if (window && window.xprops) { var loadingIcon var widgetOptions = {} var widgetErrors = [] var widgetConstants = {} var getStrings = function(lang, shopify) { var strings switch (lang) { case 'DE': strings = shopify ? { buttonLabel: 'Meine Bestellung verfolgen', buttonLabelShort: 'Verfolgen', inputPlaceholder: 'E-Mail, Bestell- oder Sendungsnummer...', inputPlaceholderShort: 'Sendungsnummer...', courierNamePlaceholder: 'Vorfall', deliveryForecastPlaceholder: 'Die Lieferung wird in OT_VAR_1 Tagen erwartet', humanDateFormat: 'OT_VAR_2. OT_VAR_1 OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'] } : { buttonLabel: 'Mein Paket verfolgen', buttonLabelShort: 'Verfolgen', inputPlaceholder: 'Sendungsnummer...', inputPlaceholderShort: 'Sendungsnummer...', courierNamePlaceholder: 'Vorfall', deliveryForecastPlaceholder: 'Die Lieferung wird in OT_VAR_1 Tagen erwartet', humanDateFormat: 'OT_VAR_2. OT_VAR_1 OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'] } break case 'FR': strings = shopify ? { buttonLabel: 'Suivre ma commande', buttonLabelShort: 'Suivre', inputPlaceholder: 'E-mail, numéro de commande ou de suivi...', inputPlaceholderShort: 'Numéro de suivi...', courierNamePlaceholder: 'Évènement', deliveryForecastPlaceholder: 'La livraison est prévue dans OT_VAR_1 jours', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3', humanMonths: ['jan', 'fev', 'mar', 'avr', 'mai', 'juin', 'juil', 'aout', 'sep', 'oct', 'nov', 'dec'] } : { buttonLabel: 'Suivre mon colis', buttonLabelShort: 'Suivre', inputPlaceholder: 'Numéro de suivi...', inputPlaceholderShort: 'Numéro de suivi...', courierNamePlaceholder: 'Évènement', deliveryForecastPlaceholder: 'La livraison est prévue dans OT_VAR_1 jours', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3', humanMonths: ['jan', 'fev', 'mar', 'avr', 'mai', 'juin', 'juil', 'aout', 'sep', 'oct', 'nov', 'dec'] } break case 'PT': strings = shopify ? { buttonLabel: 'Rastrear meu pedido', buttonLabelShort: 'Rastrear', inputPlaceholder: 'E-mail, pedido ou número de rastreamento...', inputPlaceholderShort: 'Numero de rastreio...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'A entrega é esperada em OT_VAR_1 dias', humanDateFormat: 'OT_VAR_2 de OT_VAR_1 de OT_VAR_3', humanMonths: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'] } : { buttonLabel: 'Rastrear meu pacote', buttonLabelShort: 'Rastrear', inputPlaceholder: 'Numero de rastreio...', inputPlaceholderShort: 'Numero de rastreio...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'A entrega é esperada em OT_VAR_1 dias', humanDateFormat: 'OT_VAR_2 de OT_VAR_1 de OT_VAR_3', humanMonths: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'] } break case 'IT': strings = shopify ? { buttonLabel: 'Traccia il mio ordine', buttonLabelShort: 'Traccia', inputPlaceholder: 'E-mail, ordine o numero di tracciamento...', inputPlaceholderShort: 'Numero di tracciamento...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'La consegna è prevista in OT_VAR_1 giorni', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'] } : { buttonLabel: 'Traccia il mio pacco', buttonLabelShort: 'Traccia', inputPlaceholder: 'Numero di tracciamento...', inputPlaceholderShort: 'Numero di tracciamento...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'La consegna è prevista in OT_VAR_1 giorni', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'] } break case 'ES': strings = shopify ? { buttonLabel: 'Rastrear mi pedido', buttonLabelShort: 'Rastrear', inputPlaceholder: 'E-mail, pedido o número de seguimiento...', inputPlaceholderShort: 'Número de rastreo...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'La entrega se espera en OT_VAR_1 días', humanDateFormat: 'OT_VAR_2 de OT_VAR_1. de OT_VAR_3', humanMonths: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'] } : { buttonLabel: 'Rastrear mi paquete', buttonLabelShort: 'Rastrear', inputPlaceholder: 'Número de rastreo...', inputPlaceholderShort: 'Número de rastreo...', courierNamePlaceholder: 'Evento', deliveryForecastPlaceholder: 'La entrega se espera en OT_VAR_1 días', humanDateFormat: 'OT_VAR_2 de OT_VAR_1. de OT_VAR_3', humanMonths: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'] } break case 'TR': strings = shopify ? { buttonLabel: 'Benim siparişimi takip et', buttonLabelShort: 'Izlemek', inputPlaceholder: 'E-posta, sipariş veya takip numarası...', inputPlaceholderShort: 'Takip numarası...', courierNamePlaceholder: 'Etkinlik', deliveryForecastPlaceholder: 'Teslimatın OT_VAR_1 gün içinde yapılması bekleniyor', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['oca', 'şub', 'mar', 'nis', 'may', 'haz', 'tem', 'ağu', 'eyl', 'eki', 'kas', 'ara'] } : { buttonLabel: 'Paketimi takip et', buttonLabelShort: 'Izlemek', inputPlaceholder: 'Takip numarası...', inputPlaceholderShort: 'Takip numarası...', courierNamePlaceholder: 'Etkinlik', deliveryForecastPlaceholder: 'Teslimatın OT_VAR_1 gün içinde yapılması bekleniyor', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['oca', 'şub', 'mar', 'nis', 'may', 'haz', 'tem', 'ağu', 'eyl', 'eki', 'kas', 'ara'] } break case 'NL': strings = shopify ? { buttonLabel: 'Volg mijn bestelling', buttonLabelShort: 'Volg', inputPlaceholder: 'E-mail, bestel- of volgnummer...', inputPlaceholderShort: 'Volg nummer...', courierNamePlaceholder: 'Evenement', deliveryForecastPlaceholder: 'Levering wordt verwacht in OT_VAR_1 dagen', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3', humanMonths: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'] } : { buttonLabel: 'Volg mijn pakket', buttonLabelShort: 'Volg', inputPlaceholder: 'Volg nummer...', inputPlaceholderShort: 'Volg nummer...', courierNamePlaceholder: 'Evenement', deliveryForecastPlaceholder: 'Levering wordt verwacht in OT_VAR_1 dagen', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3', humanMonths: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'] } break case 'PL': strings = shopify ? { buttonLabel: 'Śledź moją zamówienie', buttonLabelShort: 'Śledź', inputPlaceholder: 'E-mail, numer zamówienia lub śledzenia...', inputPlaceholderShort: 'Numer przesyłki...', courierNamePlaceholder: 'Wydarzenie', deliveryForecastPlaceholder: 'Dostawa jest oczekiwana w ciągu OT_VAR_1 dni', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paz', 'lis', 'gru'] } : { buttonLabel: 'Śledź moją paczkę', buttonLabelShort: 'Śledź', inputPlaceholder: 'Numer przesyłki...', inputPlaceholderShort: 'Numer przesyłki...', courierNamePlaceholder: 'Wydarzenie', deliveryForecastPlaceholder: 'Dostawa jest oczekiwana w ciągu OT_VAR_1 dni', humanDateFormat: 'OT_VAR_2 OT_VAR_1 OT_VAR_3', humanMonths: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paz', 'lis', 'gru'] } break case 'ZH_CN': strings = shopify ? { buttonLabel: '追踪我的订单', buttonLabelShort: '追踪', inputPlaceholder: '电子邮件、订单号或跟踪号...', inputPlaceholderShort: '追踪号码...', courierNamePlaceholder: '事件', deliveryForecastPlaceholder: '预计 OT_VAR_1 天内交货', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } : { buttonLabel: '追踪我的包裹', buttonLabelShort: '追踪', inputPlaceholder: '追踪号码...', inputPlaceholderShort: '追踪号码...', courierNamePlaceholder: '事件', deliveryForecastPlaceholder: '预计 OT_VAR_1 天内交货', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } break case 'ZH_HK': strings = shopify ? { buttonLabel: '追踪我的訂單', buttonLabelShort: '追踪', inputPlaceholder: '電子郵件、訂單號或跟踪號...', inputPlaceholderShort: '追踪號碼...', courierNamePlaceholder: '事件', deliveryForecastPlaceholder: '預計 OT_VAR_1 天內交貨', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } : { buttonLabel: '追踪我的包裹', buttonLabelShort: '追踪', inputPlaceholder: '追踪號碼...', inputPlaceholderShort: '追踪號碼...', courierNamePlaceholder: '事件', deliveryForecastPlaceholder: '預計 OT_VAR_1 天內交貨', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } break case 'JA': strings = shopify ? { buttonLabel: '私の注文を追跡する', buttonLabelShort: '追跡', inputPlaceholder: 'メール、注文番号、追跡番号...', inputPlaceholderShort: '追跡番号...', courierNamePlaceholder: 'イベント', deliveryForecastPlaceholder: 'OT_VAR_1日後に配達予定です', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } : { buttonLabel: '私のパッケージを追跡する', buttonLabelShort: '追跡', inputPlaceholder: '追跡番号...', inputPlaceholderShort: '追跡番号...', courierNamePlaceholder: 'イベント', deliveryForecastPlaceholder: 'OT_VAR_1日後に配達予定です', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } break case 'KO': strings = shopify ? { buttonLabel: '내 주문을 추적', buttonLabelShort: '길', inputPlaceholder: '이메일, 주문 번호 또는 추적 번호...', inputPlaceholderShort: '추적 번호...', courierNamePlaceholder: '이벤트', deliveryForecastPlaceholder: '배송은 OT_VAR_1일 예상', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } : { buttonLabel: '내 패키지 추적', buttonLabelShort: '길', inputPlaceholder: '추적 번호...', inputPlaceholderShort: '추적 번호...', courierNamePlaceholder: '이벤트', deliveryForecastPlaceholder: '배송은 OT_VAR_1일 예상', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } break case 'RU': strings = shopify ? { buttonLabel: 'отслеживать свой заказ', buttonLabelShort: 'Отследить', inputPlaceholder: 'Эл. почта, номер заказа или отслеживания...', inputPlaceholderShort: 'Номер отслеживания...', courierNamePlaceholder: 'Мероприятие', deliveryForecastPlaceholder: 'Доставĸа ожидается через OT_VAR_1 дня', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3 г.', humanMonths: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'] } : { buttonLabel: 'Отследить мою посылку', buttonLabelShort: 'Отследить', inputPlaceholder: 'Номер отслеживания...', inputPlaceholderShort: 'Номер отслеживания...', courierNamePlaceholder: 'Мероприятие', deliveryForecastPlaceholder: 'Доставĸа ожидается через OT_VAR_1 дня', humanDateFormat: 'OT_VAR_2 OT_VAR_1. OT_VAR_3 г.', humanMonths: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'] } break default: strings = shopify ? { buttonLabel: 'Track my order', buttonLabelShort: 'Track', inputPlaceholder: 'Email, Order or Tracking number...', inputPlaceholderShort: 'Tracking number...', courierNamePlaceholder: 'Event', deliveryForecastPlaceholder: 'Delivery is expected in OT_VAR_1 days', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } : { buttonLabel: 'Track my package', buttonLabelShort: 'Track', inputPlaceholder: 'Tracking number...', inputPlaceholderShort: 'Tracking number...', courierNamePlaceholder: 'Event', deliveryForecastPlaceholder: 'Delivery is expected in OT_VAR_1 days', humanDateFormat: 'OT_VAR_1 OT_VAR_2, OT_VAR_3', humanMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] } } return strings } var getLanguage = function() { var lang = widgetOptions.language var availableLanguages = ['EN', 'DE', 'FR', 'PT', 'IT', 'ES', 'TR', 'NL', 'PL', 'ZH_CN', 'ZH_HK', 'JA', 'KO', 'RU'] if (lang && availableLanguages.includes(lang.split('-').join('_').toUpperCase())) { lang = lang.split('-').join('_').toUpperCase() } else { var lang = navigator.language || navigator.userLanguage lang = typeof lang === 'string' || lang instanceof String ? lang.toUpperCase() : false if (lang) { if (lang === 'ZH-CN' || lang === 'ZH-HK') { lang = lang.split('-').join('_') } else { lang = lang.substring(0, 2) } } } lang = availableLanguages.includes(lang) ? lang : 'EN' return lang } var getDomain = function() { try { domain = new URL(window.xprops.getParentDomain()).hostname } catch(e) { domain = window.xprops.getParentDomain() } return domain } var validString = function(str) { return str && typeof str === 'string' || str instanceof String && str.split(' ').join('').length } var validNumber = function(str, shopify) { return shopify ? str && str.split(' ').join('').length : str && str.match(/^[a-zA-Z0-9-_]+$/i) && /\d/.test(str) && str.length > 4 && str.length < 51 && /^[0-9a-zA-Z]/.test(str) && /[0-9a-zA-Z]$/.test(str) } var humanDate = function(str) { var date = str ? new Date(str) : new Date() var dateArray = [ date.getDate(), date.getMonth()+1, date.getHours(), date.getMinutes() ] for (var i = 0; i < dateArray.length; i++) { dateArray[i] = dateArray[i] < 10 ? '0' + dateArray[i] : dateArray[i] } return { day: dateArray[0] + '/' + dateArray[1] + '/' + date.getFullYear(), time: dateArray[2] + ':' + dateArray[3] } } var formsAnimation = function() { var v = document.querySelectorAll('.fld > input') var reset = function() { v.forEach(function(p) { if (!p.value) { p.closest('.fld').classList.remove('active', 'focus') } else { p.closest('.fld').classList.remove('focus') } }) } v.forEach(function(p) { p.addEventListener('focusin', function(e) { reset() this.closest('.fld').classList.add('active', 'focus') }) p.addEventListener('focusout', function(e) { reset() }) }) } var throwErrors = function(errors) { errors = Array.isArray(errors) ? errors : [errors] document.querySelectorAll('.active').forEach(function(el) { el.classList.remove('active') }) document.getElementById('widget-error').classList.add('active') document.querySelector('#widget-error h1').innerHTML = 'logo' + errors.join('

') + '
info@ordertracker.com for more info' } var getFont = function() { var font = validString(widgetOptions.font) ? widgetOptions.font : 'Roboto' return font } var getButtonIconClass = function() { var icon = [ 'search', 'link', 'chevron-right', 'long-arrow-right', 'check', 'check-circle', 'eye', 'sync', 'copy', 'globe', 'map-marker-alt' ].includes(widgetOptions.buttonIcon) ? 'fa-' + widgetOptions.buttonIcon : 'fa-map-marker-alt' return icon } var track = function(number, callback) { var lang = widgetOptions.language && widgetOptions.language.toUpperCase() === 'ORIGINAL' ? false : getLanguage() ajax({ method: 'POST', url: '//' + apiEndpoint + '/public/widget-track', body: { id: window.xprops.id, number: number, lang: lang, domain: getDomain() } }, function(data, status, error) { if (callback) { callback(data, status, error) } }) } var ajax = function(data, cb) { var req = new XMLHttpRequest() req.onreadystatechange = function() { if (req.readyState == 4) { var res = req.response if (typeof res === 'string' || res instanceof String) { try { res = JSON.parse(res) } catch(e) { } } if (req.status == 200) { cb(res, req.status, null) } else { res = res.error && res.error.message ? res.error.message : res console.log(res) cb(null, req.status, res) } } } req.open(data.method, data.url, true) req.setRequestHeader('Content-Type', 'application/json') if (data.body) { req.send(JSON.stringify(data.body)) } else { req.send() } } var loadData = function(args, languageStrings) { if (!args.ctn.classList.contains('loading-data')) { var lang = widgetOptions.language && widgetOptions.language.toUpperCase() === 'ORIGINAL' ? false : getLanguage() var tmpBtnHtml = args.button ? args.button.innerHTML : null var tBlock = document.querySelector('#widget #tracking-results') var sBlock = document.querySelector('#widget .status-block') var sLabel = document.querySelector('#widget .status-label') var ssLabel = document.querySelector('#widget .status-sublabel') var sProgress = document.querySelector('#widget .status-progress') var stepsBlock = document.querySelector('#widget [data-steps]') var delivered tBlock.classList.remove('active') sBlock.classList.remove('delivered') sBlock.classList.remove('shipped') sBlock.classList.remove('unknown') sProgress.style.width = '100%' args.ctn.classList.add('loading-data') if (args.button) { args.button.innerHTML = loadingIcon } track(args.number, function(data, status, error) { if (data) { var stepData = '' var customRegexes = args.customSemantics && args.customSemantics.regexes ? args.customSemantics.regexes : [] var customStatuses = args.customSemantics && args.customSemantics.statuses ? args.customSemantics.statuses : {} if (data.status === 'unknown') { if (data.shopifyOrderExists || args.showFailoverEvent) { var customLabels = args.customSemantics && args.customSemantics.labels && args.customSemantics.labels.ecommerce ? args.customSemantics.labels.ecommerce : {} data.statusLabel = customLabels.label ? customLabels.label : data.ecommerceUnknownLabel data.statusSubLabel = customLabels.sublabel ? customLabels.sublabel : data.ecommerceUnknownSubLabel data.unknownMeaning = customLabels.meaning ? customLabels.meaning : data.ecommerceUnknownMeaning data.unknownLine = customLabels.line ? customLabels.line : data.ecommerceUnknownLine data.statusPlaceholder = customLabels.placeholder ? customLabels.placeholder : data.ecommerceUnknownPlaceholder } else { var customLabels = args.customSemantics && args.customSemantics.labels && args.customSemantics.labels.unknown ? args.customSemantics.labels.unknown : {} data.statusLabel = customLabels.label ? customLabels.label : data.statusLabel data.statusSubLabel = customLabels.sublabel ? customLabels.sublabel : data.statusSubLabel data.unknownMeaning = customLabels.meaning ? customLabels.meaning : data.unknownMeaning data.unknownLine = customLabels.line ? customLabels.line : data.unknownLine data.statusPlaceholder = customLabels.placeholder ? customLabels.placeholder : data.statusPlaceholder } } else { var customLabels = args.customSemantics && args.customSemantics.labels && args.customSemantics.labels[data.status] ? args.customSemantics.labels[data.status] : {} data.statusLabel = customLabels.label ? customLabels.label : data.statusLabel data.statusSubLabel = customLabels.sublabel ? customLabels.sublabel : data.statusSubLabel } sBlock.classList.add(data.status) sLabel.innerHTML = data.statusLabel ssLabel.innerHTML = data.statusSubLabel sProgress.style.width = data.statusProgressPercentage + '%' if (data.steps && args.customEvents) { args.customEvents.forEach(function(ev) { var evDate = !isNaN(parseInt(ev.after)) && data.shopifyOrderDate ? new Date(data.shopifyOrderDate) : null evDate = evDate && data.steps.length ? new Date(data.steps[data.steps.length-1].time) : evDate if (evDate && ev.sentence && (typeof ev.sentence === 'string' || ev.sentence instanceof String) && ev.sentence.split(' ').join('').length) { if (parseInt(ev.after) === 0) { evDate.setMinutes(evDate.getMinutes()+1) } else { evDate.setDate(evDate.getDate()+parseInt(ev.after)) } if (new Date(evDate).getTime() <= new Date().getTime()) { data.steps.push({ courier: { name: languageStrings.courierNamePlaceholder.toUpperCase(), slug: 'unknown-1' }, humanReadableTime: languageStrings.humanDateFormat.split('OT_VAR_1').join(languageStrings.humanMonths[evDate.getUTCMonth()]).split('OT_VAR_2').join(evDate.getUTCDate()).split('OT_VAR_3').join(evDate.getUTCFullYear()), lines: [], meaning: ev.sentence.trim(), semanticStatus: 'IN_TRANSIT', time: evDate.toISOString() }) } } }) data.steps = data.steps.sort(function(a, b) { return new Date(b.time) - new Date(a.time) }) } if (data.steps && data.steps.length) { var oneTo120 = [] for (var i = 1; i <= 120; i++) { oneTo120.push(i) oneTo120.push(i.toString()) } if (oneTo120.includes(args.deliveryForecast) && data.status === 'shipped') { var forecast = parseInt(parseInt(args.deliveryForecast)-data.daysInTransit) forecast = forecast > 0 ? forecast : 1 ssLabel.innerHTML = languageStrings.deliveryForecastPlaceholder.split('OT_VAR_1').join(forecast) } var noslug = 1 data.couriers.forEach(function(courier) { if (!courier.slug) { courier.slug = 'unknown-' + noslug noslug = noslug === 4 ? 1 : (noslug+1) } }) data.steps.forEach(function(step, i) { data.couriers.forEach(function(courier) { if (step.courier.name === courier.name) { step.courier.slug = courier.slug } }) if (!args.showCustomClearanceDetails && (step.semanticStatus === 'IN_CUSTOMS' || step.semanticStatus === 'IN_DESTINATION_DISTRICT')) { step.meaning = widgetConstants.statusPlaceholder[lang] ? widgetConstants.statusPlaceholder[lang] : widgetConstants.statusPlaceholder['EN'] } if (customStatuses[step.semanticStatus.toLowerCase().split('_').join('')]) { step.meaning = customStatuses[step.semanticStatus.toLowerCase().split('_').join('')] } var meaning = '' + step.meaning + '' var lines = [] step.lines.forEach(function(line) { var excludeLine = false if (args.showTrackingDetails === 'noasian') { widgetConstants.asianRegexes.true.forEach(function(regex) { if (new RegExp(regex, 'i').test(line)) { excludeLine = true } }) } if (!args.showCustomClearanceDetails && (step.semanticStatus === 'IN_CUSTOMS' || step.semanticStatus === 'IN_DESTINATION_DISTRICT')) { widgetConstants.customsRegexes.true.forEach(function(regex) { if (new RegExp(regex, 'i').test(line)) { excludeLine = true } }) } if (!excludeLine) { var replace = null customRegexes.forEach(function(regex) { if (new RegExp(regex.search, 'i').test(line)) { replace = regex.replace } }) if (replace) { lines.push('' + replace + '') } else { lines.push('' + line + '') } } }) if (i === (data.steps.length-1) && args.shipmentOriginCountry) { lines = ['' + args.shipmentOriginCountry + ''] } var sday = step.humanReadableTime var stime = humanDate(step.time).time var extendStepBtn = lines.length > 2 ? '' : '' var extendStepClass = lines.length > 2 ? 'extendable-step' : '' var elClasses = [] var displayedCourierName = step.courier.name if (args.showCouriersDetails === 'none' || (args.showCouriersDetails === 'noasian' && widgetConstants.asianCouriers.includes(step.courier.name))) { step.courier.slug = 'unknown-1' displayedCourierName = languageStrings.courierNamePlaceholder.toUpperCase() } if (args.showTrackingDetails === 'none') { extendStepBtn = '' extendStepClass = '' elClasses.push('hide-details') } if (extendStepClass.length) { elClasses.push(extendStepClass) } stepData += '
  • ' + displayedCourierName + '' + sday + ' ' + stime + '' + meaning + lines.join('') + extendStepBtn + '
    ' + displayedCourierName + '
  • ' }) } else { var sday = data.todayHumanReadableTime var stime = humanDate().time stepData = '
  • ' + data.statusPlaceholder + '' + sday + ' ' + stime + '' + data.unknownMeaning + '' + data.unknownLine + '
    ' + data.statusPlaceholder + '
  • ' } stepsBlock.innerHTML = stepData var extSteps = document.querySelectorAll('.extendable-step') extSteps.forEach(function(p2) { p2.addEventListener('click', function(e) { if (p2.classList.contains('active')) { p2.classList.remove('active') } else { p2.classList.add('active') } }) }) tBlock.classList.add('active') } else if (validString(error)) { throwErrors(error) } else { throwErrors('An unknown error occurred, please reload the page. If the problem persists contact-us at: info@ordertracker.com') } loading = false if (args.button) { args.button.innerHTML = tmpBtnHtml } if (args.trackingPrimaryColor) { var sStep = document.querySelectorAll('#widget .step-meaning') if (sLabel) { sLabel.style.color = args.trackingPrimaryColor } if (ssLabel) { ssLabel.style.color = args.trackingPrimaryColor } if (sStep) { sStep.forEach(function(el) { el.style.color = args.trackingPrimaryColor }) } } if (args.trackingSecondaryColor) { var sLine = document.querySelectorAll('#widget .step-line') var sDate = document.querySelectorAll('#widget .courier-time') var sCourier = document.querySelectorAll('#widget .courier-name span') if (sLine) { sLine.forEach(function(el) { el.style.color = args.trackingSecondaryColor }) } if (sDate) { sDate.forEach(function(el) { el.style.color = args.trackingSecondaryColor }) } if (sCourier) { sCourier.forEach(function(el) { el.style.color = args.trackingSecondaryColor if (args.theme !== 'dark') { el.style.background = pSBC(0.9, args.trackingSecondaryColor) // 90% lighter } }) } } if (args.trackingBarColor) { var sProgressDot = document.querySelector('#widget .status-progress span') if (sProgress) { sProgress.style.background = pSBC(0.7, args.trackingBarColor) // 80% lighter } if (sProgressDot) { sProgressDot.style.background = args.trackingBarColor } } if (args.courierLabel) { var sCourier = document.querySelectorAll('#widget .courier-name span') var sCourierImg = document.querySelectorAll('#widget .courier-img img') sCourier.forEach(function(el) { el.innerHTML = args.courierLabel }) sCourierImg.forEach(function(el) { el.setAttribute('src', '/app/template/img/couriers/unknown-1.png') }) } args.ctn.classList.remove('loading-data') document.querySelector('#widget .loading-block').classList.add('inactive') }) } } var configId = window.xprops.id ? window.xprops.id : getDomain() ajax({ method: 'GET', url: '/app/template/dashboard/img/loading.svg' }, function(data, status, error) { if (!error) { loadingIcon = data } ajax({ method: 'GET', url: '//' + apiEndpoint + '/public/widget-configuration?id=' + configId }, function(data, status, error) { if (validString(error)) { widgetErrors.push(error) } else if (error && !validString(error)) { widgetErrors.push('An unknown error occurred, please reload the page. If the problem persists contact-us at: info@ordertracker.com') } if (widgetErrors.length) { throwErrors(widgetErrors) } else { if (data.ok) { Object.keys(ordertrackerProperties).forEach(function(key) { if (window.xprops[key]) { widgetOptions[key] = window.xprops[key] } }) } else { widgetOptions = data if (window.xprops.trackingNumber) { widgetOptions.trackingNumber = window.xprops.trackingNumber } } formsAnimation() ajax({ method: 'GET', url: '//' + apiEndpoint + '/public/widget-constants' }, function(data, status, error) { widgetConstants = data var size = validString(widgetOptions.size) && ['large', 'medium', 'small'].includes(widgetOptions.size.toLowerCase()) ? widgetOptions.size.toLowerCase() : 'large' var language = getLanguage() var languageStrings = getStrings(language, widgetOptions.shopify) var theme = validString(widgetOptions.theme) && widgetOptions.theme.toLowerCase() === 'dark' ? 'dark' : 'light' var shape = validString(widgetOptions.shape) && widgetOptions.shape.toLowerCase() === 'geometric' ? 'geometric' : 'rounded' var buttonColor = validString(widgetOptions.buttonColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.buttonColor) ? widgetOptions.buttonColor : null var buttonLabelColor = validString(widgetOptions.buttonLabelColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.buttonLabelColor) ? widgetOptions.buttonLabelColor : null var inputColor = validString(widgetOptions.inputColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.inputColor) ? widgetOptions.inputColor : null var inputBorder = validString(widgetOptions.inputBorder) && widgetOptions.inputBorder.toLowerCase() === 'thin' ? 'thin' : 'thick' var trackingPrimaryColor = validString(widgetOptions.trackingPrimaryColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.trackingPrimaryColor) ? widgetOptions.trackingPrimaryColor : null var trackingSecondaryColor = validString(widgetOptions.trackingSecondaryColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.trackingSecondaryColor) ? widgetOptions.trackingSecondaryColor : null var trackingBarColor = validString(widgetOptions.trackingBarColor) && /^#[0-9a-zA-Z]+$/.test(widgetOptions.trackingBarColor) ? widgetOptions.trackingBarColor : null var deliveryForecastClass = widgetOptions.deliveryForecast === false || widgetOptions.deliveryForecast === 'false' ? 'hide-estimation' : 'show-estimation' var showFailoverEvent = widgetOptions.showFailoverEvent === true && widgetOptions.showFailoverEvent === 'true' var showCustomClearanceDetails = widgetOptions.showCustomClearanceDetails !== false && widgetOptions.showCustomClearanceDetails !== 'false' var displayForm = widgetOptions.trackingNumber ? 'hide-form' : 'show-form' var customCss = widgetOptions.customCss ? widgetOptions.customCss : null var ctn = document.getElementById('widget') var fontAsset = document.createElement('link') fontAsset.setAttribute('rel', 'stylesheet') fontAsset.setAttribute('type', 'text/css') fontAsset.setAttribute('href', 'https://fonts.googleapis.com/css?family=' + getFont().split(' ').join('+')) document.querySelector('head').appendChild(fontAsset) document.querySelector('html').style.fontFamily = '"' + getFont() + '", "serif"' document.querySelector('body').style.fontFamily = '"' + getFont() + '", "serif"' var form = document.querySelector('#widget form') var fieldset = document.querySelector('#widget fieldset') var input = document.querySelector('#widget input') var inputLabel = document.querySelector('#widget label') var button = document.querySelector('#widget a') var buttonLabel = widgetOptions.buttonLabel || languageStrings.buttonLabelShort var inputPlaceholder = window.innerWidth < 550 ? languageStrings.inputPlaceholderShort : languageStrings.inputPlaceholder var warnWrongNumber = function() { fieldset.classList.add('wrong') setTimeout(function() { fieldset.classList.remove('wrong') }, 750) } if (widgetOptions.trackingNumber) { loadData({ ctn: ctn, number: widgetOptions.trackingNumber, button: button, showCouriersDetails: widgetOptions.showCouriersDetails, showTrackingDetails: widgetOptions.showTrackingDetails, showFailoverEvent: showFailoverEvent, showCustomClearanceDetails: showCustomClearanceDetails, trackingPrimaryColor: trackingPrimaryColor, trackingSecondaryColor: trackingSecondaryColor, trackingBarColor: trackingBarColor, theme: theme, deliveryForecast: widgetOptions.deliveryForecast, courierLabel: widgetOptions.courierLabel, shipmentOriginCountry: widgetOptions.shipmentOriginCountry, customSemantics: widgetOptions.customSemantics, customEvents: widgetOptions.customEvents }, languageStrings) } form.addEventListener('submit', function(e) { e.preventDefault() }) input.addEventListener('keyup', function(e) { var number = input.value.trim().toUpperCase() fieldset.classList.remove('wrong') if (e.keyCode == '13') { e.preventDefault() if (validNumber(number, widgetOptions.shopify)) { loadData({ ctn: ctn, number: number, button: button, showCouriersDetails: widgetOptions.showCouriersDetails, showTrackingDetails: widgetOptions.showTrackingDetails, showFailoverEvent: showFailoverEvent, showCustomClearanceDetails: showCustomClearanceDetails, trackingPrimaryColor: trackingPrimaryColor, trackingSecondaryColor: trackingSecondaryColor, trackingBarColor: trackingBarColor, theme: theme, deliveryForecast: widgetOptions.deliveryForecast, courierLabel: widgetOptions.courierLabel, shipmentOriginCountry: widgetOptions.shipmentOriginCountry, customSemantics: widgetOptions.customSemantics, customEvents: widgetOptions.customEvents }, languageStrings) } else { warnWrongNumber() } } }) button.addEventListener('click', function(e) { e.preventDefault() fieldset.classList.remove('wrong') var number = input.value.trim().toUpperCase() if (validNumber(number, widgetOptions.shopify)) { loadData({ ctn: ctn, number: number, button: button, showCouriersDetails: widgetOptions.showCouriersDetails, showTrackingDetails: widgetOptions.showTrackingDetails, showFailoverEvent: showFailoverEvent, showCustomClearanceDetails: showCustomClearanceDetails, trackingPrimaryColor: trackingPrimaryColor, trackingSecondaryColor: trackingSecondaryColor, trackingBarColor: trackingBarColor, theme: theme, deliveryForecast: widgetOptions.deliveryForecast, courierLabel: widgetOptions.courierLabel, shipmentOriginCountry: widgetOptions.shipmentOriginCountry, customSemantics: widgetOptions.customSemantics, customEvents: widgetOptions.customEvents }, languageStrings) } else { warnWrongNumber() } }) fieldset.classList.add(inputBorder) inputLabel.innerHTML = widgetOptions.inputPlaceholder || inputPlaceholder button.innerHTML = '' + buttonLabel + '' if (buttonColor) { button.style.background = buttonColor } if (buttonLabelColor) { button.style.color = buttonLabelColor loadingIcon = loadingIcon.split('OT_VAR_1').join(buttonLabelColor) } else { loadingIcon = loadingIcon.split('OT_VAR_1').join('#ffffff') } if (inputColor) { fieldset.style.borderColor = inputColor inputLabel.style.color = inputColor } if (customCss) { var style = document.createElement('style') style.innerHTML = customCss document.getElementsByTagName('head')[0].appendChild(style) } ctn.classList.add('active', size, theme, shape, deliveryForecastClass, displayForm) }) } }) }) }