PageSourceSearch

https://www.endlesscoast.com/wp-content/plugins/ec_2020/js/jquery-funcs.js?ver=2022-08-04-a96351998211

js endlesscoast.com collected 2026-10-05 01:15:09 UTC 10,195 bytes, 359 lines download raw bytes

1/*
2 * jQuery plugins
3 * v0.1  140901
4 * Adam Policky
5 */
6
7/*
8 * RB_BREADCRUMBS
9 */
10(function ($) {
11    $.fn.rb_breadcrumbs = function (options) {
12        var crumb_holder = $('.positioncrmb').empty();
13        if (!crumb_holder.length) {
14            crumb_holder = $('<p class="positioncrmb">');
15            $('.page-title').after(crumb_holder);
16        }
17
18        var bcI = 0;
19
20        this.each(function () {
21            var jqElem = $(this);
22
23            var label = jqElem.text();
24            var target = jqElem.next();
25            var hash = 'bc' + (++bcI);
26
27            target.prepend($('<a id="' + hash + '"></a>'));
28
29            var crumbUL = crumb_holder.children('ul.crumbholder').first();
30            if (!crumbUL.length) {
31                crumbUL = $('<ul class="crumbholder" />');
32                crumb_holder.prepend(crumbUL);
33            }
34
35            crumbUL.append($('<li><a href="#' + hash + '" onclick="return rb.gotoHash(this)">' + label + '</a></li>'));
36        });
37
38        if (bcI > 0)
39            crumb_holder.addClass('inited');
40
41        return this;
42    };
43
44    /* end RB_BREADCRUMBS */
45}(jQuery));
46
47
48
49/* RB_PINASPECT
50 *
51 * maintain a given aspect ratio on any block element
52 * resets element height when width changes
53 *		settings
54 * 			aspect:		the ratio w/h
55 *						use data-aspect to define on element
56 *			eventDelay:	time to delay before firing resize events (200)
57 *						prevents event overload
58 */
59(function ($) {
60    $.fn.rb_pinAspect = function (options) {
61        this.settings = $.extend({
62            // These are the defaults.
63            aspect: 1,			//default aspect if none given = square
64            eventDelay: 200		//delay firing of resize event for set time
65        }, options);
66
67        var _self = this;
68
69        var a = this.attr('pinAspect');
70        this.settings.aspect = a || this.settings.aspect;
71
72
73        return this.each(function () {
74            //console.log('$aspect: ' + this);
75            var elem = $(this);
76
77            var aspectArr = getDataBkptArray(elem, 'pinAspect');
78            elem.data('aspect', aspectArr);
79
80            set(elem, _self.settings);
81
82            elem.addClass('resize-listener').on('rb-resize', function () {
83                //console.log('resize aspect');
84                set(elem, _self.settings);
85            });
86            elem.addClass('bkpt-listener').on('breakpoint', function () {
87                //console.log('aspect breakpoint: ' + rb.s.getBreakpointName());
88                //console.log('bkpt aspect');
89                set(elem, _self.settings);
90            });
91
92
93        });
94
95    };
96
97    function set(elem, settings) {
98        if (elem.hasClass('tall')) setWidth(elem, settings);
99        else setHeight(elem, settings);
100    }
101
102    function setHeight(elem, settings) {
103        var aspect = elem.data('aspect');
104        if (!aspect) aspect = settings.aspect;
105        if ($.isArray(aspect)) {
106            aspect = aspect[rb.s.bkpt];
107        }
108
109        if (aspect == 'f') {
110            var wH = window.innerHeight;
111            var header = document.querySelector('header');
112            var rect = header.getBoundingClientRect();
113            elem.height(wH - rect.bottom);
114        } else if (aspect == 0) {
115            elem.height(0);
116        } else if (aspect) {
117            var w = elem.width();
118            elem.height(w / aspect);
119        } else {
120            elem.height('auto');
121        }
122    }
123
124    function setWidth(elem, settings) {
125        var aspect = elem.data('aspect');
126        if (!aspect) aspect = settings.aspect;
127        if ($.isArray(aspect)) {
128            aspect = aspect[rb.s.bkpt];
129        }
130        //console.log(aspect);
131        if (aspect) {
132            var h = elem.height();
133            elem.width(h * aspect);
134        } else {
135            elem.width('auto');
136        }
137    }
138
139    /* end RB_PINASPECT */
140}(jQuery));
141
142
143
144/* RB_FAQS
145 *
146 */
147(function ($) {
148    $.fn.rb_faqs = function (options) {
149        var settings = $.extend({
150            // These are the defaults.
151            noop: 1
152        }, options);
153
154        return this.each(function () {
155            var elem = $(this);
156
157            var div = $('<div class="faq">');
158
159            var child = this.nextElementSibling;
160
161            var loop = true;
162            var numChildren = 0;
163            while (loop) {
164                if (child && child.localName == 'p' && child.classList.contains('faq')) {
165                    var nextChild = child.nextElementSibling;
166
167                    div.append(child);
168                    $(child).addClass('temp');
169                    numChildren++;
170                    child = nextChild;
171                } else {
172                    loop = false;
173
174                    if (numChildren) {
175                        div.insertAfter(elem);
176                        elem.data('div', div);
177                        //add event listeners
178
179                        elem.click(function () {
180                            var elem = $(this);
181                            elem.data('on', !elem.data('on'));
182
183                            var div = elem.data('div');
184                            if (elem.data('on')) {
185                                elem.addClass('on');
186                                div.addClass('on');
187                            } else {
188                                elem.removeClass('on');
189                                div.removeClass('on');
190                            }
191                        });
192                    }
193                }
194            }
195        });
196    };
197
198    /* end RB_PINHEIGHT */
199}(jQuery));
200
201/* RB_BTNS
202 *
203 */
204(function ($) {
205    $.fn.rb_btns = function (options) {
206        return this.each(function () {
207            var _p = this.parentElement;
208            var _before = _p.previousElementSibling;
209            var _parent = _p.parentElement;
210
211            var div = $('<div class="btns p">');
212
213            var loop = true;
214            var numElems = 0;
215            while (loop) {
216                var isValidP = _p && _p.localName == 'p';
217                if (isValidP) {
218                    var firstChild = _p.firstElementChild;
219                    isValidP = (firstChild.localName == 'a' && firstChild.classList.contains('btn'));
220                }
221
222                if (isValidP) {
223                    var nextP = _p.nextElementSibling;
224
225                    div.append(firstChild);
226                    _parent.removeChild(_p);
227                    numElems++;
228                    _p = nextP;
229                } else {
230                    loop = false;
231
232                    if (numElems) {
233                        if (_before)
234                            div.insertAfter($(_before));
235                    }
236                }
237            }
238        });
239    };
240
241    /* end RB_PINHEIGHT */
242}(jQuery));
243
244
245/*
246 * ON_VIEW
247 */
248(function ($) {
249    $.fn.onView = function (options) {
250        this.settings = $.extend({
251            // These are the defaults.
252            near_bottom: 100,
253            near_top: 100,
254            view: null,     //callback when item is in view
255            near: null      //callback when item within near range
256        }, options);
257
258        var _self = this;
259
260        $(window).scroll(function () {
261            _self.checkNow();
262        });
263
264        this.checkNow = function () {
265            var wTop = $(window).scrollTop();
266            var wBottom = wTop + $(window).height();
267
268            var nearTop = wTop - _self.settings.near_top;
269            var nearBottom = wBottom + _self.settings.near_bottom;
270
271            _self.each(function () {
272                var elem = $(this);
273                var pos = elem.offset();
274                var elemTop = pos.top;
275                var elemBottom = elemTop + elem.height();
276
277                var tIn, bIn;
278
279                //check close
280                tIn = ((elemTop < nearBottom) && (elemTop > nearTop));
281                bIn = ((elemBottom < nearBottom) && (elemBottom > nearTop));
282                if (tIn || bIn) {
283                    if (!elem.data('nearInited')) {
284                        if (_self.settings.near) _self.settings.near(elem);
285                        elem.data('nearInited', true);
286                    }
287                }
288
289                //check window
290                tIn = ((elemTop < wBottom) && (elemTop > wTop));
291                bIn = ((elemBottom < wBottom) && (elemBottom > wTop));
292                if (tIn || bIn) {
293                    if (!elem.data('wInited')) {
294                        if (_self.settings.view) _self.settings.view(elem);
295                        elem.data('wInited', true);
296                    }
297                }
298
299            });
300        };
301
302        this.checkNow();
303
304        return this;
305    };
306    /* end ON_VIEW */
307}(jQuery));
308
309
310/*
311 * jQuery plugin to serialize form data to JSON
312 */
313jQuery.fn.serializeJSON = function () {
314    var json = {};
315    jQuery.map(jQuery(this).serializeArray(), function (n, i) {
316        var _ = n.name.indexOf('[');
317        if (_ > -1) {
318            var o = json;
319            var _name = n.name.replace(/\]/gi, '').split('[');
320            for (var i = 0, len = _name.length; i < len; i++) {
321                if (i == len - 1) {
322                    if (o[_name[i]]) {
323                        if (typeof o[_name[i]] == 'string') {
324                            o[_name[i]] = [o[_name[i]]];
325                        }
326                        o[_name[i]].push(n.value);
327                    } else o[_name[i]] = n.value || '';
328                } else o = o[_name[i]] = o[_name[i]] || {};
329            }
330        } else {
331            if (json[n.name] !== undefined) {
332                if (!json[n.name].push) {
333                    json[n.name] = [json[n.name]];
334                }
335                json[n.name].push(n.value || '');
336            } else json[n.name] = n.value || '';
337        }
338    });
339    return json;
340};
341
342
343/*
344 * util function creates an array of data values corresponding to screen width breakpoints
345 */
346function getDataBkptArray(elem, dataAttr) {
347    var tempData;
348    var i;
349
350    dataArr = elem.attr(dataAttr).split(',');
351    for (i = 0; i <= rb.bkpt_names.length; i++) {
352        if (!dataArr[i])
353            dataArr[i] = tempData;
354        else
355            tempData = dataArr[i];
356    }
357
358    return dataArr;
359}

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.