function form2Obj(f) { var elemArray = f.elements; var formObj = {}; for (k = 0; k < elemArray.length; k++) { var input = elemArray[k]; if (!input || !input.name || !input.value) continue; if (input.type === 'radio' && input.checked === true) { formObj[input.name] = input.value; } else if (input.type !== 'radio') { formObj[input.name] = input.value; } } return formObj; } (function (w, d) { var widgetUrl = "https://widget.trustist.com"; var assetUrl = "https://wassets.trustist.com/assets"; var businessKey = "kee1qzfn"; var locationKey = "2kcyv0ov"; var tenantKey = ""; var template = '
'; var questionTemplate = '

'; var questions = [ "", // 0 "
", // 1 - name and email address "
", // 2 - comments "", // 3 "", // 4 "
" + " " + " " + " " + " " + " " + "
", // 5 - overall star rating "", // 6 "", // 7 "
", // 8 - first name, last name, email, postcode "", // 9 "
" // 10 - first name, last name, email, phone ]; var completeTemplate = '
{{thankYouText}}
'; function start(f) { /in/.test(d.readyState) ? setTimeout(start, 5, f) : f(); } // add tags tsAddCssTag("https://fonts.googleapis.com/css?family=Roboto"); tsAddCssTag(assetUrl + "/css/cleanslate.css"); tsAddCssTag(assetUrl + "/css/survey.css"); start(function () { // iterate over all widgets on the page and render var divs = d.querySelectorAll("[ts-reviewWidget],div.ts-reviewWidget"); if (divs.length === 0) { return; } for (var i = 0; i < divs.length; i++) { tsDisplayWidget(divs[i], businessKey, locationKey); } }); function tsDisplayWidget(target, businessKey, locationKey) { // get options before cleanslate var options = tsReadAttributes(target); target.className = "cleanslate"; // see if the widget requested a different location var lkey = options.locationKey || locationKey; var bkey = options.businessKey || businessKey; // put the container on the page target.innerHTML = template .replace("{{font-family}}", options.fontFamily) .replace("{{color}}", options.color) .replace(new RegExp("{{businesskey}}", "g"), bkey) .replace(new RegExp("{{locationkey}}", "g"), lkey); // IE6 and below will not work // draw reviews var xhr = new XMLHttpRequest(); var url = widgetUrl + "/surveydata?businessKey=" + bkey; if (typeof lkey !== "undefined" && lkey !== "") url += "&locationKey=" + lkey; xhr.open("GET", url); xhr.onload = function () { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); tsDrawSurvey(target, options, response); } }; xhr.send(); if (options.completeUrl != null) { // load url and replace content of completeTemplate var xhrComplete = new XMLHttpRequest(); xhrComplete.open("GET", options.completeUrl); xhrComplete.onload = function () { if (xhrComplete.status === 200) { completeTemplate = xhrComplete.responseText; } }; xhrComplete.send(); } } function tsDrawSurvey(target, options, response) { var allQuestionsTemplate = ""; if (!response.questions) return; for (var i = 0; i < response.questions.length; i++) { var question = response.questions[i]; var currentTemplate = questions[question.type]; if (typeof currentTemplate !== "undefined") { allQuestionsTemplate += questionTemplate.replace("", currentTemplate).replace("", question.value); } } target.innerHTML = target.innerHTML .replace("", allQuestionsTemplate) .replace("{{submitText}}", response.submitText ?? "ADD REVIEW") .replace(new RegExp("{{firstName}}", "g"), options.firstName) .replace(new RegExp("{{lastName}}", "g"), options.lastName) .replace(new RegExp("{{email}}", "g"), options.email); // wire up the submit event var btnSubmit = d.getElementById("tsSubmit"); btnSubmit.addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); this.disabled = true; var inputs = this.form.querySelectorAll("[required]"); var valid = true; for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; var val = input.value; if (val === "") { input.style.setProperty("border-color", "red", "important"); valid = false; this.disabled = false; } } if (valid) { var json = form2Obj(this.form); var data = { data: json }; var request = new XMLHttpRequest(); var url = widgetUrl + "/surveypost"; var async = true; var method = "POST"; request.onload = function () { target.innerHTML = completeTemplate .replace("{{thankYouText}}", response.thankYouText ?? "Thank you for your review"); }; request.open(method, url, async); request.setRequestHeader("Content-Type", "application/json"); request.send(JSON.stringify(data)); } }, false); } function tsReadAttributes(target) { return { locationKey: target.getAttribute("ts-location"), businessKey: target.getAttribute("ts-business"), fontFamily: target.getAttribute("ts-font-family") || "Lato, Helvetica, sans-serif", color: target.getAttribute("ts-color") || "#5a6a74", firstName: target.getAttribute("ts-firstname") || "", lastName: target.getAttribute("ts-lastname") || "", email: target.getAttribute("ts-email") || "", completeUrl: target.getAttribute("ts-completeurl") || null, }; } function tsCheckIfIncluded(file) { var links = d.getElementsByTagName("link"); for (var i = 0; i < links.length; i++) { if (links[i].href.substr(-file.length) === file) return true; } var scripts = d.getElementsByTagName("script"); for (var j = 0; j < scripts.length; j++) { if (scripts[j].src.substr(-file.length) === file) return true; } return false; } function tsAddCssTag(url) { var includedAlready = tsCheckIfIncluded(url); var head = d.getElementsByTagName("head")[0]; if (!includedAlready) { var tag = d.createElement("link"); tag.rel = "stylesheet"; tag.type = "text/css"; tag.href = url; head.appendChild(tag); } } })(window, document);