1jQuery(document).ready(function( $ ) { 2 3 // START Hamburger menu 4 $(document).on('mouseup', function(e) { 5 // cache your elements 6 const $target = $(e.target); 7 const $containers = $('#masthead, .mega-menu, .menu-button, .menu-button-desktop, .responsive-navigation, .quote-modal, .simple-menu-content'); 8 9 // check if click is outside all of these 10 if (!$target.closest($containers).length) { 11 $('.menu-toggle, .menu-button-desktop').removeClass('toggled'); 12 $('.menu-toggle').closest('header').find('.site-navigation').removeClass('active'); 13 $('body').removeClass('disabled'); 14 $('html').removeClass('no-scroll'); 15 16 $('#masthead').removeClass('header--mega-menu'); 17 $('.site-header').removeClass('show-mega-menu'); 18 $('.desktop-toggle-menu-contents').removeClass('active'); 19 $('.mega-menu-parent, .header-menu-parent, .header-menu-parent, .mega-menu-container, .parent-mega-menu, .parent-header-menu, .mega-menu-button, .mega-menu-mobile-button, .mega-menu-content') 20 .removeClass('active d-active'); 21 $('.mega-menu-parent, #search-mega-menu-toggle').removeClass('d-active m-active'); 22 $('.site-header-content').removeClass('d-toggled'); 23 } 24 }); 25 26 $(document).on('click', '.menu-button', function(){ 27 $(this).toggleClass('active'); 28 $(this).find('.menu-toggle').toggleClass('toggled'); 29 $(this).closest('header').find('.site-navigation').toggleClass('active'); 30 $('body').toggleClass('disabled'); 31 $('html').toggleClass('no-scroll'); 32 33 // Clear Selections 34 $('.mega-menu-content, .mega-menu-parent, .parent-mega-menu').removeClass('m-active'); 35 $('.mega-menu-mobile-button').removeClass('active'); 36 $('.mega-menu-container, .mega-menu-parent, #search-mega-menu-toggle').removeClass('active d-active m-active'); 37 38 $('.desktop-toggle-menu-contents .mega-menu-container').toggleClass('d-active'); 39 $('.mega-menu-parent[data-target="personal"], .parent-mega-menu[data-menu="personal"], .mega-menu-parent[data-target="first"], .parent-mega-menu[data-menu="first"]').addClass('m-active'); 40 }); 41 42 $(document).on('click', '.menu-button-desktop', function(){ 43 $(this).toggleClass('toggled'); 44 $('.menu-button').find('.menu-toggle').toggleClass('toggled'); 45 $(this).closest('header').find('.site-navigation').toggleClass('active'); 46 $('body').toggleClass('disabled'); 47 $('html').toggleClass('no-scroll'); 48 $('.desktop-toggle-menu-contents').toggleClass('active'); 49 $('.site-header-content').toggleClass('d-toggled'); 50 51 // Clear Selections 52 $('.mega-menu-content, .mega-menu-parent, .parent-mega-menu').removeClass('d-active m-active'); 53 $('.mega-menu-mobile-button').removeClass('active'); 54 $('.mega-menu-container, .mega-menu-parent, #search-mega-menu-toggle').removeClass('active d-active m-active'); 55 56 $('#masthead').toggleClass('header--mega-menu'); 57 58 $('.desktop-toggle-menu-contents .mega-menu-container').toggleClass('d-active'); 59 $('.desktop-toggle-menu-contents .parent-mega-menu[data-menu="Services"], .desktop-toggle-menu-contents .mega-menu-parent[data-target="Services"]').addClass('d-active m-active'); 60 }); 61 62 $(document).on('click', '.menu-bar-heading', function(){ 63 $("html, body").animate({ scrollTop: 0 }, "slow"); 64 return false; 65 }); 66 67 $(document).on('click', '.page-menu-nav-toggle', function(){ 68 $(this).toggleClass('m-active'); 69 $(this).next('div').toggleClass('m-active'); 70 }); 71 72 $(document).on('click', '.page-menu-bar-content a', function(){ 73 $(this).closest('.page-menu-bar-col').find('.page-menu-nav-toggle').removeClass('m-active'); 74 $(this).closest('.page-menu-bar-col').find('.page-menu-nav-toggle').next('div').removeClass('m-active'); 75 }); 76 77 $(document).on('click', '.mobile-back-link', function(){ 78 // Clear Selections 79 $('.mega-menu-content, .mega-menu-parent, .parent-mega-menu').removeClass('m-active'); 80 $('.mega-menu-container, .mega-menu-parent, #search-mega-menu-toggle').removeClass('active d-active m-active'); 81 82 });
83 84 $('.sub-menu-toggle').click(function(){ 85 $(this).next().slideToggle(); 86 }); 87 88 // Mobile sub nav toggle 89 $(document).on('click', '.sub-nav-toggle', function(e){ 90 if ($(window).width() <= 1023) { 91 $(this).prev().toggleClass('active'); 92 $(this).toggleClass('active'); 93 $(this).next().slideToggle(400); 94 } 95 }); 96 // END Hamburger menu 97 98 // Open video popup 99 $(document).on('click', '.e-video-button', function () { 100 var heading = $(this).text(), 101 url = $(this).attr('data-video'); 102 103 $('.video-popup').removeClass('active').addClass('active'); 104 $('html').removeClass('no-scroll'); 105 106 setTimeout(function () { 107 $('html').addClass('no-scroll'); 108 }, 150); 109 }); 110 111 $(".video-popup-close").on("click", function () { 112 setTimeout(function () { 113 $('.video-popup').removeClass('active'); 114 $('html').removeClass('no-scroll'); 115 }, 150); 116 }); 117 118 // Close popup 119 $('.video-popup').mouseup(function (e) { 120 if (!$('.video-popup-content').is(e.target) && $('.video-popup-wrapper').has(e.target).length === 0) { 121 $('.video-popup').removeClass('active'); 122 $('html').removeClass('no-scroll'); 123 } 124 }); 125 126 $(document).on('click', '.e-download', function () { 127 $('.e-page-2').addClass('active'); 128 }); 129 130 $(document).on('click, mouseover', '.results-button', function () { 131 $(this).hide(); 132 $('.results-form').show(); 133 }); 134 135 //Add current class to mega menu item 136 $('.mega-menu-all-link a.current').closest('.parent-mega-menu[data-menu="personal"]').closest('.mega-menu').find('.mega-menu-parent[data-target="personal"]').addClass('current'); 137 $('.current_page_item').closest('.parent-mega-menu[data-menu="personal"]').closest('.mega-menu').find('.mega-menu-parent[data-target="personal"]').addClass('current'); 138 139 $('.mega-menu-all-link a.current').closest('.parent-mega-menu[data-menu="business"]').closest('.mega-menu').find('.mega-menu-parent[data-target="business"]').addClass('current'); 140 $('.current_page_item').closest('.parent-mega-menu[data-menu="business"]').closest('.mega-menu').find('.mega-menu-parent[data-target="business"]').addClass('current'); 141 142 // Add current mega menu state 143 const currentMenu = $('.current-menu-item').closest('.parent-mega-menu').attr('data-menu'); 144 $('.mega-menu-parent[data-target="'+currentMenu+'"]').addClass('current-mega-menu'); 145 146 // Mega menu parent button 147 $(document).on('click', '.mega-menu-parent, #search-mega-menu-toggle', function () { 148 var target = $(this).attr('data-target'); 149 150 // Clear selections 151 $('.parent-mega-menu, .mega-menu-button, .mega-menu-mobile-button, .mega-menu-content').removeClass('active d-active'); 152 $(this).siblings().removeClass('d-active').removeClass('m-active'); 153 154 $(this).addClass('d-active'); 155 156 // Mobile 157 $('.parent-mega-menu, .mega-menu-content').removeClass('m-active'); 158 $(this).toggleClass('m-active'); 159 160 if ( $(this).hasClass('d-active') ){ 161 $('.mega-menu-container').addClass('d-active'); 162 163 // Disable scrolling 164 $('body').addClass('disabled'); 165 $('html').addClass('no-scroll'); 166 167 // Add class to site-header 168 $('.site-header').addClass('show-mega-menu'); 169 170 $('.parent-mega-menu[data-menu="'+target+'"]').addClass('d-active'); 171 $('.parent-mega-menu[data-menu="'+target+'"]').addClass('m-active'); 172 173 } else{ 174 $('.mega-menu-container').removeClass('d-active'); 175 176 // Disable scrolling 177 $('body').removeClass('disabled'); 178 $('html').removeClass('no-scroll'); 179 180 // Add class to site-header 181 $('.site-header').removeClass('show-mega-menu'); 182 183 $('.parent-mega-menu[data-menu="'+target+'"]').removeClass('d-active'); 184 $('.parent-mega-menu[data-menu="'+target+'"]').removeClass('m-active'); 185 } 186 187 // Reset navigator position
188 $('.button-navigator').css('top','0'); 189 190 }); 191 192 // Mega menu parent button 193 $(document).on('click mouseenter', '.header-menu-parent, .header-search-button', function () { 194 var target = $(this).attr('data-target'); 195 196 // Clear selections 197 $('.parent-header-menu, .header-menu-button, .header-menu-mobile-button, .header-menu-content').removeClass('active d-active'); 198 $(this).siblings().removeClass('d-active').removeClass('m-active'); 199 200 $(this).addClass('d-active'); 201 202 // Mobile 203 $('.parent-header-menu, .header-menu-content').removeClass('m-active'); 204 $(this).toggleClass('m-active'); 205 206 if ( $(this).hasClass('d-active') ){ 207 $('.header-menu-container').addClass('d-active'); 208 209 // Disable scrolling 210 // $('body').addClass('disabled'); 211 // $('html').addClass('no-scroll'); 212 213 // Add class to site-header 214 $('.site-header').addClass('show-header-menu'); 215 216 $('.parent-header-menu[data-menu="'+target+'"]').addClass('d-active'); 217 $('.parent-header-menu[data-menu="'+target+'"]').addClass('m-active'); 218 219 } else{ 220 $('.header-menu-container').removeClass('d-active'); 221 222 // Disable scrolling 223 $('body').removeClass('disabled'); 224 $('html').removeClass('no-scroll'); 225 226 // Add class to site-header 227 $('.site-header').removeClass('show-header-menu'); 228 229 $('.parent-header-menu[data-menu="'+target+'"]').removeClass('d-active'); 230 $('.parent-header-menu[data-menu="'+target+'"]').removeClass('m-active'); 231 } 232 233 // Reset navigator position
234 $('.button-navigator').css('top','0'); 235 236 }); 237 238 // Desktop only: auto close mega menu after 1.5 seconds 239 if (window.innerWidth > 1024) { 240 let megaMenuTimeout; 241 242 const $menuArea = $('.header-menu-parents'); 243 244 const closeMegaMenu = () => { 245 $('.menu-toggle, .menu-button-desktop').removeClass('toggled'); 246 $('.menu-toggle').closest('header').find('.site-navigation').removeClass('active'); 247 248 $('body').removeClass('disabled'); 249 $('html').removeClass('no-scroll'); 250 251 $('#masthead').removeClass('header--mega-menu'); 252 $('.site-header').removeClass('show-mega-menu'); 253 254 $('.desktop-toggle-menu-contents').removeClass('active'); 255 256 $('.header-menu-parent, .mega-menu-container, .parent-header-menu, .mega-menu-button, .mega-menu-mobile-button, .mega-menu-content') 257 .removeClass('active d-active'); 258 259 $('.header-menu-parent, #search-mega-menu-toggle') 260 .removeClass('d-active m-active'); 261 262 $('.site-header-content').removeClass('d-toggled'); 263 }; 264 265 $menuArea.on('mouseleave', function (e) { 266 const nextElement = e.relatedTarget; 267 268 // Do not close if the mouse is still inside another menu area 269 if (nextElement && $menuArea.toArray().some(el => el.contains(nextElement))) { 270 return; 271 } 272 273 clearTimeout(megaMenuTimeout); 274 275 megaMenuTimeout = setTimeout(() => { 276 closeMegaMenu(); 277 }, 1500); 278 }); 279 280 $menuArea.on('mouseenter', function () { 281 clearTimeout(megaMenuTimeout); 282 }); 283 284 $('.mega-menu-parent').on('click', function () { 285 //closeMegaMenu(); 286 }); 287 } 288 289 290 // Mega menu close button 291 $(document).on('click', '.mega-menu-close', function () { 292 $('body').removeClass('disabled'); 293 $('html').removeClass('no-scroll'); 294 $('#masthead').removeClass('header--mega-menu'); 295 $('.site-header').removeClass('show-mega-menu'); 296 $('.mega-menu-parent, .mega-menu-container, .parent-mega-menu, .mega-menu-button, .mega-menu-mobile-button, .mega-menu-content').removeClass('active d-active m-active'); 297 }); 298 299 $(document).on('click', '.mega-menu-button', function () { 300 var target = $(this).text(), 301 navigatorPos = $(this).position().top; 302 303 // Clear selection 304 $(this).closest('.parent-mega-menu').find('.mega-menu-button, .mega-menu-content, .mega-menu-mobile-button').removeClass('active'); 305 306 $(this).addClass('active'); 307 308 $('.mega-menu-content[data-content="'+target+'"]').addClass('active'); 309 310 // Set navigator position
311 $('.button-navigator').css('top', navigatorPos+'px'); 312 313 $('.mega-menu-mobile-button[data-menu="'+target+'"]').addClass('active'); 314 315 $('.mega-menu-content[data-content="'+target+'"]').addClass('m-active'); 316 }); 317 318 $(document).on('click', '.mega-menu-mobile-button', function () { 319 var target = $(this).attr('data-menu'), 320 navigatorPos = $(this).position().top; 321 322 $(this).toggleClass('active'); 323 324 $('.mega-menu-content[data-content="'+target+'"], .mega-menu-button[data-menu="'+target+'"]').toggleClass('active'); 325 326 $('.mega-menu-content[data-content="'+target+'"]').toggleClass('m-active'); 327 328 $('.button-navigator').css('top', navigatorPos+'px'); 329 }); 330 331 $(document).on('mouseup', 'body',function(e){ 332 333 var searchHasFocus = $('#s').is(':focus'); 334 if(!searchHasFocus && $('#searchsubmit').has(e.target).length === 0){ 335 $('#s, #searchsubmit').removeClass('active'); 336 $('.search-toggle').removeClass('toggled'); 337 } 338 }); 339 340 $(document).on('click', '.search-toggle', function () { 341 $(this).addClass('toggled'); 342 $(this).closest('#searchform').find('#s').addClass('active').focus(); 343 $(this).closest('#searchform').find('#searchsubmit').addClass('active'); 344 }); 345 346 // Scroll to fix. 347 $(window).scroll(function(event){ 348 349 var top_of_element = $(".site-content").offset().top, 350 bottom_of_element = $(".site-content").offset().top + $("#masthead").outerHeight(), 351 bottom_of_screen = $(window).scrollTop() + $(window).innerHeight(), 352 top_of_screen = $(window).scrollTop(); 353 354 if (top_of_screen < bottom_of_element){ 355 $('#masthead').removeClass('header-fixed'); 356 } else { 357 $('#masthead').addClass('header-fixed'); 358 } 359 360 361 }); 362 363 headerHideOnScroll(); 364 365 function headerHideOnScroll(){ 366 // Hide Header on scroll down. 367 var didScroll; 368 var lastScrollTop = 0; 369 var delta = 5; 370 var navbarHeight = $('#masthead').height(); 371 $(window).scroll(function(event){ 372 didScroll = true; 373 }); 374 setInterval(function() { 375 if (didScroll) { 376 var st = $(this).scrollTop(); 377 378 // Make sure they scroll more than delta 379 if(Math.abs(lastScrollTop - st) <= delta) 380 return; 381 382 // If they scrolled down and are past the navbar, add class .nav-up. 383 // This is necessary so you never see what is "behind" the navbar. 384 if (st > lastScrollTop && st > navbarHeight){ 385 // Scroll Down 386 $('.site-header').addClass('header--offscreen'); 387 388 } else { 389 // Scroll Up 390 if(st + $(window).height() < $(document).height()) { 391 $('.site-header').removeClass('header--offscreen'); 392 } 393 } 394 395 lastScrollTop = st; 396 didScroll = false; 397 } 398 }, 150); 399 }// http://jsfiddle.net/mariusc23/s6mLJ/31/ 400 401 // Trustpilot 402 //jQuery(window).on("load", function() { 403 if( $('.trustpilot').length ){ 404 405 var settings = { 406 "url": "https://api.trustpilot.com/v1/business-units/find?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 407 "method": "GET", 408 "timeout": 0, 409 "headers": { 410 "Content-Type": "application/json" 411 } 412 }; 413 414 jQuery.ajax(settings).done(function (trustpilotData) { 415 416 var tpReviews = trustpilotData.numberOfReviews.total, 417 tpReviewsRating = trustpilotData.score.trustScore, 418 tpStars = trustpilotData.score.stars; 419 420 $('.trustpilot-stars-image').attr('src', 'https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-'+tpStars+'.svg'); 421 $('.trustpilot-trustscore').html(tpReviewsRating); 422 $('.trustpilot-reviews').html(tpReviews); 423 $('.trustpilot-stars').html(tpStars); 424 $('.trustpilot-logo').attr('src', 'https://cdn.trustpilot.net/brand-assets/1.1.0/logo-black.svg'); 425 $('.trustpilot-logo-white').attr('src', 'https://cdn.trustpilot.net/brand-assets/1.1.0/logo-white.svg'); 426 427 // Pass data to schema 428 // trustpilotSchema(tpReviews, tpReviewsRating); 429 430 // Show widget 431 $('.trustpilot').removeClass('tp-hide'); 432 }); 433 } 434 435 // if( $('.trustpilot[data-layout="3"]').length ){ 436 437 // var tpSettings = { 438 // "url": "https://api.trustpilot.com/v1/business-units/5e40ed7cf51bb10001748164/reviews?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 439 // "method": "GET", 440 // "timeout": 0, 441 // "headers": { 442 // "Content-Type": "application/json" 443 // } 444 // }; 445 446 // $.ajax(tpSettings).done(function (tpData) { 447 // var review = tpData.reviews; 448 449 // $(review).each(function(){ 450
451 // var month = new Array(); 452 // month[0] = "January"; 453 // month[1] = "February"; 454 // month[2] = "March"; 455 // month[3] = "April"; 456 // month[4] = "May"; 457 // month[5] = "June"; 458 // month[6] = "July"; 459 // month[7] = "August"; 460 // month[8] = "September"; 461 // month[9] = "October"; 462 // month[10] = "November"; 463 // month[11] = "December"; 464 465 // var dateCreated = new Date(this.createdAt), 466 // tpDate = dateCreated.getDate()+' '+month[dateCreated.getMonth()], 467 // tpReview = ( this.text.length > 100 ) ? this.text.substr(0,100)+'...' : this.text; 468 469 // if( this.stars > 3 ){ 470 // $('.tp-three .tp-slider').append('<div class="tp-slide"><div class="tp-slide-header"><img width="115" src="https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-'+this.stars+'.svg"><div class="tp-review-date">'+tpDate+'</div></div><div class="tp-slide-content"><div class="tp-review-title">'+this.title+'</div><div class="tp-review-text">'+tpReview+'</div></div><div class="tp-slide-footer"><div class="tp-consumer">'+this.consumer.displayName+'</div></div>'); 471 // } 472 // }); 473 474 475 // $('.tp-three .tp-slider').slick({ 476 // dots: false, 477 // infinite: true, 478 // speed: 300, 479 // slidesToShow: 3, 480 // slidesToScroll: 3, 481 // responsive: [ 482 // { 483 // breakpoint: 1025, 484 // settings: { 485 // slidesToShow: 2, 486 // slidesToScroll: 2 487 // } 488 // }, 489 // { 490 // breakpoint: 800, 491 // settings: { 492 // slidesToShow: 1, 493 // slidesToScroll: 1 494 // } 495 // } 496 // // You can unslick at a given breakpoint now by adding: 497 // // settings: "unslick" 498 // // instead of a settings object 499 // ] 500 // }); 501 // }); 502 503 // var settings = { 504 // "url": "https://api.trustpilot.com/v1/business-units/find?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 505 // "method": "GET", 506 // "timeout": 0, 507 // "headers": { 508 // "Content-Type": "application/json" 509 // } 510 // }; 511 512 // jQuery.ajax(settings).done(function (trustpilotData) { 513 514 // var tpReviews = trustpilotData.numberOfReviews.total, 515 // tpReviewsRating = trustpilotData.score.trustScore, 516 // tpStars = trustpilotData.score.stars; 517 518 // // Pass data to schema 519 // // trustpilotSchema(tpReviews, tpReviewsRating); 520 // }); 521 // } 522 if ($('.trustpilot[data-layout="3"]').length) { 523 var tpSettings = { 524 "url": "https://api.trustpilot.com/v1/business-units/5e40ed7cf51bb10001748164/reviews?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 525 "method": "GET", 526 "timeout": 0, 527 "headers": { 528 "Content-Type": "application/json" 529 } 530 }; 531 532 $.ajax(tpSettings).done(function (tpData) { 533 var reviews = tpData.reviews; 534 535 // Predefined background colors 536 var avatarColors = ["#7FDC98", "#A8EEEA", "#F4F6AA"]; 537 538 $(reviews).each(function () { 539 var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
539November", "December"]; 540 var dateCreated = new Date(this.createdAt); 541 var tpDate = dateCreated.getDate() + ' ' + monthNames[dateCreated.getMonth()] + ' ' + dateCreated.getFullYear(); 542 543 var fullReviewText = this.text; 544 var shortReviewText = fullReviewText.length > 200 ? fullReviewText.substr(0, 200) + '...' : fullReviewText; 545 546 // Get first name initials for profile icon 547 var initials = this.consumer.displayName.split(" ").map(word => word[0]).join("").toUpperCase(); 548 549 // Get a random color from the array 550 var randomColor = avatarColors[Math.floor(Math.random() * avatarColors.length)]; 551 552 var reviewCount = this.consumer.numberOfReviews || "1"; // Default to 1 if missing 553 554 var userCountry = this.consumer.location ? this.consumer.location.countryCode : "AU"; // Default to AU 555 556 var locationSVG = ` 557 <svg width="12" height="16" viewBox="0 0 12 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 558 <path fill-rule="evenodd" clip-rule="evenodd" d="M6.00029 0H5.99971C4.41185 0.00190356 2.88783 0.668991 1.76243 1.85783C0.636727 3.04698 0.00181081 4.66138 0 6.34741V6.34775C0 8.60279 0.985365 10.9599 2.80505 13.1675C3.62319 14.1656 4.54384 15.0642 5.54992 15.8467L5.54988 15.8468L5.555 15.8506C5.68699 15.9483 5.84325 16 6.00261 16C6.16196 16 6.31822 15.9483 6.45022 15.8506L6.45026 15.8507L6.45552 15.8466C7.45975 15.0637 8.37861 14.1651 9.1951 13.1673C11.0119 10.9599 12 8.60293 12 6.34775V6.34741C11.9982 4.66138 11.3633 3.04698 10.2376 1.85783C9.11217 0.668991 7.58815 0.00190356 6.00029 0ZM2.86591 3.05046C3.69565 2.17394 4.82286 1.67988 6 1.67988C7.17714 1.67988 8.30435 2.17394 9.13409 3.05046C9.96354 3.92666 10.4278 5.11294 10.4278 6.34775C10.4278 8.2231 9.56543 9.96721 8.54306 11.3717C7.61686 12.6441 6.57938 13.6102 5.99999 14.1064C5.42058 13.6103 4.38311 12.6444 3.45693 11.3722C2.43458 9.96792 1.57219 8.2238 1.57219 6.34775C1.57219 5.11294 2.03646 3.92666 2.86591 3.05046Z" fill="#AEB3B6"/> 559 <circle cx="6" cy="6" r="2" fill="#AEB3B6"/> 560 </svg>`; 561 562 var reviewHTML = ` 563 <div class="tp-slide"> 564 <div class="tp-review-card"> 565 <div class="tp-header"> 566 <div class="tp-avatar" style="background: ${randomColor};">${initials}</div> 567 <div class="tp-user-info"> 568 <strong>${this.consumer.displayName}</strong> 569 <div class="tp-user-meta"> 570 ${reviewCount} Reviews ${locationSVG} ${userCountry} 571 </div> 572 </div> 573 </div> 574 575 <div class="tp-divider"></div> 576 577 <div class="tp-stars"> 578 <img src="https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-${this.stars}.svg"> 579 </div> 580 581 <div class="tp-review-content"> 582 <div class="tp-review-title">${this.title}</div> 583 <div class="tp-review-text">${shortReviewText}</div> 584 </div> 585 586 <div class="tp-date"> 587 <strong class="tp-date-title">Date of experience:</strong> <span class="tp-date-text">${tpDate}</span> 588 </div> 589 </div> 590 </div> 591 `; 592 593 $('.tp-three .tp-slider').append(reviewHTML); 594 }); 595 596 // Initialize Slick Slider 597 $('.tp-three .tp-slider').slick({ 598 dots: true, 599 arrows: true, 600 infinite: true, 601 speed: 500, 602 slidesToShow: 3, 603 slidesToScroll: 1, 604 autoplay: true, 605 autoplaySpeed: 3000, 606 prevArrow: '<div class="slick-prev"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="47" y="47" width="46" height="46" rx="23" transform="rotate(180 47 47)" stroke="#858C91" stroke-width="2"/><path d="M18.1304 23.3809L26.8804 14.6309C26.9617 14.5496 27.0583 14.4852 27.1645 14.4412C27.2707 14.3972 27.3845 14.3745 27.4995 14.3745C27.6145 14.3745 27.7283 14.3972 27.8345 14.4412C27.9408 14.4852 28.0373 14.5496 28.1186 14.6309C28.1999 14.7122 28.2644 14.8087 28.3084 14.915C28.3524 15.0212 28.375 15.135 28.375 15.25C28.375 15.365 28.3524 15.4788 28.3084 15.585C28.2644 15.6913 28.1999 15.7878 28.1186 15.8691L19.9865 24L28.1186 32.1309C28.2828 32.2951 28.375 32.5178 28.375 32.75C28.375 32.9822 28.2828 33.2049 28.1186 33.3691C27.9544 33.5332 27.7317 33.6255 27.4995 33.6255C27.2673 33.6255 27.0446 33.5332 26.8805 33.3691L18.1304 24.6191C18.0491 24.5378 17.9846 24.4413 17.9405 24.3351C17.8965 24.2289 17.8738 24.115 17.8738 24C17.8738 23.885 17.8965 23.7712 17.9405 23.6649C17.9846 23.5587 18.0491 23.4622 18.1304 23.3809Z" fill="#858C91"/></svg></div>', 607 nextArrow: '<div class="slick-next"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="46" height="46" rx="23" stroke="#858C91" stroke-width="2"/><path d="M29.8695 24.6191L21.1195 33.3691C21.0383 33.4504 20.9417 33.5148 20.8355 33.5588C20.7293 33.6028 20.6155 33.6255 20.5005 33.6255C20.3855 33.6255 20.2717 33.6028 20.1655 33.5588C20.0592 33.5148 19.9627 33.4504 19.8814 33.3691C19.8001 33.2878 19.7356 33.1913 19.6916 33.085C19.6476 32.9788 19.625 32.865 19.625 32.75C19.625 32.635 19.6476 32.5212 19.6916 32.415C19.7356 32.3087 19.8001 32.2122 19.8814 32.1309L28.0135 24L19.8814 15.8691C19.7172 15.7049 19.625 15.4822 19.625 15.25C19.625 15.0178 19.7172 14.7951 19.8814 14.6309C20.0456 14.4668 20.2683 14.3745 20.5005 14.3745C20.7327 14.3745 20.9554 14.4668 21.1195 14.6309L29.8695 23.3809C29.9509 23.4622 30.0154 23.5587 30.0595 23.6649C30.1035 23.7711 30.1262 23.885 30.1262 24C30.1262 24.115 30.1035 24.2288 30.0595 24.3351C30.0154 24.4413 29.9509 24.5378 29.8695 24.6191Z" fill="#858C91"/></svg></div>', 608 responsive: [ 609 { 610 breakpoint: 1025, 611 settings: { 612 slidesToShow: 2, 613 slidesToScroll: 1 614 } 615 }, 616 { 617 breakpoint: 768, 618 settings: { 619 slidesToShow: 1, 620 slidesToScroll: 1 621 } 622 } 623 ] 624 }); 625 }); 626 } 627 628 if ($('.trustpilot[data-layout="6"]').length) { 629 var tag = $('.trustpilot[data-layout="6"]').attr('data-tag'); 630 631 var tpSettings = { 632 "url": "https://api.trustpilot.com/v1/business-units/5e40ed7cf51bb10001748164/reviews?apikey=YRNkfZGlbjAhuJLtxlI4KDBNLVHghzsP&name=grace.com.au&stars=3,4,5&tagValue="+tag+"&perPage=15&page=1", 633 "method": "GET", 634 "timeout": 0, 635 "headers": { 636 "Content-Type": "application/json" 637 } 638 }; 639 640 $.ajax(tpSettings).done(function (tpData) { 641 var reviews = tpData.reviews; 642 643 // Predefined background colors 644 var avatarColors = ["#7FDC98", "#A8EEEA", "#F4F6AA"]; 645 646 $(reviews).each(function () { 647 var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
647November", "December"]; 648 var dateCreated = new Date(this.createdAt); 649 var tpDate = dateCreated.getDate() + ' ' + monthNames[dateCreated.getMonth()] + ' ' + dateCreated.getFullYear(); 650 651 var fullReviewText = this.text; 652 var shortReviewText = fullReviewText.length > 200 ? fullReviewText.substr(0, 200) + '...' : fullReviewText; 653 654 // Get first name initials for profile icon 655 var initials = this.consumer.displayName.split(" ").map(word => word[0]).join("").toUpperCase(); 656 657 // Get a random color from the array 658 var randomColor = avatarColors[Math.floor(Math.random() * avatarColors.length)]; 659 660 var reviewCount = this.consumer.numberOfReviews || "1"; // Default to 1 if missing 661 662 var userCountry = this.consumer.location ? this.consumer.location.countryCode : "AU"; // Default to AU 663 664 var locationSVG = ` 665 <svg width="12" height="16" viewBox="0 0 12 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 666 <path fill-rule="evenodd" clip-rule="evenodd" d="M6.00029 0H5.99971C4.41185 0.00190356 2.88783 0.668991 1.76243 1.85783C0.636727 3.04698 0.00181081 4.66138 0 6.34741V6.34775C0 8.60279 0.985365 10.9599 2.80505 13.1675C3.62319 14.1656 4.54384 15.0642 5.54992 15.8467L5.54988 15.8468L5.555 15.8506C5.68699 15.9483 5.84325 16 6.00261 16C6.16196 16 6.31822 15.9483 6.45022 15.8506L6.45026 15.8507L6.45552 15.8466C7.45975 15.0637 8.37861 14.1651 9.1951 13.1673C11.0119 10.9599 12 8.60293 12 6.34775V6.34741C11.9982 4.66138 11.3633 3.04698 10.2376 1.85783C9.11217 0.668991 7.58815 0.00190356 6.00029 0ZM2.86591 3.05046C3.69565 2.17394 4.82286 1.67988 6 1.67988C7.17714 1.67988 8.30435 2.17394 9.13409 3.05046C9.96354 3.92666 10.4278 5.11294 10.4278 6.34775C10.4278 8.2231 9.56543 9.96721 8.54306 11.3717C7.61686 12.6441 6.57938 13.6102 5.99999 14.1064C5.42058 13.6103 4.38311 12.6444 3.45693 11.3722C2.43458 9.96792 1.57219 8.2238 1.57219 6.34775C1.57219 5.11294 2.03646 3.92666 2.86591 3.05046Z" fill="#AEB3B6"/> 667 <circle cx="6" cy="6" r="2" fill="#AEB3B6"/> 668 </svg>`; 669 670 var reviewHTML = ` 671 <div class="tp-slide"> 672 <div class="tp-review-card"> 673 <div class="tp-header"> 674 <div class="tp-avatar" style="background: ${randomColor};">${initials}</div> 675 <div class="tp-user-info"> 676 <strong>${this.consumer.displayName}</strong> 677 <div class="tp-user-meta"> 678 ${reviewCount} Reviews ${locationSVG} ${userCountry} 679 </div> 680 </div> 681 </div> 682 683 <div class="tp-divider"></div> 684 685 <div class="tp-stars"> 686 <img src="https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-${this.stars}.svg"> 687 </div> 688 689 <div class="tp-review-content"> 690 <div class="tp-review-title">${this.title}</div> 691 <div class="tp-review-text">${shortReviewText}</div> 692 </div> 693 694 <div class="tp-date"> 695 <strong class="tp-date-title">Date of experience:</strong> <span class="tp-date-text">${tpDate}</span> 696 </div> 697 </div> 698 </div> 699 `; 700 701 $('.tp-six .tp-slider').append(reviewHTML); 702 }); 703 704 // Initialize Slick Slider 705 $('.tp-six .tp-slider').slick({ 706 dots: true, 707 arrows: true, 708 infinite: true, 709 speed: 500, 710 slidesToShow: 3, 711 slidesToScroll: 1, 712 autoplay: true, 713 autoplaySpeed: 3000, 714 prevArrow: '<div class="slick-prev"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="47" y="47" width="46" height="46" rx="23" transform="rotate(180 47 47)" stroke="#858C91" stroke-width="2"/><path d="M18.1304 23.3809L26.8804 14.6309C26.9617 14.5496 27.0583 14.4852 27.1645 14.4412C27.2707 14.3972 27.3845 14.3745 27.4995 14.3745C27.6145 14.3745 27.7283 14.3972 27.8345 14.4412C27.9408 14.4852 28.0373 14.5496 28.1186 14.6309C28.1999 14.7122 28.2644 14.8087 28.3084 14.915C28.3524 15.0212 28.375 15.135 28.375 15.25C28.375 15.365 28.3524 15.4788 28.3084 15.585C28.2644 15.6913 28.1999 15.7878 28.1186 15.8691L19.9865 24L28.1186 32.1309C28.2828 32.2951 28.375 32.5178 28.375 32.75C28.375 32.9822 28.2828 33.2049 28.1186 33.3691C27.9544 33.5332 27.7317 33.6255 27.4995 33.6255C27.2673 33.6255 27.0446 33.5332 26.8805 33.3691L18.1304 24.6191C18.0491 24.5378 17.9846 24.4413 17.9405 24.3351C17.8965 24.2289 17.8738 24.115 17.8738 24C17.8738 23.885 17.8965 23.7712 17.9405 23.6649C17.9846 23.5587 18.0491 23.4622 18.1304 23.3809Z" fill="#858C91"/></svg></div>', 715 nextArrow: '<div class="slick-next"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="46" height="46" rx="23" stroke="#858C91" stroke-width="2"/><path d="M29.8695 24.6191L21.1195 33.3691C21.0383 33.4504 20.9417 33.5148 20.8355 33.5588C20.7293 33.6028 20.6155 33.6255 20.5005 33.6255C20.3855 33.6255 20.2717 33.6028 20.1655 33.5588C20.0592 33.5148 19.9627 33.4504 19.8814 33.3691C19.8001 33.2878 19.7356 33.1913 19.6916 33.085C19.6476 32.9788 19.625 32.865 19.625 32.75C19.625 32.635 19.6476 32.5212 19.6916 32.415C19.7356 32.3087 19.8001 32.2122 19.8814 32.1309L28.0135 24L19.8814 15.8691C19.7172 15.7049 19.625 15.4822 19.625 15.25C19.625 15.0178 19.7172 14.7951 19.8814 14.6309C20.0456 14.4668 20.2683 14.3745 20.5005 14.3745C20.7327 14.3745 20.9554 14.4668 21.1195 14.6309L29.8695 23.3809C29.9509 23.4622 30.0154 23.5587 30.0595 23.6649C30.1035 23.7711 30.1262 23.885 30.1262 24C30.1262 24.115 30.1035 24.2288 30.0595 24.3351C30.0154 24.4413 29.9509 24.5378 29.8695 24.6191Z" fill="#858C91"/></svg></div>', 716 responsive: [ 717 { 718 breakpoint: 1025, 719 settings: { 720 slidesToShow: 2, 721 slidesToScroll: 1 722 } 723 }, 724 { 725 breakpoint: 768, 726 settings: { 727 slidesToShow: 1, 728 slidesToScroll: 1 729 } 730 } 731 ] 732 }); 733 }); 734 } 735 736 if ($('.trustpilot[data-layout="7"]').length) { 737 var tpSettings = { 738 "url": "https://api.trustpilot.com/v1/business-units/5e40ed7cf51bb10001748164/reviews?apikey=YRNkfZGlbjAhuJLtxlI4KDBNLVHghzsP&name=grace.com.au&stars=3,4,5&tagValue=GBS&perPage=15&page=2", 739 "method": "GET", 740 "timeout": 0, 741 "headers": { 742 "Content-Type": "application/json" 743 } 744 }; 745 746 $.ajax(tpSettings).done(function (tpData) { 747 var reviews = tpData.reviews; 748 749 // Predefined background colors 750 var avatarColors = ["#7FDC98", "#A8EEEA", "#F4F6AA"]; 751 752 $(reviews).each(function () { 753 var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
753November", "December"]; 754 var dateCreated = new Date(this.createdAt); 755 var tpDate = dateCreated.getDate() + ' ' + monthNames[dateCreated.getMonth()] + ' ' + dateCreated.getFullYear(); 756 757 var fullReviewText = this.text; 758 var shortReviewText = fullReviewText.length > 200 ? fullReviewText.substr(0, 200) + '...' : fullReviewText; 759 760 // Get first name initials for profile icon 761 var initials = this.consumer.displayName.split(" ").map(word => word[0]).join("").toUpperCase(); 762 763 // Get a random color from the array 764 var randomColor = avatarColors[Math.floor(Math.random() * avatarColors.length)]; 765 766 var reviewCount = this.consumer.numberOfReviews || "1"; // Default to 1 if missing 767 768 var userCountry = this.consumer.location ? this.consumer.location.countryCode : "AU"; // Default to AU 769 770 var locationSVG = ` 771 <svg width="12" height="16" viewBox="0 0 12 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 772 <path fill-rule="evenodd" clip-rule="evenodd" d="M6.00029 0H5.99971C4.41185 0.00190356 2.88783 0.668991 1.76243 1.85783C0.636727 3.04698 0.00181081 4.66138 0 6.34741V6.34775C0 8.60279 0.985365 10.9599 2.80505 13.1675C3.62319 14.1656 4.54384 15.0642 5.54992 15.8467L5.54988 15.8468L5.555 15.8506C5.68699 15.9483 5.84325 16 6.00261 16C6.16196 16 6.31822 15.9483 6.45022 15.8506L6.45026 15.8507L6.45552 15.8466C7.45975 15.0637 8.37861 14.1651 9.1951 13.1673C11.0119 10.9599 12 8.60293 12 6.34775V6.34741C11.9982 4.66138 11.3633 3.04698 10.2376 1.85783C9.11217 0.668991 7.58815 0.00190356 6.00029 0ZM2.86591 3.05046C3.69565 2.17394 4.82286 1.67988 6 1.67988C7.17714 1.67988 8.30435 2.17394 9.13409 3.05046C9.96354 3.92666 10.4278 5.11294 10.4278 6.34775C10.4278 8.2231 9.56543 9.96721 8.54306 11.3717C7.61686 12.6441 6.57938 13.6102 5.99999 14.1064C5.42058 13.6103 4.38311 12.6444 3.45693 11.3722C2.43458 9.96792 1.57219 8.2238 1.57219 6.34775C1.57219 5.11294 2.03646 3.92666 2.86591 3.05046Z" fill="#AEB3B6"/> 773 <circle cx="6" cy="6" r="2" fill="#AEB3B6"/> 774 </svg>`; 775 776 var reviewHTML = ` 777 <div class="tp-slide"> 778 <div class="tp-review-card"> 779 <div class="tp-header"> 780 <div class="tp-avatar" style="background: ${randomColor};">${initials}</div> 781 <div class="tp-user-info"> 782 <strong>${this.consumer.displayName}</strong> 783 <div class="tp-user-meta"> 784 ${reviewCount} Reviews ${locationSVG} ${userCountry} 785 </div> 786 </div> 787 </div> 788 789 <div class="tp-divider"></div> 790 791 <div class="tp-stars"> 792 <img src="https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-${this.stars}.svg"> 793 </div> 794 795 <div class="tp-review-content"> 796 <div class="tp-review-title">${this.title}</div> 797 <div class="tp-review-text">${shortReviewText}</div> 798 </div> 799 800 <div class="tp-date"> 801 <strong class="tp-date-title">Date of experience:</strong> <span class="tp-date-text">${tpDate}</span> 802 </div> 803 </div> 804 </div> 805 `; 806 807 $('.tp-seven .tp-slider').append(reviewHTML); 808 }); 809 810 // Initialize Slick Slider 811 $('.tp-seven .tp-slider').slick({ 812 dots: true, 813 arrows: true, 814 infinite: true, 815 speed: 500, 816 slidesToShow: 3, 817 slidesToScroll: 1, 818 autoplay: true, 819 autoplaySpeed: 3000, 820 prevArrow: '<div class="slick-prev"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="47" y="47" width="46" height="46" rx="23" transform="rotate(180 47 47)" stroke="#858C91" stroke-width="2"/><path d="M18.1304 23.3809L26.8804 14.6309C26.9617 14.5496 27.0583 14.4852 27.1645 14.4412C27.2707 14.3972 27.3845 14.3745 27.4995 14.3745C27.6145 14.3745 27.7283 14.3972 27.8345 14.4412C27.9408 14.4852 28.0373 14.5496 28.1186 14.6309C28.1999 14.7122 28.2644 14.8087 28.3084 14.915C28.3524 15.0212 28.375 15.135 28.375 15.25C28.375 15.365 28.3524 15.4788 28.3084 15.585C28.2644 15.6913 28.1999 15.7878 28.1186 15.8691L19.9865 24L28.1186 32.1309C28.2828 32.2951 28.375 32.5178 28.375 32.75C28.375 32.9822 28.2828 33.2049 28.1186 33.3691C27.9544 33.5332 27.7317 33.6255 27.4995 33.6255C27.2673 33.6255 27.0446 33.5332 26.8805 33.3691L18.1304 24.6191C18.0491 24.5378 17.9846 24.4413 17.9405 24.3351C17.8965 24.2289 17.8738 24.115 17.8738 24C17.8738 23.885 17.8965 23.7712 17.9405 23.6649C17.9846 23.5587 18.0491 23.4622 18.1304 23.3809Z" fill="#858C91"/></svg></div>', 821 nextArrow: '<div class="slick-next"><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="46" height="46" rx="23" stroke="#858C91" stroke-width="2"/><path d="M29.8695 24.6191L21.1195 33.3691C21.0383 33.4504 20.9417 33.5148 20.8355 33.5588C20.7293 33.6028 20.6155 33.6255 20.5005 33.6255C20.3855 33.6255 20.2717 33.6028 20.1655 33.5588C20.0592 33.5148 19.9627 33.4504 19.8814 33.3691C19.8001 33.2878 19.7356 33.1913 19.6916 33.085C19.6476 32.9788 19.625 32.865 19.625 32.75C19.625 32.635 19.6476 32.5212 19.6916 32.415C19.7356 32.3087 19.8001 32.2122 19.8814 32.1309L28.0135 24L19.8814 15.8691C19.7172 15.7049 19.625 15.4822 19.625 15.25C19.625 15.0178 19.7172 14.7951 19.8814 14.6309C20.0456 14.4668 20.2683 14.3745 20.5005 14.3745C20.7327 14.3745 20.9554 14.4668 21.1195 14.6309L29.8695 23.3809C29.9509 23.4622 30.0154 23.5587 30.0595 23.6649C30.1035 23.7711 30.1262 23.885 30.1262 24C30.1262 24.115 30.1035 24.2288 30.0595 24.3351C30.0154 24.4413 29.9509 24.5378 29.8695 24.6191Z" fill="#858C91"/></svg></div>', 822 responsive: [ 823 { 824 breakpoint: 1025, 825 settings: { 826 slidesToShow: 2, 827 slidesToScroll: 1 828 } 829 }, 830 { 831 breakpoint: 768, 832 settings: { 833 slidesToShow: 1, 834 slidesToScroll: 1 835 } 836 } 837 ] 838 }); 839 }); 840 } 841 842 843 844 if( $('.trustpilot[data-layout="sidebar"]').length ){ 845 846 var tpSettings = { 847 "url": "https://api.trustpilot.com/v1/business-units/5e40ed7cf51bb10001748164/reviews?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 848 "method": "GET", 849 "timeout": 0, 850 "headers": { 851 "Content-Type": "application/json" 852 } 853 }; 854 855 $.ajax(tpSettings).done(function (tpData) { 856 var review = tpData.reviews; 857 858 $(review).each(function(){ 859
860 var month = new Array(); 861 month[0] = "January"; 862 month[1] = "February"; 863 month[2] = "March"; 864 month[3] = "April"; 865 month[4] = "May"; 866 month[5] = "June"; 867 month[6] = "July"; 868 month[7] = "August"; 869 month[8] = "September"; 870 month[9] = "October"; 871 month[10] = "November"; 872 month[11] = "December"; 873 874 var dateCreated = new Date(this.createdAt), 875 tpDate = dateCreated.getDate()+' '+month[dateCreated.getMonth()], 876 tpReview = ( this.text.length > 100 ) ? this.text.substr(0,100)+'...' : this.text; 877 if( this.stars > 3 ){ 878 $('.tp-sidebar .tp-slider').append('<div class="tp-slide"><div class="tp-slide-header"><img width="115" src="https://cdn.trustpilot.net/brand-assets/4.0.0/stars/stars-'+this.stars+'.svg"><div class="tp-review-date">'+tpDate+'</div></div><div class="tp-slide-content"><div class="tp-review-title">'+this.title+'</div><div class="tp-review-text">'+tpReview+'</div></div><div class="tp-slide-footer"><div class="tp-consumer">'+this.consumer.displayName+'</div></div>'); 879 } 880 }); 881 882 883 $('.tp-sidebar .tp-slider').slick({ 884 dots: false, 885 infinite: true, 886 speed: 300, 887 slidesToShow: 1, 888 slidesToScroll: 1, 889 responsive: [ 890 { 891 breakpoint: 1025, 892 settings: { 893 slidesToShow: 1, 894 slidesToScroll: 1 895 } 896 }, 897 { 898 breakpoint: 800, 899 settings: { 900 slidesToShow: 1, 901 slidesToScroll: 1 902 } 903 } 904 // You can unslick at a given breakpoint now by adding: 905 // settings: "unslick" 906 // instead of a settings object 907 ] 908 }); 909 910 var settings = { 911 "url": "https://api.trustpilot.com/v1/business-units/find?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 912 "method": "GET", 913 "timeout": 0, 914 "headers": { 915 "Content-Type": "application/json" 916 } 917 }; 918 919 jQuery.ajax(settings).done(function (trustpilotData) { 920 921 var tpReviews = trustpilotData.numberOfReviews.total, 922 tpReviewsRating = trustpilotData.score.trustScore, 923 tpStars = trustpilotData.score.stars; 924 925 console.log(tpReviews, tpReviewsRating); 926 // Pass data to schema 927 // trustpilotSchema(tpReviews, tpReviewsRating); 928 }); 929 }); 930 } 931 932 $(window).on('load', function() { 933 // check if using trust pilot iframe to send to Pass data to schema 934 if($('.trustpilot-widget').length > 0){ 935 var settings = { 936 "url": "https://api.trustpilot.com/v1/business-units/find?apikey=KhY2y4b9CHmoOH2nYbXbbgNRhLq3Fxl0&name=grace.com.au", 937 "method": "GET", 938 "timeout": 0, 939 "headers": { 940 "Content-Type": "application/json" 941 } 942 }; 943 944 jQuery.ajax(settings).done(function (trustpilotData) { 945 946 var tpReviews = trustpilotData.numberOfReviews.total, 947 tpReviewsRating = trustpilotData.score.trustScore, 948 tpStars = trustpilotData.score.stars; 949 950 // Pass data to schema 951 // trustpilotSchema(tpReviews, tpReviewsRating); 952 }); 953 } 954 }); 955 956 957 // Schema 958 function trustpilotSchema(tpReviews, tpReviewsRating){ 959 var el = document.createElement("script"); 960 el.type = "application/ld+json"; 961 el.text = JSON.stringify({ 962 "@context": "http://schema.org/", 963 "@type": "Product", 964 "name": document.title, 965 "aggregateRating": { 966 "@type": "AggregateRating", 967 "worstRating": "1", 968 "bestRating": "5", 969 "ratingCount": tpReviews, 970 "ratingValue": tpReviewsRating 971 } 972 }); 973 974 document.querySelector("head").appendChild(el); 975 } 976 //}); 977 978 979 // Branch locator autocomplete type interval 980 var typeTimer, typeInterval = 800; 981 982 // Trigger branch locator autocomplete 983 /*$(document).on('keyup', '#branch-location', function () { 984 985 var blKeywords = $(this).val(); 986 987 if( blKeywords.length > 2 ){ 988 989 clearTimeout(typeTimer); 990 typeTimer = setTimeout(locatorAutocomplete(blKeywords), typeInterval); 991 } else{ 992 $('#bl-autocomplete').empty(); 993 } 994 }); 995 996 // Branch locator autocomplete function 997 function locatorAutocomplete(keywords){ 998 $.post( sd.ajaxURL, 999 { 1000 action : 'branch_locator_autocomplete', 1001 branchKeywords : keywords 1002 }, 1003 function(data){ 1004 if(data != 'empty'){ 1005 $('#bl-autocomplete').html(data); 1006 } else{ 1007 $('#bl-autocomplete').empty(); 1008 } 1009 }).done(function() { 1010 var state = $('.ac-address').attr('data-state'); 1011 1012 $("#branch-state").val(state.replace(/\s/g, '')); 1013 }).fail(function(jqXHR, textStatus, errorThrown) { 1014 console.log(jqXHR); 1015 console.log(textStatus); 1016 console.log(errorThrown ); 1017 }).always(function() { 1018 }); 1019 }*/ 1020 1021 // Clear branch locator autocomplete if it is not in focus 1022 $(document).on('mouseup mousedown', 'body',function(e){ 1023 if (!$('#branch-locator').is(e.target) && $('#bl-autocomplete').has(e.target).length === 0 ){ 1024 $('#bl-autocomplete').empty(); 1025 } 1026 }); 1027 1028 1029 // Geocode typed address 1030 $(document).on('change keyup input mouseup', '#branch-location', function () { 1031 1032 var blKeywords = $(this).val(); 1033 1034 // Clear state field 1035 //$("#branch-state").val(''); 1036 1037 // Clear error messages 1038 $('.bl-error-msg').empty(); 1039 1040 // Clear error field 1041 $('#branch-location').removeClass('field-error'); 1042 1043 if( blKeywords.length > 2 ){ 1044 1045 clearTimeout(typeTimer); 1046 typeTimer = setTimeout(locatorGeocode(blKeywords, 0), typeInterval); 1047 } 1048 }); 1049 1050 function locatorGeocode(keywords, rerun=0){ 1051 var geocoder; 1052 1053 var state; 1054 1055 geocoder = new google.maps.Geocoder(); 1056 1057 geocoder.geocode({
1058 'address' : keywords, componentRestrictions: { 1059 country: "AU" 1060 }, 1061 }, function(results, status) { 1062 1063 if (status == google.maps.GeocoderStatus.OK) { 1064 1065 // var coordinates = results[0].geometry.location, 1066 $(results[0].address_components).each(function(key, value){ 1067 if ( $.inArray('administrative_area_level_1', value.types) !== -1 && $.inArray('political', value.types) !== -1 ){ 1068 state = value.short_name; 1069 1070 $("#branch-state").val(state); 1071 1072 if( rerun != 1 ){ 1073 $('#bl-autocomplete').html('<div class="ac-content"><div class="ac-list"><div class="ac-item"><svg width="10" version="1.1" id="marker" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"viewBox="0 0 17.1 22.8" style="enable-background:new 0 0 17.1 22.8;" xml:space="preserve"> <path fill="#DB2E27" d="M1.8,13.4l6,8.6c0.3,0.4,0.9,0.5,1.3,0.2c0.1-0.1,0.2-0.1,0.2-0.2l6-8.6c0.1-0.1,0.1-0.2,0.2-0.2l0-0.1 C18,9.3,16.9,4.2,13,1.7C9.2-0.7,4.1,0.4,1.6,4.2c-1.8,2.7-1.8,6.2,0,9l0,0l0,0.1C1.7,13.3,1.8,13.3,1.8,13.4z M8.6,5.2 c1.9,0,3.4,1.5,3.4,3.4c0,1.9-1.5,3.4-3.4,3.4c-1.9,0-3.4-1.5-3.4-3.4C5.1,6.8,6.7,5.2,8.6,5.2z"/> </svg><span class="ac-address" data-state="'+state+'">'+results[0].formatted_address+'</span></div></div></div>'); 1074 } 1075 1076 $('#search-branch').attr('data-searchable', 1); 1077 } 1078 }); 1079 1080 } else{ 1081 $('#search-branch').attr('data-searchable', 0); 1082 } 1083 }); 1084 } 1085 1086 // Branch locator search button actions 1087 $(document).on('click', '#search-branch', function () { 1088 1089 var blState = $('#branch-state').val(), 1090 blKeywords = $('#branch-location').val(), 1091 blService = $('select[name="service-type"]').find(":selected").val(); 1092 1093 // Re-check if the address entered is valid 1094 locatorGeocode(blKeywords, 1); 1095 1096 setTimeout(function(){ 1097 if( $('#search-branch').attr('data-searchable') == 0 ){ 1098 // Add error message when address is not valid 1099 $('.bl-error-msg').html('Please enter a valid address.'); 1100 1101 // Add error class to search field 1102 $('#branch-location').addClass('field-error'); 1103 1104 } else { 1105 1106 // Clear search results 1107 $('#bl-results').empty(); 1108 1109 // Clear autocomplete 1110 $('#bl-autocomplete').empty(); 1111 1112 // Show loading screen 1113 $('.bl-loading').fadeIn(100); 1114 1115 if( blState.length > 0 || blService.length > 0){ 1116 $.post( sd.ajaxURL, 1117 { 1118 action : 'branch_locator_search', 1119 branchKeywords : blKeywords, 1120 branchState : blState, 1121 branchService : blService 1122 }, 1123 function(data){ 1124 if(data){ 1125 $('#bl-results').html(data); 1126 } 1127 }).done(function() { 1128 $('#branch-location').removeClass('field-error'); 1129 1130 $('.bl-error-msg').empty(); 1131 1132 // Hide loading screen 1133 $('.bl-loading').fadeOut(100); 1134 }).fail(function(jqXHR, textStatus, errorThrown) { 1135 console.log(jqXHR); 1136 console.log(textStatus); 1137 console.log(errorThrown ); 1138 }).always(function() { 1139 }); 1140 } 1141 } 1142 }, 300); 1143 }); 1144 1145 // Clear branch locator search field 1146 $(document).on('click', '#branch-location', function () { 1147 $('#branch-location').removeClass('field-error'); 1148 1149 // Clear error messages 1150 $('.bl-error-msg').empty(); 1151 }); 1152 1153 // Branch locator map button actions 1154 $(document).on('click', '#map-button', function () { 1155 var states = ['NSW', 'QLD', 'NT', 'WA', 'SA', 'VIC', 'ACT', 'TAS']; 1156 1157 var blState = $('#branch-state').val(), 1158 blKeywords = $('#branch-location').val(), 1159 blService = $('select[name="service-type"]').find(":selected").val(), 1160 blServiceName = $('select[name="service-type"]').find(":selected").text(); 1161 1162 // Re-check if the address entered is valid 1163 locatorGeocode(blKeywords, 1); 1164 1165 setTimeout(function(){ 1166 if( $('#search-branch').attr('data-searchable') == 0 ){ 1167 // Add error message when address is not valid 1168 $('.bl-error-msg').html('Please enter a valid address.'); 1169 1170 // Add error class to search field 1171 $('#branch-location').addClass('field-error'); 1172 } else { 1173 // Clear search results 1174 $('#bl-results').empty(); 1175 1176 // Show loading screen 1177 $('.bl-loading').fadeIn(300); 1178 1179 if( blState.length > 0 || blService.length > 0){ 1180 $.post( sd.ajaxURL, 1181 { 1182 action : 'branch_locator_map', 1183 branchKeywords : blKeywords, 1184 branchState : blState, 1185 branchService : blService, 1186 branchServiceName : blServiceName 1187 }, 1188 function(data){ 1189 if(data){ 1190 $('#bl-results').html(data); 1191 } 1192 }).done(function() { 1193 $('#branch-location').removeClass('field-error'); 1194 1195 $('.bl-error-msg').empty(); 1196 1197 // Hide loading screen 1198 $('.bl-loading').fadeOut(300);
1199 }).fail(function(jqXHR, textStatus, errorThrown) { 1200 console.log(jqXHR); 1201 console.log(textStatus); 1202 console.log(errorThrown ); 1203 }).always(function() { 1204 }); 1205 } else{ // actions if field is empty 1206 // Add error class to search field 1207 $('#branch-location').addClass('field-error'); 1208 1209 // Clear search results 1210 $('#bl-results').empty(); 1211 1212 // Hide loading screen 1213 $('.bl-loading').fadeOut(300); 1214 } 1215 } 1216 }, 300); 1217 }); 1218 1219 $(document).on('change', '.bl-service', function () { 1220 if( $('.map-container').length > 0 ){ 1221 $('#map-button').trigger('click'); 1222 } else{ 1223 $('#search-branch').trigger('click'); 1224 } 1225 }); 1226 1227 if( sd.pageID == '30' ){ 1228 var service = window.location.hash; 1229 1230 if( service == '#information-management' ){ 1231 $('.bl-service option[value="records"]').prop('selected',true); 1232 $('#search-branch').trigger('click'); 1233 } 1234 1235 if( service == '#removals' ){ 1236 $('.bl-service option[value="removals"]').prop('selected',true); 1237 $('#search-branch').trigger('click'); 1238 } 1239 } 1240 1241 $(document).on('click', '.ac-item', function () { 1242 var state = $(this).find('.ac-address').attr('data-state'); 1243 1244 $('#branch-location').val($(this).find('.ac-address').text()); 1245 1246 $("#branch-state").val(state); 1247 1248 $('#bl-autocomplete').empty(); 1249 }); 1250 1251 $(document).on('click', '#back-to-top', function () { 1252 $("html, body").animate({ scrollTop: 0 }, "slow"); 1253 return false; 1254 }); 1255 1256 /* 1257 // Google places autocomplete 1258 var addressField = document.getElementById('branch-location'), 1259 selectedPlace; 1260 1261 if (addressField){ 1262 1263 $(addressField).keydown(function(){ 1264 selectedPlace = false; 1265 $("#branch-state").val(''); 1266 }); 1267 1268 function initialize() { 1269 1270 var options = { 1271 types: ['address'], 1272 componentRestrictions: { 1273 country: 'au' 1274 } 1275 }; 1276 1277 autocomplete = new google.maps.places.Autocomplete(addressField, options); 1278 google.maps.event.addListener(autocomplete, 'place_changed', function() { 1279 var place = autocomplete.getPlace(), 1280 state = '', suburb = '', 1281 placesearch = $(addressField).val(); 1282 1283 for (var i = 0; i < place.address_components.length; i++) { 1284 for (var j = 0; j < place.address_components[i].types.length; j++) { 1285 1286 // Get state 1287 if (place.address_components[i].types[j] == "locality") { 1288 var suburb = place.address_components[i].long_name; 1289 } 1290 1291 // Get suburb 1292 if (place.address_components[i].types[j] == "administrative_area_level_1") { 1293 var state = place.address_components[i].short_name; 1294 1295 $("#branch-state").val(state); 1296 } 1297 1298 // Get postal code 1299 if (place.address_components[i].types[j] == "postal_code") { 1300 1301 /*var allowedPostcodes = sd_object.allowedPostal, // Get post codes from Wordpress dashboard 1302 selectedPostcode = place.address_components[i].long_name, 1303 multiplePostal = false; 1304 1305 // Display selected postcode on console 1306 console.log(selectedPostcode); 1307 1308 if (allowedPostcodes.indexOf(', ') > -1) { 1309 1310 var getPostcodes = allowedPostcodes.split(', '); 1311 1312 $.each(getPostcodes, function( index, value ) { 1313 1314 var limitPostcodes = value.split('-'); 1315 1316 if (selectedPostcode >= limitPostcodes[0] && selectedPostcode <= limitPostcodes[1]) { 1317 multiplePostal = true; 1318 return false; 1319 } else{ 1320 multiplePostal = false; 1321 } 1322 1323 1324 });
1325 1326 if ( multiplePostal == true ) { 1327 $('.address-verification').html(''); 1328 $(addressField).removeClass('form-error'); 1329 $(addressField).attr('data-status', 'valid'); 1330 selectedPlace = true; 1331 //Set delivery details for checkout 1332 Cookies.set("delivery_postcode", selectedPostcode); 1333 Cookies.set("delivery_state", state); 1334 Cookies.set("delivery_suburb", suburb); 1335 } else{ 1336 1337 $('.address-verification').html('We cannot service in the area you have selected.'); 1338 $(addressField).addClass('form-error'); 1339 $(addressField).attr('data-status', 'invalid'); 1340 selectedPlace = false; 1341 } 1342 1343 } else{ 1344 var limitPostcodes = allowedPostcodes.split('-'); 1345 1346 if (selectedPostcode >= limitPostcodes[0] && selectedPostcode <= limitPostcodes[1]) { 1347 $('.address-verification').html(''); 1348 $(addressField).removeClass('form-error'); 1349 $(addressField).attr('data-status', 'valid'); 1350 selectedPlace = true; 1351 //Set delivery details for checkout 1352 Cookies.set("delivery_postcode", selectedPostcode); 1353 Cookies.set("delivery_state", state); 1354 Cookies.set("delivery_suburb", suburb); 1355 } else{ 1356 1357 $('.address-verification').html('We cannot service in the area you have selected.'); 1358 $(addressField).addClass('form-error'); 1359 $(addressField).attr('data-status', 'invalid'); 1360 selectedPlace = false; 1361 } 1362 } 1363 1364 } 1365 } 1366 } 1367 }) 1368 } 1369 google.maps.event.addDomListener(window, "load", initialize); 1370 } */ 1371 1372 if( sd.pageID == '13733' ){ 1373 pageAutocomplete('input_1_4'); 1374 } 1375 1376 if( sd.pageID == '14493' ){ 1377 pageAutocomplete('input_20_4'); 1378 } 1379 1380 if( sd.pageID == '14494' ){ 1381 pageAutocomplete('input_21_4'); 1382 } 1383 1384 setTimeout(function () { 1385 1386 if( sd.pageID == '24' ){ 1387 pageAutocomplete('Address'); 1388 } 1389 }, 2000 ); 1390 1391 if( sd.pageID == '17540' ){ 1392 pardotAutocomplete('pardot-address'); 1393 pageAutocomplete('00N9q000000OQx6'); 1394 pageAutocomplete('00N9q000000OQxB'); 1395 } 1396 1397 1398 // Google places autocomplete 1399 function pageAutocomplete(fieldID){ 1400 var addressField = document.getElementById(fieldID), 1401 selectedPlace = false; 1402 if (addressField){ 1403 $(addressField).keydown(function(){ 1404 $(this).attr('data-valid', 0); 1405 }); 1406 1407 var options = { 1408 types: ['geocode'] 1409 }; 1410 1411 var autocomplete = new google.maps.places.Autocomplete(addressField, options); 1412 google.maps.event.addListener(autocomplete, 'place_changed', function() { 1413 var place = autocomplete.getPlace(), 1414 state ='', suburb = '', postcode = '', country=''; 1415 console.log(place); 1416 for (var i = 0; i < place.address_components.length; i++) { 1417 for (var j = 0; j < place.address_components[i].types.length; j++) { 1418 // Get state 1419 if (place.address_components[i].types[j] == "administrative_area_level_1") { 1420 var state = place.address_components[i].long_name; 1421 var state_short = place.address_components[i].short_name; 1422 } 1423 // Get suburb 1424 if (place.address_components[i].types[j] == "locality") { 1425 var suburb = place.address_components[i].long_name; 1426 } 1427 if (place.address_components[i].types[j] == "postal_code") { 1428 var postcode = place.address_components[i].long_name; 1429 } 1430 1431 if (place.address_components[i].types[j] == "country") { 1432 var country = place.address_components[i].long_name; 1433 } 1434 } 1435 } 1436 1437 console.log(suburb + ' ' + state_short + ' ' + postcode + ', '+ country); 1438 1439 if( sd.pageID == '24' ){ 1440 console.log(place.formatted_address); 1441 $('#Address').val(place.formatted_address); 1442 } 1443 });
1444 } 1445 } 1446 1447 function pardotAutocomplete(fieldID){ 1448 var addressField = document.getElementById(fieldID), 1449 selectedPlace = false; 1450 if (addressField){ 1451 $(addressField).keydown(function(){ 1452 $(this).attr('data-valid', 0); 1453 }); 1454 1455 var options = { 1456 types: ['geocode'] 1457 }; 1458 1459 var autocomplete = new google.maps.places.Autocomplete(addressField, options); 1460 google.maps.event.addListener(autocomplete, 'place_changed', function() { 1461 var place = autocomplete.getPlace(), 1462 state ='', city = '', postcode = '', country=''; 1463 console.log(place); 1464 for (var i = 0; i < place.address_components.length; i++) { 1465 for (var j = 0; j < place.address_components[i].types.length; j++) { 1466 // Get state 1467 if (place.address_components[i].types[j] == "administrative_area_level_1") { 1468 var state = place.address_components[i].long_name; 1469 var state_short = place.address_components[i].short_name; 1470 1471 $('#state').val(state); 1472 } 1473 // Get city 1474 if (place.address_components[i].types[j] == "locality") { 1475 var city = place.address_components[i].long_name; 1476 $('#city').val(city); 1477 } 1478 if (place.address_components[i].types[j] == "postal_code") { 1479 var postcode = place.address_components[i].long_name; 1480 $('#zip').val(postcode); 1481 } 1482 1483 if (place.address_components[i].types[j] == "country") { 1484 var country = place.address_components[i].long_name; 1485 1486 $('#country').val(country); 1487 } 1488 } 1489 } 1490 1491 console.log(city + ' ' + state_short + ' ' + postcode + ', '+ country); 1492 1493 if( sd.pageID == '24' ){ 1494 console.log(place.formatted_address); 1495 $('#Address').val(place.formatted_address); 1496 } 1497 }); 1498 } 1499 } 1500 1501 /*$(document).on("gform_confirmation_loaded", function (e, form_id) { 1502 // code to run upon successful form submission 1503 // Google Analytics 1504 dataLayer.push({ 1505 "event" : "marketo.success", 1506 "formId" : form_id, 1507 "marketo.form_values": vals, 1508 "marketo.thank_you_url": thankYouURL 1509 }); 1510 });*/ 1511 1512 // Add space for Elementor Menu Anchor link 1513 $(window).on('elementor/frontend/init', function () { 1514 elementorFrontend.hooks.addFilter( 1515 'frontend/handlers/menu_anchor/scroll_offset', 1516 function (offset) { 1517 return offset + 100; // Adjust based on header height 1518 } 1519 ); 1520 }); 1521 1522}); 1523 1524document.addEventListener('DOMContentLoaded', function () { 1525 // Create popup overlay 1526 const popupOverlay = document.createElement('div'); 1527 popupOverlay.id = 'home-quotePopup'; 1528 1529 // Create popup content 1530 const popupContent = document.createElement('div'); 1531 popupContent.classList.add('popup-content'); 1532 1533 // Create close button 1534 const closeButton = document.createElement('span'); 1535 closeButton.classList.add('close-button'); 1536 closeButton.innerHTML = '×'; 1537 1538 // Create iframe 1539 const iframe = document.createElement('iframe'); 1540 iframe.src = 'https://calendar.cirrusinsight.com/smart-schedule/grace-scheduling/removal-call-back'; 1541 iframe.width = '1000'; 1542 iframe.height = '700'; 1543 iframe.frameBorder = '0'; 1544 iframe.allowFullscreen = true; 1545 1546 // Assemble popup 1547 popupContent.appendChild(closeButton); 1548 popupContent.appendChild(iframe); 1549 popupOverlay.appendChild(popupContent); 1550 document.body.appendChild(popupOverlay); 1551 1552 // Grace quote content 1553 const quoteContent = document.querySelector('.grace-quote-content'); 1554 1555 // Function to attach click event 1556 function attachTrigger() { 1557 let trigger; 1558 1559 if (window.innerWidth <= 1023) { 1560 // Mobile: Search inside home-quick-free-quote 1561 const homeQuickFreeQuote = document.querySelector('.home-quick-free-quote'); 1562 if (homeQuickFreeQuote) { 1563 trigger = homeQuickFreeQuote.querySelector('.quote-form-button[data-action="callback"]'); 1564 } 1565 } else { 1566 // Desktop: Search globally 1567 trigger = document.querySelector('.quote-form-button[data-action="callback"]'); 1568 } 1569 1570 if (trigger) { 1571 trigger.addEventListener('click', function (e) { 1572 e.preventDefault(); 1573 popupOverlay.classList.add('show'); 1574 if (quoteContent) quoteContent.style.display = 'none'; 1575 }); 1576 } 1577 } 1578 1579 // Attach initially 1580 attachTrigger(); 1581 1582 // Also reattach on window resize (because screen might resize after load) 1583 window.addEventListener('resize', function () { 1584 attachTrigger(); 1585 }); 1586 1587 // Close popup 1588 function closePopup() { 1589 popupOverlay.classList.remove('show'); 1590 setTimeout(() => { 1591 if (quoteContent) quoteContent.style.display = ''; 1592 }, 400); // matches CSS transition duration 1593 } 1594 1595 closeButton.addEventListener('click', closePopup); 1596 1597 window.addEventListener('click', function (e) { 1598 if (e.target === popupOverlay) { 1599 closePopup(); 1600 } 1601 }); 1602}); 1603 1604function initWidget(root){ 1605 if(!root || root.dataset.dgReady) return; 1606 root.dataset.dgReady = '1'; 1607 var search = root.querySelector('.dg-search-input'); 1608 var buttons = root.querySelectorAll('.dg-filter-btn'); 1609 var sections = root.querySelectorAll('.dg-section'); 1610 var empty = root.querySelector('.dg-no-results'); 1611 var active = 'all'; 1612 function apply(){ 1613 var q = (search ? search.value : '').trim().toLowerCase(); 1614 var anyVisible = false; 1615 sections.forEach(function(sec){ 1616 var sid = sec.getAttribute('data-state-id'); 1617 var stateMatch = (active === 'all' || active === sid); 1618 var visible = 0; 1619 sec.querySelectorAll('.dg-card').forEach(function(card){ 1620 var hay = card.getAttribute('data-search') || ''; 1621 var match = stateMatch && (q === '' || hay.indexOf(q) !== -1); 1622 card.style.display = match ? '' : 'none'; 1623 if(match){ visible++; } 1624 }); 1625 sec.style.display = visible > 0 ? '' : 'none'; 1626 if(visible > 0){ anyVisible = true; } 1627 }); 1628 if(empty){ empty.style.display = anyVisible ? 'none' : ''; } 1629 } 1630 if(search){ search.addEventListener('input', apply); }
1631 buttons.forEach(function(btn){ 1632 btn.addEventListener('click', function(){ 1633 buttons.forEach(function(b){ b.classList.remove('is-active'); b.setAttribute('aria-pressed','false'); }); 1634 btn.classList.add('is-active'); 1635 btn.setAttribute('aria-pressed','true'); 1636 active = btn.getAttribute('data-state-id') || 'all'; 1637 apply(); 1638 }); 1639 }); 1640 apply(); 1641} 1642function initAll(){ 1643 var nodes = document.querySelectorAll('.dg-guides'); 1644 for(var i=0;i<nodes.length;i++){ initWidget(nodes[i]); } 1645} 1646if(document.readyState !== 'loading'){ initAll(); } 1647else { document.addEventListener('DOMContentLoaded', initAll); } 1648// Elementor editor preview support 1649 1650 jQuery(window).on('elementor/frontend/init', function(){ 1651 if(window.elementorFrontend && elementorFrontend.hooks){ 1652 elementorFrontend.hooks.addAction('frontend/element_ready/dg_guides.default', function($scope){ 1653 initWidget($scope[0]); 1654 }); 1655 } 1656 });
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.