var hyperiseSnippet = function() { var defaultUrl = 'https://img.hyperise.io/i/{{image_hash}}.png'; var serviceUrl = 'https://app.hyperise.io/snippets/r/fetch-url'; var settings = {}; var paramId = 0; var originalId = 0; var dynamicData = {}; callAjax = function(url, data, callback) { var xmlhttp; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { callback(xmlhttp.response); } } xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-Type", "application/json"); xmlhttp.send(JSON.stringify(data)); } imageBlock = function(url) { var imageId = settings.imageId ? settings.imageId : 'hyperiseImage1'; document.getElementById(imageId).src = url; return true; } function replaceMacroNodes(parent) { if (parent.nodeType == 1 && parent.outerHTML.indexOf("\{\{") != -1) { var oldValue = parent.outerHTML; for (key in dynamicData) { var macroField = "\{\{" + key + "\}\}"; oldValue = oldValue.replace(new RegExp(macroField, 'g'), dynamicData[key]); } parent.outerHTML = oldValue; } if (parent.nodeType == 3 && parent.nodeValue.indexOf("\{\{") != -1) { for (key in dynamicData) { var macroField = "\{\{" + key + "\}\}"; parent.nodeValue = parent.nodeValue.replace(new RegExp(macroField, 'g'), dynamicData[key]); } } if (parent.childNodes.length == 0) { return; } for (var i = 0; i < parent.childNodes.length; i++) { replaceMacroNodes(parent.childNodes[i]); } } fbPixelBlock = function() { var pixelId = settings.pixelId || false; if (!pixelId) { return; } !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', pixelId); fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: [originalId], content_type: 'product' }); document.body.insertAdjacentHTML('beforeend', ''); } function getParams (url) { var params = {}; var parser = document.createElement('a'); parser.href = url; var query = parser.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); params[pair[0]] = decodeURIComponent(pair[1]); } return params; }; function setCookie(name,value,days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; domain=" + location.host + "; path=/; SameSite=None; Secure"; } function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { document.cookie = name+'=; Max-Age=-99999999;'; } this.init = function(params) { settings = params; var imageTemplate = settings.imageTemplate || ''; if (!imageTemplate) { return false; } var href = window.location.href; if (href.split('?').length == 1 || !href.split('?')[1].length) { var fromCookies = getCookie('hr_qs'); if (fromCookies) { href = href.split('?')[0] + '?' + fromCookies; } } else { setCookie('hr_qs', href.split('?')[1]); } var url = new URL(href); originalId = url.searchParams.get("utm_hyperef") || ''; //if (!originalId) { //imageBlock(defaultUrl.replace("{{image_hash}}", imageTemplate)); //return; //} var data = { id: originalId, image_hash: imageTemplate, params: getParams(url) } callAjax(serviceUrl, data, function(response) { var serviceData = JSON.parse(response); if (serviceData.status == 'success') { imageBlock(serviceData.url); if (originalId) { fbPixelBlock(); } if (serviceData.dynamic_data) { dynamicData = serviceData.dynamic_data; replaceMacroNodes(document.body); } } else { //imageBlock(defaultUrl.replace("{{image_hash}}", imageTemplate)); } }); } } var hyperise = new hyperiseSnippet();