PageSourceSearch

https://threedogyoga.com/wp-content/themes/stockholm/js/plugins/lemmon-slider.js?ver=7.1.2

js threedogyoga.com collected 2026-09-26 03:35:13 UTC 13,124 bytes, 357 lines download raw bytes

1/*
2 * Lemmon Slider - jQuery Plugin
3 * Simple and lightweight slider/carousel supporting variable elements/images widths.
4 *
5 * Examples and documentation at: http://jquery.lemmonjuice.com/plugins/slider-variable-widths.php
6 *
7 * Copyright (c) 2011 Jakub Pelák <[email protected]>
8 *
9 * Version: 0.2 (9/6/2011)
10 * Requires: jQuery v1.4+
11 *
12 * Licensed under the MIT license:
13 *   http://www.opensource.org/licenses/mit-license.php
14 */
15(function( $ ) {
16
17    var _css = {};
18
19    var methods = {
20        //
21        // Initialzie plugin
22        //
23        init:    function( options ) {
24            options = $.extend( {}, $.fn.lemmonSlider.defaults, options );
25
26            return this.each( function() {
27
28                var $slider = $( this ),
29                    data = $slider.data( 'slider' );
30
31                if( !data ) {
32
33                    var $sliderContainer = $slider.find( options.slider ),
34                        $sliderControls = $slider.next().filter( '.controls' ),
35                        $items = $sliderContainer.find( options.items ),
36                        originalWidth = 1;
37
38                    $items.each( function() { originalWidth += $( this ).outerWidth( true ) } );
39                    $sliderContainer.width( originalWidth );
40
41                    // slide to last item
42                    if( options.slideToLast ) $sliderContainer.css( 'padding-right', $slider.width() );
43
44                    // infinite carousel
45                    if( options.infinite ) {
46                        $slider.data( 'slider-infinite', true );
47
48                        originalWidth = originalWidth * 3;
49                        $sliderContainer.width( originalWidth );
50
51                        $items.clone(true, true).addClass( '-after' ).insertAfter( $items.filter( ':last' ) );
52                        $items.filter( ':first' ).before( $items.clone(true, true).addClass( '-before' ) );
53
54                        $items = $sliderContainer.find( options.items );
55
56                    }
57
58                    $slider.items = $items;
59                    $slider.options = options;
60
61                    // first item
62                    //$items.filter( ':first' ).addClass( 'active' );
63
64                    slideTo( {}, $slider, 0, 0, 0 );
65
66                    // attach events
67                    $slider.bind( 'nextSlide', function( e, t ) {
68
69                        var scroll = $slider.scrollLeft();
70                        var x = 0;
71                        var slide = 0;
72
73                        $items.each( function( i ) {
74                            if( x == 0 && $( this ).position().left > options.offset ) {
75                                x = $( this ).position().left;
76                                slide = i;
77                            }
78                        } );
79
80                        if( x > 0 && $sliderContainer.outerWidth() - scroll - $slider.width() - 1 > 0 ) {
81                            slideTo( e, $slider, scroll + x, slide, 'slow' );
82                        } else if( options.loop ) {
83                            // return to first
84                            slideTo( e, $slider, 0, 0, 'slow' );
85                        }
86
87                    } );
88                    $slider.bind( 'prevSlide', function( e, t ) {
89
90                        var scroll = $slider.scrollLeft();
91                        var x = 0;
92                        var slide = 0;
93
94                        $items.each( function( i ) {
95                            if( $( this ).position().left < options.offset ) {
96                                x = $( this ).position().left;
97                                slide = i;
98                            }
99                        } );
100
101                        if( x ) {
102                            slideTo( e, $slider, scroll + x, slide, 'slow' )
103                        } else if( options.loop ) {
104                            // return to last
105                            var a = $sliderContainer.outerWidth() - $slider.width();
106                            var b = $items.filter( ':last' ).position().left;
107                            slide = $items.size() - 1;
108                            if( a > b ) {
109                                slideTo( e, $slider, b, slide, 'slow' );
110                            } else {
111                                slideTo( e, $slider, a, slide, 'slow' );
112                            }
113                        }
114
115                    } );
116                    $slider.bind( 'nextPage', function( e, t ) {
117
118                        var scroll = $slider.scrollLeft();
119                        var w = $slider.width();
120                        var x = 0;
121                        var slide = 0;
122
123                        $items.each( function( i ) {
124                            if( $( this ).position().left < w ) {
125                                x = $( this ).position().left;
126                                slide = i;
127                            }
128                        } );
129
130                        if( x > 0 && scroll + w + 1 < originalWidth ) {
131                            slideTo( e, $slider, scroll + x, slide, 'slow' );
132                        } else if( options.loop ) {
133                            // return to first
134                            slideTo( e, $slider, 0, 0, 'slow' );
135                        }
136
137                    } );
138                    $slider.bind( 'prevPage', function( e, t ) {
139
140                        var scroll = $slider.scrollLeft();
141                        var w = $slider.width();
142                        var x = 0;
143
144                        $items.each( function( i ) {
145                            if( $( this ).position().left < 1 - w ) {
146                                x = $( this ).next().position().left;
147                                slide = i;
148                            }
149                        } );
150
151                        if( scroll ) {
152                            if( x == 0 ) {
153                                //$slider.animate({ 'scrollLeft' : 0 }, 'slow' );
154                                slideTo( e, $slider, 0, 0, 'slow' );
155                            } else {
156                                //$slider.animate({ 'scrollLeft' : scroll + x }, 'slow' );
157                                slideTo( e, $slider, scroll + x, slide, 'slow' );
158                            }
159                        } else if( options.loop ) {
160                            // return to last
161                            var a = $sliderContainer.outerWidth() - $slider.width();
162                            var b = $items.filter( ':last' ).position().left;
163                            if( a > b ) {
164                                $slider.animate( { 'scrollLeft': b }, 'slow' );
165                            } else {
166                                $slider.animate( { 'scrollLeft': a }, 'slow' );
167                            }
168                        }
169
170                    } );
171                    $slider.bind( 'slideTo', function( e, i, t ) {
172
173                        slideTo(
174                            e, $slider,
175                            $slider.scrollLeft() + $items.filter( ':eq(' + i + ')' ).position().left,
176                            i, t );
177
178                    } );
179
180                    // controls
181                    $sliderControls.find( '.next-slide' ).on('click', function() {
182                        $slider.trigger( 'nextSlide' );
183                        return false;
184                    } );
185                    $sliderControls.find( '.prev-slide' ).on('click', function() {
186                        $slider.trigger( 'prevSlide' );
187                        return false;
188                    } );
189                    $sliderControls.find( '.next-page' ).on('click', function() {
190                        $slider.trigger( 'nextPage' );
191                        return false;
192                    } );
193                    $sliderControls.find( '.prev-page' ).on('click', function() {
194                        $slider.trigger( 'prevPage' );
195                        return false;
196                    } );
197
198                    //if ( typeof $slider.options.create == 'function' ) $slider.options.create();
199
200                    $slider.data( 'slider', {
201                        'target':  $slider,
202                        'options': options
203                    } )
204
205                }
206
207            } );
208
209        },
210        //
211        // Add Item
212        //
213        addItem: function( options ) {
214            var options = $.extend( {}, $.fn.lemmonSlider.defaults, options );
215
216            var $slider = $( this ),
217                $sliderContainer = $slider.find( options.slider ),
218                $sliderControls = $slider.next().filter( '.controls' ),
219                $items = $sliderContainer.find( options.items )
220
221            options.infinite = $slider.data( 'slider-infinite' )
222
223            if( !options.item ) {
224                return false
225            }
226            methods.destroy.apply( this );
227            if( options.prepend ) {
228                $sliderContainer.prepend( options.item );
229            } else {
230                $sliderContainer.append( options.item );
231            }
232            methods.init.apply( this, [options] );
233        },
234        //
235        // Destroy plugin
236        //
237        destroy: function() {
238
239            return this.each( function() {
240
241                var $slider = $( this ),
242                    $sliderControls = $slider.next().filter( '.controls' ),
243                    $items = $slider.find( '> *:first > *' ),
244                    data = $slider.data( 'slider' );
245
246                $slider.unbind( 'nextSlide' );
247                $slider.unbind( 'prevSlide' );
248                $slider.unbind( 'nextPage' );
249                $slider.unbind( 'prevPage' );
250                $slider.unbind( 'slideTo' );
251
252                $sliderControls.find( '.next-slide' ).unbind( 'click' );
253                $sliderControls.find( '.prev-slide' ).unbind( 'click' );
254                $sliderControls.find( '.next-page' ).unbind( 'click' );
255                $sliderControls.find( '.next-page' ).unbind( 'click' );
256
257                $slider.removeData( 'slider' );
258
259                if( $slider.data( 'slider-infinite' ) ) {
260                    $.merge( $items.filter( '.-before' ), $items.filter( '.-after' ) ).each( function( index, item ) {
261                        $( item ).remove();
262                    } );
263                }
264            } );
265
266        }
267        //
268        //
269        //
270    }
271    //
272    // Private functions
273    //
274    function slideTo( e, $slider, x, i, t ) {
275
276        $slider.items.filter( 'li:eq(' + i + ')' ).addClass( 'active' ).siblings( '.active' ).removeClass( 'active' );
277
278        if( $slider.options.center ) {
279            var currentElement = $( $slider.items[ i ] );
280            $slider.options.offset = Math.floor( ( $('.qode_image_gallery_holder').width() - currentElement.width() ) / 2 );
281            console.log( 'set offset to ', $slider.options.offset );
282        }
283
284        if( typeof t == 'undefined' ) {
285            t = 'slow';
286        }
287        if( t ) {
288            $slider.animate( { 'scrollLeft': x - $slider.options.offset }, t, function() {
289                checkInfinite( $slider );
290            } );
291        } else {
292            var time = 0;
293            $slider.scrollLeft( x - $slider.options.offset );
294            checkInfinite( $slider );
295        }
296
297        //if ( typeof $slider.options.slide == 'function' ) $slider.options.slide( e, i, time );
298    }
299
300    function checkInfinite( $slider ) {
301
302        var $active = $slider.items.filter( '.active' );
303        if( $active.hasClass( '-before' ) ) {
304
305            var i = $active.prevAll().size();
306            $active.removeClass( 'active' );
307            $active = $slider.items.filter( ':not(.-before):eq(' + i + ')' ).addClass( 'active' );
308            $slider.scrollLeft( $slider.scrollLeft() + $active.position().left - $slider.options.offset );
309
310        } else if( $active.hasClass( '-after' ) ) {
311
312            var i = $active.prevAll( '.-after' ).size();
313            $active.removeClass( 'active' );
314            $active = $slider.items.filter( ':not(.-before):eq(' + i + ')' ).addClass( 'active' );
315            $slider.scrollLeft( $slider.scrollLeft() + $active.position().left - $slider.options.offset );
316
317        }
318
319    }
320
321    //
322    // Debug
323    //
324    function debug( text ) {
325        $( '#debug span' ).text( text );
326    }
327
328    //
329    //
330    //
331    $.fn.lemmonSlider = function( method, options ) {
332        if( methods[method] ) {
333            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
334        } else if( typeof method === 'object' || !method ) {
335            return methods.init.apply( this, arguments );
336        } else {
337            $.error( 'Method ' + method + ' does not exist on jQuery.lemmonSlider' );
338        }
339
340    };
341    //
342    //
343    //
344    $.fn.lemmonSlider.defaults = {
345
346        'items':       '> *',
347        'loop':        true,
348        'slideToLast': false,
349        'slider':      '> *:first',
350        // since 0.2
351        'infinite':    true,
352        'center':      true,
353        'offset':      0
354
355    }
356
357})( 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.