(function (w, d) {
w.tsUpdateMetaDescription = function () {
var existingTitle = document.querySelector('title').innerText;
document.querySelector('title').innerText = "***** Rating: 5.0 - 227 Reviews - " + existingTitle;
var existingDesc = document.querySelector('meta[name="description"]').getAttribute("content");
document.querySelector('meta[name="description"]').setAttribute("content", "***** Rating: 5.0 - 227 Reviews - " + existingDesc);
};
var timestamp = document.createElement("meta");
timestamp.setAttribute("name", "ts-timestamp");
timestamp.setAttribute("content", new Date().toLocaleString());
document.head.appendChild(timestamp);
var businessKey = "1e6oe62a";
var locationKey = "";
var tenantKey = "";
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbnRpdHlJZCI6IjFlNm9lNjJhIiwiZXhwIjoxNzMwOTQ0MDg2LCJpc3MiOiJUcnVzdGlzdCIsImF1ZCI6IldpZGdldHMifQ.vcrzKZjwXBsj_x49lSV9KyL7RB95YLybxQb-Fh6Y8_0";
function start(f) { /in/.test(document.readyState) ? setTimeout(start, 5, f) : f(); }
tsAddCssTag("https://wassets.trustist.com/assets/css/cleanslate.css");
tsAddCssTag("https://wassets.trustist.com/assets/css/header.css");
start(function () {
if (d.getElementById("ts-json") === null) {
var filter = Array.prototype.filter;
var els = d.querySelectorAll('h1,title,h2');
var productName = "UK Boiler Fit";
var field = filter.call(els, function (node) {
return node.innerText != "";
})[0];
if (typeof field !== "undefined") {
productName = field.innerText;
}
var json = "[{\"@type\":\"Product\",\"@id\":\"{{url}}#trustist\",\"description\":null,\"logo\":\"https://content.trustist.com/brandlogos/0add1786-a2d2-4837-b783-344d258ffd38.png\",\"image\":[\"https://content.trustist.com/brandlogos/0add1786-a2d2-4837-b783-344d258ffd38.png\"],\"name\":\"{{productName}}\",\"alternateName\":null,\"hasMap\":null,\"geo\":null,\"telephone\":null,\"url\":\"{{url}}\",\"address\":null,\"branchOf\":null,\"openingHoursSpecification\":null,\"sameAs\":[\"https://www.trustist.com/local-reviews/Website-Review-uk-boiler-fit-reviews-4328.html\"],\"@context\":\"http://schema.org\",\"brand\":{\"@type\":\"Organization\",\"@id\":null,\"description\":null,\"logo\":\"https://content.trustist.com/brandlogos/0add1786-a2d2-4837-b783-344d258ffd38.png\",\"image\":[\"https://content.trustist.com/brandlogos/0add1786-a2d2-4837-b783-344d258ffd38.png\"],\"name\":\"UK Boiler Fit\",\"alternateName\":null,\"hasMap\":null,\"geo\":null,\"telephone\":null,\"url\":\"http://www.ukboilerfit.co.uk/\",\"address\":null,\"branchOf\":null,\"openingHoursSpecification\":null,\"sameAs\":null},\"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":5,\"bestRating\":5,\"worstRating\":1,\"reviewCount\":227},\"review\":null,\"mpn\":\"{{url}}\",\"sku\":\"{{url}}\"}]";
var a = d;
var c = a.createElement("script");
c.type = 'application/ld+json';
c.id = 'ts-json';
c.innerText = json
.replace(new RegExp("{{url}}", 'g'), w.location.href)
.replace("{{productName}}", productName)
.replace("\"{{productDesc}}\"", JSON.stringify((d.body.innerText || d.body.textContent).replace(/[^ -~]+/g, "").substring(0, 200) + "..."));
a = a.getElementsByTagName("head")[0];
a.appendChild(c);
}
// iterate over all widgets on the page and render
var div = document.querySelector("[ts-headerWidget],div.ts-headerWidget");
if (div) {
tsDisplayWidget(div, businessKey, locationKey, tenantKey);
}
else {
}
});
function tsDisplayWidget(target) {
// get options before cleanslate
var options = tsReadAttributes(target);
// draw the main template
target.innerHTML = '
5.0 /5.0
Based on 227 Customer Reviews ';
// draw the dropdown
var dropdownDiv = d.createElement('div');
dropdownDiv.setAttribute("id", "ts-style");
dropdownDiv.setAttribute("class", "cleanslate");
dropdownDiv.innerHTML = ' Showing of 227 Customer Reviews View all ';
d.body.appendChild(dropdownDiv);
// draw the reviews
var xhr = new XMLHttpRequest();
var url = tsBuildUrl(options);
xhr.open("GET", url);
xhr.onload = function () {
if (xhr.status === 200 && xhr.responseText !== "") {
var reviews = JSON.parse(xhr.responseText);
tsDrawReviews(dropdownDiv, reviews, options);
tsWireUp(options);
} else {
}
};
xhr.send();
}
function tsBuildUrl(options) {
var url = "https://widget.trustist.com/reviewlistdata?v=1&accessToken=" + accessToken + "&pageNum=1&pageSize=" + options.pageSize;
if (typeof tenantKey !== "undefined" && tenantKey !== "") url += "&tenantKey=" + tenantKey;
if (typeof businessKey !== "undefined" && businessKey !== "") url += "&businessKey=" + businessKey;
if (typeof locationKey !== "undefined" && locationKey !== "") url += "&locationKey=" + locationKey;
if (options.ratingsAbove > 0) url += "&ratingFrom=" + options.ratingsAbove;
if (options.exclude > '') url += "&exclude=" + options.exclude;
return url;
}
function tsDrawReviews(target, reviews, options) {
var reviewContent = '';
var template = '
/5.0 ';
var textTemplate = ' ';
var replyTemplate = '';
reviews.forEach(function (review) {
var d = new Date(review.datePublished);
var reviewDate = d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear();
var thisReview = template
.replace('{{reviewSourceLogo}}', review.image)
.replace('', review.author.name)
.replace('', reviewDate)
.replace('', (review.reviewRating.ratingValue / 2).toFixed(1));
if (review.reviewBody > '') {
thisReview = thisReview.replace(
'',
textTemplate.replace('', review.reviewBody));
}
if (review.reply > '') {
var replyDate = new Date(review.replyDate);
var replyDateString = replyDate.getDate() + " " + months[replyDate.getMonth()] + " " + replyDate.getFullYear();
thisReview = thisReview.replace(
'',
replyTemplate
.replace('', review.reply)
.replace('', replyDateString));
}
reviewContent += thisReview;
});
target.innerHTML = target.innerHTML.replace('', reviewContent).replace('', reviews.length);
}
function tsReadAttributes(target) {
return {
pageSize: target.getAttribute("ts-page-size") || 20,
position: target.getAttribute("ts-position") || "absolute", // fixed or absolute
ratingsAbove: parseInt(target.getAttribute("ts-ratings-above")) || 0,
exclude: target.getAttribute("ts-exclude") || "",
};
}
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);
}
}
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 tsSetStyle(element, value) {// Specific old IE
if (document.all) {
element.style.setAttribute('cssText', value);
} else {
element.setAttribute('style', value);
}
}
function tsAddEventToMany(controls, eventName, action) {
for (var i = 0; i < controls.length; i++) {
controls[i].addEventListener(eventName, action);
}
}
function tsSetArrowPosition(options) {
var TSDropArrow = d.getElementById('ts-top-arrow');
var TSDropArrowRect = TSDropArrow.getBoundingClientRect();
var TSHeaderRect = d.getElementById('ts-review-drop-trigger').getBoundingClientRect();
var TSStarsRect = d.getElementById('ts-stars').getBoundingClientRect();
var TSDropRect = d.getElementById('ts-review-dropdown').getBoundingClientRect();
var middle = TSStarsRect.left + (TSStarsRect.width / 2) - (TSDropArrowRect.width / 2);
if (options.position === 'fixed') {
tsSetStyle(TSDropArrow, 'left: ' + middle + 'px !important; top: ' + (TSHeaderRect.top + TSHeaderRect.height) + 'px !important;');
} else {
var arrowOffset = middle - TSDropRect.left;
tsSetStyle(TSDropArrow, 'left: ' + arrowOffset + 'px !important;');
}
}
var resizeTimer;
function tsSetDropDownDimensions(options) {
var screenWidth = w.innerWidth;
var TSDrop = d.getElementById('ts-review-dropdown');
var TSDropRect = TSDrop.getBoundingClientRect();
var TSHeaderRect = d.getElementById('ts-review-drop-trigger').getBoundingClientRect();
var TSDropArrowRect = d.getElementById('ts-top-arrow').getBoundingClientRect();
var TSStarsRect = d.getElementById('ts-stars').getBoundingClientRect();
var middle = TSStarsRect.left + (TSStarsRect.width / 2) - (TSDropArrowRect.width / 2);
var dropTop = 'top: ' + (TSHeaderRect.top + TSHeaderRect.height + TSDropArrowRect.height) + 'px !important;';
if (TSDropRect.width + 20 >= screenWidth) {
tsSetStyle(TSDrop, 'left: 0 !important; right: 0 !important; ' + dropTop);
} else if (middle <= (screenWidth / 3)) {
// console.log("init left side " + middle);
tsSetStyle(TSDrop, 'left: 20px !important; right: auto !important; ' + dropTop);
} else if (middle > (screenWidth / 3) && middle <= ((screenWidth / 3) * 2)) {
// console.log("init middle " + middle);
tsSetStyle(TSDrop, 'left: ' + ((screenWidth / 2) - (TSDropRect.width / 2)) + 'px !important; right: auto !important; ' + dropTop);
} else if (middle > ((screenWidth / 3) * 2)) {
// console.log("init right side " + middle);
tsSetStyle(TSDrop, 'left: auto !important; right: 20px !important; ' + dropTop);
}
clearTimeout(resizeTimer);
resizeTimer = setTimeout(tsSetArrowPosition, 250, options);
}
function tsWireUp(options) {
// var TSHeader = d.getElementById('ts-review-drop-trigger');
var TSDrop = d.getElementById('ts-review-dropdown');
var TSDropArrow = d.getElementById('ts-top-arrow');
// position the dynamic elements according to header type
var position = options.position === 'fixed' ? 'ts-fixed' : 'ts-absolute';
TSDrop.classList.add(position);
TSDropArrow.classList.add(position);
//// create a hidden element to allow the mouse to transition between the header and the dynamic areas
//var dummyDiv = d.createElement('div');
//dummyDiv.id = "ts-style";
//dummyDiv.classList.add("ts-review-drop");
//dummyDiv.classList.add("ts-fixed")
//dummyDiv.offsetLeft = TSHeader.offsetLeft;
//dummyDiv.offsetWidth = TSHeader.offsetWidth;
//dummyDiv.offsetTop = TSHeader.offsetTop + TSHeader.offsetHeight;
//dummyDiv.offsetHeight = TSDropArrow.offsetHeight;
//TSDrop.appendChild(dummyDiv);
// set initial dimensions left to right
tsSetDropDownDimensions(options);
// wire up events
var mouseAreas = d.querySelectorAll('.ts-review-drop');
tsAddEventToMany(mouseAreas, 'mouseover', function (e) {
TSDrop.classList.add('ts-drop-active');
setTimeout(function () {
TSDrop.classList.add('ts-can-close');
}, 600);
});
tsAddEventToMany(mouseAreas, 'mouseout', function (e) {
TSDrop.classList.remove('ts-drop-active');
TSDrop.classList.remove('ts-can-close');
});
d.getElementById('ts-mobile-close').addEventListener('click', function (e) {
TSDrop.classList.remove('ts-drop-active');
TSDrop.classList.remove('ts-can-close');
});
w.addEventListener('resize', function () { tsSetDropDownDimensions(options); });
}
})(window, document);