summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.markdown35
-rw-r--r--ISSUE_TEMPLATE.md50
-rw-r--r--LICENSE20
-rw-r--r--Makefile8
-rw-r--r--README.markdown287
-rw-r--r--bower.json33
-rw-r--r--component.json18
-rw-r--r--composer.json34
-rw-r--r--index.html137
-rw-r--r--package.json50
-rw-r--r--slick.jquery.json34
-rw-r--r--slick/ajax-loader.gifbin0 -> 4178 bytes
-rw-r--r--slick/config.rb10
-rw-r--r--slick/fonts/slick.eotbin0 -> 2048 bytes
-rw-r--r--slick/fonts/slick.svg14
-rw-r--r--slick/fonts/slick.ttfbin0 -> 1892 bytes
-rw-r--r--slick/fonts/slick.woffbin0 -> 1380 bytes
-rw-r--r--slick/slick-theme.css204
-rw-r--r--slick/slick-theme.less168
-rw-r--r--slick/slick-theme.scss194
-rw-r--r--slick/slick.css117
-rw-r--r--slick/slick.js2892
-rw-r--r--slick/slick.less98
-rw-r--r--slick/slick.min.js18
-rw-r--r--slick/slick.scss98
25 files changed, 4519 insertions, 0 deletions
diff --git a/CONTRIBUTING.markdown b/CONTRIBUTING.markdown
new file mode 100644
index 0000000..33b73ca
--- /dev/null
+++ b/CONTRIBUTING.markdown
@@ -0,0 +1,35 @@
1## Submitting issues
2
3### Test case required
4
5**All bug reports and problem issues require a jsFiddle**.
6[Please fork this JSFiddle as a baseline](http://jsfiddle.net/simeydotme/fmo50w7n/).
7
8+ A test case clearly demonstrates the bug or issue.
9+ It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug.
10+ Assets are not minified (we cannot debug .min.js files).
11+ A link to your production site is **not** a reduced test case.
12
13Providing a test case is the best way to get your issue addressed. Without a test case; your issue may be closed.
14You must provide a clear and simple way to reproduce the issue with the provided fiddle.
15
16## Support
17
18Although Slick is designed to be super easy to use, there's always things that can go wrong, especially when interacting with other plugins and complicated websites. If you are **having problems getting Slick to work**, or can't figure something out, **this repository**'s issues section **is not the place to ask about it**.
19
20I have set up a subreddit for Slick discussion at [reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/).
21And a gitter chatroom here: [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick).
22And finally you can ask the world for help, and find out if anyone else has your problem at [stackoverflow](http://stackoverflow.com/search?q=slick+carousel).
23
24Please use these forums as an area to discuss Slick and any issues you may have.
25
26## Feature Requests
27
28If you would like to request or propose a feature, please do so in the the Slick subreddit or gitter chat:
29[reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/) / [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick).
30
31## Pull requests
32
33**Contributions are welcome**! That said, please *be prepared to edit* your pull request at request, and provide a jsFiddle of your fork working interoperably with every "mode" that Slick supports, and with varying numbers of slides, slidesToShow & slidesToScroll. Failure to do so will result in your pull request being closed.
34
35*Please note that while Slick is open source, this is still my baby, and by submitting a pull request you are authorizing me to edit or modify it in any way shape or form. You will be listed in Github as a contributor, but I have and will continue to steer the direction of this project.*
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..7400336
--- /dev/null
+++ b/ISSUE_TEMPLATE.md
@@ -0,0 +1,50 @@
1
2> short description of the bug / issue, provide more detail below.
3
4====================================================================
5
6
7###### `[ paste your jsfiddle link here ]`
8
9use this jsfiddle to reproduce your bug:
10http://jsfiddle.net/simeydotme/fmo50w7n/
11we will likely close your issue without it.
12
13
14====================================================================
15
16
17#### Steps to reproduce the problem
18
191. ...
202. ...
21
22
23====================================================================
24
25
26#### What is the expected behaviour?
27
28...
29
30
31====================================================================
32
33
34#### What is observed behaviour?
35
36...
37
38
39====================================================================
40
41
42#### More Details
43
44- Which browsers/versions does it happen on?
45- Which jQuery/Slick version are you using?
46- Did this work before?
47
48
49
50
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3ffd452
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
1The MIT License (MIT)
2
3Copyright (c) 2013-2016
4
5Permission is hereby granted, free of charge, to any person obtaining a copy of
6this software and associated documentation files (the "Software"), to deal in
7the Software without restriction, including without limitation the rights to
8use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9the Software, and to permit persons to whom the Software is furnished to do so,
10subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in all
13copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..eea6b95
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,8 @@
1
2build: components slick.js slick.css
3 @component build --dev
4
5components: component.json
6 @component install --dev
7
8.PHONY: clean
diff --git a/README.markdown b/README.markdown
new file mode 100644
index 0000000..6dc5ca0
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,287 @@
1slick
2-------
3
4[1]: <https://github.com/kenwheeler/slick>
5
6_the last carousel you'll ever need_
7
8#### Demo
9
10[http://kenwheeler.github.io/slick](http://kenwheeler.github.io/slick/)
11
12#### CDN
13
14To start working with Slick right away, there's a couple of CDN choices availabile
15to serve the files as close, and fast as possible to your users:
16
17- https://cdnjs.com/libraries/slick-carousel
18- https://www.jsdelivr.com/projects/jquery.slick
19
20#####Example using jsDelivr
21
22Just add a link to the css file in your `<head>`:
23```html
24<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css"/>
25<!-- Add the slick-theme.css if you want default styling -->
26<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick-theme.css"/>
27```
28
29Then, before your closing ```<body>``` tag add:
30
31```html
32<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
33```
34
35#### Package Managers
36
37```sh
38# Bower
39bower install --save slick-carousel
40
41# NPM
42npm install slick-carousel
43```
44
45#### Contributing
46
47PLEASE review CONTRIBUTING.markdown prior to requesting a feature, filing a pull request or filing an issue.
48
49### Data Attribute Settings
50
51In slick 1.5 you can now add settings using the data-slick attribute. You still need to call $(element).slick() to initialize slick on the element.
52
53Example:
54
55```html
56<div data-slick='{"slidesToShow": 4, "slidesToScroll": 4}'>
57 <div><h3>1</h3></div>
58 <div><h3>2</h3></div>
59 <div><h3>3</h3></div>
60 <div><h3>4</h3></div>
61 <div><h3>5</h3></div>
62 <div><h3>6</h3></div>
63</div>
64```
65
66### Settings
67
68Option | Type | Default | Description
69------ | ---- | ------- | -----------
70accessibility | boolean | true | Enables tabbing and arrow key navigation
71adaptiveHeight | boolean | false | Adapts slider height to the current slide
72autoplay | boolean | false | Enables auto play of slides
73autoplaySpeed | int | 3000 | Auto play change interval
74centerMode | boolean | false | Enables centered view with partial prev/next slides. Use with odd numbered slidesToShow counts.
75centerPadding | string | '50px' | Side padding when in center mode. (px or %)
76cssEase | string | 'ease' | CSS3 easing
77customPaging | function | n/a | Custom paging templates. See source for use example.
78dots | boolean | false | Current slide indicator dots
79dotsClass | string | 'slick-dots' | Class for slide indicator dots container
80draggable | boolean | true | Enables desktop dragging
81easing | string | 'linear' | animate() fallback easing
82edgeFriction | integer | 0.15 | Resistance when swiping edges of non-infinite carousels
83fade | boolean | false | Enables fade
84arrows | boolean | true | Enable Next/Prev arrows
85appendArrows | string | $(element) | Change where the navigation arrows are attached (Selector, htmlString, Array, Element, jQuery object)
86appendDots | string | $(element) | Change where the navigation dots are attached (Selector, htmlString, Array, Element, jQuery object)
87mobileFirst | boolean | false | Responsive settings use mobile first calculation
88prevArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `<button type="button" class="slick-prev">Previous</button>` | Allows you to select a node or customize the HTML for the "Previous" arrow.
89nextArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `<button type="button" class="slick-next">Next</button>` | Allows you to select a node or customize the HTML for the "Next" arrow.
90infinite | boolean | true | Infinite looping
91initialSlide | integer | 0 | Slide to start on
92lazyLoad | string | 'ondemand' | Accepts 'ondemand' or 'progressive' for lazy load technique. 'ondemand' will load the image as soon as you slide to it, 'progressive' loads one image after the other when the page loads.
93pauseOnFocus | boolean | true | Pauses autoplay when slider is focussed
94pauseOnHover | boolean | true | Pauses autoplay on hover
95pauseOnDotsHover | boolean | false | Pauses autoplay when a dot is hovered
96respondTo | string | 'window' | Width that responsive object responds to. Can be 'window', 'slider' or 'min' (the smaller of the two).
97responsive | array | null | Array of objects [containing breakpoints and settings objects (see example)](#responsive-option-example). Enables settings at given `breakpoint`. Set `settings` to "unslick" instead of an object to disable slick at a given breakpoint.
98rows | int | 1 | Setting this to more than 1 initializes grid mode. Use slidesPerRow to set how many slides should be in each row.
99slide | string | '' | Slide element query
100slidesPerRow | int | 1 | With grid mode initialized via the rows option, this sets how many slides are in each grid row.
101slidesToShow | int | 1 | # of slides to show at a time
102slidesToScroll | int | 1 | # of slides to scroll at a time
103speed | int | 300 | Transition speed
104swipe | boolean | true | Enables touch swipe
105swipeToSlide | boolean | false | Swipe to slide irrespective of slidesToScroll
106touchMove | boolean | true | Enables slide moving with touch
107touchThreshold | int | 5 | To advance slides, the user must swipe a length of (1/touchThreshold) * the width of the slider.
108useCSS | boolean | true | Enable/Disable CSS Transitions
109useTransform | boolean | true | Enable/Disable CSS Transforms
110variableWidth | boolean | false | Disables automatic slide width calculation
111vertical | boolean | false | Vertical slide direction
112verticalSwiping | boolean | false | Changes swipe direction to vertical
113rtl | boolean | false | Change the slider's direction to become right-to-left
114waitForAnimate | boolean | true | Ignores requests to advance the slide while animating
115zIndex | number | 1000 | Set the zIndex values for slides, useful for IE9 and lower
116
117##### Responsive Option Example
118The responsive option, and value, is quite unique and powerful.
119You can use it like so:
120
121```javascript
122$(".slider").slick({
123
124 // normal options...
125 infinite: false,
126
127 // the magic
128 responsive: [{
129
130 breakpoint: 1024,
131 settings: {
132 slidesToShow: 3,
133 infinite: true
134 }
135
136 }, {
137
138 breakpoint: 600,
139 settings: {
140 slidesToShow: 2,
141 dots: true
142 }
143
144 }, {
145
146 breakpoint: 300,
147 settings: "unslick" // destroys slick
148
149 }]
150});
151```
152
153
154
155
156### Events
157
158In slick 1.4, callback methods were deprecated and replaced with events. Use them before the initialization of slick as shown below:
159
160```javascript
161// On swipe event
162$('.your-element').on('swipe', function(event, slick, direction){
163 console.log(direction);
164 // left
165});
166
167// On edge hit
168$('.your-element').on('edge', function(event, slick, direction){
169 console.log('edge was hit')
170});
171
172// On before slide change
173$('.your-element').on('beforeChange', function(event, slick, currentSlide, nextSlide){
174 console.log(nextSlide);
175});
176```
177
178Event | Params | Description
179------ | -------- | -----------
180afterChange | event, slick, currentSlide | After slide change callback
181beforeChange | event, slick, currentSlide, nextSlide | Before slide change callback
182breakpoint | event, slick, breakpoint | Fires after a breakpoint is hit
183destroy | event, slick | When slider is destroyed, or unslicked.
184edge | event, slick, direction | Fires when an edge is overscrolled in non-infinite mode.
185init | event, slick | When Slick initializes for the first time callback. Note that this event should be defined before initializing the slider.
186reInit | event, slick | Every time Slick (re-)initializes callback
187setPosition | event, slick | Every time Slick recalculates position
188swipe | event, slick, direction | Fires after swipe/drag
189lazyLoaded | event, slick, image, imageSource | Fires after image loads lazily
190lazyLoadError | event, slick, image, imageSource | Fires after image fails to load
191
192
193#### Methods
194
195Methods are called on slick instances through the slick method itself in version 1.4, see below:
196
197```javascript
198// Add a slide
199$('.your-element').slick('slickAdd',"<div></div>");
200
201// Get the current slide
202var currentSlide = $('.your-element').slick('slickCurrentSlide');
203```
204
205This new syntax allows you to call any internal slick method as well:
206
207```javascript
208// Manually refresh positioning of slick
209$('.your-element').slick('setPosition');
210```
211
212
213Method | Argument | Description
214------ | -------- | -----------
215`slick` | options : object | Initializes Slick
216`unslick` | | Destroys Slick
217`slickNext` | | Triggers next slide
218`slickPrev` | | Triggers previous slide
219`slickPause` | | Pause Autoplay
220`slickPlay` | | Start Autoplay (_will also set `autoplay` option to `true`_)
221`slickGoTo` | index : int, dontAnimate : bool | Goes to slide by index, skipping animation if second parameter is set to true
222`slickCurrentSlide` | | Returns the current slide index
223`slickAdd` | element : html or DOM object, index: int, addBefore: bool | Add a slide. If an index is provided, will add at that index, or before if addBefore is set. If no index is provided, add to the end or to the beginning if addBefore is set. Accepts HTML String || Object
224`slickRemove` | index: int, removeBefore: bool | Remove slide by index. If removeBefore is set true, remove slide preceding index, or the first slide if no index is specified. If removeBefore is set to false, remove the slide following index, or the last slide if no index is set.
225`slickFilter` | filter : selector or function | Filters slides using jQuery .filter syntax
226`slickUnfilter` | | Removes applied filter
227`slickGetOption` | option : string(option name) | Gets an option value.
228`slickSetOption` | change an option, `refresh` is always `boolean` and will update UI changes...
229 | `option, value, refresh` | change a [single `option`](https://github.com/kenwheeler/slick#settings) to given `value`; `refresh` is optional.
230 | `"responsive", [{ breakpoint: n, settings: {} }, ... ], refresh` | change or add [whole sets of responsive options](#responsive-option-example)
231 | `{ option: value, option: value, ... }, refresh` | change [multiple `option`s](https://github.com/kenwheeler/slick#settings) to corresponding `value`s.
232
233
234#### Example
235
236Initialize with:
237
238```javascript
239$(element).slick({
240 dots: true,
241 speed: 500
242});
243 ```
244
245Change the speed with:
246
247```javascript
248$(element).slick('slickSetOption', 'speed', 5000, true);
249```
250
251Destroy with:
252
253```javascript
254$(element).slick('unslick');
255```
256
257
258#### Sass Variables
259
260Variable | Type | Default | Description
261------ | ---- | ------- | -----------
262$slick-font-path | string | "./fonts/" | Directory path for the slick icon font
263$slick-font-family | string | "slick" | Font-family for slick icon font
264$slick-loader-path | string | "./" | Directory path for the loader image
265$slick-arrow-color | color | white | Color of the left/right arrow icons
266$slick-dot-color | color | black | Color of the navigation dots
267$slick-dot-color-active | color | $slick-dot-color | Color of the active navigation dot
268$slick-prev-character | string | '\2190' | Unicode character code for the previous arrow icon
269$slick-next-character | string | '\2192' | Unicode character code for the next arrow icon
270$slick-dot-character | string | '\2022' | Unicode character code for the navigation dot icon
271$slick-dot-size | pixels | 6px | Size of the navigation dots
272
273#### Browser support
274
275Slick works on IE8+ in addition to other modern browsers such as Chrome, Firefox, and Safari.
276
277#### Dependencies
278
279jQuery 1.7
280
281#### License
282
283Copyright (c) 2014 Ken Wheeler
284
285Licensed under the MIT license.
286
287Free as in Bacon.
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..ff2c379
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,33 @@
1{
2 "name": "slick-carousel",
3 "main": [
4 "slick/slick.js",
5 "slick/slick.css",
6 "slick/slick.less",
7 "slick/slick.scss"
8 ],
9 "version": "1.6.0",
10 "homepage": "https://github.com/kenwheeler/slick",
11 "authors": [
12 "Ken Wheeler <ken_wheeler@me.com>"
13 ],
14 "description": "the last carousel you'll ever need",
15 "keywords": [
16 "responsive",
17 "carousel",
18 "jquery"
19 ],
20 "license": "MIT",
21 "ignore": [
22 "**/.*",
23 "node_modules",
24 "bower_components",
25 "test",
26 "tests",
27 "package.json",
28 "index.html"
29 ],
30 "dependencies": {
31 "jquery": ">=1.7"
32 }
33}
diff --git a/component.json b/component.json
new file mode 100644
index 0000000..3bc9f58
--- /dev/null
+++ b/component.json
@@ -0,0 +1,18 @@
1{
2 "name": "slick",
3 "repo": "kenwheeler/slick",
4 "description": "the last carousel you'll ever need",
5 "version": "1.6.0",
6 "keywords": ["ui", "jquery", "carousel", "responsive", "slider"],
7 "dependencies": {
8 "component/jquery": "*"
9 },
10 "development": {},
11 "scripts": {
12 "slick/slick.min.js": "slick.js"
13 },
14 "styles": {
15 "slick/slick.css": "slick.css",
16 "slick/slick-theme.css": "slick-theme.css"
17 }
18}
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..eefb326
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,34 @@
1{
2 "name": "immae/ludivine-slick-component",
3 "description": "Slick component.",
4 "type": "component",
5 "keywords": ["ui", "jquery", "carousel", "responsive", "slider"],
6 "homepage": "http://kenwheeler.github.io/slick/",
7 "license": [ "MIT" ],
8 "authors": [
9 {
10 "name": "kenwheeler",
11 "homepage": "https://github.com/kenwheeler/slick/"
12 }
13 ],
14 "require": {
15 "robloach/component-installer": "*",
16 "components/jquery": ">=1.7"
17 },
18 "support": {
19 "issues": "https://github.com/kenwheeler/slick/issues",
20 "source": "https://github.com/kenwheeler/slick"
21 },
22 "extra": {
23 "component": {
24 "scripts": [
25 "slick/slick.min.js",
26 "slick/slick.css",
27 "slick/slick-theme.css"
28 ],
29 "files": [
30 "slick/**"
31 ]
32 }
33 }
34}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c8fab56
--- /dev/null
+++ b/index.html
@@ -0,0 +1,137 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <title>Slick Playground</title>
5 <meta charset="UTF-8">
6 <link rel="stylesheet" type="text/css" href="./slick/slick.css">
7 <link rel="stylesheet" type="text/css" href="./slick/slick-theme.css">
8 <style type="text/css">
9 html, body {
10 margin: 0;
11 padding: 0;
12 }
13
14 * {
15 box-sizing: border-box;
16 }
17
18 .slider {
19 width: 50%;
20 margin: 100px auto;
21 }
22
23 .slick-slide {
24 margin: 0px 20px;
25 }
26
27 .slick-slide img {
28 width: 100%;
29 }
30
31 .slick-prev:before,
32 .slick-next:before {
33 color: black;
34 }
35 </style>
36</head>
37<body>
38
39 <section class="regular slider">
40 <div>
41 <img src="http://placehold.it/350x300?text=1">
42 </div>
43 <div>
44 <img src="http://placehold.it/350x300?text=2">
45 </div>
46 <div>
47 <img src="http://placehold.it/350x300?text=3">
48 </div>
49 <div>
50 <img src="http://placehold.it/350x300?text=4">
51 </div>
52 <div>
53 <img src="http://placehold.it/350x300?text=5">
54 </div>
55 <div>
56 <img src="http://placehold.it/350x300?text=6">
57 </div>
58 </section>
59
60 <section class="center slider">
61 <div>
62 <img src="http://placehold.it/350x300?text=1">
63 </div>
64 <div>
65 <img src="http://placehold.it/350x300?text=2">
66 </div>
67 <div>
68 <img src="http://placehold.it/350x300?text=3">
69 </div>
70 <div>
71 <img src="http://placehold.it/350x300?text=4">
72 </div>
73 <div>
74 <img src="http://placehold.it/350x300?text=5">
75 </div>
76 <div>
77 <img src="http://placehold.it/350x300?text=6">
78 </div>
79 <div>
80 <img src="http://placehold.it/350x300?text=7">
81 </div>
82 <div>
83 <img src="http://placehold.it/350x300?text=8">
84 </div>
85 <div>
86 <img src="http://placehold.it/350x300?text=9">
87 </div>
88 </section>
89
90 <section class="variable slider">
91 <div>
92 <img src="http://placehold.it/350x300?text=1">
93 </div>
94 <div>
95 <img src="http://placehold.it/200x300?text=2">
96 </div>
97 <div>
98 <img src="http://placehold.it/100x300?text=3">
99 </div>
100 <div>
101 <img src="http://placehold.it/200x300?text=4">
102 </div>
103 <div>
104 <img src="http://placehold.it/350x300?text=5">
105 </div>
106 <div>
107 <img src="http://placehold.it/300x300?text=6">
108 </div>
109 </section>
110
111 <script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
112 <script src="./slick/slick.js" type="text/javascript" charset="utf-8"></script>
113 <script type="text/javascript">
114 $(document).on('ready', function() {
115 $(".regular").slick({
116 dots: true,
117 infinite: true,
118 slidesToShow: 3,
119 slidesToScroll: 3
120 });
121 $(".center").slick({
122 dots: true,
123 infinite: true,
124 centerMode: true,
125 slidesToShow: 3,
126 slidesToScroll: 3
127 });
128 $(".variable").slick({
129 dots: true,
130 infinite: true,
131 variableWidth: true
132 });
133 });
134 </script>
135
136</body>
137</html> \ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8f675a4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,50 @@
1{
2 "name": "slick-carousel",
3 "version": "1.6.0",
4 "description": "the last carousel you'll ever need",
5 "main": "slick/slick.js",
6 "repository": {
7 "type": "git",
8 "url": "https://github.com/kenwheeler/slick.git"
9 },
10 "keywords": [
11 "carousel",
12 "slick",
13 "responsive",
14 "js",
15 "slider"
16 ],
17 "author": "Ken Wheeler <ken_wheeler@me.com>",
18 "contributors": [
19 {
20 "name": "ken wheeler",
21 "email": "ken_wheeler@me.com",
22 "url": "http://kenwheeler.github.io/"
23 },
24 {
25 "name": "simon goellner",
26 "email": "simey.me@gmail.com",
27 "url": "http://simey.me"
28 },
29 {
30 "name": "ahmad el-alfy",
31 "email": "ahmadalfy@gmail.com",
32 "url": "http://www.alfy.me"
33 },
34 {
35 "name": "leggomuhgreggo",
36 "email": "gwestneat@gmail.com"
37 },
38 {
39 "name": "ashley mcknight",
40 "email": "ash@sharpteef.net"
41 }
42 ],
43 "license": "MIT",
44 "bugs": {
45 "url": "https://github.com/kenwheeler/slick/issues"
46 },
47 "dependencies": {
48 "jquery": ">=1.7.2"
49 }
50}
diff --git a/slick.jquery.json b/slick.jquery.json
new file mode 100644
index 0000000..7af760b
--- /dev/null
+++ b/slick.jquery.json
@@ -0,0 +1,34 @@
1{
2 "name": "slick",
3 "title": "slick",
4 "description": "A jQuery responsive touch carousel",
5 "keywords": [
6 "responsive",
7 "slider",
8 "carousel",
9 "touch",
10 "mobile"
11 ],
12 "version": "1.6.0",
13 "author": {
14 "name": "Ken Wheeler",
15 "url": "http://kenwheeler.github.io"
16 },
17 "maintainers": [{
18 "name": "Ken Wheeler",
19 "email": "dubmediagroup@gmail.com",
20 "url": "http://www.dubmediagroup.com"
21 }],
22 "licenses": [{
23 "type": "MIT",
24 "url": "https://github.com/kenwheeler/slick/blob/master/LICENSE"
25 }],
26 "demo": "http://kenwheeler.github.io/slick/",
27 "bugs": "https://github.com/kenwheeler/slick/issues",
28 "homepage": "https://github.com/kenwheeler/slick/",
29 "docs": "https://github.com/kenwheeler/slick/",
30 "download": "https://github.com/kenwheeler/slick/archive/master.zip",
31 "dependencies": {
32 "jquery": ">=1.7"
33 }
34}
diff --git a/slick/ajax-loader.gif b/slick/ajax-loader.gif
new file mode 100644
index 0000000..e0e6e97
--- /dev/null
+++ b/slick/ajax-loader.gif
Binary files differ
diff --git a/slick/config.rb b/slick/config.rb
new file mode 100644
index 0000000..81f5ae3
--- /dev/null
+++ b/slick/config.rb
@@ -0,0 +1,10 @@
1css_dir = "."
2sass_dir = "."
3images_dir = "."
4fonts_dir = "fonts"
5relative_assets = true
6
7output_style = :compact
8line_comments = false
9
10preferred_syntax = :scss \ No newline at end of file
diff --git a/slick/fonts/slick.eot b/slick/fonts/slick.eot
new file mode 100644
index 0000000..2cbab9c
--- /dev/null
+++ b/slick/fonts/slick.eot
Binary files differ
diff --git a/slick/fonts/slick.svg b/slick/fonts/slick.svg
new file mode 100644
index 0000000..b36a66a
--- /dev/null
+++ b/slick/fonts/slick.svg
@@ -0,0 +1,14 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>Generated by Fontastic.me</metadata>
5<defs>
6<font id="slick" horiz-adv-x="512">
7<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
8<missing-glyph horiz-adv-x="512" />
9
10<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
11<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
12<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
13<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
14</font></defs></svg>
diff --git a/slick/fonts/slick.ttf b/slick/fonts/slick.ttf
new file mode 100644
index 0000000..9d03461
--- /dev/null
+++ b/slick/fonts/slick.ttf
Binary files differ
diff --git a/slick/fonts/slick.woff b/slick/fonts/slick.woff
new file mode 100644
index 0000000..8ee9972
--- /dev/null
+++ b/slick/fonts/slick.woff
Binary files differ
diff --git a/slick/slick-theme.css b/slick/slick-theme.css
new file mode 100644
index 0000000..1232fca
--- /dev/null
+++ b/slick/slick-theme.css
@@ -0,0 +1,204 @@
1@charset 'UTF-8';
2/* Slider */
3.slick-loading .slick-list
4{
5 background: #fff url('./ajax-loader.gif') center center no-repeat;
6}
7
8/* Icons */
9@font-face
10{
11 font-family: 'slick';
12 font-weight: normal;
13 font-style: normal;
14
15 src: url('./fonts/slick.eot');
16 src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
17}
18/* Arrows */
19.slick-prev,
20.slick-next
21{
22 font-size: 0;
23 line-height: 0;
24
25 position: absolute;
26 top: 50%;
27
28 display: block;
29
30 width: 20px;
31 height: 20px;
32 padding: 0;
33 -webkit-transform: translate(0, -50%);
34 -ms-transform: translate(0, -50%);
35 transform: translate(0, -50%);
36
37 cursor: pointer;
38
39 color: transparent;
40 border: none;
41 outline: none;
42 background: transparent;
43}
44.slick-prev:hover,
45.slick-prev:focus,
46.slick-next:hover,
47.slick-next:focus
48{
49 color: transparent;
50 outline: none;
51 background: transparent;
52}
53.slick-prev:hover:before,
54.slick-prev:focus:before,
55.slick-next:hover:before,
56.slick-next:focus:before
57{
58 opacity: 1;
59}
60.slick-prev.slick-disabled:before,
61.slick-next.slick-disabled:before
62{
63 opacity: .25;
64}
65
66.slick-prev:before,
67.slick-next:before
68{
69 font-family: 'slick';
70 font-size: 20px;
71 line-height: 1;
72
73 opacity: .75;
74 color: white;
75
76 -webkit-font-smoothing: antialiased;
77 -moz-osx-font-smoothing: grayscale;
78}
79
80.slick-prev
81{
82 left: -25px;
83}
84[dir='rtl'] .slick-prev
85{
86 right: -25px;
87 left: auto;
88}
89.slick-prev:before
90{
91 content: '←';
92}
93[dir='rtl'] .slick-prev:before
94{
95 content: '→';
96}
97
98.slick-next
99{
100 right: -25px;
101}
102[dir='rtl'] .slick-next
103{
104 right: auto;
105 left: -25px;
106}
107.slick-next:before
108{
109 content: '→';
110}
111[dir='rtl'] .slick-next:before
112{
113 content: '←';
114}
115
116/* Dots */
117.slick-dotted.slick-slider
118{
119 margin-bottom: 30px;
120}
121
122.slick-dots
123{
124 position: absolute;
125 bottom: -25px;
126
127 display: block;
128
129 width: 100%;
130 padding: 0;
131 margin: 0;
132
133 list-style: none;
134
135 text-align: center;
136}
137.slick-dots li
138{
139 position: relative;
140
141 display: inline-block;
142
143 width: 20px;
144 height: 20px;
145 margin: 0 5px;
146 padding: 0;
147
148 cursor: pointer;
149}
150.slick-dots li button
151{
152 font-size: 0;
153 line-height: 0;
154
155 display: block;
156
157 width: 20px;
158 height: 20px;
159 padding: 5px;
160
161 cursor: pointer;
162
163 color: transparent;
164 border: 0;
165 outline: none;
166 background: transparent;
167}
168.slick-dots li button:hover,
169.slick-dots li button:focus
170{
171 outline: none;
172}
173.slick-dots li button:hover:before,
174.slick-dots li button:focus:before
175{
176 opacity: 1;
177}
178.slick-dots li button:before
179{
180 font-family: 'slick';
181 font-size: 6px;
182 line-height: 20px;
183
184 position: absolute;
185 top: 0;
186 left: 0;
187
188 width: 20px;
189 height: 20px;
190
191 content: '•';
192 text-align: center;
193
194 opacity: .25;
195 color: black;
196
197 -webkit-font-smoothing: antialiased;
198 -moz-osx-font-smoothing: grayscale;
199}
200.slick-dots li.slick-active button:before
201{
202 opacity: .75;
203 color: black;
204}
diff --git a/slick/slick-theme.less b/slick/slick-theme.less
new file mode 100644
index 0000000..8f10758
--- /dev/null
+++ b/slick/slick-theme.less
@@ -0,0 +1,168 @@
1@charset "UTF-8";
2
3// Default Variables
4
5@slick-font-path: "./fonts/";
6@slick-font-family: "slick";
7@slick-loader-path: "./";
8@slick-arrow-color: white;
9@slick-dot-color: black;
10@slick-dot-color-active: @slick-dot-color;
11@slick-prev-character: "←";
12@slick-next-character: "→";
13@slick-dot-character: "•";
14@slick-dot-size: 6px;
15@slick-opacity-default: 0.75;
16@slick-opacity-on-hover: 1;
17@slick-opacity-not-active: 0.25;
18
19/* Slider */
20.slick-loading .slick-list{
21 background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat;
22}
23
24/* Icons */
25@font-face{
26 font-family: 'slick';
27 font-weight: normal;
28 font-style: normal;
29
30 src: url('@{slick-font-path}slick.eot');
31 src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg');
32}
33
34/* Arrows */
35
36.slick-prev,
37.slick-next {
38 position: absolute;
39 display: block;
40 height: 20px;
41 width: 20px;
42 line-height: 0px;
43 font-size: 0px;
44 cursor: pointer;
45 background: transparent;
46 color: transparent;
47 top: 50%;
48 -webkit-transform: translate(0, -50%);
49 -ms-transform: translate(0, -50%);
50 transform: translate(0, -50%);
51 padding: 0;
52 border: none;
53 outline: none;
54 &:hover, &:focus {
55 outline: none;
56 background: transparent;
57 color: transparent;
58 &:before {
59 opacity: @slick-opacity-on-hover;
60 }
61 }
62 &.slick-disabled:before {
63 opacity: @slick-opacity-not-active;
64 }
65}
66
67.slick-prev:before, .slick-next:before {
68 font-family: @slick-font-family;
69 font-size: 20px;
70 line-height: 1;
71 color: @slick-arrow-color;
72 opacity: @slick-opacity-default;
73 -webkit-font-smoothing: antialiased;
74 -moz-osx-font-smoothing: grayscale;
75}
76
77.slick-prev {
78 left: -25px;
79 &[dir="rtl"] {
80 left: auto;
81 right: -25px;
82 }
83 &:before {
84 content: @slick-prev-character;
85 &[dir="rtl"] {
86 content: @slick-next-character;
87 }
88 }
89}
90
91.slick-next {
92 right: -25px;
93 &[dir="rtl"] {
94 left: -25px;
95 right: auto;
96 }
97 &:before {
98 content: @slick-next-character;
99 &[dir="rtl"] {
100 content: @slick-prev-character;
101 }
102 }
103}
104
105/* Dots */
106
107.slick-dotted .slick-slider {
108 margin-bottom: 30px;
109}
110
111.slick-dots {
112 position: absolute;
113 bottom: -25px;
114 list-style: none;
115 display: block;
116 text-align: center;
117 padding: 0;
118 margin: 0;
119 width: 100%;
120 li {
121 position: relative;
122 display: inline-block;
123 height: 20px;
124 width: 20px;
125 margin: 0 5px;
126 padding: 0;
127 cursor: pointer;
128 button {
129 border: 0;
130 background: transparent;
131 display: block;
132 height: 20px;
133 width: 20px;
134 outline: none;
135 line-height: 0px;
136 font-size: 0px;
137 color: transparent;
138 padding: 5px;
139 cursor: pointer;
140 &:hover, &:focus {
141 outline: none;
142 &:before {
143 opacity: @slick-opacity-on-hover;
144 }
145 }
146 &:before {
147 position: absolute;
148 top: 0;
149 left: 0;
150 content: @slick-dot-character;
151 width: 20px;
152 height: 20px;
153 font-family: @slick-font-family;
154 font-size: @slick-dot-size;
155 line-height: 20px;
156 text-align: center;
157 color: @slick-dot-color;
158 opacity: @slick-opacity-not-active;
159 -webkit-font-smoothing: antialiased;
160 -moz-osx-font-smoothing: grayscale;
161 }
162 }
163 &.slick-active button:before {
164 color: @slick-dot-color-active;
165 opacity: @slick-opacity-default;
166 }
167 }
168}
diff --git a/slick/slick-theme.scss b/slick/slick-theme.scss
new file mode 100644
index 0000000..7fe63e1
--- /dev/null
+++ b/slick/slick-theme.scss
@@ -0,0 +1,194 @@
1@charset "UTF-8";
2
3// Default Variables
4
5// Slick icon entity codes outputs the following
6// "\2190" outputs ascii character "←"
7// "\2192" outputs ascii character "→"
8// "\2022" outputs ascii character "•"
9
10$slick-font-path: "./fonts/" !default;
11$slick-font-family: "slick" !default;
12$slick-loader-path: "./" !default;
13$slick-arrow-color: white !default;
14$slick-dot-color: black !default;
15$slick-dot-color-active: $slick-dot-color !default;
16$slick-prev-character: "\2190" !default;
17$slick-next-character: "\2192" !default;
18$slick-dot-character: "\2022" !default;
19$slick-dot-size: 6px !default;
20$slick-opacity-default: 0.75 !default;
21$slick-opacity-on-hover: 1 !default;
22$slick-opacity-not-active: 0.25 !default;
23
24@function slick-image-url($url) {
25 @if function-exists(image-url) {
26 @return image-url($url);
27 }
28 @else {
29 @return url($slick-loader-path + $url);
30 }
31}
32
33@function slick-font-url($url) {
34 @if function-exists(font-url) {
35 @return font-url($url);
36 }
37 @else {
38 @return url($slick-font-path + $url);
39 }
40}
41
42/* Slider */
43
44.slick-list {
45 .slick-loading & {
46 background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
47 }
48}
49
50/* Icons */
51@if $slick-font-family == "slick" {
52 @font-face {
53 font-family: "slick";
54 src: slick-font-url("slick.eot");
55 src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
56 font-weight: normal;
57 font-style: normal;
58 }
59}
60
61/* Arrows */
62
63.slick-prev,
64.slick-next {
65 position: absolute;
66 display: block;
67 height: 20px;
68 width: 20px;
69 line-height: 0px;
70 font-size: 0px;
71 cursor: pointer;
72 background: transparent;
73 color: transparent;
74 top: 50%;
75 -webkit-transform: translate(0, -50%);
76 -ms-transform: translate(0, -50%);
77 transform: translate(0, -50%);
78 padding: 0;
79 border: none;
80 outline: none;
81 &:hover, &:focus {
82 outline: none;
83 background: transparent;
84 color: transparent;
85 &:before {
86 opacity: $slick-opacity-on-hover;
87 }
88 }
89 &.slick-disabled:before {
90 opacity: $slick-opacity-not-active;
91 }
92 &:before {
93 font-family: $slick-font-family;
94 font-size: 20px;
95 line-height: 1;
96 color: $slick-arrow-color;
97 opacity: $slick-opacity-default;
98 -webkit-font-smoothing: antialiased;
99 -moz-osx-font-smoothing: grayscale;
100 }
101}
102
103.slick-prev {
104 left: -25px;
105 [dir="rtl"] & {
106 left: auto;
107 right: -25px;
108 }
109 &:before {
110 content: $slick-prev-character;
111 [dir="rtl"] & {
112 content: $slick-next-character;
113 }
114 }
115}
116
117.slick-next {
118 right: -25px;
119 [dir="rtl"] & {
120 left: -25px;
121 right: auto;
122 }
123 &:before {
124 content: $slick-next-character;
125 [dir="rtl"] & {
126 content: $slick-prev-character;
127 }
128 }
129}
130
131/* Dots */
132
133.slick-dotted.slick-slider {
134 margin-bottom: 30px;
135}
136
137.slick-dots {
138 position: absolute;
139 bottom: -25px;
140 list-style: none;
141 display: block;
142 text-align: center;
143 padding: 0;
144 margin: 0;
145 width: 100%;
146 li {
147 position: relative;
148 display: inline-block;
149 height: 20px;
150 width: 20px;
151 margin: 0 5px;
152 padding: 0;
153 cursor: pointer;
154 button {
155 border: 0;
156 background: transparent;
157 display: block;
158 height: 20px;
159 width: 20px;
160 outline: none;
161 line-height: 0px;
162 font-size: 0px;
163 color: transparent;
164 padding: 5px;
165 cursor: pointer;
166 &:hover, &:focus {
167 outline: none;
168 &:before {
169 opacity: $slick-opacity-on-hover;
170 }
171 }
172 &:before {
173 position: absolute;
174 top: 0;
175 left: 0;
176 content: $slick-dot-character;
177 width: 20px;
178 height: 20px;
179 font-family: $slick-font-family;
180 font-size: $slick-dot-size;
181 line-height: 20px;
182 text-align: center;
183 color: $slick-dot-color;
184 opacity: $slick-opacity-not-active;
185 -webkit-font-smoothing: antialiased;
186 -moz-osx-font-smoothing: grayscale;
187 }
188 }
189 &.slick-active button:before {
190 color: $slick-dot-color-active;
191 opacity: $slick-opacity-default;
192 }
193 }
194}
diff --git a/slick/slick.css b/slick/slick.css
new file mode 100644
index 0000000..dd973fe
--- /dev/null
+++ b/slick/slick.css
@@ -0,0 +1,117 @@
1/* Slider */
2.slick-slider
3{
4 position: relative;
5
6 display: block;
7 box-sizing: border-box;
8
9 -webkit-user-select: none;
10 -moz-user-select: none;
11 -ms-user-select: none;
12 user-select: none;
13
14 -webkit-touch-callout: none;
15 -khtml-user-select: none;
16 -ms-touch-action: pan-y;
17 touch-action: pan-y;
18 -webkit-tap-highlight-color: transparent;
19}
20
21.slick-list
22{
23 position: relative;
24
25 display: block;
26 overflow: hidden;
27
28 margin: 0;
29 padding: 0;
30}
31.slick-list:focus
32{
33 outline: none;
34}
35.slick-list.dragging
36{
37 cursor: pointer;
38 cursor: hand;
39}
40
41.slick-slider .slick-track,
42.slick-slider .slick-list
43{
44 -webkit-transform: translate3d(0, 0, 0);
45 -moz-transform: translate3d(0, 0, 0);
46 -ms-transform: translate3d(0, 0, 0);
47 -o-transform: translate3d(0, 0, 0);
48 transform: translate3d(0, 0, 0);
49}
50
51.slick-track
52{
53 position: relative;
54 top: 0;
55 left: 0;
56
57 display: block;
58}
59.slick-track:before,
60.slick-track:after
61{
62 display: table;
63
64 content: '';
65}
66.slick-track:after
67{
68 clear: both;
69}
70.slick-loading .slick-track
71{
72 visibility: hidden;
73}
74
75.slick-slide
76{
77 display: none;
78 float: left;
79
80 height: 100%;
81 min-height: 1px;
82}
83[dir='rtl'] .slick-slide
84{
85 float: right;
86}
87.slick-slide img
88{
89 display: block;
90}
91.slick-slide.slick-loading img
92{
93 display: none;
94}
95.slick-slide.dragging img
96{
97 pointer-events: none;
98}
99.slick-initialized .slick-slide
100{
101 display: block;
102}
103.slick-loading .slick-slide
104{
105 visibility: hidden;
106}
107.slick-vertical .slick-slide
108{
109 display: block;
110
111 height: auto;
112
113 border: 1px solid transparent;
114}
115.slick-arrow.slick-hidden {
116 display: none;
117}
diff --git a/slick/slick.js b/slick/slick.js
new file mode 100644
index 0000000..5394604
--- /dev/null
+++ b/slick/slick.js
@@ -0,0 +1,2892 @@
1/*
2 _ _ _ _
3 ___| (_) ___| | __ (_)___
4/ __| | |/ __| |/ / | / __|
5\__ \ | | (__| < _ | \__ \
6|___/_|_|\___|_|\_(_)/ |___/
7 |__/
8
9 Version: 1.6.0
10 Author: Ken Wheeler
11 Website: http://kenwheeler.github.io
12 Docs: http://kenwheeler.github.io/slick
13 Repo: http://github.com/kenwheeler/slick
14 Issues: http://github.com/kenwheeler/slick/issues
15
16 */
17/* global window, document, define, jQuery, setInterval, clearInterval */
18(function(factory) {
19 'use strict';
20 if (typeof define === 'function' && define.amd) {
21 define(['jquery'], factory);
22 } else if (typeof exports !== 'undefined') {
23 module.exports = factory(require('jquery'));
24 } else {
25 factory(jQuery);
26 }
27
28}(function($) {
29 'use strict';
30 var Slick = window.Slick || {};
31
32 Slick = (function() {
33
34 var instanceUid = 0;
35
36 function Slick(element, settings) {
37
38 var _ = this, dataSettings;
39
40 _.defaults = {
41 accessibility: true,
42 adaptiveHeight: false,
43 appendArrows: $(element),
44 appendDots: $(element),
45 arrows: true,
46 asNavFor: null,
47 prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',
48 nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',
49 autoplay: false,
50 autoplaySpeed: 3000,
51 centerMode: false,
52 centerPadding: '50px',
53 cssEase: 'ease',
54 customPaging: function(slider, i) {
55 return $('<button type="button" data-role="none" role="button" tabindex="0" />').text(i + 1);
56 },
57 dots: false,
58 dotsClass: 'slick-dots',
59 draggable: true,
60 easing: 'linear',
61 edgeFriction: 0.35,
62 fade: false,
63 focusOnSelect: false,
64 infinite: true,
65 initialSlide: 0,
66 lazyLoad: 'ondemand',
67 mobileFirst: false,
68 pauseOnHover: true,
69 pauseOnFocus: true,
70 pauseOnDotsHover: false,
71 respondTo: 'window',
72 responsive: null,
73 rows: 1,
74 rtl: false,
75 slide: '',
76 slidesPerRow: 1,
77 slidesToShow: 1,
78 slidesToScroll: 1,
79 speed: 500,
80 swipe: true,
81 swipeToSlide: false,
82 touchMove: true,
83 touchThreshold: 5,
84 useCSS: true,
85 useTransform: true,
86 variableWidth: false,
87 vertical: false,
88 verticalSwiping: false,
89 waitForAnimate: true,
90 zIndex: 1000
91 };
92
93 _.initials = {
94 animating: false,
95 dragging: false,
96 autoPlayTimer: null,
97 currentDirection: 0,
98 currentLeft: null,
99 currentSlide: 0,
100 direction: 1,
101 $dots: null,
102 listWidth: null,
103 listHeight: null,
104 loadIndex: 0,
105 $nextArrow: null,
106 $prevArrow: null,
107 slideCount: null,
108 slideWidth: null,
109 $slideTrack: null,
110 $slides: null,
111 sliding: false,
112 slideOffset: 0,
113 swipeLeft: null,
114 $list: null,
115 touchObject: {},
116 transformsEnabled: false,
117 unslicked: false
118 };
119
120 $.extend(_, _.initials);
121
122 _.activeBreakpoint = null;
123 _.animType = null;
124 _.animProp = null;
125 _.breakpoints = [];
126 _.breakpointSettings = [];
127 _.cssTransitions = false;
128 _.focussed = false;
129 _.interrupted = false;
130 _.hidden = 'hidden';
131 _.paused = true;
132 _.positionProp = null;
133 _.respondTo = null;
134 _.rowCount = 1;
135 _.shouldClick = true;
136 _.$slider = $(element);
137 _.$slidesCache = null;
138 _.transformType = null;
139 _.transitionType = null;
140 _.visibilityChange = 'visibilitychange';
141 _.windowWidth = 0;
142 _.windowTimer = null;
143
144 dataSettings = $(element).data('slick') || {};
145
146 _.options = $.extend({}, _.defaults, settings, dataSettings);
147
148 _.currentSlide = _.options.initialSlide;
149
150 _.originalSettings = _.options;
151
152 if (typeof document.mozHidden !== 'undefined') {
153 _.hidden = 'mozHidden';
154 _.visibilityChange = 'mozvisibilitychange';
155 } else if (typeof document.webkitHidden !== 'undefined') {
156 _.hidden = 'webkitHidden';
157 _.visibilityChange = 'webkitvisibilitychange';
158 }
159
160 _.autoPlay = $.proxy(_.autoPlay, _);
161 _.autoPlayClear = $.proxy(_.autoPlayClear, _);
162 _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
163 _.changeSlide = $.proxy(_.changeSlide, _);
164 _.clickHandler = $.proxy(_.clickHandler, _);
165 _.selectHandler = $.proxy(_.selectHandler, _);
166 _.setPosition = $.proxy(_.setPosition, _);
167 _.swipeHandler = $.proxy(_.swipeHandler, _);
168 _.dragHandler = $.proxy(_.dragHandler, _);
169 _.keyHandler = $.proxy(_.keyHandler, _);
170
171 _.instanceUid = instanceUid++;
172
173 // A simple way to check for HTML strings
174 // Strict HTML recognition (must start with <)
175 // Extracted from jQuery v1.11 source
176 _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
177
178
179 _.registerBreakpoints();
180 _.init(true);
181
182 }
183
184 return Slick;
185
186 }());
187
188 Slick.prototype.activateADA = function() {
189 var _ = this;
190
191 _.$slideTrack.find('.slick-active').attr({
192 'aria-hidden': 'false'
193 }).find('a, input, button, select').attr({
194 'tabindex': '0'
195 });
196
197 };
198
199 Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
200
201 var _ = this;
202
203 if (typeof(index) === 'boolean') {
204 addBefore = index;
205 index = null;
206 } else if (index < 0 || (index >= _.slideCount)) {
207 return false;
208 }
209
210 _.unload();
211
212 if (typeof(index) === 'number') {
213 if (index === 0 && _.$slides.length === 0) {
214 $(markup).appendTo(_.$slideTrack);
215 } else if (addBefore) {
216 $(markup).insertBefore(_.$slides.eq(index));
217 } else {
218 $(markup).insertAfter(_.$slides.eq(index));
219 }
220 } else {
221 if (addBefore === true) {
222 $(markup).prependTo(_.$slideTrack);
223 } else {
224 $(markup).appendTo(_.$slideTrack);
225 }
226 }
227
228 _.$slides = _.$slideTrack.children(this.options.slide);
229
230 _.$slideTrack.children(this.options.slide).detach();
231
232 _.$slideTrack.append(_.$slides);
233
234 _.$slides.each(function(index, element) {
235 $(element).attr('data-slick-index', index);
236 });
237
238 _.$slidesCache = _.$slides;
239
240 _.reinit();
241
242 };
243
244 Slick.prototype.animateHeight = function() {
245 var _ = this;
246 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
247 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
248 _.$list.animate({
249 height: targetHeight
250 }, _.options.speed);
251 }
252 };
253
254 Slick.prototype.animateSlide = function(targetLeft, callback) {
255
256 var animProps = {},
257 _ = this;
258
259 _.animateHeight();
260
261 if (_.options.rtl === true && _.options.vertical === false) {
262 targetLeft = -targetLeft;
263 }
264 if (_.transformsEnabled === false) {
265 if (_.options.vertical === false) {
266 _.$slideTrack.animate({
267 left: targetLeft
268 }, _.options.speed, _.options.easing, callback);
269 } else {
270 _.$slideTrack.animate({
271 top: targetLeft
272 }, _.options.speed, _.options.easing, callback);
273 }
274
275 } else {
276
277 if (_.cssTransitions === false) {
278 if (_.options.rtl === true) {
279 _.currentLeft = -(_.currentLeft);
280 }
281 $({
282 animStart: _.currentLeft
283 }).animate({
284 animStart: targetLeft
285 }, {
286 duration: _.options.speed,
287 easing: _.options.easing,
288 step: function(now) {
289 now = Math.ceil(now);
290 if (_.options.vertical === false) {
291 animProps[_.animType] = 'translate(' +
292 now + 'px, 0px)';
293 _.$slideTrack.css(animProps);
294 } else {
295 animProps[_.animType] = 'translate(0px,' +
296 now + 'px)';
297 _.$slideTrack.css(animProps);
298 }
299 },
300 complete: function() {
301 if (callback) {
302 callback.call();
303 }
304 }
305 });
306
307 } else {
308
309 _.applyTransition();
310 targetLeft = Math.ceil(targetLeft);
311
312 if (_.options.vertical === false) {
313 animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
314 } else {
315 animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
316 }
317 _.$slideTrack.css(animProps);
318
319 if (callback) {
320 setTimeout(function() {
321
322 _.disableTransition();
323
324 callback.call();
325 }, _.options.speed);
326 }
327
328 }
329
330 }
331
332 };
333
334 Slick.prototype.getNavTarget = function() {
335
336 var _ = this,
337 asNavFor = _.options.asNavFor;
338
339 if ( asNavFor && asNavFor !== null ) {
340 asNavFor = $(asNavFor).not(_.$slider);
341 }
342
343 return asNavFor;
344
345 };
346
347 Slick.prototype.asNavFor = function(index) {
348
349 var _ = this,
350 asNavFor = _.getNavTarget();
351
352 if ( asNavFor !== null && typeof asNavFor === 'object' ) {
353 asNavFor.each(function() {
354 var target = $(this).slick('getSlick');
355 if(!target.unslicked) {
356 target.slideHandler(index, true);
357 }
358 });
359 }
360
361 };
362
363 Slick.prototype.applyTransition = function(slide) {
364
365 var _ = this,
366 transition = {};
367
368 if (_.options.fade === false) {
369 transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
370 } else {
371 transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
372 }
373
374 if (_.options.fade === false) {
375 _.$slideTrack.css(transition);
376 } else {
377 _.$slides.eq(slide).css(transition);
378 }
379
380 };
381
382 Slick.prototype.autoPlay = function() {
383
384 var _ = this;
385
386 _.autoPlayClear();
387
388 if ( _.slideCount > _.options.slidesToShow ) {
389 _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
390 }
391
392 };
393
394 Slick.prototype.autoPlayClear = function() {
395
396 var _ = this;
397
398 if (_.autoPlayTimer) {
399 clearInterval(_.autoPlayTimer);
400 }
401
402 };
403
404 Slick.prototype.autoPlayIterator = function() {
405
406 var _ = this,
407 slideTo = _.currentSlide + _.options.slidesToScroll;
408
409 if ( !_.paused && !_.interrupted && !_.focussed ) {
410
411 if ( _.options.infinite === false ) {
412
413 if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
414 _.direction = 0;
415 }
416
417 else if ( _.direction === 0 ) {
418
419 slideTo = _.currentSlide - _.options.slidesToScroll;
420
421 if ( _.currentSlide - 1 === 0 ) {
422 _.direction = 1;
423 }
424
425 }
426
427 }
428
429 _.slideHandler( slideTo );
430
431 }
432
433 };
434
435 Slick.prototype.buildArrows = function() {
436
437 var _ = this;
438
439 if (_.options.arrows === true ) {
440
441 _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
442 _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
443
444 if( _.slideCount > _.options.slidesToShow ) {
445
446 _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
447 _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
448
449 if (_.htmlExpr.test(_.options.prevArrow)) {
450 _.$prevArrow.prependTo(_.options.appendArrows);
451 }
452
453 if (_.htmlExpr.test(_.options.nextArrow)) {
454 _.$nextArrow.appendTo(_.options.appendArrows);
455 }
456
457 if (_.options.infinite !== true) {
458 _.$prevArrow
459 .addClass('slick-disabled')
460 .attr('aria-disabled', 'true');
461 }
462
463 } else {
464
465 _.$prevArrow.add( _.$nextArrow )
466
467 .addClass('slick-hidden')
468 .attr({
469 'aria-disabled': 'true',
470 'tabindex': '-1'
471 });
472
473 }
474
475 }
476
477 };
478
479 Slick.prototype.buildDots = function() {
480
481 var _ = this,
482 i, dot;
483
484 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
485
486 _.$slider.addClass('slick-dotted');
487
488 dot = $('<ul />').addClass(_.options.dotsClass);
489
490 for (i = 0; i <= _.getDotCount(); i += 1) {
491 dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
492 }
493
494 _.$dots = dot.appendTo(_.options.appendDots);
495
496 _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');
497
498 }
499
500 };
501
502 Slick.prototype.buildOut = function() {
503
504 var _ = this;
505
506 _.$slides =
507 _.$slider
508 .children( _.options.slide + ':not(.slick-cloned)')
509 .addClass('slick-slide');
510
511 _.slideCount = _.$slides.length;
512
513 _.$slides.each(function(index, element) {
514 $(element)
515 .attr('data-slick-index', index)
516 .data('originalStyling', $(element).attr('style') || '');
517 });
518
519 _.$slider.addClass('slick-slider');
520
521 _.$slideTrack = (_.slideCount === 0) ?
522 $('<div class="slick-track"/>').appendTo(_.$slider) :
523 _.$slides.wrapAll('<div class="slick-track"/>').parent();
524
525 _.$list = _.$slideTrack.wrap(
526 '<div aria-live="polite" class="slick-list"/>').parent();
527 _.$slideTrack.css('opacity', 0);
528
529 if (_.options.centerMode === true || _.options.swipeToSlide === true) {
530 _.options.slidesToScroll = 1;
531 }
532
533 $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
534
535 _.setupInfinite();
536
537 _.buildArrows();
538
539 _.buildDots();
540
541 _.updateDots();
542
543
544 _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
545
546 if (_.options.draggable === true) {
547 _.$list.addClass('draggable');
548 }
549
550 };
551
552 Slick.prototype.buildRows = function() {
553
554 var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
555
556 newSlides = document.createDocumentFragment();
557 originalSlides = _.$slider.children();
558
559 if(_.options.rows > 1) {
560
561 slidesPerSection = _.options.slidesPerRow * _.options.rows;
562 numOfSlides = Math.ceil(
563 originalSlides.length / slidesPerSection
564 );
565
566 for(a = 0; a < numOfSlides; a++){
567 var slide = document.createElement('div');
568 for(b = 0; b < _.options.rows; b++) {
569 var row = document.createElement('div');
570 for(c = 0; c < _.options.slidesPerRow; c++) {
571 var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
572 if (originalSlides.get(target)) {
573 row.appendChild(originalSlides.get(target));
574 }
575 }
576 slide.appendChild(row);
577 }
578 newSlides.appendChild(slide);
579 }
580
581 _.$slider.empty().append(newSlides);
582 _.$slider.children().children().children()
583 .css({
584 'width':(100 / _.options.slidesPerRow) + '%',
585 'display': 'inline-block'
586 });
587
588 }
589
590 };
591
592 Slick.prototype.checkResponsive = function(initial, forceUpdate) {
593
594 var _ = this,
595 breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
596 var sliderWidth = _.$slider.width();
597 var windowWidth = window.innerWidth || $(window).width();
598
599 if (_.respondTo === 'window') {
600 respondToWidth = windowWidth;
601 } else if (_.respondTo === 'slider') {
602 respondToWidth = sliderWidth;
603 } else if (_.respondTo === 'min') {
604 respondToWidth = Math.min(windowWidth, sliderWidth);
605 }
606
607 if ( _.options.responsive &&
608 _.options.responsive.length &&
609 _.options.responsive !== null) {
610
611 targetBreakpoint = null;
612
613 for (breakpoint in _.breakpoints) {
614 if (_.breakpoints.hasOwnProperty(breakpoint)) {
615 if (_.originalSettings.mobileFirst === false) {
616 if (respondToWidth < _.breakpoints[breakpoint]) {
617 targetBreakpoint = _.breakpoints[breakpoint];
618 }
619 } else {
620 if (respondToWidth > _.breakpoints[breakpoint]) {
621 targetBreakpoint = _.breakpoints[breakpoint];
622 }
623 }
624 }
625 }
626
627 if (targetBreakpoint !== null) {
628 if (_.activeBreakpoint !== null) {
629 if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
630 _.activeBreakpoint =
631 targetBreakpoint;
632 if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
633 _.unslick(targetBreakpoint);
634 } else {
635 _.options = $.extend({}, _.originalSettings,
636 _.breakpointSettings[
637 targetBreakpoint]);
638 if (initial === true) {
639 _.currentSlide = _.options.initialSlide;
640 }
641 _.refresh(initial);
642 }
643 triggerBreakpoint = targetBreakpoint;
644 }
645 } else {
646 _.activeBreakpoint = targetBreakpoint;
647 if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
648 _.unslick(targetBreakpoint);
649 } else {
650 _.options = $.extend({}, _.originalSettings,
651 _.breakpointSettings[
652 targetBreakpoint]);
653 if (initial === true) {
654 _.currentSlide = _.options.initialSlide;
655 }
656 _.refresh(initial);
657 }
658 triggerBreakpoint = targetBreakpoint;
659 }
660 } else {
661 if (_.activeBreakpoint !== null) {
662 _.activeBreakpoint = null;
663 _.options = _.originalSettings;
664 if (initial === true) {
665 _.currentSlide = _.options.initialSlide;
666 }
667 _.refresh(initial);
668 triggerBreakpoint = targetBreakpoint;
669 }
670 }
671
672 // only trigger breakpoints during an actual break. not on initialize.
673 if( !initial && triggerBreakpoint !== false ) {
674 _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
675 }
676 }
677
678 };
679
680 Slick.prototype.changeSlide = function(event, dontAnimate) {
681
682 var _ = this,
683 $target = $(event.currentTarget),
684 indexOffset, slideOffset, unevenOffset;
685
686 // If target is a link, prevent default action.
687 if($target.is('a')) {
688 event.preventDefault();
689 }
690
691 // If target is not the <li> element (ie: a child), find the <li>.
692 if(!$target.is('li')) {
693 $target = $target.closest('li');
694 }
695
696 unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
697 indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
698
699 switch (event.data.message) {
700
701 case 'previous':
702 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
703 if (_.slideCount > _.options.slidesToShow) {
704 _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
705 }
706 break;
707
708 case 'next':
709 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
710 if (_.slideCount > _.options.slidesToShow) {
711 _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
712 }
713 break;
714
715 case 'index':
716 var index = event.data.index === 0 ? 0 :
717 event.data.index || $target.index() * _.options.slidesToScroll;
718
719 _.slideHandler(_.checkNavigable(index), false, dontAnimate);
720 $target.children().trigger('focus');
721 break;
722
723 default:
724 return;
725 }
726
727 };
728
729 Slick.prototype.checkNavigable = function(index) {
730
731 var _ = this,
732 navigables, prevNavigable;
733
734 navigables = _.getNavigableIndexes();
735 prevNavigable = 0;
736 if (index > navigables[navigables.length - 1]) {
737 index = navigables[navigables.length - 1];
738 } else {
739 for (var n in navigables) {
740 if (index < navigables[n]) {
741 index = prevNavigable;
742 break;
743 }
744 prevNavigable = navigables[n];
745 }
746 }
747
748 return index;
749 };
750
751 Slick.prototype.cleanUpEvents = function() {
752
753 var _ = this;
754
755 if (_.options.dots && _.$dots !== null) {
756
757 $('li', _.$dots)
758 .off('click.slick', _.changeSlide)
759 .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
760 .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
761
762 }
763
764 _.$slider.off('focus.slick blur.slick');
765
766 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
767 _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
768 _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
769 }
770
771 _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
772 _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
773 _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
774 _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
775
776 _.$list.off('click.slick', _.clickHandler);
777
778 $(document).off(_.visibilityChange, _.visibility);
779
780 _.cleanUpSlideEvents();
781
782 if (_.options.accessibility === true) {
783 _.$list.off('keydown.slick', _.keyHandler);
784 }
785
786 if (_.options.focusOnSelect === true) {
787 $(_.$slideTrack).children().off('click.slick', _.selectHandler);
788 }
789
790 $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
791
792 $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
793
794 $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
795
796 $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
797 $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);
798
799 };
800
801 Slick.prototype.cleanUpSlideEvents = function() {
802
803 var _ = this;
804
805 _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
806 _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
807
808 };
809
810 Slick.prototype.cleanUpRows = function() {
811
812 var _ = this, originalSlides;
813
814 if(_.options.rows > 1) {
815 originalSlides = _.$slides.children().children();
816 originalSlides.removeAttr('style');
817 _.$slider.empty().append(originalSlides);
818 }
819
820 };
821
822 Slick.prototype.clickHandler = function(event) {
823
824 var _ = this;
825
826 if (_.shouldClick === false) {
827 event.stopImmediatePropagation();
828 event.stopPropagation();
829 event.preventDefault();
830 }
831
832 };
833
834 Slick.prototype.destroy = function(refresh) {
835
836 var _ = this;
837
838 _.autoPlayClear();
839
840 _.touchObject = {};
841
842 _.cleanUpEvents();
843
844 $('.slick-cloned', _.$slider).detach();
845
846 if (_.$dots) {
847 _.$dots.remove();
848 }
849
850
851 if ( _.$prevArrow && _.$prevArrow.length ) {
852
853 _.$prevArrow
854 .removeClass('slick-disabled slick-arrow slick-hidden')
855 .removeAttr('aria-hidden aria-disabled tabindex')
856 .css('display','');
857
858 if ( _.htmlExpr.test( _.options.prevArrow )) {
859 _.$prevArrow.remove();
860 }
861 }
862
863 if ( _.$nextArrow && _.$nextArrow.length ) {
864
865 _.$nextArrow
866 .removeClass('slick-disabled slick-arrow slick-hidden')
867 .removeAttr('aria-hidden aria-disabled tabindex')
868 .css('display','');
869
870 if ( _.htmlExpr.test( _.options.nextArrow )) {
871 _.$nextArrow.remove();
872 }
873
874 }
875
876
877 if (_.$slides) {
878
879 _.$slides
880 .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
881 .removeAttr('aria-hidden')
882 .removeAttr('data-slick-index')
883 .each(function(){
884 $(this).attr('style', $(this).data('originalStyling'));
885 });
886
887 _.$slideTrack.children(this.options.slide).detach();
888
889 _.$slideTrack.detach();
890
891 _.$list.detach();
892
893 _.$slider.append(_.$slides);
894 }
895
896 _.cleanUpRows();
897
898 _.$slider.removeClass('slick-slider');
899 _.$slider.removeClass('slick-initialized');
900 _.$slider.removeClass('slick-dotted');
901
902 _.unslicked = true;
903
904 if(!refresh) {
905 _.$slider.trigger('destroy', [_]);
906 }
907
908 };
909
910 Slick.prototype.disableTransition = function(slide) {
911
912 var _ = this,
913 transition = {};
914
915 transition[_.transitionType] = '';
916
917 if (_.options.fade === false) {
918 _.$slideTrack.css(transition);
919 } else {
920 _.$slides.eq(slide).css(transition);
921 }
922
923 };
924
925 Slick.prototype.fadeSlide = function(slideIndex, callback) {
926
927 var _ = this;
928
929 if (_.cssTransitions === false) {
930
931 _.$slides.eq(slideIndex).css({
932 zIndex: _.options.zIndex
933 });
934
935 _.$slides.eq(slideIndex).animate({
936 opacity: 1
937 }, _.options.speed, _.options.easing, callback);
938
939 } else {
940
941 _.applyTransition(slideIndex);
942
943 _.$slides.eq(slideIndex).css({
944 opacity: 1,
945 zIndex: _.options.zIndex
946 });
947
948 if (callback) {
949 setTimeout(function() {
950
951 _.disableTransition(slideIndex);
952
953 callback.call();
954 }, _.options.speed);
955 }
956
957 }
958
959 };
960
961 Slick.prototype.fadeSlideOut = function(slideIndex) {
962
963 var _ = this;
964
965 if (_.cssTransitions === false) {
966
967 _.$slides.eq(slideIndex).animate({
968 opacity: 0,
969 zIndex: _.options.zIndex - 2
970 }, _.options.speed, _.options.easing);
971
972 } else {
973
974 _.applyTransition(slideIndex);
975
976 _.$slides.eq(slideIndex).css({
977 opacity: 0,
978 zIndex: _.options.zIndex - 2
979 });
980
981 }
982
983 };
984
985 Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
986
987 var _ = this;
988
989 if (filter !== null) {
990
991 _.$slidesCache = _.$slides;
992
993 _.unload();
994
995 _.$slideTrack.children(this.options.slide).detach();
996
997 _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
998
999 _.reinit();
1000
1001 }
1002
1003 };
1004
1005 Slick.prototype.focusHandler = function() {
1006
1007 var _ = this;
1008
1009 _.$slider
1010 .off('focus.slick blur.slick')
1011 .on('focus.slick blur.slick',
1012 '*:not(.slick-arrow)', function(event) {
1013
1014 event.stopImmediatePropagation();
1015 var $sf = $(this);
1016
1017 setTimeout(function() {
1018
1019 if( _.options.pauseOnFocus ) {
1020 _.focussed = $sf.is(':focus');
1021 _.autoPlay();
1022 }
1023
1024 }, 0);
1025
1026 });
1027 };
1028
1029 Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1030
1031 var _ = this;
1032 return _.currentSlide;
1033
1034 };
1035
1036 Slick.prototype.getDotCount = function() {
1037
1038 var _ = this;
1039
1040 var breakPoint = 0;
1041 var counter = 0;
1042 var pagerQty = 0;
1043
1044 if (_.options.infinite === true) {
1045 while (breakPoint < _.slideCount) {
1046 ++pagerQty;
1047 breakPoint = counter + _.options.slidesToScroll;
1048 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1049 }
1050 } else if (_.options.centerMode === true) {
1051 pagerQty = _.slideCount;
1052 } else if(!_.options.asNavFor) {
1053 pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1054 }else {
1055 while (breakPoint < _.slideCount) {
1056 ++pagerQty;
1057 breakPoint = counter + _.options.slidesToScroll;
1058 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1059 }
1060 }
1061
1062 return pagerQty - 1;
1063
1064 };
1065
1066 Slick.prototype.getLeft = function(slideIndex) {
1067
1068 var _ = this,
1069 targetLeft,
1070 verticalHeight,
1071 verticalOffset = 0,
1072 targetSlide;
1073
1074 _.slideOffset = 0;
1075 verticalHeight = _.$slides.first().outerHeight(true);
1076
1077 if (_.options.infinite === true) {
1078 if (_.slideCount > _.options.slidesToShow) {
1079 _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1080 verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;
1081 }
1082 if (_.slideCount % _.options.slidesToScroll !== 0) {
1083 if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1084 if (slideIndex > _.slideCount) {
1085 _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
1086 verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1087 } else {
1088 _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1089 verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1090 }
1091 }
1092 }
1093 } else {
1094 if (slideIndex + _.options.slidesToShow > _.slideCount) {
1095 _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1096 verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1097 }
1098 }
1099
1100 if (_.slideCount <= _.options.slidesToShow) {
1101 _.slideOffset = 0;
1102 verticalOffset = 0;
1103 }
1104
1105 if (_.options.centerMode === true && _.options.infinite === true) {
1106 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1107 } else if (_.options.centerMode === true) {
1108 _.slideOffset = 0;
1109 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1110 }
1111
1112 if (_.options.vertical === false) {
1113 targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1114 } else {
1115 targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1116 }
1117
1118 if (_.options.variableWidth === true) {
1119
1120 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1121 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1122 } else {
1123 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1124 }
1125
1126 if (_.options.rtl === true) {
1127 if (targetSlide[0]) {
1128 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1129 } else {
1130 targetLeft = 0;
1131 }
1132 } else {
1133 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1134 }
1135
1136 if (_.options.centerMode === true) {
1137 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1138 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1139 } else {
1140 targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1141 }
1142
1143 if (_.options.rtl === true) {
1144 if (targetSlide[0]) {
1145 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1146 } else {
1147 targetLeft = 0;
1148 }
1149 } else {
1150 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1151 }
1152
1153 targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1154 }
1155 }
1156
1157 return targetLeft;
1158
1159 };
1160
1161 Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1162
1163 var _ = this;
1164
1165 return _.options[option];
1166
1167 };
1168
1169 Slick.prototype.getNavigableIndexes = function() {
1170
1171 var _ = this,
1172 breakPoint = 0,
1173 counter = 0,
1174 indexes = [],
1175 max;
1176
1177 if (_.options.infinite === false) {
1178 max = _.slideCount;
1179 } else {
1180 breakPoint = _.options.slidesToScroll * -1;
1181 counter = _.options.slidesToScroll * -1;
1182 max = _.slideCount * 2;
1183 }
1184
1185 while (breakPoint < max) {
1186 indexes.push(breakPoint);
1187 breakPoint = counter + _.options.slidesToScroll;
1188 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1189 }
1190
1191 return indexes;
1192
1193 };
1194
1195 Slick.prototype.getSlick = function() {
1196
1197 return this;
1198
1199 };
1200
1201 Slick.prototype.getSlideCount = function() {
1202
1203 var _ = this,
1204 slidesTraversed, swipedSlide, centerOffset;
1205
1206 centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
1207
1208 if (_.options.swipeToSlide === true) {
1209 _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1210 if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
1211 swipedSlide = slide;
1212 return false;
1213 }
1214 });
1215
1216 slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1217
1218 return slidesTraversed;
1219
1220 } else {
1221 return _.options.slidesToScroll;
1222 }
1223
1224 };
1225
1226 Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1227
1228 var _ = this;
1229
1230 _.changeSlide({
1231 data: {
1232 message: 'index',
1233 index: parseInt(slide)
1234 }
1235 }, dontAnimate);
1236
1237 };
1238
1239 Slick.prototype.init = function(creation) {
1240
1241 var _ = this;
1242
1243 if (!$(_.$slider).hasClass('slick-initialized')) {
1244
1245 $(_.$slider).addClass('slick-initialized');
1246
1247 _.buildRows();
1248 _.buildOut();
1249 _.setProps();
1250 _.startLoad();
1251 _.loadSlider();
1252 _.initializeEvents();
1253 _.updateArrows();
1254 _.updateDots();
1255 _.checkResponsive(true);
1256 _.focusHandler();
1257
1258 }
1259
1260 if (creation) {
1261 _.$slider.trigger('init', [_]);
1262 }
1263
1264 if (_.options.accessibility === true) {
1265 _.initADA();
1266 }
1267
1268 if ( _.options.autoplay ) {
1269
1270 _.paused = false;
1271 _.autoPlay();
1272
1273 }
1274
1275 };
1276
1277 Slick.prototype.initADA = function() {
1278 var _ = this;
1279 _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1280 'aria-hidden': 'true',
1281 'tabindex': '-1'
1282 }).find('a, input, button, select').attr({
1283 'tabindex': '-1'
1284 });
1285
1286 _.$slideTrack.attr('role', 'listbox');
1287
1288 _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1289 $(this).attr({
1290 'role': 'option',
1291 'aria-describedby': 'slick-slide' + _.instanceUid + i + ''
1292 });
1293 });
1294
1295 if (_.$dots !== null) {
1296 _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1297 $(this).attr({
1298 'role': 'presentation',
1299 'aria-selected': 'false',
1300 'aria-controls': 'navigation' + _.instanceUid + i + '',
1301 'id': 'slick-slide' + _.instanceUid + i + ''
1302 });
1303 })
1304 .first().attr('aria-selected', 'true').end()
1305 .find('button').attr('role', 'button').end()
1306 .closest('div').attr('role', 'toolbar');
1307 }
1308 _.activateADA();
1309
1310 };
1311
1312 Slick.prototype.initArrowEvents = function() {
1313
1314 var _ = this;
1315
1316 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1317 _.$prevArrow
1318 .off('click.slick')
1319 .on('click.slick', {
1320 message: 'previous'
1321 }, _.changeSlide);
1322 _.$nextArrow
1323 .off('click.slick')
1324 .on('click.slick', {
1325 message: 'next'
1326 }, _.changeSlide);
1327 }
1328
1329 };
1330
1331 Slick.prototype.initDotEvents = function() {
1332
1333 var _ = this;
1334
1335 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1336 $('li', _.$dots).on('click.slick', {
1337 message: 'index'
1338 }, _.changeSlide);
1339 }
1340
1341 if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
1342
1343 $('li', _.$dots)
1344 .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1345 .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1346
1347 }
1348
1349 };
1350
1351 Slick.prototype.initSlideEvents = function() {
1352
1353 var _ = this;
1354
1355 if ( _.options.pauseOnHover ) {
1356
1357 _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1358 _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1359
1360 }
1361
1362 };
1363
1364 Slick.prototype.initializeEvents = function() {
1365
1366 var _ = this;
1367
1368 _.initArrowEvents();
1369
1370 _.initDotEvents();
1371 _.initSlideEvents();
1372
1373 _.$list.on('touchstart.slick mousedown.slick', {
1374 action: 'start'
1375 }, _.swipeHandler);
1376 _.$list.on('touchmove.slick mousemove.slick', {
1377 action: 'move'
1378 }, _.swipeHandler);
1379 _.$list.on('touchend.slick mouseup.slick', {
1380 action: 'end'
1381 }, _.swipeHandler);
1382 _.$list.on('touchcancel.slick mouseleave.slick', {
1383 action: 'end'
1384 }, _.swipeHandler);
1385
1386 _.$list.on('click.slick', _.clickHandler);
1387
1388 $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1389
1390 if (_.options.accessibility === true) {
1391 _.$list.on('keydown.slick', _.keyHandler);
1392 }
1393
1394 if (_.options.focusOnSelect === true) {
1395 $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1396 }
1397
1398 $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1399
1400 $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1401
1402 $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1403
1404 $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1405 $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);
1406
1407 };
1408
1409 Slick.prototype.initUI = function() {
1410
1411 var _ = this;
1412
1413 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1414
1415 _.$prevArrow.show();
1416 _.$nextArrow.show();
1417
1418 }
1419
1420 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1421
1422 _.$dots.show();
1423
1424 }
1425
1426 };
1427
1428 Slick.prototype.keyHandler = function(event) {
1429
1430 var _ = this;
1431 //Dont slide if the cursor is inside the form fields and arrow keys are pressed
1432 if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1433 if (event.keyCode === 37 && _.options.accessibility === true) {
1434 _.changeSlide({
1435 data: {
1436 message: _.options.rtl === true ? 'next' : 'previous'
1437 }
1438 });
1439 } else if (event.keyCode === 39 && _.options.accessibility === true) {
1440 _.changeSlide({
1441 data: {
1442 message: _.options.rtl === true ? 'previous' : 'next'
1443 }
1444 });
1445 }
1446 }
1447
1448 };
1449
1450 Slick.prototype.lazyLoad = function() {
1451
1452 var _ = this,
1453 loadRange, cloneRange, rangeStart, rangeEnd;
1454
1455 function loadImages(imagesScope) {
1456
1457 $('img[data-lazy]', imagesScope).each(function() {
1458
1459 var image = $(this),
1460 imageSource = $(this).attr('data-lazy'),
1461 imageToLoad = document.createElement('img');
1462
1463 imageToLoad.onload = function() {
1464
1465 image
1466 .animate({ opacity: 0 }, 100, function() {
1467 image
1468 .attr('src', imageSource)
1469 .animate({ opacity: 1 }, 200, function() {
1470 image
1471 .removeAttr('data-lazy')
1472 .removeClass('slick-loading');
1473 });
1474 _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1475 });
1476
1477 };
1478
1479 imageToLoad.onerror = function() {
1480
1481 image
1482 .removeAttr( 'data-lazy' )
1483 .removeClass( 'slick-loading' )
1484 .addClass( 'slick-lazyload-error' );
1485
1486 _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1487
1488 };
1489
1490 imageToLoad.src = imageSource;
1491
1492 });
1493
1494 }
1495
1496 if (_.options.centerMode === true) {
1497 if (_.options.infinite === true) {
1498 rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1499 rangeEnd = rangeStart + _.options.slidesToShow + 2;
1500 } else {
1501 rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1502 rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1503 }
1504 } else {
1505 rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1506 rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1507 if (_.options.fade === true) {
1508 if (rangeStart > 0) rangeStart--;
1509 if (rangeEnd <= _.slideCount) rangeEnd++;
1510 }
1511 }
1512
1513 loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1514 loadImages(loadRange);
1515
1516 if (_.slideCount <= _.options.slidesToShow) {
1517 cloneRange = _.$slider.find('.slick-slide');
1518 loadImages(cloneRange);
1519 } else
1520 if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1521 cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1522 loadImages(cloneRange);
1523 } else if (_.currentSlide === 0) {
1524 cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1525 loadImages(cloneRange);
1526 }
1527
1528 };
1529
1530 Slick.prototype.loadSlider = function() {
1531
1532 var _ = this;
1533
1534 _.setPosition();
1535
1536 _.$slideTrack.css({
1537 opacity: 1
1538 });
1539
1540 _.$slider.removeClass('slick-loading');
1541
1542 _.initUI();
1543
1544 if (_.options.lazyLoad === 'progressive') {
1545 _.progressiveLazyLoad();
1546 }
1547
1548 };
1549
1550 Slick.prototype.next = Slick.prototype.slickNext = function() {
1551
1552 var _ = this;
1553
1554 _.changeSlide({
1555 data: {
1556 message: 'next'
1557 }
1558 });
1559
1560 };
1561
1562 Slick.prototype.orientationChange = function() {
1563
1564 var _ = this;
1565
1566 _.checkResponsive();
1567 _.setPosition();
1568
1569 };
1570
1571 Slick.prototype.pause = Slick.prototype.slickPause = function() {
1572
1573 var _ = this;
1574
1575 _.autoPlayClear();
1576 _.paused = true;
1577
1578 };
1579
1580 Slick.prototype.play = Slick.prototype.slickPlay = function() {
1581
1582 var _ = this;
1583
1584 _.autoPlay();
1585 _.options.autoplay = true;
1586 _.paused = false;
1587 _.focussed = false;
1588 _.interrupted = false;
1589
1590 };
1591
1592 Slick.prototype.postSlide = function(index) {
1593
1594 var _ = this;
1595
1596 if( !_.unslicked ) {
1597
1598 _.$slider.trigger('afterChange', [_, index]);
1599
1600 _.animating = false;
1601
1602 _.setPosition();
1603
1604 _.swipeLeft = null;
1605
1606 if ( _.options.autoplay ) {
1607 _.autoPlay();
1608 }
1609
1610 if (_.options.accessibility === true) {
1611 _.initADA();
1612 }
1613
1614 }
1615
1616 };
1617
1618 Slick.prototype.prev = Slick.prototype.slickPrev = function() {
1619
1620 var _ = this;
1621
1622 _.changeSlide({
1623 data: {
1624 message: 'previous'
1625 }
1626 });
1627
1628 };
1629
1630 Slick.prototype.preventDefault = function(event) {
1631
1632 event.preventDefault();
1633
1634 };
1635
1636 Slick.prototype.progressiveLazyLoad = function( tryCount ) {
1637
1638 tryCount = tryCount || 1;
1639
1640 var _ = this,
1641 $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
1642 image,
1643 imageSource,
1644 imageToLoad;
1645
1646 if ( $imgsToLoad.length ) {
1647
1648 image = $imgsToLoad.first();
1649 imageSource = image.attr('data-lazy');
1650 imageToLoad = document.createElement('img');
1651
1652 imageToLoad.onload = function() {
1653
1654 image
1655 .attr( 'src', imageSource )
1656 .removeAttr('data-lazy')
1657 .removeClass('slick-loading');
1658
1659 if ( _.options.adaptiveHeight === true ) {
1660 _.setPosition();
1661 }
1662
1663 _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
1664 _.progressiveLazyLoad();
1665
1666 };
1667
1668 imageToLoad.onerror = function() {
1669
1670 if ( tryCount < 3 ) {
1671
1672 /**
1673 * try to load the image 3 times,
1674 * leave a slight delay so we don't get
1675 * servers blocking the request.
1676 */
1677 setTimeout( function() {
1678 _.progressiveLazyLoad( tryCount + 1 );
1679 }, 500 );
1680
1681 } else {
1682
1683 image
1684 .removeAttr( 'data-lazy' )
1685 .removeClass( 'slick-loading' )
1686 .addClass( 'slick-lazyload-error' );
1687
1688 _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1689
1690 _.progressiveLazyLoad();
1691
1692 }
1693
1694 };
1695
1696 imageToLoad.src = imageSource;
1697
1698 } else {
1699
1700 _.$slider.trigger('allImagesLoaded', [ _ ]);
1701
1702 }
1703
1704 };
1705
1706 Slick.prototype.refresh = function( initializing ) {
1707
1708 var _ = this, currentSlide, lastVisibleIndex;
1709
1710 lastVisibleIndex = _.slideCount - _.options.slidesToShow;
1711
1712 // in non-infinite sliders, we don't want to go past the
1713 // last visible index.
1714 if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
1715 _.currentSlide = lastVisibleIndex;
1716 }
1717
1718 // if less slides than to show, go to start.
1719 if ( _.slideCount <= _.options.slidesToShow ) {
1720 _.currentSlide = 0;
1721
1722 }
1723
1724 currentSlide = _.currentSlide;
1725
1726 _.destroy(true);
1727
1728 $.extend(_, _.initials, { currentSlide: currentSlide });
1729
1730 _.init();
1731
1732 if( !initializing ) {
1733
1734 _.changeSlide({
1735 data: {
1736 message: 'index',
1737 index: currentSlide
1738 }
1739 }, false);
1740
1741 }
1742
1743 };
1744
1745 Slick.prototype.registerBreakpoints = function() {
1746
1747 var _ = this, breakpoint, currentBreakpoint, l,
1748 responsiveSettings = _.options.responsive || null;
1749
1750 if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
1751
1752 _.respondTo = _.options.respondTo || 'window';
1753
1754 for ( breakpoint in responsiveSettings ) {
1755
1756 l = _.breakpoints.length-1;
1757 currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
1758
1759 if (responsiveSettings.hasOwnProperty(breakpoint)) {
1760
1761 // loop through the breakpoints and cut out any existing
1762 // ones with the same breakpoint number, we don't want dupes.
1763 while( l >= 0 ) {
1764 if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
1765 _.breakpoints.splice(l,1);
1766 }
1767 l--;
1768 }
1769
1770 _.breakpoints.push(currentBreakpoint);
1771 _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
1772
1773 }
1774
1775 }
1776
1777 _.breakpoints.sort(function(a, b) {
1778 return ( _.options.mobileFirst ) ? a-b : b-a;
1779 });
1780
1781 }
1782
1783 };
1784
1785 Slick.prototype.reinit = function() {
1786
1787 var _ = this;
1788
1789 _.$slides =
1790 _.$slideTrack
1791 .children(_.options.slide)
1792 .addClass('slick-slide');
1793
1794 _.slideCount = _.$slides.length;
1795
1796 if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1797 _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1798 }
1799
1800 if (_.slideCount <= _.options.slidesToShow) {
1801 _.currentSlide = 0;
1802 }
1803
1804 _.registerBreakpoints();
1805
1806 _.setProps();
1807 _.setupInfinite();
1808 _.buildArrows();
1809 _.updateArrows();
1810 _.initArrowEvents();
1811 _.buildDots();
1812 _.updateDots();
1813 _.initDotEvents();
1814 _.cleanUpSlideEvents();
1815 _.initSlideEvents();
1816
1817 _.checkResponsive(false, true);
1818
1819 if (_.options.focusOnSelect === true) {
1820 $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1821 }
1822
1823 _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
1824
1825 _.setPosition();
1826 _.focusHandler();
1827
1828 _.paused = !_.options.autoplay;
1829 _.autoPlay();
1830
1831 _.$slider.trigger('reInit', [_]);
1832
1833 };
1834
1835 Slick.prototype.resize = function() {
1836
1837 var _ = this;
1838
1839 if ($(window).width() !== _.windowWidth) {
1840 clearTimeout(_.windowDelay);
1841 _.windowDelay = window.setTimeout(function() {
1842 _.windowWidth = $(window).width();
1843 _.checkResponsive();
1844 if( !_.unslicked ) { _.setPosition(); }
1845 }, 50);
1846 }
1847 };
1848
1849 Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
1850
1851 var _ = this;
1852
1853 if (typeof(index) === 'boolean') {
1854 removeBefore = index;
1855 index = removeBefore === true ? 0 : _.slideCount - 1;
1856 } else {
1857 index = removeBefore === true ? --index : index;
1858 }
1859
1860 if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
1861 return false;
1862 }
1863
1864 _.unload();
1865
1866 if (removeAll === true) {
1867 _.$slideTrack.children().remove();
1868 } else {
1869 _.$slideTrack.children(this.options.slide).eq(index).remove();
1870 }
1871
1872 _.$slides = _.$slideTrack.children(this.options.slide);
1873
1874 _.$slideTrack.children(this.options.slide).detach();
1875
1876 _.$slideTrack.append(_.$slides);
1877
1878 _.$slidesCache = _.$slides;
1879
1880 _.reinit();
1881
1882 };
1883
1884 Slick.prototype.setCSS = function(position) {
1885
1886 var _ = this,
1887 positionProps = {},
1888 x, y;
1889
1890 if (_.options.rtl === true) {
1891 position = -position;
1892 }
1893 x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
1894 y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
1895
1896 positionProps[_.positionProp] = position;
1897
1898 if (_.transformsEnabled === false) {
1899 _.$slideTrack.css(positionProps);
1900 } else {
1901 positionProps = {};
1902 if (_.cssTransitions === false) {
1903 positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
1904 _.$slideTrack.css(positionProps);
1905 } else {
1906 positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
1907 _.$slideTrack.css(positionProps);
1908 }
1909 }
1910
1911 };
1912
1913 Slick.prototype.setDimensions = function() {
1914
1915 var _ = this;
1916
1917 if (_.options.vertical === false) {
1918 if (_.options.centerMode === true) {
1919 _.$list.css({
1920 padding: ('0px ' + _.options.centerPadding)
1921 });
1922 }
1923 } else {
1924 _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
1925 if (_.options.centerMode === true) {
1926 _.$list.css({
1927 padding: (_.options.centerPadding + ' 0px')
1928 });
1929 }
1930 }
1931
1932 _.listWidth = _.$list.width();
1933 _.listHeight = _.$list.height();
1934
1935
1936 if (_.options.vertical === false && _.options.variableWidth === false) {
1937 _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
1938 _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
1939
1940 } else if (_.options.variableWidth === true) {
1941 _.$slideTrack.width(5000 * _.slideCount);
1942 } else {
1943 _.slideWidth = Math.ceil(_.listWidth);
1944 _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
1945 }
1946
1947 var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
1948 if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
1949
1950 };
1951
1952 Slick.prototype.setFade = function() {
1953
1954 var _ = this,
1955 targetLeft;
1956
1957 _.$slides.each(function(index, element) {
1958 targetLeft = (_.slideWidth * index) * -1;
1959 if (_.options.rtl === true) {
1960 $(element).css({
1961 position: 'relative',
1962 right: targetLeft,
1963 top: 0,
1964 zIndex: _.options.zIndex - 2,
1965 opacity: 0
1966 });
1967 } else {
1968 $(element).css({
1969 position: 'relative',
1970 left: targetLeft,
1971 top: 0,
1972 zIndex: _.options.zIndex - 2,
1973 opacity: 0
1974 });
1975 }
1976 });
1977
1978 _.$slides.eq(_.currentSlide).css({
1979 zIndex: _.options.zIndex - 1,
1980 opacity: 1
1981 });
1982
1983 };
1984
1985 Slick.prototype.setHeight = function() {
1986
1987 var _ = this;
1988
1989 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
1990 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
1991 _.$list.css('height', targetHeight);
1992 }
1993
1994 };
1995
1996 Slick.prototype.setOption =
1997 Slick.prototype.slickSetOption = function() {
1998
1999 /**
2000 * accepts arguments in format of:
2001 *
2002 * - for changing a single option's value:
2003 * .slick("setOption", option, value, refresh )
2004 *
2005 * - for changing a set of responsive options:
2006 * .slick("setOption", 'responsive', [{}, ...], refresh )
2007 *
2008 * - for updating multiple values at once (not responsive)
2009 * .slick("setOption", { 'option': value, ... }, refresh )
2010 */
2011
2012 var _ = this, l, item, option, value, refresh = false, type;
2013
2014 if( $.type( arguments[0] ) === 'object' ) {
2015
2016 option = arguments[0];
2017 refresh = arguments[1];
2018 type = 'multiple';
2019
2020 } else if ( $.type( arguments[0] ) === 'string' ) {
2021
2022 option = arguments[0];
2023 value = arguments[1];
2024 refresh = arguments[2];
2025
2026 if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2027
2028 type = 'responsive';
2029
2030 } else if ( typeof arguments[1] !== 'undefined' ) {
2031
2032 type = 'single';
2033
2034 }
2035
2036 }
2037
2038 if ( type === 'single' ) {
2039
2040 _.options[option] = value;
2041
2042
2043 } else if ( type === 'multiple' ) {
2044
2045 $.each( option , function( opt, val ) {
2046
2047 _.options[opt] = val;
2048
2049 });
2050
2051
2052 } else if ( type === 'responsive' ) {
2053
2054 for ( item in value ) {
2055
2056 if( $.type( _.options.responsive ) !== 'array' ) {
2057
2058 _.options.responsive = [ value[item] ];
2059
2060 } else {
2061
2062 l = _.options.responsive.length-1;
2063
2064 // loop through the responsive object and splice out duplicates.
2065 while( l >= 0 ) {
2066
2067 if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2068
2069 _.options.responsive.splice(l,1);
2070
2071 }
2072
2073 l--;
2074
2075 }
2076
2077 _.options.responsive.push( value[item] );
2078
2079 }
2080
2081 }
2082
2083 }
2084
2085 if ( refresh ) {
2086
2087 _.unload();
2088 _.reinit();
2089
2090 }
2091
2092 };
2093
2094 Slick.prototype.setPosition = function() {
2095
2096 var _ = this;
2097
2098 _.setDimensions();
2099
2100 _.setHeight();
2101
2102 if (_.options.fade === false) {
2103 _.setCSS(_.getLeft(_.currentSlide));
2104 } else {
2105 _.setFade();
2106 }
2107
2108 _.$slider.trigger('setPosition', [_]);
2109
2110 };
2111
2112 Slick.prototype.setProps = function() {
2113
2114 var _ = this,
2115 bodyStyle = document.body.style;
2116
2117 _.positionProp = _.options.vertical === true ? 'top' : 'left';
2118
2119 if (_.positionProp === 'top') {
2120 _.$slider.addClass('slick-vertical');
2121 } else {
2122 _.$slider.removeClass('slick-vertical');
2123 }
2124
2125 if (bodyStyle.WebkitTransition !== undefined ||
2126 bodyStyle.MozTransition !== undefined ||
2127 bodyStyle.msTransition !== undefined) {
2128 if (_.options.useCSS === true) {
2129 _.cssTransitions = true;
2130 }
2131 }
2132
2133 if ( _.options.fade ) {
2134 if ( typeof _.options.zIndex === 'number' ) {
2135 if( _.options.zIndex < 3 ) {
2136 _.options.zIndex = 3;
2137 }
2138 } else {
2139 _.options.zIndex = _.defaults.zIndex;
2140 }
2141 }
2142
2143 if (bodyStyle.OTransform !== undefined) {
2144 _.animType = 'OTransform';
2145 _.transformType = '-o-transform';
2146 _.transitionType = 'OTransition';
2147 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2148 }
2149 if (bodyStyle.MozTransform !== undefined) {
2150 _.animType = 'MozTransform';
2151 _.transformType = '-moz-transform';
2152 _.transitionType = 'MozTransition';
2153 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2154 }
2155 if (bodyStyle.webkitTransform !== undefined) {
2156 _.animType = 'webkitTransform';
2157 _.transformType = '-webkit-transform';
2158 _.transitionType = 'webkitTransition';
2159 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2160 }
2161 if (bodyStyle.msTransform !== undefined) {
2162 _.animType = 'msTransform';
2163 _.transformType = '-ms-transform';
2164 _.transitionType = 'msTransition';
2165 if (bodyStyle.msTransform === undefined) _.animType = false;
2166 }
2167 if (bodyStyle.transform !== undefined && _.animType !== false) {
2168 _.animType = 'transform';
2169 _.transformType = 'transform';
2170 _.transitionType = 'transition';
2171 }
2172 _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2173 };
2174
2175
2176 Slick.prototype.setSlideClasses = function(index) {
2177
2178 var _ = this,
2179 centerOffset, allSlides, indexOffset, remainder;
2180
2181 allSlides = _.$slider
2182 .find('.slick-slide')
2183 .removeClass('slick-active slick-center slick-current')
2184 .attr('aria-hidden', 'true');
2185
2186 _.$slides
2187 .eq(index)
2188 .addClass('slick-current');
2189
2190 if (_.options.centerMode === true) {
2191
2192 centerOffset = Math.floor(_.options.slidesToShow / 2);
2193
2194 if (_.options.infinite === true) {
2195
2196 if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2197
2198 _.$slides
2199 .slice(index - centerOffset, index + centerOffset + 1)
2200 .addClass('slick-active')
2201 .attr('aria-hidden', 'false');
2202
2203 } else {
2204
2205 indexOffset = _.options.slidesToShow + index;
2206 allSlides
2207 .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)
2208 .addClass('slick-active')
2209 .attr('aria-hidden', 'false');
2210
2211 }
2212
2213 if (index === 0) {
2214
2215 allSlides
2216 .eq(allSlides.length - 1 - _.options.slidesToShow)
2217 .addClass('slick-center');
2218
2219 } else if (index === _.slideCount - 1) {
2220
2221 allSlides
2222 .eq(_.options.slidesToShow)
2223 .addClass('slick-center');
2224
2225 }
2226
2227 }
2228
2229 _.$slides
2230 .eq(index)
2231 .addClass('slick-center');
2232
2233 } else {
2234
2235 if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2236
2237 _.$slides
2238 .slice(index, index + _.options.slidesToShow)
2239 .addClass('slick-active')
2240 .attr('aria-hidden', 'false');
2241
2242 } else if (allSlides.length <= _.options.slidesToShow) {
2243
2244 allSlides
2245 .addClass('slick-active')
2246 .attr('aria-hidden', 'false');
2247
2248 } else {
2249
2250 remainder = _.slideCount % _.options.slidesToShow;
2251 indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2252
2253 if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2254
2255 allSlides
2256 .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2257 .addClass('slick-active')
2258 .attr('aria-hidden', 'false');
2259
2260 } else {
2261
2262 allSlides
2263 .slice(indexOffset, indexOffset + _.options.slidesToShow)
2264 .addClass('slick-active')
2265 .attr('aria-hidden', 'false');
2266
2267 }
2268
2269 }
2270
2271 }
2272
2273 if (_.options.lazyLoad === 'ondemand') {
2274 _.lazyLoad();
2275 }
2276
2277 };
2278
2279 Slick.prototype.setupInfinite = function() {
2280
2281 var _ = this,
2282 i, slideIndex, infiniteCount;
2283
2284 if (_.options.fade === true) {
2285 _.options.centerMode = false;
2286 }
2287
2288 if (_.options.infinite === true && _.options.fade === false) {
2289
2290 slideIndex = null;
2291
2292 if (_.slideCount > _.options.slidesToShow) {
2293
2294 if (_.options.centerMode === true) {
2295 infiniteCount = _.options.slidesToShow + 1;
2296 } else {
2297 infiniteCount = _.options.slidesToShow;
2298 }
2299
2300 for (i = _.slideCount; i > (_.slideCount -
2301 infiniteCount); i -= 1) {
2302 slideIndex = i - 1;
2303 $(_.$slides[slideIndex]).clone(true).attr('id', '')
2304 .attr('data-slick-index', slideIndex - _.slideCount)
2305 .prependTo(_.$slideTrack).addClass('slick-cloned');
2306 }
2307 for (i = 0; i < infiniteCount; i += 1) {
2308 slideIndex = i;
2309 $(_.$slides[slideIndex]).clone(true).attr('id', '')
2310 .attr('data-slick-index', slideIndex + _.slideCount)
2311 .appendTo(_.$slideTrack).addClass('slick-cloned');
2312 }
2313 _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2314 $(this).attr('id', '');
2315 });
2316
2317 }
2318
2319 }
2320
2321 };
2322
2323 Slick.prototype.interrupt = function( toggle ) {
2324
2325 var _ = this;
2326
2327 if( !toggle ) {
2328 _.autoPlay();
2329 }
2330 _.interrupted = toggle;
2331
2332 };
2333
2334 Slick.prototype.selectHandler = function(event) {
2335
2336 var _ = this;
2337
2338 var targetElement =
2339 $(event.target).is('.slick-slide') ?
2340 $(event.target) :
2341 $(event.target).parents('.slick-slide');
2342
2343 var index = parseInt(targetElement.attr('data-slick-index'));
2344
2345 if (!index) index = 0;
2346
2347 if (_.slideCount <= _.options.slidesToShow) {
2348
2349 _.setSlideClasses(index);
2350 _.asNavFor(index);
2351 return;
2352
2353 }
2354
2355 _.slideHandler(index);
2356
2357 };
2358
2359 Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2360
2361 var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2362 _ = this, navTarget;
2363
2364 sync = sync || false;
2365
2366 if (_.animating === true && _.options.waitForAnimate === true) {
2367 return;
2368 }
2369
2370 if (_.options.fade === true && _.currentSlide === index) {
2371 return;
2372 }
2373
2374 if (_.slideCount <= _.options.slidesToShow) {
2375 return;
2376 }
2377
2378 if (sync === false) {
2379 _.asNavFor(index);
2380 }
2381
2382 targetSlide = index;
2383 targetLeft = _.getLeft(targetSlide);
2384 slideLeft = _.getLeft(_.currentSlide);
2385
2386 _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2387
2388 if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2389 if (_.options.fade === false) {
2390 targetSlide = _.currentSlide;
2391 if (dontAnimate !== true) {
2392 _.animateSlide(slideLeft, function() {
2393 _.postSlide(targetSlide);
2394 });
2395 } else {
2396 _.postSlide(targetSlide);
2397 }
2398 }
2399 return;
2400 } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2401 if (_.options.fade === false) {
2402 targetSlide = _.currentSlide;
2403 if (dontAnimate !== true) {
2404 _.animateSlide(slideLeft, function() {
2405 _.postSlide(targetSlide);
2406 });
2407 } else {
2408 _.postSlide(targetSlide);
2409 }
2410 }
2411 return;
2412 }
2413
2414 if ( _.options.autoplay ) {
2415 clearInterval(_.autoPlayTimer);
2416 }
2417
2418 if (targetSlide < 0) {
2419 if (_.slideCount % _.options.slidesToScroll !== 0) {
2420 animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2421 } else {
2422 animSlide = _.slideCount + targetSlide;
2423 }
2424 } else if (targetSlide >= _.slideCount) {
2425 if (_.slideCount % _.options.slidesToScroll !== 0) {
2426 animSlide = 0;
2427 } else {
2428 animSlide = targetSlide - _.slideCount;
2429 }
2430 } else {
2431 animSlide = targetSlide;
2432 }
2433
2434 _.animating = true;
2435
2436 _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2437
2438 oldSlide = _.currentSlide;
2439 _.currentSlide = animSlide;
2440
2441 _.setSlideClasses(_.currentSlide);
2442
2443 if ( _.options.asNavFor ) {
2444
2445 navTarget = _.getNavTarget();
2446 navTarget = navTarget.slick('getSlick');
2447
2448 if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2449 navTarget.setSlideClasses(_.currentSlide);
2450 }
2451
2452 }
2453
2454 _.updateDots();
2455 _.updateArrows();
2456
2457 if (_.options.fade === true) {
2458 if (dontAnimate !== true) {
2459
2460 _.fadeSlideOut(oldSlide);
2461
2462 _.fadeSlide(animSlide, function() {
2463 _.postSlide(animSlide);
2464 });
2465
2466 } else {
2467 _.postSlide(animSlide);
2468 }
2469 _.animateHeight();
2470 return;
2471 }
2472
2473 if (dontAnimate !== true) {
2474 _.animateSlide(targetLeft, function() {
2475 _.postSlide(animSlide);
2476 });
2477 } else {
2478 _.postSlide(animSlide);
2479 }
2480
2481 };
2482
2483 Slick.prototype.startLoad = function() {
2484
2485 var _ = this;
2486
2487 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2488
2489 _.$prevArrow.hide();
2490 _.$nextArrow.hide();
2491
2492 }
2493
2494 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2495
2496 _.$dots.hide();
2497
2498 }
2499
2500 _.$slider.addClass('slick-loading');
2501
2502 };
2503
2504 Slick.prototype.swipeDirection = function() {
2505
2506 var xDist, yDist, r, swipeAngle, _ = this;
2507
2508 xDist = _.touchObject.startX - _.touchObject.curX;
2509 yDist = _.touchObject.startY - _.touchObject.curY;
2510 r = Math.atan2(yDist, xDist);
2511
2512 swipeAngle = Math.round(r * 180 / Math.PI);
2513 if (swipeAngle < 0) {
2514 swipeAngle = 360 - Math.abs(swipeAngle);
2515 }
2516
2517 if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2518 return (_.options.rtl === false ? 'left' : 'right');
2519 }
2520 if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2521 return (_.options.rtl === false ? 'left' : 'right');
2522 }
2523 if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2524 return (_.options.rtl === false ? 'right' : 'left');
2525 }
2526 if (_.options.verticalSwiping === true) {
2527 if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2528 return 'down';
2529 } else {
2530 return 'up';
2531 }
2532 }
2533
2534 return 'vertical';
2535
2536 };
2537
2538 Slick.prototype.swipeEnd = function(event) {
2539
2540 var _ = this,
2541 slideCount,
2542 direction;
2543
2544 _.dragging = false;
2545 _.interrupted = false;
2546 _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2547
2548 if ( _.touchObject.curX === undefined ) {
2549 return false;
2550 }
2551
2552 if ( _.touchObject.edgeHit === true ) {
2553 _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2554 }
2555
2556 if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2557
2558 direction = _.swipeDirection();
2559
2560 switch ( direction ) {
2561
2562 case 'left':
2563 case 'down':
2564
2565 slideCount =
2566 _.options.swipeToSlide ?
2567 _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2568 _.currentSlide + _.getSlideCount();
2569
2570 _.currentDirection = 0;
2571
2572 break;
2573
2574 case 'right':
2575 case 'up':
2576
2577 slideCount =
2578 _.options.swipeToSlide ?
2579 _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
2580 _.currentSlide - _.getSlideCount();
2581
2582 _.currentDirection = 1;
2583
2584 break;
2585
2586 default:
2587
2588
2589 }
2590
2591 if( direction != 'vertical' ) {
2592
2593 _.slideHandler( slideCount );
2594 _.touchObject = {};
2595 _.$slider.trigger('swipe', [_, direction ]);
2596
2597 }
2598
2599 } else {
2600
2601 if ( _.touchObject.startX !== _.touchObject.curX ) {
2602
2603 _.slideHandler( _.currentSlide );
2604 _.touchObject = {};
2605
2606 }
2607
2608 }
2609
2610 };
2611
2612 Slick.prototype.swipeHandler = function(event) {
2613
2614 var _ = this;
2615
2616 if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
2617 return;
2618 } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
2619 return;
2620 }
2621
2622 _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
2623 event.originalEvent.touches.length : 1;
2624
2625 _.touchObject.minSwipe = _.listWidth / _.options
2626 .touchThreshold;
2627
2628 if (_.options.verticalSwiping === true) {
2629 _.touchObject.minSwipe = _.listHeight / _.options
2630 .touchThreshold;
2631 }
2632
2633 switch (event.data.action) {
2634
2635 case 'start':
2636 _.swipeStart(event);
2637 break;
2638
2639 case 'move':
2640 _.swipeMove(event);
2641 break;
2642
2643 case 'end':
2644 _.swipeEnd(event);
2645 break;
2646
2647 }
2648
2649 };
2650
2651 Slick.prototype.swipeMove = function(event) {
2652
2653 var _ = this,
2654 edgeWasHit = false,
2655 curLeft, swipeDirection, swipeLength, positionOffset, touches;
2656
2657 touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
2658
2659 if (!_.dragging || touches && touches.length !== 1) {
2660 return false;
2661 }
2662
2663 curLeft = _.getLeft(_.currentSlide);
2664
2665 _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
2666 _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
2667
2668 _.touchObject.swipeLength = Math.round(Math.sqrt(
2669 Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
2670
2671 if (_.options.verticalSwiping === true) {
2672 _.touchObject.swipeLength = Math.round(Math.sqrt(
2673 Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
2674 }
2675
2676 swipeDirection = _.swipeDirection();
2677
2678 if (swipeDirection === 'vertical') {
2679 return;
2680 }
2681
2682 if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
2683 event.preventDefault();
2684 }
2685
2686 positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
2687 if (_.options.verticalSwiping === true) {
2688 positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
2689 }
2690
2691
2692 swipeLength = _.touchObject.swipeLength;
2693
2694 _.touchObject.edgeHit = false;
2695
2696 if (_.options.infinite === false) {
2697 if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
2698 swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
2699 _.touchObject.edgeHit = true;
2700 }
2701 }
2702
2703 if (_.options.vertical === false) {
2704 _.swipeLeft = curLeft + swipeLength * positionOffset;
2705 } else {
2706 _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
2707 }
2708 if (_.options.verticalSwiping === true) {
2709 _.swipeLeft = curLeft + swipeLength * positionOffset;
2710 }
2711
2712 if (_.options.fade === true || _.options.touchMove === false) {
2713 return false;
2714 }
2715
2716 if (_.animating === true) {
2717 _.swipeLeft = null;
2718 return false;
2719 }
2720
2721 _.setCSS(_.swipeLeft);
2722
2723 };
2724
2725 Slick.prototype.swipeStart = function(event) {
2726
2727 var _ = this,
2728 touches;
2729
2730 _.interrupted = true;
2731
2732 if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
2733 _.touchObject = {};
2734 return false;
2735 }
2736
2737 if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
2738 touches = event.originalEvent.touches[0];
2739 }
2740
2741 _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
2742 _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
2743
2744 _.dragging = true;
2745
2746 };
2747
2748 Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
2749
2750 var _ = this;
2751
2752 if (_.$slidesCache !== null) {
2753
2754 _.unload();
2755
2756 _.$slideTrack.children(this.options.slide).detach();
2757
2758 _.$slidesCache.appendTo(_.$slideTrack);
2759
2760 _.reinit();
2761
2762 }
2763
2764 };
2765
2766 Slick.prototype.unload = function() {
2767
2768 var _ = this;
2769
2770 $('.slick-cloned', _.$slider).remove();
2771
2772 if (_.$dots) {
2773 _.$dots.remove();
2774 }
2775
2776 if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
2777 _.$prevArrow.remove();
2778 }
2779
2780 if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
2781 _.$nextArrow.remove();
2782 }
2783
2784 _.$slides
2785 .removeClass('slick-slide slick-active slick-visible slick-current')
2786 .attr('aria-hidden', 'true')
2787 .css('width', '');
2788
2789 };
2790
2791 Slick.prototype.unslick = function(fromBreakpoint) {
2792
2793 var _ = this;
2794 _.$slider.trigger('unslick', [_, fromBreakpoint]);
2795 _.destroy();
2796
2797 };
2798
2799 Slick.prototype.updateArrows = function() {
2800
2801 var _ = this,
2802 centerOffset;
2803
2804 centerOffset = Math.floor(_.options.slidesToShow / 2);
2805
2806 if ( _.options.arrows === true &&
2807 _.slideCount > _.options.slidesToShow &&
2808 !_.options.infinite ) {
2809
2810 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2811 _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2812
2813 if (_.currentSlide === 0) {
2814
2815 _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2816 _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2817
2818 } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
2819
2820 _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2821 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2822
2823 } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
2824
2825 _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2826 _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2827
2828 }
2829
2830 }
2831
2832 };
2833
2834 Slick.prototype.updateDots = function() {
2835
2836 var _ = this;
2837
2838 if (_.$dots !== null) {
2839
2840 _.$dots
2841 .find('li')
2842 .removeClass('slick-active')
2843 .attr('aria-hidden', 'true');
2844
2845 _.$dots
2846 .find('li')
2847 .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
2848 .addClass('slick-active')
2849 .attr('aria-hidden', 'false');
2850
2851 }
2852
2853 };
2854
2855 Slick.prototype.visibility = function() {
2856
2857 var _ = this;
2858
2859 if ( _.options.autoplay ) {
2860
2861 if ( document[_.hidden] ) {
2862
2863 _.interrupted = true;
2864
2865 } else {
2866
2867 _.interrupted = false;
2868
2869 }
2870
2871 }
2872
2873 };
2874
2875 $.fn.slick = function() {
2876 var _ = this,
2877 opt = arguments[0],
2878 args = Array.prototype.slice.call(arguments, 1),
2879 l = _.length,
2880 i,
2881 ret;
2882 for (i = 0; i < l; i++) {
2883 if (typeof opt == 'object' || typeof opt == 'undefined')
2884 _[i].slick = new Slick(_[i], opt);
2885 else
2886 ret = _[i].slick[opt].apply(_[i].slick, args);
2887 if (typeof ret != 'undefined') return ret;
2888 }
2889 return _;
2890 };
2891
2892}));
diff --git a/slick/slick.less b/slick/slick.less
new file mode 100644
index 0000000..2fa0fb2
--- /dev/null
+++ b/slick/slick.less
@@ -0,0 +1,98 @@
1/* Slider */
2
3.slick-slider {
4 position: relative;
5 display: block;
6 box-sizing: border-box;
7 -webkit-touch-callout: none;
8 -webkit-user-select: none;
9 -khtml-user-select: none;
10 -moz-user-select: none;
11 -ms-user-select: none;
12 user-select: none;
13 -ms-touch-action: pan-y;
14 touch-action: pan-y;
15 -webkit-tap-highlight-color: transparent;
16}
17.slick-list {
18 position: relative;
19 overflow: hidden;
20 display: block;
21 margin: 0;
22 padding: 0;
23
24 &:focus {
25 outline: none;
26 }
27
28 &.dragging {
29 cursor: pointer;
30 cursor: hand;
31 }
32}
33.slick-slider .slick-track,
34.slick-slider .slick-list {
35 -webkit-transform: translate3d(0, 0, 0);
36 -moz-transform: translate3d(0, 0, 0);
37 -ms-transform: translate3d(0, 0, 0);
38 -o-transform: translate3d(0, 0, 0);
39 transform: translate3d(0, 0, 0);
40}
41
42.slick-track {
43 position: relative;
44 left: 0;
45 top: 0;
46 display: block;
47
48 &:before,
49 &:after {
50 content: "";
51 display: table;
52 }
53
54 &:after {
55 clear: both;
56 }
57
58 .slick-loading & {
59 visibility: hidden;
60 }
61}
62.slick-slide {
63 float: left;
64 height: 100%;
65 min-height: 1px;
66 [dir="rtl"] & {
67 float: right;
68 }
69 img {
70 display: block;
71 }
72 &.slick-loading img {
73 display: none;
74 }
75
76 display: none;
77
78 &.dragging img {
79 pointer-events: none;
80 }
81
82 .slick-initialized & {
83 display: block;
84 }
85
86 .slick-loading & {
87 visibility: hidden;
88 }
89
90 .slick-vertical & {
91 display: block;
92 height: auto;
93 border: 1px solid transparent;
94 }
95}
96.slick-arrow.slick-hidden {
97 display: none;
98}
diff --git a/slick/slick.min.js b/slick/slick.min.js
new file mode 100644
index 0000000..88a8a6b
--- /dev/null
+++ b/slick/slick.min.js
@@ -0,0 +1,18 @@
1/*
2 _ _ _ _
3 ___| (_) ___| | __ (_)___
4/ __| | |/ __| |/ / | / __|
5\__ \ | | (__| < _ | \__ \
6|___/_|_|\___|_|\_(_)/ |___/
7 |__/
8
9 Version: 1.6.0
10 Author: Ken Wheeler
11 Website: http://kenwheeler.github.io
12 Docs: http://kenwheeler.github.io/slick
13 Repo: http://github.com/kenwheeler/slick
14 Issues: http://github.com/kenwheeler/slick/issues
15
16 */
17!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
18d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}}); \ No newline at end of file
diff --git a/slick/slick.scss b/slick/slick.scss
new file mode 100644
index 0000000..2fa0fb2
--- /dev/null
+++ b/slick/slick.scss
@@ -0,0 +1,98 @@
1/* Slider */
2
3.slick-slider {
4 position: relative;
5 display: block;
6 box-sizing: border-box;
7 -webkit-touch-callout: none;
8 -webkit-user-select: none;
9 -khtml-user-select: none;
10 -moz-user-select: none;
11 -ms-user-select: none;
12 user-select: none;
13 -ms-touch-action: pan-y;
14 touch-action: pan-y;
15 -webkit-tap-highlight-color: transparent;
16}
17.slick-list {
18 position: relative;
19 overflow: hidden;
20 display: block;
21 margin: 0;
22 padding: 0;
23
24 &:focus {
25 outline: none;
26 }
27
28 &.dragging {
29 cursor: pointer;
30 cursor: hand;
31 }
32}
33.slick-slider .slick-track,
34.slick-slider .slick-list {
35 -webkit-transform: translate3d(0, 0, 0);
36 -moz-transform: translate3d(0, 0, 0);
37 -ms-transform: translate3d(0, 0, 0);
38 -o-transform: translate3d(0, 0, 0);
39 transform: translate3d(0, 0, 0);
40}
41
42.slick-track {
43 position: relative;
44 left: 0;
45 top: 0;
46 display: block;
47
48 &:before,
49 &:after {
50 content: "";
51 display: table;
52 }
53
54 &:after {
55 clear: both;
56 }
57
58 .slick-loading & {
59 visibility: hidden;
60 }
61}
62.slick-slide {
63 float: left;
64 height: 100%;
65 min-height: 1px;
66 [dir="rtl"] & {
67 float: right;
68 }
69 img {
70 display: block;
71 }
72 &.slick-loading img {
73 display: none;
74 }
75
76 display: none;
77
78 &.dragging img {
79 pointer-events: none;
80 }
81
82 .slick-initialized & {
83 display: block;
84 }
85
86 .slick-loading & {
87 visibility: hidden;
88 }
89
90 .slick-vertical & {
91 display: block;
92 height: auto;
93 border: 1px solid transparent;
94 }
95}
96.slick-arrow.slick-hidden {
97 display: none;
98}