1jQuery(document).ready(function ($) { 2 /*================================================ 3 = Init bootstrap 5 tooltip = 4 ================================================*/ 5 $("body").tooltip({ selector: '[data-bs-toggle="tooltip"]' }); 6 $('body [data-bs-toggle="tooltip"]').tooltip("disable"); 7 // $.each($('*[data-bs-toggle="tooltip"]'), function(key, element){ 8 9 // new bootstrap.Tooltip(element) 10 // }) 11 /*===== End of Init bootstrap 5 tooltip ======*/ 12 13 /*=============================================== 14 = Sticky Header on scroll = 15 ===============================================*/ 16 17 let $window = $(window), 18 height = $window.height(), 19 width = $window.width(), 20 navheight = $("#header #top").height(); 21 22 let scrollDirection, oldScrollDirection; 23 let oldScrollTop = 0; 24 let fixedInitClass = "fixed-init"; 25 26 let headerHeight = $("#header").height(); 27 let headerBottomHeight = $("#header #bottom").height(); 28 // let heroLineMenuTopOffset = $('div#heroLineMenuWrapper').offset().top; 29 if ($("div#heroLineMenuWrapper ul").length) { 30 let heroLineMenuTopOffset = $("div#heroLineMenuWrapper ul").offset().top; 31 let headerHeroMenuDistance = heroLineMenuTopOffset - headerHeight; 32 } 33 34 let stickyPoint = false; 35 36 $window.on("resize orientationchange", setMeasures); 37 38 function setMeasures() { 39 (height = $window.height()), 40 (width = $window.width()), 41 (navheight = $("#header #top").height()); 42 43 headerHeight = $("#header").height(); 44 headerBottomHeight = $("#header #bottom").height(); 45 // heroLineMenuTopOffset = $('div#heroLineMenuWrapper').offset().top; 46 if ($("div#heroLineMenuWrapper ul").length) { 47 heroLineMenuTopOffset = $("div#heroLineMenuWrapper ul").offset().top; 48 headerHeroMenuDistance = heroLineMenuTopOffset - headerHeight; 49 } 50 } 51 52 function sticky() { 53 var scrollTop = $window.scrollTop(); 54 55 if (scrollTop > oldScrollTop) { 56 // downscroll 57 scrollDirection = "down"; 58 } else { 59 // upscroll 60 scrollDirection = "up"; 61 } 62 oldScrollTop = scrollTop; 63 64 if (!$("#header #bottom").hasClass(scrollDirection)) { 65 $("#header #bottom") 66 .removeClass(oldScrollDirection) 67 .addClass(scrollDirection); 68 } 69 70 if (scrollTop > navheight) { 71 // $window.off('touchmove', sticky); 72 // $window.off('scroll', sticky); 73 $("#header").addClass("fixed-header"); 74 $("#header #bottom").addClass("fixed"); 75 76 $("#header #bottom").removeClass("fixed-init").addClass(fixedInitClass); 77 $("header#header nav.navbar").addClass("fixed-navbar"); 78 79 fixedInitClass = ""; 80 81 $('body [data-bs-toggle="tooltip"]').tooltip("enable"); 82 83 if ($("div#heroLineMenuWrapper ul").length) { 84 if (!stickyPoint) { 85 $("div#heroLineMenuWrapper").css({ 86 top: "180px", 87 // top: (headerHeroMenuDistance + headerBottomHeight), 88 // top: $('div#heroLineMenuWrapper').offset().top, 89 }); 90 } 91 92 stickyPoint = true; 93 94 $("div#heroLineMenuWrapper") 95 .addClass("fixed-side-menu") 96 .removeClass("absolute-side-menu"); 97 } 98 // $('div#heroLineMenuWrapper ul li:last-child').addClass('fixed-side-menu'); 99 // $('nav').addClass('nav_animate'); 100 // setTimeout(function(){ 101 // $('header#header nav.navbar').css({ 102 // // 'justify-content': 'right', 103 // 'padding-left': 3 + '%', 104 // 'padding-bottom': '0px !important', 105 // 'transition':'.5s' 106 // }); 107 // $('#logo').css({ 108 // 'left': 3 + '%', 109 // 'transition':'.5s' 110 // }); 111 // $('#social').css({ 112 // 'right': 5 + '%', 113 // 'transition':'.5s' 114 // }); 115 // }, 100); 116 } else { 117 $("#header").removeClass("fixed-header"); 118 $("#header #bottom").removeClass("fixed"); 119 $("header#header nav.navbar").removeClass("fixed-navbar"); 120 $('body [data-bs-toggle="tooltip"]').tooltip("disable"); 121 122 fixedInitClass = "fixed-init"; 123 124 if ($("div#heroLineMenuWrapper ul").length) { 125 if (stickyPoint) { 126 $("div#heroLineMenuWrapper").css({ 127 top: 0, 128 }); 129 } 130 stickyPoint = false;
131 $("div#heroLineMenuWrapper") 132 .addClass("absolute-side-menu") 133 .removeClass("fixed-side-menu"); 134 } 135 // $('nav').removeClass('nav_animate'); 136 // setTimeout(function(){ 137 // $('header#header nav.navbar').css({ 138 // // 'justify-content': 'right', 139 // 'padding-left': 0, 140 // // 'padding-bottom': 'initial', 141 // 'transition':'.5s' 142 // }); 143 // $('#logo').css({ 144 // 'left':-150, 145 // 'transition':'.5s' 146 // }); 147 // }, 100); 148 } 149 oldScrollDirection = scrollDirection; 150 } 151 // $window.on('touchmove', sticky); 152 $window.on("scroll resize orientationchange", sticky); 153 154 // $(window).scroll(function(){ 155 156 // let topHeaderHeight = $('header#header div#top').height(); 157 158 // console.log(topHeaderHeight) 159 160 // // var sticky = $('.sticky'), 161 // let scroll = $(window).scrollTop(); 162 163 // if (scroll >= topHeaderHeight) { 164 // console.log('evo scrollamo se') 165 // $('header#header div#top').hide(); 166 167 // } else { 168 // $('header#header div#top').show(); 169 // } 170 // // else sticky.removeClass('fixed'); 171 // }); 172 173 /*===== End of Sticky Header on scroll ======*/ 174 175 // BACK TO TOP BTN FUNC 176 $(window).scroll(function () { 177 if ($(this).scrollTop() != 0) { 178 $("#back-to-top").fadeIn(); 179 } else { 180 $("#back-to-top").fadeOut(); 181 } 182 }); 183 $("#back-to-top").on("click touchstart", function (e) { 184 e.preventDefault(); 185 $("body,html").animate({ scrollTop: 0 }, 700); 186 return false; 187 }); 188 189 // Quick subscribe homepage 190 function validateEmail(email) { 191 var re = 192 /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 193 return re.test(String(email).toLowerCase()); 194 } 195 196 $("#sub_phone").mask("999-999-9999", { 197 placeholder: "___-___-____", 198 clearIfNotMatch: true, 199 }); 200 201 $(".homepage-subscribers-form #subs_button").click(function (e) { 202 e.preventDefault(); 203 204 username = $("#sub_name").val(); 205 if (username.length === 0) { 206 $("#sub_name").addClass("has-error"); 207 } else { 208 if ($("#sub_name").hasClass("has-error")) { 209 $("#sub_name").removeClass("has-error"); 210 } 211 } 212 213 email = $("#sub_email").val(); 214 if (email.length === 0 || !validateEmail(email)) { 215 $("#sub_email").addClass("has-error"); 216 } else { 217 if ($("#sub_email").hasClass("has-error")) { 218 $("#sub_email").removeClass("has-error"); 219 } 220 } 221
222 phone = $("#sub_phone").val(); 223 if (email.length === 0 || !validateEmail(email)) { 224 $("#sub_email").addClass("has-error"); 225 } else { 226 if ($("#sub_email").hasClass("has-error")) { 227 $("#sub_email").removeClass("has-error"); 228 } 229 } 230 if (username != "" && email != "" && validateEmail(email)) { 231 let btn_html = $("#subs_button").html(); 232 $("#subs_button + div.alert").remove(); 233 $("#subs_button").html('<i class="fa fa-spinner fa-spin"></i> Working'); 234 235 $("#sub_name").attr("readonly", true); 236 $("#sub_email").attr("readonly", true); 237 $("#sub_phone").attr("readonly", true); 238 239 $.ajax({ 240 method: "post", 241 url: TW.ajaxUrl, 242 data: { 243 action: "twd_quick_subscribe", 244 sub_name: username, 245 sub_email: email, 246 sub_phone: phone, 247 msg: $("#homepage-subscriber-form").serialize(), 248 }, 249 }) 250 .success(function (msg) { 251 //remove errors and display success 252 if ($("#sub_name").hasClass("has-error")) { 253 $("#sub_name").removeClass("has-error"); 254 } 255 if ($("#sub_email").hasClass("has-error")) { 256 $("#sub_email").removeClass("has-error"); 257 } 258 259 if (msg) { 260 let errrMessage = msg.replace(/[^\w\s]/gi, ""); 261 errrMessage = errrMessage.replace(/string/g, ""); 262 errrMessage = errrMessage.replace(/[0-9]/g, ""); 263 $("#subs_button").addClass( 264 "btn-danger homepage-subscribed-danger font-weight-bold" 265 ); 266 $("#subs_button").html("Error Occurred!"); 267 $("#homepage-subscriber-form").after( 268 `<div class="row ms-1"><div id="subscribe-error" class="alert alert-danger alert-dismissible" role="alert"> ${errrMessage}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></div></div>` 269 ); 270 //Remove alert, button danger & button text after 3 sec 271 setTimeout(function () { 272 $("#subs_button").removeClass("btn-danger"); 273 $("#subs_button").addClass("subscribe-button"); 274 $("#subs_button").html("Subscribe now"); 275 $("#subscribe-error").fadeOut(); 276 }, 3000); 277 } else { 278 if ($("#subs_button").hasClass("homepage-subscribed-danger")) { 279 $("#subs_button").removeClass("homepage-subscribed-danger"); 280 } 281 if ($("#subs_button").hasClass("btn-danger")) { 282 $("#subs_button").removeClass("btn-danger"); 283 } 284 $("#subs_button").addClass( 285 "btn-success homepage-subscribed-success font-weight-bold" 286 ); 287 $("#subs_button").html("Successfully Subscribed!"); 288 // Remove success class after 3 sec 289 setTimeout(function () { 290 $("#subs_button").removeClass("btn-success"); 291 $("#subs_button").addClass("subscribe-button"); 292 $("#subs_button").html("Subscribe now"); 293 }, 3000); 294 } 295 //clear input values 296 $("#sub_name").val(""); 297 $("#sub_email").val(""); 298 $("#sub_phone").val(""); 299 $("#sub_name").attr("readonly", false); 300 $("#sub_email").attr("readonly", false); 301 $("#sub_phone").attr("readonly", false); 302 }) 303 .fail(function (jqXHR, textStatus) { 304 //display error message 305 if ($("#sub_name").hasClass("has-error")) { 306 $("#sub_name").removeClass("has-error"); 307 } 308 if ($("#sub_email").hasClass("has-error")) { 309 $("#sub_email").removeClass("has-error"); 310 } 311 $("#subs_button").html("Error"); 312 313 //clear input values 314 $("#sub_name").val(""); 315 $("#sub_email").val(""); 316 $("#sub_phone").val(""); 317 $("#sub_name").attr("readonly", false); 318 $("#sub_email").attr("readonly", false); 319 $("#sub_phone").attr("readonly", false); 320 }); 321 } 322 }); 323 324 $(".marquee").marquee({ 325 //duration in milliseconds of the marquee 326 // duration: 7000, 327 speed: 120, 328 //gap in pixels between the tickers 329 gap: 50, 330 //time in milliseconds before the marquee will start animating 331 delayBeforeStart: 0, 332 //'left' or 'right' 333 direction: "left", 334 //true or false - should the marquee be duplicated to show an effect of continues flow 335 duplicated: false, 336 //true or false - should the marquee animation pause on hover 337 pauseOnHover: true, 338 }); 339 340 $(".homepage-subscribers-form #sub_name").blur(function () { 341 if ($(this).val().length != 0) { 342 $("#homepage-extra-subscribe").slideDown(); 343 } else { 344 $("#homepage-extra-subscribe").slideUp(); 345 } 346 }); 347}); 348 349/*============================================ 350= Expanding Search Bar = 351============================================*/ 352/** 353 * uisearch.js v1.0.0 354 * http://www.codrops.com 355 * 356 * Licensed under the MIT license. 357 * http://www.opensource.org/licenses/mit-license.php 358 * 359 * Copyright 2013, Codrops 360 * http://www.codrops.com 361 */ 362(function (window) { 363 "use strict"; 364 365 // EventListener | @jon_neal | //github.com/jonathantneal/EventListener 366 !window.addEventListener && 367 window.Element && 368 (function () { 369 function addToPrototype(name, method) { 370 Window.prototype[name] = 371 HTMLDocument.prototype[name] = 372 Element.prototype[name] = 373 method; 374 } 375 376 var registry = []; 377 378 addToPrototype("addEventListener", function (type, listener) { 379 var target = this; 380 381 registry.unshift({ 382 __listener: function (event) { 383 event.currentTarget = target; 384 event.pageX = event.clientX + document.documentElement.scrollLeft; 385 event.pageY = event.clientY + document.documentElement.scrollTop; 386 event.preventDefault = function () { 387 event.returnValue = false;
388 }; 389 event.relatedTarget = event.fromElement || null; 390 event.stopPropagation = function () { 391 event.cancelBubble = true; 392 }; 393 event.relatedTarget = event.fromElement || null; 394 event.target = event.srcElement || target; 395 event.timeStamp = +new Date(); 396 397 listener.call(target, event); 398 }, 399 listener: listener, 400 target: target, 401 type: type, 402 }); 403 404 this.attachEvent("on" + type, registry[0].__listener); 405 }); 406 407 addToPrototype("removeEventListener", function (type, listener) { 408 for (var index = 0, length = registry.length; index < length; ++index) { 409 if ( 410 registry[index].target == this && 411 registry[index].type == type && 412 registry[index].listener == listener 413 ) { 414 return this.detachEvent( 415 "on" + type, 416 registry.splice(index, 1)[0].__listener 417 ); 418 } 419 } 420 }); 421 422 addToPrototype("dispatchEvent", function (eventObject) { 423 try { 424 return this.fireEvent("on" + eventObject.type, eventObject); 425 } catch (error) { 426 for ( 427 var index = 0, length = registry.length; 428 index < length; 429 ++index 430 ) { 431 if ( 432 registry[index].target == this && 433 registry[index].type == eventObject.type 434 ) { 435 registry[index].call(this, eventObject); 436 } 437 } 438 } 439 }); 440 })(); 441 442 // http://stackoverflow.com/a/11381730/989439 443 function mobilecheck() { 444 var check = false; 445 (function (a) { 446 if ( 447 /(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test( 448 a 449 ) || 450 /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( 451 a.substr(0, 4) 452 ) 453 ) 454 check = true; 455 })(navigator.userAgent || navigator.vendor || window.opera); 456 return check; 457 } 458 459 // http://www.jonathantneal.com/blog/polyfills-and-prototypes/ 460 !String.prototype.trim && 461 (String.prototype.trim = function () { 462 return this.replace(/^\s+|\s+$/g, ""); 463 }); 464 465 function UISearch(el, options) { 466 this.el = el; 467 this.inputEl = el.querySelector("form > input.sb-search-input"); 468 this._initEvents(); 469 } 470 471 UISearch.prototype = { 472 _initEvents: function () { 473 var self = this, 474 initSearchFn = function (ev) { 475 ev.stopPropagation(); 476 // trim its value 477 self.inputEl.value = self.inputEl.value.trim(); 478 479 if (!classie.has(self.el, "sb-search-open")) { 480 // open it 481 ev.preventDefault(); 482 self.open(); 483 } else if ( 484 classie.has(self.el, "sb-search-open") && 485 /^\s*$/.test(self.inputEl.value) 486 ) { 487 // close it 488 ev.preventDefault(); 489 self.close(); 490 } 491 }; 492 493 this.el.addEventListener("click", initSearchFn); 494 this.el.addEventListener("touchstart", initSearchFn); 495 this.inputEl.addEventListener("click", function (ev) { 496 ev.stopPropagation(); 497 }); 498 this.inputEl.addEventListener("touchstart", function (ev) { 499 ev.stopPropagation(); 500 }); 501 }, 502 open: function () { 503 var self = this; 504 classie.add(this.el, "sb-search-open"); 505 // focus the input 506 if (!mobilecheck()) { 507 this.inputEl.focus(); 508 } 509 // close the search input if body is clicked 510 var bodyFn = function (ev) { 511 self.close();
512 this.removeEventListener("click", bodyFn); 513 this.removeEventListener("touchstart", bodyFn); 514 }; 515 document.addEventListener("click", bodyFn); 516 document.addEventListener("touchstart", bodyFn); 517 }, 518 close: function () { 519 this.inputEl.blur(); 520 classie.remove(this.el, "sb-search-open"); 521 }, 522 }; 523 524 // add to global namespace 525 window.UISearch = UISearch; 526})(window); 527 528let sbSearch = document.getElementById("sb-search"); 529if (sbSearch) { 530 new UISearch(document.getElementById("sb-search")); 531} 532 533(function (window) { 534 "use strict"; 535 536 // class helper functions from bonzo https://github.com/ded/bonzo 537 538 function classReg(className) { 539 return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); 540 } 541 542 // classList support for class management 543 // altho to be fair, the api sucks because it won't accept multiple classes at once 544 var hasClass, addClass, removeClass; 545 546 if ("classList" in document.documentElement) { 547 hasClass = function (elem, c) { 548 return elem.classList.contains(c); 549 }; 550 addClass = function (elem, c) { 551 elem.classList.add(c); 552 }; 553 removeClass = function (elem, c) { 554 elem.classList.remove(c); 555 }; 556 } else { 557 hasClass = function (elem, c) { 558 return classReg(c).test(elem.className); 559 }; 560 addClass = function (elem, c) { 561 if (!hasClass(elem, c)) { 562 elem.className = elem.className + " " + c; 563 } 564 }; 565 removeClass = function (elem, c) { 566 elem.className = elem.className.replace(classReg(c), " "); 567 }; 568 } 569 570 function toggleClass(elem, c) { 571 var fn = hasClass(elem, c) ? removeClass : addClass; 572 fn(elem, c); 573 } 574 575 var classie = { 576 // full names 577 hasClass: hasClass, 578 addClass: addClass, 579 removeClass: removeClass, 580 toggleClass: toggleClass, 581 // short names 582 has: hasClass, 583 add: addClass, 584 remove: removeClass, 585 toggle: toggleClass, 586 }; 587 588 // transport 589 if (typeof define === "function" && define.amd) { 590 // AMD 591 define(classie); 592 } else { 593 // browser global 594 window.classie = classie; 595 } 596})(window); 597 598/*===== End of Expanding Search Bar ======*/
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.