(function (w, d) {
w.tsUpdateMetaDescription = function () {
var existingTitle = document.querySelector('title').innerText;
document.querySelector('title').innerText = "***** Rating: 5.0 - 7 Reviews - " + existingTitle;
var existingDesc = document.querySelector('meta[name="description"]').getAttribute("content");
document.querySelector('meta[name="description"]').setAttribute("content", "***** Rating: 5.0 - 7 Reviews - " + existingDesc);
};
var timestamp = document.createElement("meta");
timestamp.setAttribute("name", "ts-timestamp");
timestamp.setAttribute("content", new Date().toLocaleString());
document.head.appendChild(timestamp);
var businessKey = "1kjr12df";
var locationKey = "nns5lj8f";
var tenantKey = "";
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbnRpdHlJZCI6Im5uczVsajhmIiwiZXhwIjoxNzI2NTE4OTE1LCJpc3MiOiJUcnVzdGlzdCIsImF1ZCI6IldpZGdldHMifQ.tFIF2TWjIDVOhsHa50LKbUMLWfeDWFk03k5DROqJ2UI";
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 = "Pi Accountants Buckinghamshire";
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/51f1eb3a-d1b2-447b-85a6-74da56606ae6.png\",\"image\":[\"https://content.trustist.com/brandlogos/51f1eb3a-d1b2-447b-85a6-74da56606ae6.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/Review-pi-accountants-buckinghamshire-Reviews-40206.html\"],\"@context\":\"http://schema.org\",\"brand\":{\"@type\":\"Organization\",\"@id\":null,\"description\":null,\"logo\":\"https://content.trustist.com/brandlogos/51f1eb3a-d1b2-447b-85a6-74da56606ae6.png\",\"image\":[\"https://content.trustist.com/brandlogos/51f1eb3a-d1b2-447b-85a6-74da56606ae6.png\"],\"name\":\"Pi Accountants\",\"alternateName\":null,\"hasMap\":null,\"geo\":null,\"telephone\":null,\"url\":null,\"address\":null,\"branchOf\":null,\"openingHoursSpecification\":null,\"sameAs\":null},\"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":5,\"bestRating\":5,\"worstRating\":1,\"reviewCount\":7},\"review\":{\"@type\":\"Review\",\"url\":\"https://www.trustist.com/local-reviews/Review-pi-accountants-buckinghamshire-Reviews-40206.html\",\"author\":{\"@type\":\"Person\",\"name\":\"Juliet\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":null,\"addressLocality\":null,\"addressRegion\":null,\"postalCode\":null,\"addressCountry\":null}},\"datePublished\":\"2022-01-20T00:00:00.000Z\",\"headline\":\"\",\"isBasedOn\":null,\"reviewBody\":\"Pi Accountants are more than just Accountants. It feels like they are 24/7 to help with any problems that may arise. Apart from the advice that has always for us been exceptional. the support they give is phenomenal. Angelique and her team are professional, innovative, and most important just really decent people to deal with. No matter how large or small your business Pi accountants will work with and for you. We could not recommend them more.\",\"reviewRating\":{\"@type\":\"Rating\",\"ratingValue\":5,\"bestRating\":5,\"worstRating\":1},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Trustist\",\"sameAs\":\"https://www.trustist.com\"},\"reply\":null,\"replyDate\":null,\"subject\":null},\"mpn\":\"{{url}}\",\"sku\":\"{{url}}\"},{\"@type\":\"LocalBusiness\",\"@id\":\"https://www.trustist.com/local-reviews/Review-pi-accountants-buckinghamshire-Reviews-40206.html\",\"description\":null,\"logo\":\"https://content.trustist.com/brandlogos/51f1eb3a-d1b2-447b-85a6-74da56606ae6.png\",\"image\":[\"https://content.trustist.com/brandlogos/51f1eb3a-d1b2-447b-85a6-74da56606ae6.png\"],\"name\":\"Pi Accountants\",\"alternateName\":\"Pi Accountants Buckinghamshire\",\"hasMap\":\"https://maps.google.com/maps?cid=15854983133673602537\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"\",\"longitude\":\"\"},\"telephone\":\"\",\"url\":null,\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"\",\"addressLocality\":\"\",\"addressRegion\":null,\"postalCode\":null,\"addressCountry\":null},\"branchOf\":{\"@type\":\"Organization\",\"name\":\"Pi Accountants\",\"sameAs\":null},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"closes\":\"17:00:00\",\"dayOfWeek\":\"http://schema.org/Monday\",\"opens\":\"09:00:00\"},{\"@type\":\"OpeningHoursSpecification\",\"closes\":\"17:00:00\",\"dayOfWeek\":\"http://schema.org/Tuesday\",\"opens\":\"09:00:00\"},{\"@type\":\"OpeningHoursSpecification\",\"closes\":\"17:00:00\",\"dayOfWeek\":\"http://schema.org/Wednesday\",\"opens\":\"09:00:00\"},{\"@type\":\"OpeningHoursSpecification\",\"closes\":\"17:00:00\",\"dayOfWeek\":\"http://schema.org/Thursday\",\"opens\":\"09:00:00\"},{\"@type\":\"OpeningHoursSpecification\",\"closes\":\"17:00:00\",\"dayOfWeek\":\"http://schema.org/Friday\",\"opens\":\"09:00:00\"}],\"sameAs\":[\"https://www.facebook.com/1269327966531882\",\"https://maps.google.com/maps?cid=15854983133673602537\"],\"@context\":\"http://schema.org\",\"aggregateRating\":null,\"review\":null,\"paymentAccepted\":null,\"makesOffer\":null}]";
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 7 Customer Reviews ';
// draw the dropdown
var dropdownDiv = d.createElement('div');
dropdownDiv.setAttribute("id", "ts-style");
dropdownDiv.setAttribute("class", "cleanslate");
dropdownDiv.innerHTML = ' ';
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);