PageSourceSearch

https://sundancevacationsblog.com/wp-content/themes/travel-time/js/scrollspy.js?ver=1.0.0

js sundancevacationsblog.com collected 2026-09-26 03:14:32 UTC 14,627 bytes, 490 lines download raw bytes

1/**
2 * @package 	WordPress
3 * @subpackage 	Travel Time
4 * @version 	1.1.4
5 */
6
7
8/**
9 * --------------------------------------------------------------------------
10 * Bootstrap (v4.0.0-alpha.6): util.js
11 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
12 * --------------------------------------------------------------------------
13 */
14
15var Util = function ($) {
16
17  /**
18   * ------------------------------------------------------------------------
19   * Private TransitionEnd Helpers
20   * ------------------------------------------------------------------------
21   */
22
23  var transition = false;
24
25  var MAX_UID = 1000000;
26
27  var TransitionEndEvent = {
28    WebkitTransition: 'webkitTransitionEnd',
29    MozTransition: 'transitionend',
30    OTransition: 'oTransitionEnd otransitionend',
31    transition: 'transitionend'
32  };
33
34  // shoutout AngusCroll (https://goo.gl/pxwQGp)
35  function toType(obj) {
36    return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
37  }
38
39  function isElement(obj) {
40    return (obj[0] || obj).nodeType;
41  }
42
43  function getSpecialTransitionEndEvent() {
44    return {
45      bindType: transition.end,
46      delegateType: transition.end,
47      handle: function handle(event) {
48        if ($(event.target).is(this)) {
49          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
50        }
51        return undefined;
52      }
53    };
54  }
55
56  function transitionEndTest() {
57    if (window.QUnit) {
58      return false;
59    }
60
61    var el = document.createElement('bootstrap');
62
63    for (var name in TransitionEndEvent) {
64      if (el.style[name] !== undefined) {
65        return {
66          end: TransitionEndEvent[name]
67        };
68      }
69    }
70
71    return false;
72  }
73
74  function transitionEndEmulator(duration) {
75    var _this = this;
76
77    var called = false;
78
79    $(this).one(Util.TRANSITION_END, function () {
80      called = true;
81    });
82
83    setTimeout(function () {
84      if (!called) {
85        Util.triggerTransitionEnd(_this);
86      }
87    }, duration);
88
89    return this;
90  }
91
92  function setTransitionEndSupport() {
93    transition = transitionEndTest();
94
95    $.fn.emulateTransitionEnd = transitionEndEmulator;
96
97    if (Util.supportsTransitionEnd()) {
98      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
99    }
100  }
101
102  /**
103   * --------------------------------------------------------------------------
104   * Public Util Api
105   * --------------------------------------------------------------------------
106   */
107
108  var Util = {
109
110    TRANSITION_END: 'bsTransitionEnd',
111
112    getUID: function getUID(prefix) {
113      do {
114        // eslint-disable-next-line no-bitwise
115        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
116      } while (document.getElementById(prefix));
117      return prefix;
118    },
119    getSelectorFromElement: function getSelectorFromElement(element) {
120      var selector = element.getAttribute('data-target');
121
122      if (!selector) {
123        selector = element.getAttribute('href') || '';
124        selector = /^#[a-z]/i.test(selector) ? selector : null;
125      }
126
127      return selector;
128    },
129    reflow: function reflow(element) {
130      return element.offsetHeight;
131    },
132    triggerTransitionEnd: function triggerTransitionEnd(element) {
133      $(element).trigger(transition.end);
134    },
135    supportsTransitionEnd: function supportsTransitionEnd() {
136      return Boolean(transition);
137    },
138    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
139      for (var property in configTypes) {
140        if (configTypes.hasOwnProperty(property)) {
141          var expectedTypes = configTypes[property];
142          var value = config[property];
143          var valueType = value && isElement(value) ? 'element' : toType(value);
144
145          if (!new RegExp(expectedTypes).test(valueType)) {
146            throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
147          }
148        }
149      }
150    }
151  };
152
153  setTransitionEndSupport();
154
155  return Util;
156}(jQuery);
157//# sourceMappingURL=util.js.map
158
159
160
161var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
162
163var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
164
165function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
166
167/**
168 * --------------------------------------------------------------------------
169 * Bootstrap (v4.0.0-alpha.6): scrollspy.js
170 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
171 * --------------------------------------------------------------------------
172 */
173
174var ScrollSpy = function ($) {
175
176  /**
177   * ------------------------------------------------------------------------
178   * Constants
179   * ------------------------------------------------------------------------
180   */
181
182  var NAME = 'scrollspy';
183  var VERSION = '4.0.0-alpha.6';
184  var DATA_KEY = 'bs.scrollspy';
185  var EVENT_KEY = '.' + DATA_KEY;
186  var DATA_API_KEY = '.data-api';
187  var JQUERY_NO_CONFLICT = $.fn[NAME];
188
189  var Default = {
190    offset: 10,
191    method: 'auto',
192    target: ''
193  };
194
195  var DefaultType = {
196    offset: 'number',
197    method: 'string',
198    target: '(string|element)'
199  };
200
201  var Event = {
202    ACTIVATE: 'activate' + EVENT_KEY,
203    SCROLL: 'scroll' + EVENT_KEY,
204    LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
205  };
206
207  var ClassName = {
208    ACTIVE: 'current-menu-item'
209  };
210
211  var Selector = {
212    DATA_SPY: '[data-spy="scroll"]',
213    ACTIVE: '.current-menu-item',
214    LI: 'li',
215    NAV_LINKS: '.menu-item > a',
216    DROPDOWN: '.sub-menu',
217    DROPDOWN_ITEMS: '.sub-menu .menu-item > a'
218  };
219
220  var OffsetMethod = {
221    OFFSET: 'offset',
222    POSITION: 'position'
223  };
224
225  /**
226   * ------------------------------------------------------------------------
227   * Class Definition
228   * ------------------------------------------------------------------------
229   */
230
231  var ScrollSpy = function () {
232    function ScrollSpy(element, config) {
233      var _this = this;
234
235      _classCallCheck(this, ScrollSpy);
236
237      this._element = element;
238      this._scrollElement = element.tagName === 'BODY' ? window : element;
239      this._config = this._getConfig(config);
240      this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
241      this._offsets = [];
242      this._targets = [];
243      this._activeTarget = null;
244      this._scrollHeight = 0;
245
246      $(this._scrollElement).on(Event.SCROLL, function (event) {
247        return _this._process(event);
248      });
249
250      this.refresh();
251      this._process();
252    }
253
254    // getters
255
256    // public
257
258    ScrollSpy.prototype.refresh = function refresh() {
259      var _this2 = this;
260
261      var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
262
263      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
264
265      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
266
267      this._offsets = [];
268      this._targets = [];
269
270      this._scrollHeight = this._getScrollHeight();
271
272      var targets = $.makeArray($(this._selector));
273
274      targets.map(function (element) {
275        var target = void 0;
276        var targetSelector = Util.getSelectorFromElement(element);
277
278        if (targetSelector) {
279          target = $(targetSelector)[0];
280        }
281
282        if (target && (target.offsetWidth || target.offsetHeight)) {
283          // todo (fat): remove sketch reliance on jQuery position/offset
284          return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
285        }
286        return null;
287      }).filter(function (item) {
288        return item;
289      }).sort(function (a, b) {
290        return a[0] - b[0];
291      }
291).forEach(function (item) {
292        _this2._offsets.push(item[0]);
293        _this2._targets.push(item[1]);
294      });
295    };
296
297    ScrollSpy.prototype.dispose = function dispose() {
298      $.removeData(this._element, DATA_KEY);
299      $(this._scrollElement).off(EVENT_KEY);
300
301      this._element = null;
302      this._scrollElement = null;
303      this._config = null;
304      this._selector = null;
305      this._offsets = null;
306      this._targets = null;
307      this._activeTarget = null;
308      this._scrollHeight = null;
309    };
310
311    // private
312
313    ScrollSpy.prototype._getConfig = function _getConfig(config) {
314      config = $.extend({}, Default, config);
315
316      if (typeof config.target !== 'string') {
317        var id = $(config.target).attr('id');
318        if (!id) {
319          id = Util.getUID(NAME);
320          $(config.target).attr('id', id);
321        }
322        config.target = '#' + id;
323      }
324
325      Util.typeCheckConfig(NAME, config, DefaultType);
326
327      return config;
328    };
329
330    ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
331      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
332    };
333
334    ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
335      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
336    };
337
338    ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
339      return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
340    };
341
342    ScrollSpy.prototype._process = function _process() {
343		var cmsmasters_wpAdminBar = $('#wpadminbar').outerHeight(), 
344			cmsmasters_offset_val = (cmsmasters_wpAdminBar !== undefined) ? cmsmasters_wpAdminBar : 0;
345		
346		
347		if ($('#page').hasClass('fixed_header')) {
348			var cmsmasters_header_height = $('#header').outerHeight();
349			
350			cmsmasters_offset_val = cmsmasters_offset_val + cmsmasters_header_height;
351		}
352		
353		
354		this._config.offset = cmsmasters_offset_val;
355		
356		
357      var scrollTop = this._getScrollTop() + this._config.offset;
358      var scrollHeight = this._getScrollHeight();
359      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
360
361      if (this._scrollHeight !== scrollHeight) {
362        this.refresh();
363      }
364
365      if (scrollTop >= maxScroll) {
366        var target = this._targets[this._targets.length - 1];
367
368        if (this._activeTarget !== target) {
369          this._activate(target);
370        }
371        return;
372      }
373
374      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
375        this._activeTarget = null;
376        this._clear();
377        return;
378      }
379
380      for (var i = this._offsets.length; i--;) {
381        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
382
383        if (isActiveTarget) {
384          this._activate(this._targets[i]);
385        }
386      }
387    };
388
389     ScrollSpy.prototype._activate = function _activate(target) {
390      if (target === undefined) {
391		return false;
392	  }
393	  
394      this._activeTarget = target;
395
396      this._clear();
397
398      var queries = this._selector.split(',');
399      queries = queries.map(function (selector) {
400        return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
401      });
402
403      var $link = $(queries.join(','));
404
405      if ($link.closest('ul').hasClass('sub-menu')) {
406        $link.parents('.menu-item-has-children').addClass('current-menu-ancestor');
407        $link.closest(Selector.LI).addClass(ClassName.ACTIVE);
408      } else {
409        // todo (fat) this is kinda sus...
410        // recursively add actives to tested nav-links
411        $link.closest(Selector.LI).addClass(ClassName.ACTIVE);
412      }
413
414      $(this._scrollElement).trigger(Event.ACTIVATE, {
415        relatedTarget: target
416      });
417    };
418
419    ScrollSpy.prototype._clear = function _clear() {
420	  $(this._selector).parents('.menu-item-has-children').filter('.current-menu-ancestor').removeClass('current-menu-ancestor');
421      $(this._selector).closest(Selector.LI).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
422    };
423
424    // static
425
426    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
427      return this.each(function () {
428        var data = $(this).data(DATA_KEY);
429        var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
430
431        if (!data) {
432          data = new ScrollSpy(this, _config);
433          $(this).data(DATA_KEY, data);
434        }
435
436        if (typeof config === 'string') {
437          if (data[config] === undefined) {
vendor: 1,289 bytes, lines 438-490
438            throw new Error('No method named "' + config + '"');
439          }
440          data[config]();
441        }
442      });
443    };
444
445    _createClass(ScrollSpy, null, [{
446      key: 'VERSION',
447      get: function get() {
448        return VERSION;
449      }
450    }, {
451      key: 'Default',
452      get: function get() {
453        return Default;
454      }
455    }]);
456
457    return ScrollSpy;
458  }();
459
460  /**
461   * ------------------------------------------------------------------------
462   * Data Api implementation
463   * ------------------------------------------------------------------------
464   */
465
466  $(window).on(Event.LOAD_DATA_API, function () {
467    var scrollSpys = $.makeArray($(Selector.DATA_SPY));
468
469    for (var i = scrollSpys.length; i--;) {
470      var $spy = $(scrollSpys[i]);
471      ScrollSpy._jQueryInterface.call($spy, $spy.data());
472    }
473  });
474
475  /**
476   * ------------------------------------------------------------------------
477   * jQuery
478   * ------------------------------------------------------------------------
479   */
480
481  $.fn[NAME] = ScrollSpy._jQueryInterface;
482  $.fn[NAME].Constructor = ScrollSpy;
483  $.fn[NAME].noConflict = function () {
484    $.fn[NAME] = JQUERY_NO_CONFLICT;
485    return ScrollSpy._jQueryInterface;
486  };
487
488  return ScrollSpy;
489}(jQuery);
490//# sourceMappingURL=scrollspy.js.map

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.