PageSourceSearch

https://terrassaocupacio.cat/wp-content/plugins/mybroker-shortcodes/admin/js/jquery.stellar.js?ver=1.0.1

js terrassaocupacio.cat collected 2026-10-06 15:05:39 UTC 31,104 bytes, 651 lines download raw bytes

vendor: 31,104 bytes, lines 1-651
1;(function($, window, document, undefined) {��
2��
3    var pluginName = 'stellar',��
4        defaults = {��
5            scrollProperty: 'scroll',��
6            positionProperty: 'position',��
7            horizontalScrolling: true,��
8            verticalScrolling: true,��
9            horizontalOffset: 0,��
10            verticalOffset: 0,��
11            responsive: false,��
12            parallaxBackgrounds: true,��
13            parallaxElements: true,��
14            hideDistantElements: true,��
15            hideElement: function($elem) { $elem.hide(); },��
16            showElement: function($elem) { $elem.show(); }��
17        },��
18��
19        scrollProperty = {��
20            scroll: {��
21                getLeft: function($elem) { return $elem.scrollLeft(); },��
22                setLeft: function($elem, val) { $elem.scrollLeft(val); },��
23��
24                getTop: function($elem) { return $elem.scrollTop();	},��
25                setTop: function($elem, val) { $elem.scrollTop(val); }��
26            },��
27            position: {��
28                getLeft: function($elem) { return parseInt($elem.css('left'), 10) * -1; },��
29                getTop: function($elem) { return parseInt($elem.css('top'), 10) * -1; }��
30            },��
31            margin: {��
32                getLeft: function($elem) { return parseInt($elem.css('margin-left'), 10) * -1; },��
33                getTop: function($elem) { return parseInt($elem.css('margin-top'), 10) * -1; }��
34            },��
35            transform: {��
36                getLeft: function($elem) {��
37                    var computedTransform = getComputedStyle($elem[0])[prefixedTransform];��
38                    return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[4], 10) * -1 : 0);��
39                },��
40                getTop: function($elem) {��
41                    var computedTransform = getComputedStyle($elem[0])[prefixedTransform];��
42                    return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[5], 10) * -1 : 0);��
43                }��
44            }��
45        },��
46��
47        positionProperty = {��
48            position: {��
49                setLeft: function($elem, left) { $elem.css('left', left); },��
50                setTop: function($elem, top) { $elem.css('top', top); }��
51            },��
52            transform: {��
53                setPosition: function($elem, left, startingLeft, top, startingTop) {��
54                    $elem[0].style[prefixedTransform] = 'translate3d(' + (left - startingLeft) + 'px, ' + (top - startingTop) + 'px, 0)';��
55                }��
56            }��
57        },��
58��
59    // Returns a function which adds a vendor prefix to any CSS property name��
60        vendorPrefix = (function() {��
61            var prefixes = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,��
62                style = $('script')[0].style,��
63                prefix = '',��
64                prop;��
65��
66            for (prop in style) {��
67                if (prefixes.test(prop)) {��
68                    prefix = prop.match(prefixes)[0];��
69                    break;��
70                }��
71            }��
72��
73            if ('WebkitOpacity' in style) { prefix = 'Webkit'; }��
74            if ('KhtmlOpacity' in style) { prefix = 'Khtml'; }��
75��
76            return function(property) {��
77                return prefix + (prefix.length > 0 ? property.charAt(0).toUpperCase() + property.slice(1) : property);��
78            };��
79        }()),��
80��
81        prefixedTransform = vendorPrefix('transform'),��
82��
83        supportsBackgroundPositionXY = $('<div />', { style: 'background:#fff' }).css('background-position-x') !== undefined,��
84��
85        setBackgroundPosition = (supportsBackgroundPositionXY ?��
86            function($elem, x, y) {��
87                $elem.css({��
88                    'background-position-x': x,��
89                    'background-position-y': y��
90                });��
91            } :��
92            function($elem, x, y) {��
93                $elem.css('background-position', x + ' ' + y);��
94            }��
95        ),��
96��
97        getBackgroundPosition = (supportsBackgroundPositionXY ?��
98            function($elem) {��
99                return [��
100                    $elem.css('background-position-x'),��
101                    $elem.css('background-position-y')��
102                ];��
103            } :��
104            function($elem) {��
105                return $elem.css('background-position').split(' ');��
106            }��
107        ),��
108��
109        requestAnimFrame = (��
110        window.requestAnimationFrame       ||��
111        window.webkitRequestAnimationFrame ||��
112        window.mozRequestAnimationFrame    ||��
113        window.oRequestAnimationFrame      ||��
114        window.msRequestAnimationFrame     ||��
115        function(callback) {��
116            setTimeout(callback, 1000 / 60);��
117        }��
118        );��
119��
120    function Plugin(element, options) {��
121        this.element = element;��
122        this.options = $.extend({}, defaults, options);��
123��
124        this._defaults = defaults;��
125        this._name = pluginName;��
126��
127        this.init();��
128    }��
129��
130    Plugin.prototype = {��
131        init: function() {��
132            this.options.name = pluginName + '_' + Math.floor(Math.random() * 1e9);��
133��
134            this._defineElements();��
135            this._defineGetters();��
136            this._defineSetters();��
137            this._handleWindowLoadAndResize();��
138            this._detectViewport();��
139��
140            this.refresh({ firstLoad: true });��
141��
142            if (this.options.scrollProperty === 'scroll') {��
143                this._handleScrollEvent();��
144            } else {��
145                this._startAnimationLoop();��
146            }��
147        },��
148        _defineElements: function() {��
149            if (this.element === document.body) this.element = window;��
150            this.$scrollElement = $(this.element);��
151            this.$element = (this.element === window ? $('body') : this.$scrollElement);��
152            this.$viewportElement = (this.options.viewportElement !== undefined ? $(this.options.viewportElement) : (this.$scrollElement[0] === window || this.options.scrollProperty === 'scroll' ? this.$scrollElement : this.$scrollElement.parent()) );��
153        },��
154        _defineGetters: function() {��
155            var self = this,��
156                scrollPropertyAdapter = scrollProperty[self.options.scrollProperty];��
157��
158            this._getScrollLeft = function() {��
159                return scrollPropertyAdapter.getLeft(self.$scrollElement);��
160            };��
161��
162            this._getScrollTop = function() {��
163                return scrollPropertyAdapter.getTop(self.$scrollElement);��
164            };��
165        },��
166        _defineSetters: function() {��
167            var self = this,��
168                scrollPropertyAdapter = scrollProperty[self.options.scrollProperty],��
169                positionPropertyAdapter = positionProperty[self.options.positionProperty],��
170                setScrollLeft = scrollPropertyAdapter.setLeft,��
171                setScrollTop = scrollPropertyAdapter.setTop;��
172��
173            this._setScrollLeft = (typeof setScrollLeft === 'function' ? function(val) {��
174                setScrollLeft(self.$scrollElement, val);��
175            } : $.noop);��
176��
177            this._setScrollTop = (typeof setScrollTop === 'function' ? function(val) {��
178                setScrollTop(self.$scrollElement, val);��
179            } : $.noop);��
180��
181            this._setPosition = positionPropertyAdapter.setPosition ||��
182            function($elem, left, startingLeft, top, startingTop) {��
183                if (self.options.horizontalScrolling) {��
184                    positionPropertyAdapter.setLeft($elem, left, startingLeft);��
185                }��
186��
187                if (self.options.verticalScrolling) {��
188                    positionPropertyAdapter.setTop($elem, top, startingTop);��
189                }��
190            };��
191        },��
192        _handleWindowLoadAndResize: function() {��
193            var self = this,��
194                $window = $(window);��
195��
196            if (self.options.responsive) {��
197                $window.bind('load.' + this.name, function() {��
198                    self.refresh();��
199                });��
200            }��
201��
202            $window.bind('resize.' + this.name, function() {��
203                self._detectViewport();��
204��
205                if (self.options.responsive) {��
206                    self.refresh();��
207                }��
208            });��
209        },��
210        refresh: function(options) {��
211            var self = this,��
212                oldLeft = self._getScrollLeft(),��
213                oldTop = self._getScrollTop();��
214��
215            if (!options || !options.firstLoad) {��
216                this._reset();��
217            }��
218��
219            this._setScrollLeft(0);��
220            this._setScrollTop(0);��
221��
222            this._setOffsets();��
223            this._findParticles();��
224            this._findBackgrounds();��
225��
226            // Fix for WebKit background rendering bug��
227            if (options && options.firstLoad && /WebKit/.test(navigator.userAgent)) {��
228                $(window).load(function() {��
229                    var oldLeft = self._getScrollLeft(),��
230                        oldTop = self._getScrollTop();��
231��
232                    self._setScrollLeft(oldLeft + 1);��
233                    self._setScrollTop(oldTop + 1);��
234��
235                    self._setScrollLeft(oldLeft);��
236                    self._setScrollTop(oldTop);��
237                });��
238            }��
239��
240            this._setScrollLeft(oldLeft);��
241            this._setScrollTop(oldTop);��
242        },��
243        _detectViewport: function() {��
244            var viewportOffsets = this.$viewportElement.offset(),��
245                hasOffsets = viewportOffsets !== null && viewportOffsets !== undefined;��
246��
247            this.viewportWidth = this.$viewportElement.width();��
248            this.viewportHeight = this.$viewportElement.height();��
249��
250            this.viewportOffsetTop = (hasOffsets ? viewportOffsets.top : 0);��
251            this.viewportOffsetLeft = (hasOffsets ? viewportOffsets.left : 0);��
252        },��
253        _findParticles: function() {��
254            var self = this,��
255                scrollLeft = this._getScrollLeft(),��
256                scrollTop = this._getScrollTop();��
257��
258            if (this.particles !== undefined) {��
259                for (var i = this.particles.length - 1; i >= 0; i--) {��
260                    this.particles[i].$element.data('stellar-elementIsActive', undefined);��
261                }��
262            }��
263��
264            this.particles = [];��
265��
266            if (!this.options.parallaxElements) return;��
267��
268            this.$element.find('[data-stellar-ratio]').each(function(i) {��
269                var $this = $(this),��
270                    horizontalOffset,��
271                    verticalOffset,��
272                    positionLeft,��
273                    positionTop,��
274                    marginLeft,��
275                    marginTop,��
276                    $offsetParent,��
277                    offsetLeft,��
278                    offsetTop,��
279                    parentOffsetLeft = 0,��
280                    parentOffsetTop = 0,��
281                    tempParentOffsetLeft = 0,��
282                    tempParentOffsetTop = 0;��
283��
284                // Ensure this element isn't already part of another scrolling element��
285                if (!$this.data('stellar-elementIsActive')) {��
286                    $this.data('stellar-elementIsActive', this);��
287                } else if ($this.data('stellar-elementIsActive') !== this) {��
288                    return;��
289                }��
290��
291                self.options.showElement($this);��
292��
293                // Save/restore the original top and left CSS values in case we refresh the particles or destroy the instance��
294                if (!$this.data('stellar-startingLeft')) {��
295                    $this.data('stellar-startingLeft', $this.css('left'));��
296                    $this.data('stellar-startingTop', $this.css('top'));��
297                } else {��
298                    $this.css('left', $this.data('stellar-startingLeft'));��
299                    $this.css('top', $this.data('stellar-startingTop'));��
300                }��
301��
302                positionLeft = $this.position().left;��
303                positionTop = $this.position().top;��
304��
305                // Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)��
306                marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);��
307                marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);��
308��
309                offsetLeft = $this.offset().left - marginLeft;��
310                offsetTop = $this.offset().top - marginTop;��
311��
312                // Calculate the offset parent��
313                $this.parents().each(function() {��
314                    var $this = $(this);��
315��
316                    if ($this.data('stellar-offset-parent') === true) {��
317                        parentOffsetLeft = tempParentOffsetLeft;��
318                        parentOffsetTop = tempParentOffsetTop;��
319                        $offsetParent = $this;��
320��
321                        return false;��
322                    } else {��
323                        tempParentOffsetLeft += $this.position().left;��
324                        tempParentOffsetTop += $this.position().top;��
325                    }��
326                });��
327��
328                // Detect the offsets��
329                horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));��
330                verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));��
331��
332                // Add our object to the particles collection��
333                self.particles.push({��
334                    $element: $this,��
335                    $offsetParent: $offsetParent,��
336                    isFixed: $this.css('position') === 'fixed',��
337                    horizontalOffset: horizontalOffset,��
338                    verticalOffset: verticalOffset,��
339                    startingPositionLeft: positionLeft,��
340                    startingPositionTop: positionTop,��
341                    startingOffsetLeft: offsetLeft,��
342                    startingOffsetTop: offsetTop,��
343                    parentOffsetLeft: parentOffsetLeft,��
344                    parentOffsetTop: parentOffsetTop,��
345                    stellarRatio: ($this.data('stellar-ratio') !== undefined ? $this.data('stellar-ratio') : 1),��
346                    width: $this.outerWidth(true),��
347                    //height: $this.outerHeight(true),��
348                    isHidden: false��
349                });��
350            });��
351        },��
352        _findBackgrounds: function() {��
353            var self = this,��
354                scrollLeft = this._getScrollLeft(),��
355                scrollTop = this._getScrollTop(),��
356                $backgroundElements;��
357��
358            this.backgrounds = [];��
359��
360            if (!this.options.parallaxBackgrounds) return;��
361��
362            $backgroundElements = this.$element.find('[data-stellar-background-ratio]');��
363��
364            if (this.$element.data('stellar-background-ratio')) {��
365                $backgroundElements = $backgroundElements.add(this.$element);��
366            }��
367��
368            $backgroundElements.each(function() {��
369                var $this = $(this),��
370                    backgroundPosition = getBackgroundPosition($this),��
371                    horizontalOffset,��
372                    verticalOffset,��
373                    positionLeft,��
374                    positionTop,��
375                    marginLeft,��
376                    marginTop,��
377                    offsetLeft,��
378                    offsetTop,��
379                    $offsetParent,��
380                    parentOffsetLeft = 0,��
381                    parentOffsetTop = 0,��
382                    tempParentOffsetLeft = 0,��
383                    tempParentOffsetTop = 0;��
384��
385                // Ensure this element isn't already part of another scrolling element��
386                if (!$this.data('stellar-backgroundIsActive')) {��
387                    $this.data('stellar-backgroundIsActive', this);��
388                } else if ($this.data('stellar-backgroundIsActive') !== this) {��
389                    return;��
390                }��
391��
392                // Save/restore the original top and left CSS values in case we destroy the instance��
393                if (!$this.data('stellar-backgroundStartingLeft')) {��
394                    $this.data('stellar-backgroundStartingLeft', backgroundPosition[0]);��
395                    $this.data('stellar-backgroundStartingTop', backgroundPosition[1]);��
396                } else {��
397                    setBackgroundPosition($this, $this.data('stellar-backgroundStartingLeft'), $this.data('stellar-backgroundStartingTop'));��
398                }��
399��
400                // Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)��
401                marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);��
402                marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);��
403��
404                offsetLeft = $this.offset().left - marginLeft - scrollLeft;��
405                offsetTop = $this.offset().top - marginTop - scrollTop;��
406��
407                // Calculate the offset parent��
408                $this.parents().each(function() {��
409                    var $this = $(this);��
410��
411                    if ($this.data('stellar-offset-parent') === true) {��
412                        parentOffsetLeft = tempParentOffsetLeft;��
413                        parentOffsetTop = tempParentOffsetTop;��
414                        $offsetParent = $this;��
415��
416                        return false;��
417                    } else {��
418                        tempParentOffsetLeft += $this.position().left;��
419                        tempParentOffsetTop += $this.position().top;��
420                    }��
421                });��
422��
423                // Detect the offsets��
424                horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));��
425                verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));��
426��
427                self.backgrounds.push({��
428                    $element: $this,��
429                    $offsetParent: $offsetParent,��
430                    isFixed: $this.css('background-attachment') === 'fixed',��
431                    horizontalOffset: horizontalOffset,��
432                    verticalOffset: verticalOffset,��
433                    startingValueLeft: backgroundPosition[0],��
434                    startingValueTop: backgroundPosition[1],��
435                    startingBackgroundPositionLeft: (isNaN(parseInt(backgroundPosition[0], 10)) ? 0 : parseInt(backgroundPosition[0], 10)),��
436                    startingBackgroundPositionTop: (isNaN(parseInt(backgroundPosition[1], 10)) ? 0 : parseInt(backgroundPosition[1], 10)),��
437                    startingPositionLeft: $this.position().left,��
438                    startingPositionTop: $this.position().top,��
439                    startingOffsetLeft: offsetLeft,��
440                    startingOffsetTop: offsetTop,��
441                    parentOffsetLeft: parentOffsetLeft,��
442                    parentOffsetTop: parentOffsetTop,��
443                    stellarRatio: ($this.data('stellar-background-ratio') === undefined ? 1 : $this.data('stellar-background-ratio'))��
444                });��
445            });��
446        },��
447        _reset: function() {��
448            var particle,��
449                startingPositionLeft,��
450                startingPositionTop,��
451                background,��
452                i;��
453��
454            for (i = this.particles.length - 1; i >= 0; i--) {��
455                particle = this.particles[i];��
456                startingPositionLeft = particle.$element.data('stellar-startingLeft');��
457                startingPositionTop = particle.$element.data('stellar-startingTop');��
458��
459                this._setPosition(particle.$element, startingPositionLeft, startingPositionLeft, startingPositionTop, startingPositionTop);��
460��
461                this.options.showElement(particle.$element);��
462��
463                particle.$element.data('stellar-startingLeft', null).data('stellar-elementIsActive', null).data('stellar-backgroundIsActive', null);��
464            }��
465��
466            for (i = this.backgrounds.length - 1; i >= 0; i--) {��
467                background = this.backgrounds[i];��
468��
469                background.$element.data('stellar-backgroundStartingLeft', null).data('stellar-backgroundStartingTop', null);��
470��
471                setBackgroundPosition(background.$element, background.startingValueLeft, background.startingValueTop);��
472            }��
473        },��
474        destroy: function() {��
475            this._reset();��
476��
477            this.$scrollElement.unbind('resize.' + this.name).unbind('scroll.' + this.name);��
478            this._animationLoop = $.noop;��
479��
480            $(window).unbind('load.' + this.name).unbind('resize.' + this.name);��
481        },��
482        _setOffsets: function() {��
483            var self = this,��
484                $window = $(window);��
485��
486            $window.unbind('resize.horizontal-' + this.name).unbind('resize.vertical-' + this.name);��
487��
488            if (typeof this.options.horizontalOffset === 'function') {��
489                this.horizontalOffset = this.options.horizontalOffset();��
490                $window.bind('resize.horizontal-' + this.name, function() {��
491                    self.horizontalOffset = self.options.horizontalOffset();��
492                });��
493            } else {��
494                this.horizontalOffset = this.options.horizontalOffset;��
495            }��
496��
497            if (typeof this.options.verticalOffset === 'function') {��
498                this.verticalOffset = this.options.verticalOffset();��
499                $window.bind('resize.vertical-' + this.name, function() {��
500                    self.verticalOffset = self.options.verticalOffset();��
501                });��
502            } else {��
503                this.verticalOffset = this.options.verticalOffset;��
504            }��
505        },��
506        _repositionElements: function() {��
507            var scrollLeft = this._getScrollLeft(),��
508                scrollTop = this._getScrollTop(),��
509                horizontalOffset,��
510                verticalOffset,��
511                particle,��
512                fixedRatioOffset,��
513                background,��
514                bgLeft,��
515                bgTop,��
516                isVisibleVertical = true,��
517                isVisibleHorizontal = true,��
518                newPositionLeft,��
519                newPositionTop,��
520                newOffsetLeft,��
521                newOffsetTop,��
522                i;��
523��
524            // First check that the scroll position or container size has changed��
525            if (this.currentScrollLeft === scrollLeft && this.currentScrollTop === scrollTop && this.currentWidth === this.viewportWidth && this.currentHeight === this.viewportHeight) {��
526                return;��
527            } else {��
528                this.currentScrollLeft = scrollLeft;��
529                this.currentScrollTop = scrollTop;��
530                this.currentWidth = this.viewportWidth;��
531                this.currentHeight = this.viewportHeight;��
532            }��
533��
534            // Reposition elements��
535            for (i = this.particles.length - 1; i >= 0; i--) {��
536                particle = this.particles[i];��
537��
538                fixedRatioOffset = (particle.isFixed ? 1 : 0);��
539��
540                // Calculate position, then calculate what the particle's new offset will be (for visibility check)��
541                if (this.options.horizontalScrolling) {��
542                    newPositionLeft = (scrollLeft + particle.horizontalOffset + this.viewportOffsetLeft + particle.startingPositionLeft - particle.startingOffsetLeft + particle.parentOffsetLeft) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionLeft;��
543                    newOffsetLeft = newPositionLeft - particle.startingPositionLeft + particle.startingOffsetLeft;��
544                } else {��
545                    newPositionLeft = particle.startingPositionLeft;��
546                    newOffsetLeft = particle.startingOffsetLeft;��
547                }��
548��
549                if (this.options.verticalScrolling) {��
550                    newPositionTop = (scrollTop + particle.verticalOffset + this.viewportOffsetTop + particle.startingPositionTop - particle.startingOffsetTop + particle.parentOffsetTop) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionTop;��
551                    newOffsetTop = newPositionTop - particle.startingPositionTop + particle.startingOffsetTop;��
552                } else {��
553                    newPositionTop = particle.startingPositionTop;��
554                    newOffsetTop = particle.startingOffsetTop;��
555                }��
556��
557                // Check visibility��
558                if (this.options.hideDistantElements) {��
559                    isVisibleHorizontal = !this.options.horizontalScrolling || newOffsetLeft + particle.width > (particle.isFixed ? 0 : scrollLeft) && newOffsetLeft < (particle.isFixed ? 0 : scrollLeft) + this.viewportWidth + this.viewportOffsetLeft;��
560                    isVisibleVertical = !this.options.verticalScrolling || newOffsetTop + particle.height > (particle.isFixed ? 0 : scrollTop) && newOffsetTop < (particle.isFixed ? 0 : scrollTop) + this.viewportHeight + this.viewportOffsetTop;��
561                }��
562��
563                if (isVisibleHorizontal && isVisibleVertical) {��
564                    if (particle.isHidden) {��
565                        this.options.showElement(particle.$element);��
566                        particle.isHidden = false;��
567                    }��
568��
569                    this._setPosition(particle.$element, newPositionLeft, particle.startingPositionLeft, newPositionTop, particle.startingPositionTop);��
570                } else {��
571                    if (!particle.isHidden) {��
572                        this.options.hideElement(particle.$element);��
573                        particle.isHidden = true;��
574                    }��
575                }��
576            }��
577��
578            // Reposition backgrounds��
579            for (i = this.backgrounds.length - 1; i >= 0; i--) {��
580                background = this.backgrounds[i];��
581��
582                fixedRatioOffset = (background.isFixed ? 0 : 1);��
583                bgLeft = (this.options.horizontalScrolling ? (scrollLeft + background.horizontalOffset - this.viewportOffsetLeft - background.startingOffsetLeft + background.parentOffsetLeft - background.startingBackgroundPositionLeft) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueLeft);��
584                bgTop = (this.options.verticalScrolling ? (scrollTop + background.verticalOffset - this.viewportOffsetTop - background.startingOffsetTop + background.parentOffsetTop - background.startingBackgroundPositionTop) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueTop);��
585��
586                setBackgroundPosition(background.$element, bgLeft, bgTop);��
587            }��
588        },��
589        _handleScrollEvent: function() {��
590            var self = this,��
591                ticking = false;��
592��
593            var update = function() {��
594                self._repositionElements();��
595                ticking = false;��
596            };��
597��
598            var requestTick = function() {��
599                if (!ticking) {��
600                    requestAnimFrame(update);��
601                    ticking = true;��
602                }��
603            };��
604��
605            this.$scrollElement.bind('scroll.' + this.name, requestTick);��
606            requestTick();��
607        },��
608        _startAnimationLoop: function() {��
609            var self = this;��
610��
611            this._animationLoop = function() {��
612                requestAnimFrame(self._animationLoop);��
613                self._repositionElements();��
614            };��
615            this._animationLoop();��
616        }��
617    };��
618��
619    $.fn[pluginName] = function (options) {��
620        var args = arguments;��
621        if (options === undefined || typeof options === 'object') {��
622            return this.each(function () {��
623                if (!$.data(this, 'plugin_' + pluginName)) {��
624                    $.data(this, 'plugin_' + pluginName, new Plugin(this, options));��
625                }��
626            });��
627        } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {��
628            return this.each(function () {��
629                var instance = $.data(this, 'plugin_' + pluginName);��
630                if (instance instanceof Plugin && typeof instance[options] === 'function') {��
631                    instance[options].apply(instance, Array.prototype.slice.call(args, 1));��
632                }��
633                if (options === 'destroy') {��
634                    $.data(this, 'plugin_' + pluginName, null);��
635                }��
636            });��
637        }��
638    };��
639��
640    $[pluginName] = function(options) {��
641        var $window = $(window);��
642        return $window.stellar.apply($window, Array.prototype.slice.call(arguments, 0));��
643    };��
644��
645    // Expose the scroll and position property function hashes so they can be extended��
646    $[pluginName].scrollProperty = scrollProperty;��
647    $[pluginName].positionProperty = positionProperty;��
648��
649    // Expose the plugin class so it can be modified��
650    window.Stellar = Plugin;��
651}(jQuery, this, document));

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.