PageSourceSearch

https://cityoftombstoneaz.gov/wp-content/themes/twt2022/assets/js/main.js?ver=9876

js cityoftombstoneaz.gov collected 2026-09-25 06:18:41 UTC 20,445 bytes, 598 lines download raw bytes

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.