PageSourceSearch

https://eastonfarmersmarket.com/wp-content/themes/green-farm/js/scrollspy.js?ver=1.0.0

js eastonfarmersmarket.com collected 2026-09-26 04:13:11 UTC 15,042 bytes, 488 lines download raw bytes

1/**
2 * @package 	WordPress
3 * @subpackage 	Green Farm
4 * @version		1.0.8
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
158
159
160var _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; };
161
162var _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; }; }();
163
164function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
165
166/**
167 * --------------------------------------------------------------------------
168 * Bootstrap (v4.0.0-alpha.6): scrollspy.js
169 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
170 * --------------------------------------------------------------------------
171 */
172
173var ScrollSpy = function ($) {
174
175  /**
176   * ------------------------------------------------------------------------
177   * Constants
178   * ------------------------------------------------------------------------
179   */
180
181  var NAME = 'scrollspy';
182  var VERSION = '4.0.0-alpha.6';
183  var DATA_KEY = 'bs.scrollspy';
184  var EVENT_KEY = '.' + DATA_KEY;
185  var DATA_API_KEY = '.data-api';
186  var JQUERY_NO_CONFLICT = $.fn[NAME];
187
188  var Default = {
189    offset: 10,
190    method: 'auto',
191    target: ''
192  };
193
194  var DefaultType = {
195    offset: 'number',
196    method: 'string',
197    target: '(string|element)'
198  };
199
200  var Event = {
201    ACTIVATE: 'activate' + EVENT_KEY,
202    SCROLL: 'scroll' + EVENT_KEY,
203    LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
204  };
205
206  var ClassName = {
207    ACTIVE: 'current-menu-item'
208  };
209
210  var Selector = {
211    DATA_SPY: '[data-spy="scroll"]',
212    ACTIVE: '.current-menu-item',
213    LI: 'li',
214    NAV_LINKS: '.menu-item > a',
215    DROPDOWN: '.sub-menu',
216    DROPDOWN_ITEMS: '.sub-menu .menu-item > a'
217  };
218
219  var OffsetMethod = {
220    OFFSET: 'offset',
221    POSITION: 'position'
222  };
223
224  /**
225   * ------------------------------------------------------------------------
226   * Class Definition
227   * ------------------------------------------------------------------------
228   */
229
230  var ScrollSpy = function () {
231    function ScrollSpy(element, config) {
232      var _this = this;
233
234      _classCallCheck(this, ScrollSpy);
235
236      this._element = element;
237      this._scrollElement = element.tagName === 'BODY' ? window : element;
238      this._config = this._getConfig(config);
239      this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
240      this._offsets = [];
241      this._targets = [];
242      this._activeTarget = null;
243      this._scrollHeight = 0;
244
245      $(this._scrollElement).on(Event.SCROLL, function (event) {
246        return _this._process(event);
247      });
248
249      this.refresh();
250      this._process();
251    }
252
253    // getters
254
255    // public
256
257    ScrollSpy.prototype.refresh = function refresh() {
258      var _this2 = this;
259
260      var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
261
262      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
263
264      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
265
266      this._offsets = [];
267      this._targets = [];
268
269      this._scrollHeight = this._getScrollHeight();
270
271      var targets = $.makeArray($(this._selector));
272
273      targets.map(function (element) {
274        var target = void 0;
275        var targetSelector = Util.getSelectorFromElement(element);
276
277        if (targetSelector) {
278          target = $(targetSelector)[0];
279        }
280
281        if (target && (target.offsetWidth || target.offsetHeight)) {
282          // todo (fat): remove sketch reliance on jQuery position/offset
283          return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
284        }
285        return null;
286      }).filter(function (item) {
287        return item;
288      }).sort(function (a, b) {
289        return a[0] - b[0];
290      }
290).forEach(function (item) {
291        _this2._offsets.push(item[0]);
292        _this2._targets.push(item[1]);
293      });
294    };
295
296    ScrollSpy.prototype.dispose = function dispose() {
297      $.removeData(this._element, DATA_KEY);
298      $(this._scrollElement).off(EVENT_KEY);
299
300      this._element = null;
301      this._scrollElement = null;
302      this._config = null;
303      this._selector = null;
304      this._offsets = null;
305      this._targets = null;
306      this._activeTarget = null;
307      this._scrollHeight = null;
308    };
309
310    // private
311
312    ScrollSpy.prototype._getConfig = function _getConfig(config) {
313      config = $.extend({}, Default, config);
314
315      if (typeof config.target !== 'string') {
316        var id = $(config.target).attr('id');
317        if (!id) {
318          id = Util.getUID(NAME);
319          $(config.target).attr('id', id);
320        }
321        config.target = '#' + id;
322      }
323
324      Util.typeCheckConfig(NAME, config, DefaultType);
325
326      return config;
327    };
328
329    ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
330      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
331    };
332
333    ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
334      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
335    };
336
337    ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
338      return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
339    };
340
341    ScrollSpy.prototype._process = function _process() {
342		var cmsmasters_wpAdminBar = $('#wpadminbar').outerHeight(), 
343			cmsmasters_offset_val = (cmsmasters_wpAdminBar !== undefined) ? cmsmasters_wpAdminBar : 0;
344		
345		
346		if ($('#page').hasClass('fixed_header')) {
347			var cmsmasters_header_height = $('#header').outerHeight();
348			
349			cmsmasters_offset_val = cmsmasters_offset_val + cmsmasters_header_height;
350		}
351		
352		
353		this._config.offset = cmsmasters_offset_val;
354		
355		
356      var scrollTop = this._getScrollTop() + this._config.offset;
357      var scrollHeight = this._getScrollHeight();
358      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
359
360      if (this._scrollHeight !== scrollHeight) {
361        this.refresh();
362      }
363
364      if (scrollTop >= maxScroll) {
365        var target = this._targets[this._targets.length - 1];
366
367        if (this._activeTarget !== target) {
368          this._activate(target);
369        }
370        return;
371      }
372
373      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
374        this._activeTarget = null;
375        this._clear();
376        return;
377      }
378
379      for (var i = this._offsets.length; i--;) {
380        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
381
382        if (isActiveTarget) {
383          this._activate(this._targets[i]);
384        }
385      }
386    };
387
388    ScrollSpy.prototype._activate = function _activate(target) {
389      if (target === undefined) {
390		return false;
391	  }
392	  
393      this._activeTarget = target;
394
395      this._clear();
396
397      var queries = this._selector.split(',');
398      queries = queries.map(function (selector) {
399        return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
400      });
401
402      var $link = $(queries.join(','));
403
404      if ($link.closest('ul').hasClass('sub-menu')) {
405        $link.parents('.menu-item-has-children').addClass('current-menu-ancestor');
406        $link.closest(Selector.LI).addClass(ClassName.ACTIVE);
407      } else {
408        // todo (fat) this is kinda sus...
409        // recursively add actives to tested nav-links
410        $link.closest(Selector.LI).addClass(ClassName.ACTIVE);
411      }
412
413      $(this._scrollElement).trigger(Event.ACTIVATE, {
414        relatedTarget: target
415      });
416    };
417
418    ScrollSpy.prototype._clear = function _clear() {
419	  $(this._selector).parents('.menu-item-has-children').filter('.current-menu-ancestor').removeClass('current-menu-ancestor');
420      $(this._selector).closest(Selector.LI).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
421    };
422
423    // static
424
425    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
426      return this.each(function () {
427        var data = $(this).data(DATA_KEY);
428        var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
429
430        if (!data) {
431          data = new ScrollSpy(this, _config);
432          $(this).data(DATA_KEY, data);
433        }
434
435        if (typeof config === 'string') {
436          if (data[config] === undefined) {
vendor: 1,303 bytes, lines 437-488
437            throw new Error('No method named "' + config + '"');
438          }
439          data[config]();
440        }
441      });
442    };
443
444    _createClass(ScrollSpy, null, [{
445      key: 'VERSION',
446      get: function get() {
447        return VERSION;
448      }
449    }, {
450      key: 'Default',
451      get: function get() {
452        return Default;
453      }
454    }]);
455
456    return ScrollSpy;
457  }();
458
459  /**
460   * ------------------------------------------------------------------------
461   * Data Api implementation
462   * ------------------------------------------------------------------------
463   */
464
465  $(window).on(Event.LOAD_DATA_API, function () {
466    var scrollSpys = $.makeArray($(Selector.DATA_SPY));
467
468    for (var i = scrollSpys.length; i--;) {
469      var $spy = $(scrollSpys[i]);
470      ScrollSpy._jQueryInterface.call($spy, $spy.data());
471    }
472  });
473
474  /**
475   * ------------------------------------------------------------------------
476   * jQuery
477   * ------------------------------------------------------------------------
478   */
479
480  $.fn[NAME] = ScrollSpy._jQueryInterface;
481  $.fn[NAME].Constructor = ScrollSpy;
482  $.fn[NAME].noConflict = function () {
483    $.fn[NAME] = JQUERY_NO_CONFLICT;
484    return ScrollSpy._jQueryInterface;
485  };
486
487  return ScrollSpy;
488}(jQuery);

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.