PageSourceSearch

http://1050.pl/test/wp-content/themes/black_sea/assets/js/jquery.smothscroll.min.js?ver=1.4.11

js 1050.pl collected 2026-10-08 08:51:22 UTC 12,870 bytes, 434 lines download raw bytes

vendor: 12,870 bytes, lines 1-434
1jQuery(document).ready(function($){
2
3// SmoothScroll v0.9.9
4// Licensed under the terms of the MIT license.
5
6// People involved
7// - Balazs Galambosi: maintainer (CHANGELOG.txt)
8// - Patrick Brunner ([email protected])
9// - Michael Herf: ssc_pulse Algorithm
10
11// Scroll Variables (tweakable)
12    var ssc_framerate = 150; // [Hz]
13    var ssc_animtime  = 500; // [px]
14    var ssc_stepsize  = 150; // [px]
15
16// ssc_pulse (less tweakable)
17// ratio of "tail" to "acceleration"
18    var ssc_pulseAlgorithm = true;
19    var ssc_pulseScale     = 6;
20    var ssc_pulseNormalize = 1;
21
22// Keyboard Settings
23    var ssc_keyboardsupport = true;
24    var ssc_arrowscroll     = 50; // [px]
25
26// Other Variables
27    var ssc_frame = false;
28    var ssc_direction = { x: 0, y: 0 };
29    var ssc_initdone  = false;
30    var ssc_fixedback = true;
31    var ssc_root = document.documentElement;
32    var ssc_activeElement;
33
34    var ssc_key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 };
35
36    /***********************************************
37     * INITIALIZE
38     ***********************************************/
39
40    /**
41     * Sets up scrolls array, determines if ssc_frames are involved.
42     */
43    function ssc_init() {
44
45        if (!document.body) return;
46
47        var body = document.body;
48        var html = document.documentElement;
49        var windowHeight = window.innerHeight;
50        var scrollHeight = body.scrollHeight;
51
52        // check compat mode for ssc_root element
53        ssc_root = (document.compatMode.indexOf('CSS') >= 0) ? html : body;
54        ssc_activeElement = body;
55
56        ssc_initdone = true;
57
58        // Checks if this script is running in a ssc_frame
59        if (top != self) {
60            ssc_frame = true;
61        }
62
63        /**
64         * This fixes a bug where the areas left and right to
65         * the content does not trigger the onmousewheel event
66         * on some pages. e.g.: html, body { height: 100% }
67         */
68        else if (scrollHeight > windowHeight &&
69            (body.offsetHeight <= windowHeight ||
70                html.offsetHeight <= windowHeight)) {
71            ssc_root.style.height = "auto";
72            if (ssc_root.offsetHeight <= windowHeight) {
73                var underlay = document.createElement("div");
74                underlay.style.clear = "both";
75                body.appendChild(underlay);
76            }
77        }
78
79        if (!ssc_fixedback) {
80            body.style.backgroundAttachment = "scroll";
81            html.style.backgroundAttachment = "scroll";
82        }
83
84        if (ssc_keyboardsupport) {
85            ssc_addEvent("keydown", ssc_keydown);
86        }
87    }
88
89
90    /************************************************
91     * SCROLLING
92     ************************************************/
93
94    var ssc_que = [];
95    var ssc_pending = false;
96
97    /**
98     * Pushes scroll actions to the scrolling queue.
99     */
100    function ssc_scrollArray(elem, left, top, delay) {
101
102        delay || (delay = 1000);
103        ssc_directionCheck(left, top);
104
105        // push a scroll command
106        ssc_que.push({
107            x: left,
108            y: top,
109            lastX: (left < 0) ? 0.99 : -0.99,
110            lastY: (top  < 0) ? 0.99 : -0.99,
111            start: +new Date
112        });
113
114        // don't act if there's a ssc_pending queue
115        if (ssc_pending) {
116            return;
117        }
118
119        var step = function() {
120
121            var now = +new Date;
122            var scrollX = 0;
123            var scrollY = 0;
124
125            for (var i = 0; i < ssc_que.length; i++) {
126
127                var item = ssc_que[i];
128                var elapsed  = now - item.start;
129                var finished = (elapsed >= ssc_animtime);
130
131                // scroll position: [0, 1]
132                var position = (finished) ? 1 : elapsed / ssc_animtime;
133
134                // easing [optional]
135                if (ssc_pulseAlgorithm) {
136                    position = ssc_pulse(position);
137                }
138
139                // only need the difference
140                var x = (item.x * position - item.lastX) >> 0;
141                var y = (item.y * position - item.lastY) >> 0;
142
143                // add this to the total scrolling
144                scrollX += x;
145                scrollY += y;
146
147                // update last values
148                item.lastX += x;
149                item.lastY += y;
150
151                // delete and step back if it's over
152                if (finished) {
153                    ssc_que.splice(i, 1); i--;
154                }
155            }
156
157            // scroll left
158            if (left) {
159                var lastLeft = elem.scrollLeft;
160                elem.scrollLeft += scrollX;
161
162                // scroll left failed (edge)
163                if (scrollX && elem.scrollLeft === lastLeft) {
164                    left = 0;
165                }
166            }
167
168            // scroll top
169            if (top) {
170                var lastTop = elem.scrollTop;
171                elem.scrollTop += scrollY;
172
173                // scroll top failed (edge)
174                if (scrollY && elem.scrollTop === lastTop) {
175                    top = 0;
176                }
177            }
178
179            // clean up if there's nothing left to do
180            if (!left && !top) {
181                ssc_que = [];
182            }
183
184            if (ssc_que.length) {
185                setTimeout(step, delay / ssc_framerate + 1);
186            } else {
187                ssc_pending = false;
188            }
189        }
190
191        // start a new queue of actions
192        setTimeout(step, 0);
193        ssc_pending = true;
194    }
195
196
197    /***********************************************
198     * EVENTS
199     ***********************************************/
200
201    /**
202     * Mouse ssc_wheel handler.
203     * @param {Object} event
204     */
205    function ssc_wheel(event) {
206
207        if (!ssc_initdone) {
208			ssc_init();
209        }
210
211        var target = event.target;
212        var overflowing = ssc_overflowingAncestor(target);
213
214        // use default if there's no overflowing
215        // element or default action is prevented
216        if (!overflowing || event.defaultPrevented ||
217            ssc_isNodeName(ssc_activeElement, "embed") ||
218            (ssc_isNodeName(target, "embed") && /\.pdf/i.test(target.src))) {
219            return true;
220        }
221
222        var deltaX = event.wheelDeltaX || 0;
223        var deltaY = event.wheelDeltaY || 0;
224
225        // use wheelDelta if deltaX/Y is not available
226        if (!deltaX && !deltaY) {
227            deltaY = event.wheelDelta || 0;
228        }
229
230        // scale by step size
231        // delta is 120 most of the time
232        // synaptics seems to send 1 sometimes
233        if (Math.abs(deltaX) > 1.2) {
234            deltaX *= ssc_stepsize / 120;
235        }
236        if (Math.abs(deltaY) > 1.2) {
237            deltaY *= ssc_stepsize / 120;
238        }
239
240        ssc_scrollArray(overflowing, -deltaX, -deltaY);
241        event.preventDefault();
242    }
243
244    /**
245     * ssc_keydown event handler.
246     * @param {Object} event
247     */
248    function ssc_keydown(event) {
249
250        var target   = event.target;
251        var modifier = event.ctrlKey || event.altKey || event.metaKey;
252
253        // do nothing if user is editing text
254        // or using a modifier ssc_key (except shift)
255        if ( /input|textarea|embed/i.test(target.nodeName) ||
256            target.isContentEditable ||
257            event.defaultPrevented   ||
258            modifier ) {
259            return true;
260        }
261        // spacebar should trigger button press
262        if (ssc_isNodeName(target, "button") &&
263            event.keyCode === ssc_key.spacebar) {
264            return true;
265        }
266
267        var shift, x = 0, y = 0;
268        var elem = ssc_overflowingAncestor(ssc_activeElement);
269        var clientHeight = elem.clientHeight;
270
271        if (elem == document.body) {
272            clientHeight = window.innerHeight;
273        }
274
275        switch (event.keyCode) {
276            case ssc_key.up:
277                y = -ssc_arrowscroll;
278                break;
279            case ssc_key.down:
280                y = ssc_arrowscroll;
281                break;
282            case ssc_key.spacebar: // (+ shift)
283                shift = event.shiftKey ? 1 : -1;
284                y = -shift * clientHeight * 0.9;
285                break;
286            case ssc_key.pageup:
287                y = -clientHeight * 0.9;
288                break;
289            case ssc_key.pagedown:
290                y = clientHeight * 0.9;
291                break;
292            case ssc_key.home:
293                y = -elem.scrollTop;
294                break;
295            case ssc_key.end:
296                var damt = elem.scrollHeight - elem.scrollTop - clientHeight;
297                y = (damt > 0) ? damt+10 : 0;
298                break;
299            case ssc_key.left:
300                x = -ssc_arrowscroll;
301                break;
302            case ssc_key.right:
303                x = ssc_arrowscroll;
304                break;
305            default:
306                return true; // a ssc_key we don't care about
307        }
308
309        ssc_scrollArray(elem, x, y);
310        event.preventDefault();
311    }
312
313    /**
314     * ssc_mousedown event only for updating ssc_activeElement
315     */
316    function ssc_mousedown(event) {
317        ssc_activeElement = event.target;
318    }
319
320
321    /***********************************************
322     * OVERFLOW
323     ***********************************************/
324
325    var ssc_cache = {}; // cleared out every once in while
326    setInterval(function(){ ssc_cache = {}; }, 10 * 1000);
327
328    var ssc_uniqueID = (function() {
329        var i = 0;
330        return function (el) {
331            return el.ssc_uniqueID || (el.ssc_uniqueID = i++);
332        };
333    })();
334
335    function ssc_setCache(elems, overflowing) {
336        for (var i = elems.length; i--;)
337            ssc_cache[ssc_uniqueID(elems[i])] = overflowing;
338        return overflowing;
339    }
340
341    function ssc_overflowingAncestor(el) {
342        var elems = [];
343        var ssc_rootScrollHeight = ssc_root.scrollHeight;
344        do {
345            var cached = ssc_cache[ssc_uniqueID(el)];
346            if (cached) {
347                return ssc_setCache(elems, cached);
348            }
349            elems.push(el);
350            if (ssc_rootScrollHeight === el.scrollHeight) {
351                if (!ssc_frame || ssc_root.clientHeight + 10 < ssc_rootScrollHeight) {
352                    return ssc_setCache(elems, document.body); // scrolling ssc_root in WebKit
353                }
354            } else if (el.clientHeight + 10 < el.scrollHeight) {
355                overflow = getComputedStyle(el, "").getPropertyValue("overflow");
356                if (overflow === "scroll" || overflow === "auto") {
357                    return ssc_setCache(elems, el);
358                }
359            }
360        } while (el = el.parentNode);
361    }
362
363
364    /***********************************************
365     * HELPERS
366     ***********************************************/
367
368    function ssc_addEvent(type, fn, bubble) {
369        window.addEventListener(type, fn, (bubble||false));
370    }
371
372    function ssc_removeEvent(type, fn, bubble) {
373        window.removeEventListener(type, fn, (bubble||false));
374    }
375
376    function ssc_isNodeName(el, tag) {
377        return el.nodeName.toLowerCase() === tag.toLowerCase();
378    }
379
380    function ssc_directionCheck(x, y) {
381        x = (x > 0) ? 1 : -1;
382        y = (y > 0) ? 1 : -1;
383        if (ssc_direction.x !== x || ssc_direction.y !== y) {
384            ssc_direction.x = x;
385            ssc_direction.y = y;
386            ssc_que = [];
387        }
388    }
389
390
391    /***********************************************
392     * ssc_pulse
393     ***********************************************/
394
395    /**
396     * Viscous fluid with a ssc_pulse for part and decay for the rest.
397     * - Applies a fixed force over an interval (a damped acceleration), and
398     * - Lets the exponential bleed away the velocity over a longer interval
399     * - Michael Herf, http://stereopsis.com/stopping/
400     */
401    function ssc_pulse_(x) {
402        var val, start, expx;
403        // test
404        x = x * ssc_pulseScale;
405        if (x < 1) { // acceleartion
406            val = x - (1 - Math.exp(-x));
407        } else {     // tail
408            // the previous animation ended here:
409            start = Math.exp(-1);
410            // simple viscous drag
411            x -= 1;
412            expx = 1 - Math.exp(-x);
413            val = start + (expx * (1 - start));
414        }
415        return val * ssc_pulseNormalize;
416    }
417
418    function ssc_pulse(x) {
419        if (x >= 1) return 1;
420        if (x <= 0) return 0;
421
422        if (ssc_pulseNormalize == 1) {
423            ssc_pulseNormalize /= ssc_pulse_(1);
424        }
425        return ssc_pulse_(x);
426    }
427
428    $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
429    if ( $.browser.chrome ) {
430        ssc_addEvent("mousedown", ssc_mousedown);
431        ssc_addEvent("mousewheel", ssc_wheel);
432        ssc_addEvent("load", ssc_init);
433    }
434});

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.