medbenhasan commited on
Commit
271bc4f
1 Parent(s): 2160a6e

Upload 134 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +2 -0
  2. README.md +1 -12
  3. about.html +265 -0
  4. appointment.html +314 -0
  5. contact.html +296 -0
  6. css/bootstrap.min.css +0 -0
  7. css/style.css +325 -0
  8. img/about.png +3 -0
  9. img/after.jpeg +0 -0
  10. img/before.jpg +0 -0
  11. img/carousel-1.png +0 -0
  12. img/carousel-2.webp +0 -0
  13. img/price-1.jpg +0 -0
  14. img/price-2.jpg +0 -0
  15. img/price-3.jpg +0 -0
  16. img/service-1.png +3 -0
  17. img/service-2.png +0 -0
  18. img/service-3.jpg +0 -0
  19. img/service-4.jpg +0 -0
  20. img/team-1.jpg +0 -0
  21. index.html +464 -0
  22. js/main.js +121 -0
  23. lib/animate/animate.css +1579 -0
  24. lib/animate/animate.min.css +11 -0
  25. lib/easing/easing.js +168 -0
  26. lib/easing/easing.min.js +1 -0
  27. lib/owlcarousel/LICENSE +23 -0
  28. lib/owlcarousel/assets/ajax-loader.gif +0 -0
  29. lib/owlcarousel/assets/owl.carousel.css +170 -0
  30. lib/owlcarousel/assets/owl.carousel.min.css +6 -0
  31. lib/owlcarousel/assets/owl.theme.default.css +50 -0
  32. lib/owlcarousel/assets/owl.theme.default.min.css +6 -0
  33. lib/owlcarousel/assets/owl.theme.green.css +50 -0
  34. lib/owlcarousel/assets/owl.theme.green.min.css +6 -0
  35. lib/owlcarousel/assets/owl.video.play.png +0 -0
  36. lib/owlcarousel/owl.carousel.js +3275 -0
  37. lib/owlcarousel/owl.carousel.min.js +7 -0
  38. lib/tempusdominus/css/tempusdominus-bootstrap-4.css +206 -0
  39. lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css +206 -0
  40. lib/tempusdominus/js/moment-timezone.min.js +1 -0
  41. lib/tempusdominus/js/moment.min.js +0 -0
  42. lib/tempusdominus/js/tempusdominus-bootstrap-4.js +0 -0
  43. lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js +7 -0
  44. lib/twentytwenty/jquery.event.move.js +599 -0
  45. lib/twentytwenty/jquery.twentytwenty.js +151 -0
  46. lib/twentytwenty/twentytwenty.css +206 -0
  47. lib/waypoints/links.php +5 -0
  48. lib/waypoints/waypoints.min.js +7 -0
  49. lib/wow/wow.js +542 -0
  50. lib/wow/wow.min.js +3 -0
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ img/about.png filter=lfs diff=lfs merge=lfs -text
37
+ img/service-1.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,12 +1 @@
1
- ---
2
- title: BrainScanAI
3
- emoji: 🏆
4
- colorFrom: purple
5
- colorTo: purple
6
- sdk: gradio
7
- sdk_version: 4.44.0
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # BrainScanAI
 
 
 
 
 
 
 
 
 
 
 
about.html ADDED
@@ -0,0 +1,265 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>BrainScanAI</title>
7
+ <meta content="width=device-width, initial-scale=1.0" name="viewport">
8
+ <meta content="Free HTML Templates" name="keywords">
9
+ <meta content="Free HTML Templates" name="description">
10
+
11
+ <!-- Favicon -->
12
+ <link href="img/favicon.ico" rel="icon">
13
+
14
+ <!-- Google Web Fonts -->
15
+ <link rel="preconnect" href="https://fonts.gstatic.com">
16
+ <link href="https://fonts.googleapis.com/css2?family=Jost:wght@500;600;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
17
+
18
+ <!-- Icon Font Stylesheet -->
19
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
20
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet">
21
+
22
+ <!-- Libraries Stylesheet -->
23
+ <link href="lib/owlcarousel/assets/owl.carousel.min.css" rel="stylesheet">
24
+ <link href="lib/animate/animate.min.css" rel="stylesheet">
25
+ <link href="lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" />
26
+ <link href="lib/twentytwenty/twentytwenty.css" rel="stylesheet" />
27
+
28
+ <!-- Customized Bootstrap Stylesheet -->
29
+ <link href="css/bootstrap.min.css" rel="stylesheet">
30
+
31
+ <!-- Template Stylesheet -->
32
+ <link href="css/style.css" rel="stylesheet">
33
+ </head>
34
+
35
+ <body>
36
+ <!-- Spinner Start -->
37
+ <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
38
+ <div class="spinner-grow text-primary m-1" role="status">
39
+ <span class="sr-only">Loading...</span>
40
+ </div>
41
+ <div class="spinner-grow text-dark m-1" role="status">
42
+ <span class="sr-only">Loading...</span>
43
+ </div>
44
+ <div class="spinner-grow text-secondary m-1" role="status">
45
+ <span class="sr-only">Loading...</span>
46
+ </div>
47
+ </div>
48
+ <!-- Spinner End -->
49
+
50
+
51
+ <!-- Topbar Start -->
52
+ <div class="container-fluid bg-light ps-5 pe-0 d-none d-lg-block">
53
+ <div class="row gx-0">
54
+ <div class="col-md-6 text-center text-lg-start mb-2 mb-lg-0">
55
+ <div class="d-inline-flex align-items-center">
56
+ <small class="py-2"><i class="far fa-clock text-primary me-2"></i>Our services are available 24 hours a day, 7 days a week </small>
57
+ </div>
58
+ </div>
59
+ <div class="col-md-6 text-center text-lg-end">
60
+ <div class="position-relative d-inline-flex align-items-center bg-primary text-white top-shape px-5">
61
+ <div class="me-3 pe-3 border-end py-2">
62
+ <p class="m-0"><i class="fa fa-envelope-open me-2"></i>[email protected]</p>
63
+ </div>
64
+ <div class="py-2">
65
+ <p class="m-0"><i class="fa fa-phone-alt me-2"></i>+216 56564549</p>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <!-- Topbar End -->
72
+
73
+
74
+ <!-- Navbar Start -->
75
+ <nav class="navbar navbar-expand-lg bg-white navbar-light shadow-sm px-5 py-3 py-lg-0">
76
+ <a href="index.html" class="navbar-brand p-0">
77
+ <h1 class="m-0 text-primary"><i class="fa fa-brain me-2"></i>BrainScanAI</h1>
78
+ </a>
79
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
80
+ <span class="navbar-toggler-icon"></span>
81
+ </button>
82
+ <div class="collapse navbar-collapse" id="navbarCollapse">
83
+ <div class="navbar-nav ms-auto py-0">
84
+ <a href="index.html" class="nav-item nav-link active">Home</a>
85
+ <a href="about.html" class="nav-item nav-link">About</a>
86
+ <a href="service.html" class="nav-item nav-link">Service</a>
87
+ <div class="nav-item dropdown">
88
+ <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">Pages</a>
89
+ <div class="dropdown-menu m-0">
90
+ <a href="team.html" class="dropdown-item">Our Developer</a>
91
+ <a href="appointment.html" class="dropdown-item">Scan</a>
92
+ </div>
93
+ </div>
94
+ <a href="contact.html" class="nav-item nav-link">Contact</a>
95
+ </div>
96
+ <button type="button" class="btn text-dark" data-bs-toggle="modal" data-bs-target="#searchModal"><i class="fa fa-search"></i></button>
97
+ <a href="appointment.html" class="btn btn-primary py-2 px-4 ms-3">Speed Scan</a>
98
+ </div>
99
+ </nav>
100
+ <!-- Navbar End -->
101
+
102
+
103
+ <!-- Full Screen Search Start -->
104
+ <div class="modal fade" id="searchModal" tabindex="-1">
105
+ <div class="modal-dialog modal-fullscreen">
106
+ <div class="modal-content" style="background: rgba(9, 30, 62, .7);">
107
+ <div class="modal-header border-0">
108
+ <button type="button" class="btn bg-white btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
109
+ </div>
110
+ <div class="modal-body d-flex align-items-center justify-content-center">
111
+ <div class="input-group" style="max-width: 600px;">
112
+ <input type="text" class="form-control bg-transparent border-primary p-3" placeholder="Type search keyword">
113
+ <button class="btn btn-primary px-4"><i class="bi bi-search"></i></button>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <!-- Full Screen Search End -->
120
+
121
+
122
+ <!-- Hero Start -->
123
+ <div class="container-fluid bg-primary py-5 hero-header mb-5">
124
+ <div class="row py-3">
125
+ <div class="col-12 text-center">
126
+ <h1 class="display-3 text-white animated zoomIn">About Us</h1>
127
+ <a href="" class="h4 text-white">Home</a>
128
+ <i class="far fa-circle text-white px-2"></i>
129
+ <a href="" class="h4 text-white">About</a>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ <!-- Hero End -->
134
+
135
+
136
+ <!-- About Start -->
137
+ <div class="container-fluid py-5 wow fadeInUp" data-wow-delay="0.1s">
138
+ <div class="container">
139
+ <div class="row g-5">
140
+ <div class="col-lg-7">
141
+ <div class="section-title mb-4">
142
+ <h5 class="position-relative d-inline-block text-primary text-uppercase">About Us</h5>
143
+ <h1 class="display-5 mb-0">Welcome to BrainScanAI, the innovative platform</h1>
144
+ </div>
145
+ <h4 class="text-body fst-italic mb-4">developed as part of an internship at the Advanced Technologies for Medicine and Signal (ATMS) center by Mohamed Benhasan</h4>
146
+ <p class="mb-4">HealthScanAI is dedicated to revolutionizing cancer detection using cutting-edge artificial intelligence technologies. Our mission is to provide accessible, accurate, and early cancer detection to save lives and improve health outcomes worldwide.</p>
147
+ <div class="row g-3">
148
+ <div class="col-sm-6 wow zoomIn" data-wow-delay="0.3s">
149
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>User-Friendly Interface</h5>
150
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>Multi-Model Detection System</h5>
151
+ </div>
152
+ <div class="col-sm-6 wow zoomIn" data-wow-delay="0.6s">
153
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>Rapid Analysis and Results</h5>
154
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>24/7 Opened</h5>
155
+ </div>
156
+ </div>
157
+ <a href="appointment.html" class="btn btn-primary py-3 px-5 mt-4 wow zoomIn" data-wow-delay="0.6s">Start a Scan</a>
158
+ </div>
159
+ <div class="col-lg-5" style="min-height: 500px;">
160
+ <div class="position-relative h-100">
161
+ <img class="position-absolute w-100 h-100 rounded wow zoomIn" data-wow-delay="0.9s" src="img/about.png" style="object-fit: cover;">
162
+ </div>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ </div>
167
+ <!-- About End -->
168
+
169
+
170
+ <!-- Newsletter Start -->
171
+ <div class="container-fluid position-relative pt-5 wow fadeInUp" data-wow-delay="0.1s" style="z-index: 1;">
172
+ <div class="container">
173
+ <div class="bg-primary p-5">
174
+ <form class="mx-auto" style="max-width: 600px;">
175
+ <div class="input-group">
176
+ <input type="text" class="form-control border-white p-3" placeholder="Your Email">
177
+ <button class="btn btn-dark px-4">Sign Up</button>
178
+ </div>
179
+ </form>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ <!-- Newsletter End -->
184
+
185
+
186
+ <!-- Footer Start -->
187
+ <div class="container-fluid bg-dark text-light py-5 wow fadeInUp" data-wow-delay="0.3s" style="margin-top: -75px;">
188
+ <div class="container pt-5">
189
+ <div class="row g-5 pt-4">
190
+ <div class="col-lg-3 col-md-6">
191
+ <h3 class="text-white mb-4">Quick Links</h3>
192
+ <div class="d-flex flex-column justify-content-start">
193
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
194
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
195
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
196
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
197
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
198
+ </div>
199
+ </div>
200
+ <div class="col-lg-3 col-md-6">
201
+ <h3 class="text-white mb-4">Popular Links</h3>
202
+ <div class="d-flex flex-column justify-content-start">
203
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
204
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
205
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
206
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
207
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
208
+ </div>
209
+ </div>
210
+ <div class="col-lg-3 col-md-6">
211
+ <h3 class="text-white mb-4">Get In Touch</h3>
212
+ <p class="mb-2"><i class="bi bi-geo-alt text-primary me-2"></i> Sfax, Tunisia</p>
213
+ <p class="mb-2"><i class="bi bi-envelope-open text-primary me-2"></i>[email protected]</p>
214
+ <p class="mb-0"><i class="bi bi-telephone text-primary me-2"></i>+216 56564549</p>
215
+ </div>
216
+ <div class="col-lg-3 col-md-6">
217
+ <h3 class="text-white mb-4">Follow Us</h3>
218
+ <div class="d-flex">
219
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-twitter fw-normal"></i></a>
220
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-facebook-f fw-normal"></i></a>
221
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-linkedin-in fw-normal"></i></a>
222
+ <a class="btn btn-lg btn-primary btn-lg-square rounded" href="#"><i class="fab fa-instagram fw-normal"></i></a>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ <div class="container-fluid text-light py-4" style="background: #051225;">
229
+ <div class="container">
230
+ <div class="row g-0">
231
+ <div class="col-md-6 text-center text-md-start">
232
+ <p class="mb-md-0">&copy; <a class="text-white border-bottom" href="#">BrainScanAI</a>. All Rights Reserved.</p>
233
+ </div>
234
+ <div class="col-md-6 text-center text-md-end">
235
+ <p class="mb-0">Designed by <a class="text-white border-bottom">Mohamed Benhasan</a><br>
236
+ </p>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ </div>
241
+ <!-- Footer End -->
242
+
243
+
244
+ <!-- Back to Top -->
245
+ <a href="#" class="btn btn-lg btn-primary btn-lg-square rounded back-to-top"><i class="bi bi-arrow-up"></i></a>
246
+
247
+
248
+ <!-- JavaScript Libraries -->
249
+ <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
250
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
251
+ <script src="lib/wow/wow.min.js"></script>
252
+ <script src="lib/easing/easing.min.js"></script>
253
+ <script src="lib/waypoints/waypoints.min.js"></script>
254
+ <script src="lib/owlcarousel/owl.carousel.min.js"></script>
255
+ <script src="lib/tempusdominus/js/moment.min.js"></script>
256
+ <script src="lib/tempusdominus/js/moment-timezone.min.js"></script>
257
+ <script src="lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js"></script>
258
+ <script src="lib/twentytwenty/jquery.event.move.js"></script>
259
+ <script src="lib/twentytwenty/jquery.twentytwenty.js"></script>
260
+
261
+ <!-- Template Javascript -->
262
+ <script src="js/main.js"></script>
263
+ </body>
264
+
265
+ </html>
appointment.html ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>BrainScanAI</title>
7
+ <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
8
+ <meta content="width=device-width, initial-scale=1.0" name="viewport">
9
+ <meta content="Free HTML Templates" name="keywords">
10
+ <meta content="Free HTML Templates" name="description">
11
+
12
+ <!-- Favicon -->
13
+ <link href="img/favicon.ico" rel="icon">
14
+
15
+ <!-- Google Web Fonts -->
16
+ <link rel="preconnect" href="https://fonts.gstatic.com">
17
+ <link href="https://fonts.googleapis.com/css2?family=Jost:wght@500;600;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
18
+
19
+ <!-- Icon Font Stylesheet -->
20
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
21
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet">
22
+
23
+ <!-- Libraries Stylesheet -->
24
+ <link href="lib/owlcarousel/assets/owl.carousel.min.css" rel="stylesheet">
25
+ <link href="lib/animate/animate.min.css" rel="stylesheet">
26
+ <link href="lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" />
27
+ <link href="lib/twentytwenty/twentytwenty.css" rel="stylesheet" />
28
+
29
+ <!-- Customized Bootstrap Stylesheet -->
30
+ <link href="css/bootstrap.min.css" rel="stylesheet">
31
+
32
+ <!-- Template Stylesheet -->
33
+ <link href="css/style.css" rel="stylesheet">
34
+ </head>
35
+
36
+ <body>
37
+ <!-- Spinner Start -->
38
+ <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
39
+ <div class="spinner-grow text-primary m-1" role="status">
40
+ <span class="sr-only">Loading...</span>
41
+ </div>
42
+ <div class="spinner-grow text-dark m-1" role="status">
43
+ <span class="sr-only">Loading...</span>
44
+ </div>
45
+ <div class="spinner-grow text-secondary m-1" role="status">
46
+ <span class="sr-only">Loading...</span>
47
+ </div>
48
+ </div>
49
+ <!-- Spinner End -->
50
+
51
+
52
+ <!-- Topbar Start -->
53
+ <div class="container-fluid bg-light ps-5 pe-0 d-none d-lg-block">
54
+ <div class="row gx-0">
55
+ <div class="col-md-6 text-center text-lg-start mb-2 mb-lg-0">
56
+ <div class="d-inline-flex align-items-center">
57
+ <small class="py-2"><i class="far fa-clock text-primary me-2"></i>Our services are available 24 hours a day, 7 days a week </small>
58
+ </div>
59
+ </div>
60
+ <div class="col-md-6 text-center text-lg-end">
61
+ <div class="position-relative d-inline-flex align-items-center bg-primary text-white top-shape px-5">
62
+ <div class="me-3 pe-3 border-end py-2">
63
+ <p class="m-0"><i class="fa fa-envelope-open me-2"></i>[email protected]</p>
64
+ </div>
65
+ <div class="py-2">
66
+ <p class="m-0"><i class="fa fa-phone-alt me-2"></i>+216 56564549</p>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ <!-- Topbar End -->
73
+
74
+
75
+ <!-- Navbar Start -->
76
+ <nav class="navbar navbar-expand-lg bg-white navbar-light shadow-sm px-5 py-3 py-lg-0">
77
+ <a href="index.html" class="navbar-brand p-0">
78
+ <h1 class="m-0 text-primary"><i class="fa fa-brain me-2"></i>BrainScanAI</h1>
79
+ </a>
80
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
81
+ <span class="navbar-toggler-icon"></span>
82
+ </button>
83
+ <div class="collapse navbar-collapse" id="navbarCollapse">
84
+ <div class="navbar-nav ms-auto py-0">
85
+ <a href="index.html" class="nav-item nav-link active">Home</a>
86
+ <a href="about.html" class="nav-item nav-link">About</a>
87
+ <a href="service.html" class="nav-item nav-link">Service</a>
88
+ <div class="nav-item dropdown">
89
+ <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">Pages</a>
90
+ <div class="dropdown-menu m-0">
91
+ <a href="team.html" class="dropdown-item">Our Developer</a>
92
+ <a href="appointment.html" class="dropdown-item">Scan</a>
93
+ </div>
94
+ </div>
95
+ <a href="contact.html" class="nav-item nav-link">Contact</a>
96
+ </div>
97
+ <button type="button" class="btn text-dark" data-bs-toggle="modal" data-bs-target="#searchModal"><i class="fa fa-search"></i></button>
98
+ <a href="appointment.html" class="btn btn-primary py-2 px-4 ms-3">Speed Scan</a>
99
+ </div>
100
+ </nav>
101
+ <!-- Navbar End -->
102
+
103
+
104
+ <!-- Full Screen Search Start -->
105
+ <div class="modal fade" id="searchModal" tabindex="-1">
106
+ <div class="modal-dialog modal-fullscreen">
107
+ <div class="modal-content" style="background: rgba(9, 30, 62, .7);">
108
+ <div class="modal-header border-0">
109
+ <button type="button" class="btn bg-white btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
110
+ </div>
111
+ <div class="modal-body d-flex align-items-center justify-content-center">
112
+ <div class="input-group" style="max-width: 600px;">
113
+ <input type="text" class="form-control bg-transparent border-primary p-3" placeholder="Type search keyword">
114
+ <button class="btn btn-primary px-4"><i class="bi bi-search"></i></button>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ <!-- Full Screen Search End -->
121
+
122
+
123
+ <!-- Hero Start -->
124
+ <div class="container-fluid bg-primary py-5 hero-header mb-5">
125
+ <div class="row py-3">
126
+ <div class="col-12 text-center">
127
+ <h1 class="display-3 text-white animated zoomIn">Speed Scan</h1>
128
+ <a href="" class="h4 text-white">Home</a>
129
+ <i class="far fa-circle text-white px-2"></i>
130
+ <a href="" class="h4 text-white">Scan</a>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ <!-- Hero End -->
135
+
136
+
137
+ <!-- Appointment Start -->
138
+ <h1>Speed Scan Form</h1>
139
+ <form id="scanForm">
140
+ <label for="imageUpload">Upload Your Medical Scan:</label>
141
+ <input type="file" id="imageUpload" accept="image/*" required>
142
+ <br>
143
+ <label for="service">Choose the Service You Need:</label>
144
+ <select id="service" required>
145
+ <option value="detection">Tumor Detection</option>
146
+ <option value="classification">Tumor Classification</option>
147
+ </select>
148
+ <br>
149
+ <button type="button" onclick="startScan()">Start Scan</button>
150
+ </form>
151
+ <div id="result"></div>
152
+ <div id="dimensions"></div>
153
+
154
+ <script>
155
+ async function startScan() {
156
+ const fileInput = document.getElementById('imageUpload');
157
+ const resultDiv = document.getElementById('result');
158
+ const dimensionsDiv = document.getElementById('dimensions');
159
+
160
+ if (fileInput.files.length === 0) {
161
+ alert('Please upload an image file.');
162
+ return;
163
+ }
164
+
165
+ const file = fileInput.files[0];
166
+ const image = await loadImage(file);
167
+
168
+ // Display image dimensions
169
+ dimensionsDiv.innerHTML = `<strong>Image Dimensions:</strong> ${image.width} x ${image.height}`;
170
+
171
+ try {
172
+ // Load the model
173
+ const model = await tf.loadLayersModel('model/ae_resnet.h5');
174
+ console.log('Model loaded successfully.');
175
+
176
+ // Preprocess the image
177
+ const canvas = document.createElement('canvas');
178
+ canvas.width = 224;
179
+ canvas.height = 224;
180
+ const ctx = canvas.getContext('2d');
181
+ ctx.drawImage(image, 0, 0, 224, 224);
182
+
183
+ // Convert to tensor
184
+ const tensor = tf.browser.fromPixels(canvas)
185
+ .toFloat()
186
+ .expandDims(0) // Add batch dimension
187
+ .div(tf.scalar(255)); // Normalize to [0, 1] range
188
+
189
+ // Predict
190
+ const predictions = await model.predict(tensor).data();
191
+ console.log('Predictions:', predictions);
192
+
193
+ // Display results
194
+ const result = predictions[0] > 0.5 ? 'Tumor Detected' : 'No Tumor Detected';
195
+ resultDiv.innerHTML = `<strong>Prediction Result:</strong> ${result}`;
196
+ } catch (error) {
197
+ console.error('Error during prediction:', error);
198
+ resultDiv.innerHTML = `<strong>Prediction failed.</strong> Error: ${error.message}`;
199
+ }
200
+ }
201
+
202
+ function loadImage(file) {
203
+ return new Promise((resolve, reject) => {
204
+ const reader = new FileReader();
205
+ reader.onload = (event) => {
206
+ const img = new Image();
207
+ img.onload = () => resolve(img);
208
+ img.onerror = (err) => reject(err);
209
+ img.src = event.target.result;
210
+ };
211
+ reader.onerror = reject;
212
+ reader.readAsDataURL(file);
213
+ });
214
+ }
215
+ </script>
216
+ <!-- Appointment End -->
217
+
218
+
219
+ <!-- Newsletter Start -->
220
+ <div class="container-fluid position-relative pt-5 wow fadeInUp" data-wow-delay="0.1s" style="z-index: 1;">
221
+ <div class="container">
222
+ <div class="bg-primary p-5">
223
+ <form class="mx-auto" style="max-width: 600px;">
224
+ <div class="input-group">
225
+ <input type="text" class="form-control border-white p-3" placeholder="Your Email">
226
+ <button class="btn btn-dark px-4">Sign Up</button>
227
+ </div>
228
+ </form>
229
+ </div>
230
+ </div>
231
+ </div>
232
+ <!-- Newsletter End -->
233
+
234
+
235
+ <!-- Footer Start -->
236
+ <div class="container-fluid bg-dark text-light py-5 wow fadeInUp" data-wow-delay="0.3s" style="margin-top: -75px;">
237
+ <div class="container pt-5">
238
+ <div class="row g-5 pt-4">
239
+ <div class="col-lg-3 col-md-6">
240
+ <h3 class="text-white mb-4">Quick Links</h3>
241
+ <div class="d-flex flex-column justify-content-start">
242
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
243
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
244
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
245
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
246
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
247
+ </div>
248
+ </div>
249
+ <div class="col-lg-3 col-md-6">
250
+ <h3 class="text-white mb-4">Popular Links</h3>
251
+ <div class="d-flex flex-column justify-content-start">
252
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
253
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
254
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
255
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
256
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
257
+ </div>
258
+ </div>
259
+ <div class="col-lg-3 col-md-6">
260
+ <h3 class="text-white mb-4">Get In Touch</h3>
261
+ <p class="mb-2"><i class="bi bi-geo-alt text-primary me-2"></i> Sfax, Tunisia</p>
262
+ <p class="mb-2"><i class="bi bi-envelope-open text-primary me-2"></i>[email protected]</p>
263
+ <p class="mb-0"><i class="bi bi-telephone text-primary me-2"></i>+216 56564549</p>
264
+ </div>
265
+ <div class="col-lg-3 col-md-6">
266
+ <h3 class="text-white mb-4">Follow Us</h3>
267
+ <div class="d-flex">
268
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-twitter fw-normal"></i></a>
269
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-facebook-f fw-normal"></i></a>
270
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-linkedin-in fw-normal"></i></a>
271
+ <a class="btn btn-lg btn-primary btn-lg-square rounded" href="#"><i class="fab fa-instagram fw-normal"></i></a>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ </div>
276
+ </div>
277
+ <div class="container-fluid text-light py-4" style="background: #051225;">
278
+ <div class="container">
279
+ <div class="row g-0">
280
+ <div class="col-md-6 text-center text-md-start">
281
+ <p class="mb-md-0">&copy; <a class="text-white border-bottom" href="#">BrainScanAI</a>. All Rights Reserved.</p>
282
+ </div>
283
+ <div class="col-md-6 text-center text-md-end">
284
+ <p class="mb-0">Designed by <a class="text-white border-bottom">Mohamed Benhasan</a><br>
285
+ </p>
286
+ </div>
287
+ </div>
288
+ </div>
289
+ </div>
290
+ <!-- Footer End -->
291
+
292
+
293
+ <!-- Back to Top -->
294
+ <a href="#" class="btn btn-lg btn-primary btn-lg-square rounded back-to-top"><i class="bi bi-arrow-up"></i></a>
295
+
296
+
297
+ <!-- JavaScript Libraries -->
298
+ <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
299
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
300
+ <script src="lib/wow/wow.min.js"></script>
301
+ <script src="lib/easing/easing.min.js"></script>
302
+ <script src="lib/waypoints/waypoints.min.js"></script>
303
+ <script src="lib/owlcarousel/owl.carousel.min.js"></script>
304
+ <script src="lib/tempusdominus/js/moment.min.js"></script>
305
+ <script src="lib/tempusdominus/js/moment-timezone.min.js"></script>
306
+ <script src="lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js"></script>
307
+ <script src="lib/twentytwenty/jquery.event.move.js"></script>
308
+ <script src="lib/twentytwenty/jquery.twentytwenty.js"></script>
309
+
310
+ <!-- Template Javascript -->
311
+ <script src="js/main.js"></script>
312
+ </body>
313
+
314
+ </html>
contact.html ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>BrainScanAI</title>
7
+ <meta content="width=device-width, initial-scale=1.0" name="viewport">
8
+ <meta content="Free HTML Templates" name="keywords">
9
+ <meta content="Free HTML Templates" name="description">
10
+
11
+ <!-- Favicon -->
12
+ <link href="img/favicon.ico" rel="icon">
13
+
14
+ <!-- Google Web Fonts -->
15
+ <link rel="preconnect" href="https://fonts.gstatic.com">
16
+ <link href="https://fonts.googleapis.com/css2?family=Jost:wght@500;600;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
17
+
18
+ <!-- Icon Font Stylesheet -->
19
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
20
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet">
21
+
22
+ <!-- Libraries Stylesheet -->
23
+ <link href="lib/owlcarousel/assets/owl.carousel.min.css" rel="stylesheet">
24
+ <link href="lib/animate/animate.min.css" rel="stylesheet">
25
+ <link href="lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" />
26
+ <link href="lib/twentytwenty/twentytwenty.css" rel="stylesheet" />
27
+
28
+ <!-- Customized Bootstrap Stylesheet -->
29
+ <link href="css/bootstrap.min.css" rel="stylesheet">
30
+
31
+ <!-- Template Stylesheet -->
32
+ <link href="css/style.css" rel="stylesheet">
33
+ </head>
34
+
35
+ <body>
36
+ <!-- Spinner Start -->
37
+ <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
38
+ <div class="spinner-grow text-primary m-1" role="status">
39
+ <span class="sr-only">Loading...</span>
40
+ </div>
41
+ <div class="spinner-grow text-dark m-1" role="status">
42
+ <span class="sr-only">Loading...</span>
43
+ </div>
44
+ <div class="spinner-grow text-secondary m-1" role="status">
45
+ <span class="sr-only">Loading...</span>
46
+ </div>
47
+ </div>
48
+ <!-- Spinner End -->
49
+
50
+
51
+ <!-- Topbar Start -->
52
+ <div class="container-fluid bg-light ps-5 pe-0 d-none d-lg-block">
53
+ <div class="row gx-0">
54
+ <div class="col-md-6 text-center text-lg-start mb-2 mb-lg-0">
55
+ <div class="d-inline-flex align-items-center">
56
+ <small class="py-2"><i class="far fa-clock text-primary me-2"></i>Our services are available 24 hours a day, 7 days a week </small>
57
+ </div>
58
+ </div>
59
+ <div class="col-md-6 text-center text-lg-end">
60
+ <div class="position-relative d-inline-flex align-items-center bg-primary text-white top-shape px-5">
61
+ <div class="me-3 pe-3 border-end py-2">
62
+ <p class="m-0"><i class="fa fa-envelope-open me-2"></i>[email protected]</p>
63
+ </div>
64
+ <div class="py-2">
65
+ <p class="m-0"><i class="fa fa-phone-alt me-2"></i>+216 56564549</p>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <!-- Topbar End -->
72
+
73
+
74
+ <!-- Navbar Start -->
75
+ <nav class="navbar navbar-expand-lg bg-white navbar-light shadow-sm px-5 py-3 py-lg-0">
76
+ <a href="index.html" class="navbar-brand p-0">
77
+ <h1 class="m-0 text-primary"><i class="fa fa-brain me-2"></i>BrainScanAI</h1>
78
+ </a>
79
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
80
+ <span class="navbar-toggler-icon"></span>
81
+ </button>
82
+ <div class="collapse navbar-collapse" id="navbarCollapse">
83
+ <div class="navbar-nav ms-auto py-0">
84
+ <a href="index.html" class="nav-item nav-link active">Home</a>
85
+ <a href="about.html" class="nav-item nav-link">About</a>
86
+ <a href="service.html" class="nav-item nav-link">Service</a>
87
+ <div class="nav-item dropdown">
88
+ <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">Pages</a>
89
+ <div class="dropdown-menu m-0">
90
+ <a href="team.html" class="dropdown-item">Our Developer</a>
91
+ <a href="appointment.html" class="dropdown-item">Scan</a>
92
+ </div>
93
+ </div>
94
+ <a href="contact.html" class="nav-item nav-link">Contact</a>
95
+ </div>
96
+ <button type="button" class="btn text-dark" data-bs-toggle="modal" data-bs-target="#searchModal"><i class="fa fa-search"></i></button>
97
+ <a href="appointment.html" class="btn btn-primary py-2 px-4 ms-3">Speed Scan</a>
98
+ </div>
99
+ </nav>
100
+ <!-- Navbar End -->
101
+
102
+
103
+ <!-- Full Screen Search Start -->
104
+ <div class="modal fade" id="searchModal" tabindex="-1">
105
+ <div class="modal-dialog modal-fullscreen">
106
+ <div class="modal-content" style="background: rgba(9, 30, 62, .7);">
107
+ <div class="modal-header border-0">
108
+ <button type="button" class="btn bg-white btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
109
+ </div>
110
+ <div class="modal-body d-flex align-items-center justify-content-center">
111
+ <div class="input-group" style="max-width: 600px;">
112
+ <input type="text" class="form-control bg-transparent border-primary p-3" placeholder="Type search keyword">
113
+ <button class="btn btn-primary px-4"><i class="bi bi-search"></i></button>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <!-- Full Screen Search End -->
120
+
121
+
122
+ <!-- Hero Start -->
123
+ <div class="container-fluid bg-primary py-5 hero-header mb-5">
124
+ <div class="row py-3">
125
+ <div class="col-12 text-center">
126
+ <h1 class="display-3 text-white animated zoomIn">Contact Us</h1>
127
+ <a href="" class="h4 text-white">Home</a>
128
+ <i class="far fa-circle text-white px-2"></i>
129
+ <a href="" class="h4 text-white">Contact</a>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ <!-- Hero End -->
134
+
135
+
136
+ <!-- Contact Start -->
137
+ <div class="container-fluid py-5">
138
+ <div class="container">
139
+ <div class="row g-5">
140
+ <div class="col-xl-4 col-lg-6 wow slideInUp" data-wow-delay="0.1s">
141
+ <div class="bg-light rounded h-100 p-5">
142
+ <div class="section-title">
143
+ <h5 class="position-relative d-inline-block text-primary text-uppercase">Contact Us</h5>
144
+ <h1 class="display-6 mb-4">Feel Free To Contact Us</h1>
145
+ </div>
146
+ <div class="d-flex align-items-center mb-2">
147
+ <i class="bi bi-geo-alt fs-1 text-primary me-3"></i>
148
+ <div class="text-start">
149
+ <h5 class="mb-0">Our Office</h5>
150
+ <span>Cite Ons, Sfax, Tunisia</span>
151
+ </div>
152
+ </div>
153
+ <div class="d-flex align-items-center mb-2">
154
+ <i class="bi bi-envelope-open fs-1 text-primary me-3"></i>
155
+ <div class="text-start">
156
+ <h5 class="mb-0">Email Us</h5>
157
+ <span>[email protected]</span>
158
+ </div>
159
+ </div>
160
+ <div class="d-flex align-items-center">
161
+ <i class="bi bi-phone-vibrate fs-1 text-primary me-3"></i>
162
+ <div class="text-start">
163
+ <h5 class="mb-0">Call Us</h5>
164
+ <span>+216 56564549</span>
165
+ </div>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ <div class="col-xl-4 col-lg-6 wow slideInUp" data-wow-delay="0.3s">
170
+ <form>
171
+ <div class="row g-3">
172
+ <div class="col-12">
173
+ <input type="text" class="form-control border-0 bg-light px-4" placeholder="Your Name" style="height: 55px;">
174
+ </div>
175
+ <div class="col-12">
176
+ <input type="email" class="form-control border-0 bg-light px-4" placeholder="Your Email" style="height: 55px;">
177
+ </div>
178
+ <div class="col-12">
179
+ <input type="text" class="form-control border-0 bg-light px-4" placeholder="Subject" style="height: 55px;">
180
+ </div>
181
+ <div class="col-12">
182
+ <textarea class="form-control border-0 bg-light px-4 py-3" rows="5" placeholder="Message"></textarea>
183
+ </div>
184
+ <div class="col-12">
185
+ <button class="btn btn-primary w-100 py-3" type="submit">Send Message</button>
186
+ </div>
187
+ </div>
188
+ </form>
189
+ </div>
190
+ <div class="col-xl-4 col-lg-12 wow slideInUp" data-wow-delay="0.6s">
191
+ <iframe class="position-relative rounded w-100 h-100"
192
+ src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3001156.4288297426!2d-78.01371936852176!3d42.72876761954724!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x4ccc4bf0f123a5a9%3A0xddcfc6c1de189567!2sNew%20York%2C%20USA!5e0!3m2!1sen!2sbd!4v1603794290143!5m2!1sen!2sbd"
193
+ frameborder="0" style="min-height: 400px; border:0;" allowfullscreen="" aria-hidden="false"
194
+ tabindex="0"></iframe>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ </div>
199
+ <!-- Contact End -->
200
+
201
+
202
+ <!-- Newsletter Start -->
203
+ <div class="container-fluid position-relative pt-5 wow fadeInUp" data-wow-delay="0.1s" style="z-index: 1;">
204
+ <div class="container">
205
+ <div class="bg-primary p-5">
206
+ <form class="mx-auto" style="max-width: 600px;">
207
+ <div class="input-group">
208
+ <input type="text" class="form-control border-white p-3" placeholder="Your Email">
209
+ <button class="btn btn-dark px-4">Sign Up</button>
210
+ </div>
211
+ </form>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ <!-- Newsletter End -->
216
+
217
+
218
+ <!-- Footer Start -->
219
+ <div class="container-fluid bg-dark text-light py-5 wow fadeInUp" data-wow-delay="0.3s" style="margin-top: -75px;">
220
+ <div class="container pt-5">
221
+ <div class="row g-5 pt-4">
222
+ <div class="col-lg-3 col-md-6">
223
+ <h3 class="text-white mb-4">Quick Links</h3>
224
+ <div class="d-flex flex-column justify-content-start">
225
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
226
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
227
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
228
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
229
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
230
+ </div>
231
+ </div>
232
+ <div class="col-lg-3 col-md-6">
233
+ <h3 class="text-white mb-4">Popular Links</h3>
234
+ <div class="d-flex flex-column justify-content-start">
235
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
236
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
237
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
238
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
239
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
240
+ </div>
241
+ </div>
242
+ <div class="col-lg-3 col-md-6">
243
+ <h3 class="text-white mb-4">Get In Touch</h3>
244
+ <p class="mb-2"><i class="bi bi-geo-alt text-primary me-2"></i> Sfax, Tunisia</p>
245
+ <p class="mb-2"><i class="bi bi-envelope-open text-primary me-2"></i>[email protected]</p>
246
+ <p class="mb-0"><i class="bi bi-telephone text-primary me-2"></i>+216 56564549</p>
247
+ </div>
248
+ <div class="col-lg-3 col-md-6">
249
+ <h3 class="text-white mb-4">Follow Us</h3>
250
+ <div class="d-flex">
251
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-twitter fw-normal"></i></a>
252
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-facebook-f fw-normal"></i></a>
253
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-linkedin-in fw-normal"></i></a>
254
+ <a class="btn btn-lg btn-primary btn-lg-square rounded" href="#"><i class="fab fa-instagram fw-normal"></i></a>
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </div>
259
+ </div>
260
+ <div class="container-fluid text-light py-4" style="background: #051225;">
261
+ <div class="container">
262
+ <div class="row g-0">
263
+ <div class="col-md-6 text-center text-md-start">
264
+ <p class="mb-md-0">&copy; <a class="text-white border-bottom" href="#">BrainScanAI</a>. All Rights Reserved.</p>
265
+ </div>
266
+ <div class="col-md-6 text-center text-md-end">
267
+ <p class="mb-0">Designed by <a class="text-white border-bottom">Mohamed Benhasan</a><br>
268
+ </p>
269
+ </div>
270
+ </div>
271
+ </div>
272
+ </div>
273
+ <!-- Footer End -->
274
+
275
+ <!-- Back to Top -->
276
+ <a href="#" class="btn btn-lg btn-primary btn-lg-square rounded back-to-top"><i class="bi bi-arrow-up"></i></a>
277
+
278
+
279
+ <!-- JavaScript Libraries -->
280
+ <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
281
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
282
+ <script src="lib/wow/wow.min.js"></script>
283
+ <script src="lib/easing/easing.min.js"></script>
284
+ <script src="lib/waypoints/waypoints.min.js"></script>
285
+ <script src="lib/owlcarousel/owl.carousel.min.js"></script>
286
+ <script src="lib/tempusdominus/js/moment.min.js"></script>
287
+ <script src="lib/tempusdominus/js/moment-timezone.min.js"></script>
288
+ <script src="lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js"></script>
289
+ <script src="lib/twentytwenty/jquery.event.move.js"></script>
290
+ <script src="lib/twentytwenty/jquery.twentytwenty.js"></script>
291
+
292
+ <!-- Template Javascript -->
293
+ <script src="js/main.js"></script>
294
+ </body>
295
+
296
+ </html>
css/bootstrap.min.css ADDED
The diff for this file is too large to render. See raw diff
 
css/style.css ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /********** Template CSS **********/
2
+ :root {
3
+ --primary: #06A3DA;
4
+ --secondary: #F57E57;
5
+ --light: #EEF9FF;
6
+ --dark: #091E3E;
7
+ }
8
+
9
+ h1,
10
+ h2,
11
+ .font-weight-bold {
12
+ font-weight: 700 !important;
13
+ }
14
+
15
+ h3,
16
+ h4,
17
+ .font-weight-semi-bold {
18
+ font-weight: 600 !important;
19
+ }
20
+
21
+ h5,
22
+ h6,
23
+ .font-weight-medium {
24
+ font-weight: 500 !important;
25
+ }
26
+
27
+ .btn {
28
+ font-family: 'Jost', sans-serif;
29
+ font-weight: 600;
30
+ transition: .5s;
31
+ }
32
+
33
+ .btn-primary,
34
+ .btn-secondary {
35
+ color: #FFFFFF;
36
+ }
37
+
38
+ .btn-primary:hover {
39
+ background: var(--secondary);
40
+ border-color: var(--secondary);
41
+ }
42
+
43
+ .btn-secondary:hover {
44
+ background: var(--primary);
45
+ border-color: var(--primary);
46
+ }
47
+
48
+ .btn-square {
49
+ width: 36px;
50
+ height: 36px;
51
+ }
52
+
53
+ .btn-sm-square {
54
+ width: 28px;
55
+ height: 28px;
56
+ }
57
+
58
+ .btn-lg-square {
59
+ width: 46px;
60
+ height: 46px;
61
+ }
62
+
63
+ .btn-square,
64
+ .btn-sm-square,
65
+ .btn-lg-square {
66
+ padding-left: 0;
67
+ padding-right: 0;
68
+ text-align: center;
69
+ }
70
+
71
+ #spinner {
72
+ opacity: 0;
73
+ visibility: hidden;
74
+ transition: opacity .5s ease-out, visibility 0s linear .5s;
75
+ z-index: 99999;
76
+ }
77
+
78
+ #spinner.show {
79
+ transition: opacity .5s ease-out, visibility 0s linear 0s;
80
+ visibility: visible;
81
+ opacity: 1;
82
+ }
83
+
84
+ .back-to-top {
85
+ position: fixed;
86
+ display: none;
87
+ right: 45px;
88
+ bottom: 45px;
89
+ z-index: 99;
90
+ }
91
+
92
+ .top-shape::before {
93
+ position: absolute;
94
+ content: "";
95
+ width: 35px;
96
+ height: 100%;
97
+ top: 0;
98
+ left: -17px;
99
+ background: var(--primary);
100
+ transform: skew(40deg);
101
+ }
102
+
103
+ .navbar-light .navbar-nav .nav-link {
104
+ font-family: 'Jost', sans-serif;
105
+ padding: 35px 15px;
106
+ font-size: 18px;
107
+ color: var(--dark);
108
+ outline: none;
109
+ transition: .5s;
110
+ }
111
+
112
+ .sticky-top.navbar-light .navbar-nav .nav-link {
113
+ padding: 20px 15px;
114
+ }
115
+
116
+ .navbar-light .navbar-nav .nav-link:hover,
117
+ .navbar-light .navbar-nav .nav-link.active {
118
+ color: var(--primary);
119
+ }
120
+
121
+ @media (max-width: 991.98px) {
122
+ .navbar-light .navbar-nav .nav-link,
123
+ .sticky-top.navbar-light .navbar-nav .nav-link {
124
+ padding: 10px 0;
125
+ }
126
+ }
127
+
128
+ .carousel-caption {
129
+ top: 0;
130
+ left: 0;
131
+ right: 0;
132
+ bottom: 0;
133
+ background: rgba(9, 30, 62, .85);
134
+ z-index: 1;
135
+ }
136
+
137
+ @media (max-width: 576px) {
138
+ .carousel-caption h5 {
139
+ font-size: 14px;
140
+ font-weight: 500 !important;
141
+ }
142
+
143
+ .carousel-caption h1 {
144
+ font-size: 30px;
145
+ font-weight: 600 !important;
146
+ }
147
+ }
148
+
149
+ .carousel-control-prev,
150
+ .carousel-control-next {
151
+ width: 10%;
152
+ }
153
+
154
+ .carousel-control-prev-icon,
155
+ .carousel-control-next-icon {
156
+ width: 3rem;
157
+ height: 3rem;
158
+ }
159
+
160
+ @media (min-width: 991.98px) {
161
+ .banner {
162
+ position: relative;
163
+ margin-top: -90px;
164
+ z-index: 1;
165
+ }
166
+ }
167
+
168
+ .section-title h5::before {
169
+ position: absolute;
170
+ content: "";
171
+ width: 45px;
172
+ height: 3px;
173
+ right: -55px;
174
+ bottom: 11px;
175
+ background: var(--primary);
176
+ }
177
+
178
+ .section-title h5::after {
179
+ position: absolute;
180
+ content: "";
181
+ width: 15px;
182
+ height: 3px;
183
+ right: -75px;
184
+ bottom: 11px;
185
+ background: var(--secondary);
186
+ }
187
+
188
+ .twentytwenty-wrapper {
189
+ height: 100%;
190
+ }
191
+
192
+ .hero-header {
193
+ background: linear-gradient(rgba(9, 30, 62, .85), rgba(9, 30, 62, .85)), url(../img/carousel-1.jpg) center center no-repeat;
194
+ background-size: cover;
195
+ }
196
+
197
+ .bg-appointment {
198
+ background: linear-gradient(rgba(9, 30, 62, .85), rgba(9, 30, 62, .85)), url(../img/carousel-1.jpg) center center no-repeat;
199
+ background-size: cover;
200
+ }
201
+
202
+ .appointment-form {
203
+ background: rgba(6, 163, 218, .7);
204
+ }
205
+
206
+ .service-item img,
207
+ .service-item .bg-light,
208
+ .service-item .bg-light h5,
209
+ .team-item .team-text {
210
+ transition: .5s;
211
+ }
212
+
213
+ .service-item:hover img {
214
+ transform: scale(1.15);
215
+ }
216
+
217
+ .team-item .team-text::after,
218
+ .service-item .bg-light::after {
219
+ position: absolute;
220
+ content: "";
221
+ top: 50%;
222
+ bottom: 0;
223
+ left: 15px;
224
+ right: 15px;
225
+ border-radius:100px / 15px;
226
+ box-shadow: 0 0 15px rgba(0, 0, 0, .7);
227
+ opacity: 0;
228
+ transition: .5s;
229
+ z-index: -1;
230
+ }
231
+
232
+ .team-item:hover .team-text::after,
233
+ .service-item:hover .bg-light::after {
234
+ opacity: 1;
235
+ }
236
+
237
+ .bg-offer {
238
+ background:url(../img/carousel-1.jpg) center center no-repeat;
239
+ background-size: cover;
240
+ }
241
+
242
+ .offer-text {
243
+ background: rgba(6, 163, 218, .85);
244
+ }
245
+
246
+ .price-carousel .owl-nav {
247
+ position: absolute;
248
+ width: calc(100% + 45px);
249
+ height: 45px;
250
+ top: calc(50% - 22.5px);
251
+ left: -22.5px;
252
+ display: flex;
253
+ justify-content: space-between;
254
+ opacity: 0;
255
+ transition: .5s;
256
+ }
257
+
258
+ .price-carousel:hover .owl-nav {
259
+ opacity: 1;
260
+ }
261
+
262
+ .price-carousel .owl-nav .owl-prev,
263
+ .price-carousel .owl-nav .owl-next {
264
+ position: relative;
265
+ width: 45px;
266
+ height: 45px;
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: center;
270
+ color: #FFFFFF;
271
+ background: var(--primary);
272
+ border-radius: 2px;
273
+ font-size: 22px;
274
+ transition: .5s;
275
+ }
276
+
277
+ .price-carousel .owl-nav .owl-prev:hover,
278
+ .price-carousel .owl-nav .owl-next:hover {
279
+ background: var(--secondary);
280
+ }
281
+
282
+ .bg-testimonial {
283
+ background: url(../img/carousel-2.jpg) center center no-repeat;
284
+ background-size: cover;
285
+ }
286
+
287
+ .testimonial-carousel {
288
+ background: rgba(6, 163, 218, .85);
289
+ }
290
+
291
+ .testimonial-carousel .owl-nav {
292
+ position: absolute;
293
+ width: calc(100% + 46px);
294
+ height: 46px;
295
+ top: calc(50% - 23px);
296
+ left: -23px;
297
+ display: flex;
298
+ justify-content: space-between;
299
+ z-index: 1;
300
+ }
301
+
302
+ .testimonial-carousel .owl-nav .owl-prev,
303
+ .testimonial-carousel .owl-nav .owl-next {
304
+ position: relative;
305
+ width: 46px;
306
+ height: 46px;
307
+ display: flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ color: #FFFFFF;
311
+ background: var(--primary);
312
+ border-radius: 2px;
313
+ font-size: 22px;
314
+ transition: .5s;
315
+ }
316
+
317
+ .testimonial-carousel .owl-nav .owl-prev:hover,
318
+ .testimonial-carousel .owl-nav .owl-next:hover {
319
+ background: var(--secondary);
320
+ }
321
+
322
+ .testimonial-carousel .owl-item img {
323
+ width: 120px;
324
+ height: 120px;
325
+ }
img/about.png ADDED

Git LFS Details

  • SHA256: 07b6bb8aa94ae3a5477e17a13fa93fe80e4db149dc0663e9641b7cfc6d564ff9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.35 MB
img/after.jpeg ADDED
img/before.jpg ADDED
img/carousel-1.png ADDED
img/carousel-2.webp ADDED
img/price-1.jpg ADDED
img/price-2.jpg ADDED
img/price-3.jpg ADDED
img/service-1.png ADDED

Git LFS Details

  • SHA256: 738c4ceae53a579c488ed3191aa714b175db48afb1837de202d69bb015f40a27
  • Pointer size: 132 Bytes
  • Size of remote file: 2.1 MB
img/service-2.png ADDED
img/service-3.jpg ADDED
img/service-4.jpg ADDED
img/team-1.jpg ADDED
index.html ADDED
@@ -0,0 +1,464 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>BrainScanAI</title>
7
+ <meta content="width=device-width, initial-scale=1.0" name="viewport">
8
+ <meta content="Free HTML Templates" name="keywords">
9
+ <meta content="Free HTML Templates" name="description">
10
+
11
+ <!-- Favicon -->
12
+ <link href="img/favicon.ico" rel="icon">
13
+
14
+ <!-- Google Web Fonts -->
15
+ <link rel="preconnect" href="https://fonts.gstatic.com">
16
+ <link href="https://fonts.googleapis.com/css2?family=Jost:wght@500;600;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
17
+
18
+ <!-- Icon Font Stylesheet -->
19
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
20
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet">
21
+
22
+ <!-- Libraries Stylesheet -->
23
+ <link href="lib/owlcarousel/assets/owl.carousel.min.css" rel="stylesheet">
24
+ <link href="lib/animate/animate.min.css" rel="stylesheet">
25
+ <link href="lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" />
26
+ <link href="lib/twentytwenty/twentytwenty.css" rel="stylesheet" />
27
+
28
+ <!-- Customized Bootstrap Stylesheet -->
29
+ <link href="css/bootstrap.min.css" rel="stylesheet">
30
+
31
+ <!-- Template Stylesheet -->
32
+ <link href="css/style.css" rel="stylesheet">
33
+ </head>
34
+
35
+ <body>
36
+ <!-- Spinner Start -->
37
+ <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
38
+ <div class="spinner-grow text-primary m-1" role="status">
39
+ <span class="sr-only">Loading...</span>
40
+ </div>
41
+ <div class="spinner-grow text-dark m-1" role="status">
42
+ <span class="sr-only">Loading...</span>
43
+ </div>
44
+ <div class="spinner-grow text-secondary m-1" role="status">
45
+ <span class="sr-only">Loading...</span>
46
+ </div>
47
+ </div>
48
+ <!-- Spinner End -->
49
+
50
+
51
+ <!-- Topbar Start -->
52
+ <div class="container-fluid bg-light ps-5 pe-0 d-none d-lg-block">
53
+ <div class="row gx-0">
54
+ <div class="col-md-6 text-center text-lg-start mb-2 mb-lg-0">
55
+ <div class="d-inline-flex align-items-center">
56
+ <small class="py-2"><i class="far fa-clock text-primary me-2"></i>Our services are available 24 hours a day, 7 days a week </small>
57
+ </div>
58
+ </div>
59
+ <div class="col-md-6 text-center text-lg-end">
60
+ <div class="position-relative d-inline-flex align-items-center bg-primary text-white top-shape px-5">
61
+ <div class="me-3 pe-3 border-end py-2">
62
+ <p class="m-0"><i class="fa fa-envelope-open me-2"></i>[email protected]</p>
63
+ </div>
64
+ <div class="py-2">
65
+ <p class="m-0"><i class="fa fa-phone-alt me-2"></i>+216 56564549</p>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <!-- Topbar End -->
72
+
73
+
74
+ <!-- Navbar Start -->
75
+ <nav class="navbar navbar-expand-lg bg-white navbar-light shadow-sm px-5 py-3 py-lg-0">
76
+ <a href="index.html" class="navbar-brand p-0">
77
+ <h1 class="m-0 text-primary"><i class="fa fa-brain me-2"></i>BrainScanAI</h1>
78
+ </a>
79
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
80
+ <span class="navbar-toggler-icon"></span>
81
+ </button>
82
+ <div class="collapse navbar-collapse" id="navbarCollapse">
83
+ <div class="navbar-nav ms-auto py-0">
84
+ <a href="index.html" class="nav-item nav-link active">Home</a>
85
+ <a href="about.html" class="nav-item nav-link">About</a>
86
+ <a href="service.html" class="nav-item nav-link">Service</a>
87
+ <div class="nav-item dropdown">
88
+ <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">Pages</a>
89
+ <div class="dropdown-menu m-0">
90
+ <a href="team.html" class="dropdown-item">Our Developer</a>
91
+ <a href="appointment.html" class="dropdown-item">Scan</a>
92
+ </div>
93
+ </div>
94
+ <a href="contact.html" class="nav-item nav-link">Contact</a>
95
+ </div>
96
+ <button type="button" class="btn text-dark" data-bs-toggle="modal" data-bs-target="#searchModal"><i class="fa fa-search"></i></button>
97
+ <a href="appointment.html" class="btn btn-primary py-2 px-4 ms-3">Speed Scan</a>
98
+ </div>
99
+ </nav>
100
+ <!-- Navbar End -->
101
+
102
+
103
+ <!-- Full Screen Search Start -->
104
+ <div class="modal fade" id="searchModal" tabindex="-1">
105
+ <div class="modal-dialog modal-fullscreen">
106
+ <div class="modal-content" style="background: rgba(9, 30, 62, .7);">
107
+ <div class="modal-header border-0">
108
+ <button type="button" class="btn bg-white btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
109
+ </div>
110
+ <div class="modal-body d-flex align-items-center justify-content-center">
111
+ <div class="input-group" style="max-width: 600px;">
112
+ <input type="text" class="form-control bg-transparent border-primary p-3" placeholder="Type search keyword">
113
+ <button class="btn btn-primary px-4"><i class="bi bi-search"></i></button>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <!-- Full Screen Search End -->
120
+
121
+
122
+ <!-- Carousel Start -->
123
+ <div class="container-fluid p-0">
124
+ <div id="header-carousel" class="carousel slide carousel-fade" data-bs-ride="carousel">
125
+ <div class="carousel-inner">
126
+ <div class="carousel-item active">
127
+ <img class="w-100" src="img/carousel-1.png" alt="Image">
128
+ <div class="carousel-caption d-flex flex-column align-items-center justify-content-center">
129
+ <div class="p-3" style="max-width: 900px;">
130
+ <h5 class="text-white text-uppercase mb-3 animated slideInDown">Check Your Brain Health</h5>
131
+ <h1 class="display-1 text-white mb-md-4 animated zoomIn">Advanced AI for Early Cancer Detection</h1>
132
+ <a href="appointment.html" class="btn btn-primary py-md-3 px-md-5 me-3 animated slideInLeft">Start a Scan</a>
133
+ <a href="" class="btn btn-secondary py-md-3 px-md-5 animated slideInRight">Learn More</a>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ <div class="carousel-item">
138
+ <img class="w-100" src="img/carousel-2.webp" alt="Image">
139
+ <div class="carousel-caption d-flex flex-column align-items-center justify-content-center">
140
+ <div class="p-3" style="max-width: 900px;">
141
+ <h5 class="text-white text-uppercase mb-3 animated slideInDown">Check Your Brain Health</h5>
142
+ <h1 class="display-1 text-white mb-md-4 animated zoomIn">Advanced AI for Early Cancer Classification</h1>
143
+ <a href="appointment.html" class="btn btn-primary py-md-3 px-md-5 me-3 animated slideInLeft">Start a Scan</a>
144
+ <a href="" class="btn btn-secondary py-md-3 px-md-5 animated slideInRight">Learn More</a>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ <button class="carousel-control-prev" type="button" data-bs-target="#header-carousel"
150
+ data-bs-slide="prev">
151
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
152
+ <span class="visually-hidden">Previous</span>
153
+ </button>
154
+ <button class="carousel-control-next" type="button" data-bs-target="#header-carousel"
155
+ data-bs-slide="next">
156
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
157
+ <span class="visually-hidden">Next</span>
158
+ </button>
159
+ </div>
160
+ </div>
161
+ <!-- Carousel End -->
162
+
163
+
164
+ <!-- Banner Start -->
165
+ <div class="container-fluid banner mb-5">
166
+ <div class="container">
167
+ <div class="row gx-0">
168
+ <div class="col-lg-4 wow zoomIn" data-wow-delay="0.1s">
169
+ <div class="bg-primary d-flex flex-column p-5" style="height: 300px;">
170
+ <h3 class="text-white mb-3">Technologies Used</h3>
171
+ <div class="d-flex justify-content-between text-white mb-3">
172
+ <h6 class="text-white mb-0">Frontend:</h6>
173
+ <p class="mb-0"> Angular, HTML5, CSS3, JavaScript</p>
174
+ </div>
175
+ <div class="d-flex justify-content-between text-white mb-3">
176
+ <h6 class="text-white mb-0">Backend:</h6>
177
+ <p class="mb-0"> GithubPages,Google Actions</p>
178
+ </div>
179
+ <div class="d-flex justify-content-between text-white mb-3">
180
+ <h6 class="text-white mb-0">AI Models:</h6>
181
+ <p class="mb-0"> TensorFlow, Keras, OpenCV</p>
182
+ </div>
183
+ <a class="btn btn-light" href="">Start a Scan</a>
184
+ </div>
185
+ </div>
186
+ <div class="col-lg-4 wow zoomIn" data-wow-delay="0.3s">
187
+ <div class="bg-dark d-flex flex-column p-5" style="height: 300px;">
188
+ <h3 class="text-white mb-3">Search A Service</h3>
189
+ <div class="date mb-3" id="date" data-target-input="nearest">
190
+ <input type="text" class="form-control bg-light border-0 datetimepicker-input"
191
+ placeholder="Appointment Date" data-target="#date" data-toggle="datetimepicker" style="height: 40px;">
192
+ </div>
193
+ <select class="form-select bg-light border-0 mb-3" style="height: 40px;">
194
+ <option selected>Select A Service</option>
195
+ <option value="1">Tumer Detection</option>
196
+ <option value="2">Tumer Classification</option>
197
+ </select>
198
+ <a class="btn btn-light" href="">Search</a>
199
+ </div>
200
+ </div>
201
+ <div class="col-lg-4 wow zoomIn" data-wow-delay="0.6s">
202
+ <div class="bg-secondary d-flex flex-column p-5" style="height: 300px;">
203
+ <h3 class="text-white mb-3">Inspiration Behind HealthScanAI</h3>
204
+ <p class="text-white">The inspiration for HealthScanAI stemmed from a desire to contribute to the fight against cancer. With the rising incidence of cancer globally, early detection has never been more crucial</p>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ </div>
209
+ </div>
210
+ <!-- Banner Start -->
211
+
212
+
213
+ <!-- About Start -->
214
+ <div class="container-fluid py-5 wow fadeInUp" data-wow-delay="0.1s">
215
+ <div class="container">
216
+ <div class="row g-5">
217
+ <div class="col-lg-7">
218
+ <div class="section-title mb-4">
219
+ <h5 class="position-relative d-inline-block text-primary text-uppercase">About Us</h5>
220
+ <h1 class="display-5 mb-0">Welcome to BrainScanAI, the innovative platform</h1>
221
+ </div>
222
+ <h4 class="text-body fst-italic mb-4">developed as part of an internship at the Advanced Technologies for Medicine and Signal (ATMS) center by Mohamed Benhasan</h4>
223
+ <p class="mb-4">HealthScanAI is dedicated to revolutionizing cancer detection using cutting-edge artificial intelligence technologies. Our mission is to provide accessible, accurate, and early cancer detection to save lives and improve health outcomes worldwide.</p>
224
+ <div class="row g-3">
225
+ <div class="col-sm-6 wow zoomIn" data-wow-delay="0.3s">
226
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>User-Friendly Interface</h5>
227
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>Multi-Model Detection System</h5>
228
+ </div>
229
+ <div class="col-sm-6 wow zoomIn" data-wow-delay="0.6s">
230
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>Rapid Analysis and Results</h5>
231
+ <h5 class="mb-3"><i class="fa fa-check-circle text-primary me-3"></i>24/7 Opened</h5>
232
+ </div>
233
+ </div>
234
+ <a href="appointment.html" class="btn btn-primary py-3 px-5 mt-4 wow zoomIn" data-wow-delay="0.6s">Start a Scan</a>
235
+ </div>
236
+ <div class="col-lg-5" style="min-height: 500px;">
237
+ <div class="position-relative h-100">
238
+ <img class="position-absolute w-100 h-100 rounded wow zoomIn" data-wow-delay="0.9s" src="img/about.png" style="object-fit: cover;">
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ <!-- About End -->
245
+
246
+
247
+ <!-- Appointment Start -->
248
+ <div class="container-fluid bg-primary bg-appointment my-5 wow fadeInUp" data-wow-delay="0.1s">
249
+ <div class="container">
250
+ <div class="row gx-5">
251
+ <div class="col-lg-6 py-5">
252
+ <div class="py-5">
253
+ <h1 class="display-5 text-white mb-4">Upload your medical images and let our advanced AI models help you detect early signs of cancer</h1>
254
+ <p class="text-white mb-0">On the Scan Page of BrainScanAI, users follow a straightforward process: <br><br><b>Step 1</b> is selecting an AI model for detection or classification.</br> <br><b>Step 2</b> involves uploading a medical image (X-ray, MRI, or CT scan) with a progress bar showing upload status.</br> <br><b>Step 3</b> requires clicking "Start Scan" to initiate the analysis. Results are then displayed on the page, offering a clear and accessible method for cancer detection.</br></p>
255
+ </div>
256
+ </div>
257
+ <div class="col-lg-6">
258
+ <div class="appointment-form h-100 d-flex flex-column justify-content-center text-center p-5 wow zoomIn" data-wow-delay="0.6s">
259
+ <h1 class="text-white mb-4">AI-Powered Cancer Detection</h1>
260
+ <form>
261
+ <div class="row g-3">
262
+ <div class="col-12 col-sm-6">
263
+ <select class="form-select bg-light border-0" style="height: 55px;">
264
+ <option selected>Select A Service</option>
265
+ <option value="1">Service 1</option>
266
+ <option value="2">Service 2</option>
267
+ <option value="3">Service 3</option>
268
+ </select>
269
+ </div>
270
+ <div class="col-12 col-sm-6">
271
+ <select class="form-select bg-light border-0" style="height: 55px;">
272
+ <option selected>Select Doctor</option>
273
+ <option value="1">Doctor 1</option>
274
+ <option value="2">Doctor 2</option>
275
+ <option value="3">Doctor 3</option>
276
+ </select>
277
+ </div>
278
+ <div class="col-12 col-sm-6">
279
+ <input type="text" class="form-control bg-light border-0" placeholder="Your Name" style="height: 55px;">
280
+ </div>
281
+ <div class="col-12 col-sm-6">
282
+ <input type="email" class="form-control bg-light border-0" placeholder="Your Email" style="height: 55px;">
283
+ </div>
284
+ <div class="col-12 col-sm-6">
285
+ <div class="date" id="date1" data-target-input="nearest">
286
+ <input type="text"
287
+ class="form-control bg-light border-0 datetimepicker-input"
288
+ placeholder="Appointment Date" data-target="#date1" data-toggle="datetimepicker" style="height: 55px;">
289
+ </div>
290
+ </div>
291
+ <div class="col-12 col-sm-6">
292
+ <div class="time" id="time1" data-target-input="nearest">
293
+ <input type="text"
294
+ class="form-control bg-light border-0 datetimepicker-input"
295
+ placeholder="Appointment Time" data-target="#time1" data-toggle="datetimepicker" style="height: 55px;">
296
+ </div>
297
+ </div>
298
+ <div class="col-12">
299
+ <button class="btn btn-dark w-100 py-3" type="submit">Start Scan</button>
300
+ </div>
301
+ </div>
302
+ </form>
303
+ </div>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ </div>
308
+ <!-- Appointment End -->
309
+
310
+
311
+ <!-- Service Start -->
312
+ <div class="container-fluid py-5 wow fadeInUp" data-wow-delay="0.1s">
313
+ <div class="container">
314
+ <div class="row g-5 mb-5">
315
+ <div class="col-lg-5 wow zoomIn" data-wow-delay="0.3s" style="min-height: 400px;">
316
+ <div class="twentytwenty-container position-relative h-100 rounded overflow-hidden">
317
+ <img class="position-absolute w-100 h-100" src="img/after.jpeg" style="object-fit: cover;">
318
+ <img class="position-absolute w-100 h-100" src="img/after.jpeg" style="object-fit: cover;">
319
+ </div>
320
+ </div>
321
+ <div class="col-lg-7">
322
+ <div class="section-title mb-5">
323
+ <h5 class="position-relative d-inline-block text-primary text-uppercase">Our Services</h5>
324
+ <h1 class="display-5 mb-0">Discover how BrainScanAI can assist you with advanced cancer detection and classification</h1>
325
+ </div>
326
+ <div class="row g-5">
327
+ <div class="col-md-6 service-item wow zoomIn" data-wow-delay="0.6s">
328
+ <div class="rounded-top overflow-hidden">
329
+ <img class="img-fluid" src="img/service-1.png" alt="">
330
+ </div>
331
+ <div class="position-relative bg-light rounded-bottom text-center p-4">
332
+ <h5 class="m-0">Tumer Detection</h5>
333
+ </div>
334
+ </div>
335
+ <div class="col-md-6 service-item wow zoomIn" data-wow-delay="0.9s">
336
+ <div class="rounded-top overflow-hidden">
337
+ <img class="img-fluid" src="img/service-2.png" alt="">
338
+ </div>
339
+ <div class="position-relative bg-light rounded-bottom text-center p-4">
340
+ <h5 class="m-0">Tumer Classification</h5>
341
+ </div>
342
+ </div>
343
+ </div>
344
+ </div>
345
+ </div>
346
+ </div>
347
+ </div>
348
+ <!-- Service End -->
349
+
350
+
351
+ <!-- Offer Start -->
352
+ <div class="container-fluid bg-offer my-5 py-5 wow fadeInUp" data-wow-delay="0.1s">
353
+ <div class="container py-5">
354
+ <div class="row justify-content-center">
355
+ <div class="col-lg-7 wow zoomIn" data-wow-delay="0.6s">
356
+ <div class="offer-text text-center rounded p-5">
357
+ <h1 class="display-5 text-white">Checkup You Brain With BrainScanAI</h1>
358
+ <p class="text-white mb-4">Our classification model integrates the outputs from the above modes, providing a comprehensive diagnosis that combines the strengths of each AI model. The system is trained on extensive datasets to ensure high accuracy and reliability in identifying cancerous cells.</p>
359
+ <a href="appointment.html" class="btn btn-dark py-3 px-5 me-3">Start a Scan</a>
360
+ <a href="" class="btn btn-light py-3 px-5">Read More</a>
361
+ </div>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ <!-- Offer End -->
367
+
368
+
369
+ <!-- Newsletter Start -->
370
+ <div class="container-fluid position-relative pt-5 wow fadeInUp" data-wow-delay="0.1s" style="z-index: 1;">
371
+ <div class="container">
372
+ <div class="bg-primary p-5">
373
+ <form class="mx-auto" style="max-width: 600px;">
374
+ <div class="input-group">
375
+ <input type="text" class="form-control border-white p-3" placeholder="Your Email">
376
+ <button class="btn btn-dark px-4">Sign Up</button>
377
+ </div>
378
+ </form>
379
+ </div>
380
+ </div>
381
+ </div>
382
+ <!-- Newsletter End -->
383
+
384
+
385
+ <!-- Footer Start -->
386
+ <div class="container-fluid bg-dark text-light py-5 wow fadeInUp" data-wow-delay="0.3s" style="margin-top: -75px;">
387
+ <div class="container pt-5">
388
+ <div class="row g-5 pt-4">
389
+ <div class="col-lg-3 col-md-6">
390
+ <h3 class="text-white mb-4">Quick Links</h3>
391
+ <div class="d-flex flex-column justify-content-start">
392
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
393
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
394
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
395
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
396
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
397
+ </div>
398
+ </div>
399
+ <div class="col-lg-3 col-md-6">
400
+ <h3 class="text-white mb-4">Popular Links</h3>
401
+ <div class="d-flex flex-column justify-content-start">
402
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Home</a>
403
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>About Us</a>
404
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Our Services</a>
405
+ <a class="text-light mb-2" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Latest Blog</a>
406
+ <a class="text-light" href="#"><i class="bi bi-arrow-right text-primary me-2"></i>Contact Us</a>
407
+ </div>
408
+ </div>
409
+ <div class="col-lg-3 col-md-6">
410
+ <h3 class="text-white mb-4">Get In Touch</h3>
411
+ <p class="mb-2"><i class="bi bi-geo-alt text-primary me-2"></i> Sfax, Tunisia</p>
412
+ <p class="mb-2"><i class="bi bi-envelope-open text-primary me-2"></i>[email protected]</p>
413
+ <p class="mb-0"><i class="bi bi-telephone text-primary me-2"></i>+216 56564549</p>
414
+ </div>
415
+ <div class="col-lg-3 col-md-6">
416
+ <h3 class="text-white mb-4">Follow Us</h3>
417
+ <div class="d-flex">
418
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-twitter fw-normal"></i></a>
419
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-facebook-f fw-normal"></i></a>
420
+ <a class="btn btn-lg btn-primary btn-lg-square rounded me-2" href="#"><i class="fab fa-linkedin-in fw-normal"></i></a>
421
+ <a class="btn btn-lg btn-primary btn-lg-square rounded" href="#"><i class="fab fa-instagram fw-normal"></i></a>
422
+ </div>
423
+ </div>
424
+ </div>
425
+ </div>
426
+ </div>
427
+ <div class="container-fluid text-light py-4" style="background: #051225;">
428
+ <div class="container">
429
+ <div class="row g-0">
430
+ <div class="col-md-6 text-center text-md-start">
431
+ <p class="mb-md-0">&copy; <a class="text-white border-bottom" href="#">BrainScanAI</a>. All Rights Reserved.</p>
432
+ </div>
433
+ <div class="col-md-6 text-center text-md-end">
434
+ <p class="mb-0">Designed by <a class="text-white border-bottom">Mohamed Benhasan</a><br>
435
+ </p>
436
+ </div>
437
+ </div>
438
+ </div>
439
+ </div>
440
+ <!-- Footer End -->
441
+
442
+
443
+ <!-- Back to Top -->
444
+ <a href="#" class="btn btn-lg btn-primary btn-lg-square rounded back-to-top"><i class="bi bi-arrow-up"></i></a>
445
+
446
+
447
+ <!-- JavaScript Libraries -->
448
+ <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
449
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
450
+ <script src="lib/wow/wow.min.js"></script>
451
+ <script src="lib/easing/easing.min.js"></script>
452
+ <script src="lib/waypoints/waypoints.min.js"></script>
453
+ <script src="lib/owlcarousel/owl.carousel.min.js"></script>
454
+ <script src="lib/tempusdominus/js/moment.min.js"></script>
455
+ <script src="lib/tempusdominus/js/moment-timezone.min.js"></script>
456
+ <script src="lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js"></script>
457
+ <script src="lib/twentytwenty/jquery.event.move.js"></script>
458
+ <script src="lib/twentytwenty/jquery.twentytwenty.js"></script>
459
+
460
+ <!-- Template Javascript -->
461
+ <script src="js/main.js"></script>
462
+ </body>
463
+
464
+ </html>
js/main.js ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ "use strict";
3
+
4
+ // Spinner
5
+ var spinner = function () {
6
+ setTimeout(function () {
7
+ if ($('#spinner').length > 0) {
8
+ $('#spinner').removeClass('show');
9
+ }
10
+ }, 1);
11
+ };
12
+ spinner();
13
+
14
+
15
+ // Initiate the wowjs
16
+ new WOW().init();
17
+
18
+
19
+ // Sticky Navbar
20
+ $(window).scroll(function () {
21
+ if ($(this).scrollTop() > 40) {
22
+ $('.navbar').addClass('sticky-top');
23
+ } else {
24
+ $('.navbar').removeClass('sticky-top');
25
+ }
26
+ });
27
+
28
+ // Dropdown on mouse hover
29
+ const $dropdown = $(".dropdown");
30
+ const $dropdownToggle = $(".dropdown-toggle");
31
+ const $dropdownMenu = $(".dropdown-menu");
32
+ const showClass = "show";
33
+
34
+ $(window).on("load resize", function() {
35
+ if (this.matchMedia("(min-width: 992px)").matches) {
36
+ $dropdown.hover(
37
+ function() {
38
+ const $this = $(this);
39
+ $this.addClass(showClass);
40
+ $this.find($dropdownToggle).attr("aria-expanded", "true");
41
+ $this.find($dropdownMenu).addClass(showClass);
42
+ },
43
+ function() {
44
+ const $this = $(this);
45
+ $this.removeClass(showClass);
46
+ $this.find($dropdownToggle).attr("aria-expanded", "false");
47
+ $this.find($dropdownMenu).removeClass(showClass);
48
+ }
49
+ );
50
+ } else {
51
+ $dropdown.off("mouseenter mouseleave");
52
+ }
53
+ });
54
+
55
+
56
+ // Back to top button
57
+ $(window).scroll(function () {
58
+ if ($(this).scrollTop() > 100) {
59
+ $('.back-to-top').fadeIn('slow');
60
+ } else {
61
+ $('.back-to-top').fadeOut('slow');
62
+ }
63
+ });
64
+ $('.back-to-top').click(function () {
65
+ $('html, body').animate({scrollTop: 0}, 1500, 'easeInOutExpo');
66
+ return false;
67
+ });
68
+
69
+
70
+ // Date and time picker
71
+ $('.date').datetimepicker({
72
+ format: 'L'
73
+ });
74
+ $('.time').datetimepicker({
75
+ format: 'LT'
76
+ });
77
+
78
+
79
+ // Image comparison
80
+ $(".twentytwenty-container").twentytwenty({});
81
+
82
+
83
+ // Price carousel
84
+ $(".price-carousel").owlCarousel({
85
+ autoplay: true,
86
+ smartSpeed: 1500,
87
+ margin: 45,
88
+ dots: false,
89
+ loop: true,
90
+ nav : true,
91
+ navText : [
92
+ '<i class="bi bi-arrow-left"></i>',
93
+ '<i class="bi bi-arrow-right"></i>'
94
+ ],
95
+ responsive: {
96
+ 0:{
97
+ items:1
98
+ },
99
+ 768:{
100
+ items:2
101
+ }
102
+ }
103
+ });
104
+
105
+
106
+ // Testimonials carousel
107
+ $(".testimonial-carousel").owlCarousel({
108
+ autoplay: true,
109
+ smartSpeed: 1000,
110
+ items: 1,
111
+ dots: false,
112
+ loop: true,
113
+ nav : true,
114
+ navText : [
115
+ '<i class="bi bi-arrow-left"></i>',
116
+ '<i class="bi bi-arrow-right"></i>'
117
+ ],
118
+ });
119
+
120
+ })(jQuery);
121
+
lib/animate/animate.css ADDED
@@ -0,0 +1,1579 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.5.2
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2017 Daniel Eden
9
+ */
10
+
11
+ .animated {
12
+ animation-duration: 1s;
13
+ animation-fill-mode: both;
14
+ }
15
+
16
+ .animated.infinite {
17
+ animation-iteration-count: infinite;
18
+ }
19
+
20
+ .animated.hinge {
21
+ animation-duration: 2s;
22
+ }
23
+
24
+ .animated.flipOutX,
25
+ .animated.flipOutY,
26
+ .animated.bounceIn,
27
+ .animated.bounceOut {
28
+ animation-duration: .75s;
29
+ }
30
+
31
+ @keyframes bounce {
32
+ from, 20%, 53%, 80%, to {
33
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
34
+ transform: translate3d(0,0,0);
35
+ }
36
+
37
+ 40%, 43% {
38
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
39
+ transform: translate3d(0, -30px, 0);
40
+ }
41
+
42
+ 70% {
43
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
44
+ transform: translate3d(0, -15px, 0);
45
+ }
46
+
47
+ 90% {
48
+ transform: translate3d(0,-4px,0);
49
+ }
50
+ }
51
+
52
+ .bounce {
53
+ animation-name: bounce;
54
+ transform-origin: center bottom;
55
+ }
56
+
57
+ @keyframes flash {
58
+ from, 50%, to {
59
+ opacity: 1;
60
+ }
61
+
62
+ 25%, 75% {
63
+ opacity: 0;
64
+ }
65
+ }
66
+
67
+ .flash {
68
+ animation-name: flash;
69
+ }
70
+
71
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
72
+
73
+ @keyframes pulse {
74
+ from {
75
+ transform: scale3d(1, 1, 1);
76
+ }
77
+
78
+ 50% {
79
+ transform: scale3d(1.05, 1.05, 1.05);
80
+ }
81
+
82
+ to {
83
+ transform: scale3d(1, 1, 1);
84
+ }
85
+ }
86
+
87
+ .pulse {
88
+ animation-name: pulse;
89
+ }
90
+
91
+ @keyframes rubberBand {
92
+ from {
93
+ transform: scale3d(1, 1, 1);
94
+ }
95
+
96
+ 30% {
97
+ transform: scale3d(1.25, 0.75, 1);
98
+ }
99
+
100
+ 40% {
101
+ transform: scale3d(0.75, 1.25, 1);
102
+ }
103
+
104
+ 50% {
105
+ transform: scale3d(1.15, 0.85, 1);
106
+ }
107
+
108
+ 65% {
109
+ transform: scale3d(.95, 1.05, 1);
110
+ }
111
+
112
+ 75% {
113
+ transform: scale3d(1.05, .95, 1);
114
+ }
115
+
116
+ to {
117
+ transform: scale3d(1, 1, 1);
118
+ }
119
+ }
120
+
121
+ .rubberBand {
122
+ animation-name: rubberBand;
123
+ }
124
+
125
+ @keyframes shake {
126
+ from, to {
127
+ transform: translate3d(0, 0, 0);
128
+ }
129
+
130
+ 10%, 30%, 50%, 70%, 90% {
131
+ transform: translate3d(-10px, 0, 0);
132
+ }
133
+
134
+ 20%, 40%, 60%, 80% {
135
+ transform: translate3d(10px, 0, 0);
136
+ }
137
+ }
138
+
139
+ .shake {
140
+ animation-name: shake;
141
+ }
142
+
143
+ @keyframes headShake {
144
+ 0% {
145
+ transform: translateX(0);
146
+ }
147
+
148
+ 6.5% {
149
+ transform: translateX(-6px) rotateY(-9deg);
150
+ }
151
+
152
+ 18.5% {
153
+ transform: translateX(5px) rotateY(7deg);
154
+ }
155
+
156
+ 31.5% {
157
+ transform: translateX(-3px) rotateY(-5deg);
158
+ }
159
+
160
+ 43.5% {
161
+ transform: translateX(2px) rotateY(3deg);
162
+ }
163
+
164
+ 50% {
165
+ transform: translateX(0);
166
+ }
167
+ }
168
+
169
+ .headShake {
170
+ animation-timing-function: ease-in-out;
171
+ animation-name: headShake;
172
+ }
173
+
174
+ @keyframes swing {
175
+ 20% {
176
+ transform: rotate3d(0, 0, 1, 15deg);
177
+ }
178
+
179
+ 40% {
180
+ transform: rotate3d(0, 0, 1, -10deg);
181
+ }
182
+
183
+ 60% {
184
+ transform: rotate3d(0, 0, 1, 5deg);
185
+ }
186
+
187
+ 80% {
188
+ transform: rotate3d(0, 0, 1, -5deg);
189
+ }
190
+
191
+ to {
192
+ transform: rotate3d(0, 0, 1, 0deg);
193
+ }
194
+ }
195
+
196
+ .swing {
197
+ transform-origin: top center;
198
+ animation-name: swing;
199
+ }
200
+
201
+ @keyframes tada {
202
+ from {
203
+ transform: scale3d(1, 1, 1);
204
+ }
205
+
206
+ 10%, 20% {
207
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
208
+ }
209
+
210
+ 30%, 50%, 70%, 90% {
211
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
212
+ }
213
+
214
+ 40%, 60%, 80% {
215
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
216
+ }
217
+
218
+ to {
219
+ transform: scale3d(1, 1, 1);
220
+ }
221
+ }
222
+
223
+ .tada {
224
+ animation-name: tada;
225
+ }
226
+
227
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
228
+
229
+ @keyframes wobble {
230
+ from {
231
+ transform: none;
232
+ }
233
+
234
+ 15% {
235
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
236
+ }
237
+
238
+ 30% {
239
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
240
+ }
241
+
242
+ 45% {
243
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
244
+ }
245
+
246
+ 60% {
247
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
248
+ }
249
+
250
+ 75% {
251
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
252
+ }
253
+
254
+ to {
255
+ transform: none;
256
+ }
257
+ }
258
+
259
+ .wobble {
260
+ animation-name: wobble;
261
+ }
262
+
263
+ @keyframes jello {
264
+ from, 11.1%, to {
265
+ transform: none;
266
+ }
267
+
268
+ 22.2% {
269
+ transform: skewX(-12.5deg) skewY(-12.5deg);
270
+ }
271
+
272
+ 33.3% {
273
+ transform: skewX(6.25deg) skewY(6.25deg);
274
+ }
275
+
276
+ 44.4% {
277
+ transform: skewX(-3.125deg) skewY(-3.125deg);
278
+ }
279
+
280
+ 55.5% {
281
+ transform: skewX(1.5625deg) skewY(1.5625deg);
282
+ }
283
+
284
+ 66.6% {
285
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
286
+ }
287
+
288
+ 77.7% {
289
+ transform: skewX(0.390625deg) skewY(0.390625deg);
290
+ }
291
+
292
+ 88.8% {
293
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
294
+ }
295
+ }
296
+
297
+ .jello {
298
+ animation-name: jello;
299
+ transform-origin: center;
300
+ }
301
+
302
+ @keyframes bounceIn {
303
+ from, 20%, 40%, 60%, 80%, to {
304
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
305
+ }
306
+
307
+ 0% {
308
+ opacity: 0;
309
+ transform: scale3d(.3, .3, .3);
310
+ }
311
+
312
+ 20% {
313
+ transform: scale3d(1.1, 1.1, 1.1);
314
+ }
315
+
316
+ 40% {
317
+ transform: scale3d(.9, .9, .9);
318
+ }
319
+
320
+ 60% {
321
+ opacity: 1;
322
+ transform: scale3d(1.03, 1.03, 1.03);
323
+ }
324
+
325
+ 80% {
326
+ transform: scale3d(.97, .97, .97);
327
+ }
328
+
329
+ to {
330
+ opacity: 1;
331
+ transform: scale3d(1, 1, 1);
332
+ }
333
+ }
334
+
335
+ .bounceIn {
336
+ animation-name: bounceIn;
337
+ }
338
+
339
+ @keyframes bounceInDown {
340
+ from, 60%, 75%, 90%, to {
341
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
342
+ }
343
+
344
+ 0% {
345
+ opacity: 0;
346
+ transform: translate3d(0, -3000px, 0);
347
+ }
348
+
349
+ 60% {
350
+ opacity: 1;
351
+ transform: translate3d(0, 25px, 0);
352
+ }
353
+
354
+ 75% {
355
+ transform: translate3d(0, -10px, 0);
356
+ }
357
+
358
+ 90% {
359
+ transform: translate3d(0, 5px, 0);
360
+ }
361
+
362
+ to {
363
+ transform: none;
364
+ }
365
+ }
366
+
367
+ .bounceInDown {
368
+ animation-name: bounceInDown;
369
+ }
370
+
371
+ @keyframes bounceInLeft {
372
+ from, 60%, 75%, 90%, to {
373
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
374
+ }
375
+
376
+ 0% {
377
+ opacity: 0;
378
+ transform: translate3d(-3000px, 0, 0);
379
+ }
380
+
381
+ 60% {
382
+ opacity: 1;
383
+ transform: translate3d(25px, 0, 0);
384
+ }
385
+
386
+ 75% {
387
+ transform: translate3d(-10px, 0, 0);
388
+ }
389
+
390
+ 90% {
391
+ transform: translate3d(5px, 0, 0);
392
+ }
393
+
394
+ to {
395
+ transform: none;
396
+ }
397
+ }
398
+
399
+ .bounceInLeft {
400
+ animation-name: bounceInLeft;
401
+ }
402
+
403
+ @keyframes bounceInRight {
404
+ from, 60%, 75%, 90%, to {
405
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
406
+ }
407
+
408
+ from {
409
+ opacity: 0;
410
+ transform: translate3d(3000px, 0, 0);
411
+ }
412
+
413
+ 60% {
414
+ opacity: 1;
415
+ transform: translate3d(-25px, 0, 0);
416
+ }
417
+
418
+ 75% {
419
+ transform: translate3d(10px, 0, 0);
420
+ }
421
+
422
+ 90% {
423
+ transform: translate3d(-5px, 0, 0);
424
+ }
425
+
426
+ to {
427
+ transform: none;
428
+ }
429
+ }
430
+
431
+ .bounceInRight {
432
+ animation-name: bounceInRight;
433
+ }
434
+
435
+ @keyframes bounceInUp {
436
+ from, 60%, 75%, 90%, to {
437
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
438
+ }
439
+
440
+ from {
441
+ opacity: 0;
442
+ transform: translate3d(0, 3000px, 0);
443
+ }
444
+
445
+ 60% {
446
+ opacity: 1;
447
+ transform: translate3d(0, -20px, 0);
448
+ }
449
+
450
+ 75% {
451
+ transform: translate3d(0, 10px, 0);
452
+ }
453
+
454
+ 90% {
455
+ transform: translate3d(0, -5px, 0);
456
+ }
457
+
458
+ to {
459
+ transform: translate3d(0, 0, 0);
460
+ }
461
+ }
462
+
463
+ .bounceInUp {
464
+ animation-name: bounceInUp;
465
+ }
466
+
467
+ @keyframes bounceOut {
468
+ 20% {
469
+ transform: scale3d(.9, .9, .9);
470
+ }
471
+
472
+ 50%, 55% {
473
+ opacity: 1;
474
+ transform: scale3d(1.1, 1.1, 1.1);
475
+ }
476
+
477
+ to {
478
+ opacity: 0;
479
+ transform: scale3d(.3, .3, .3);
480
+ }
481
+ }
482
+
483
+ .bounceOut {
484
+ animation-name: bounceOut;
485
+ }
486
+
487
+ @keyframes bounceOutDown {
488
+ 20% {
489
+ transform: translate3d(0, 10px, 0);
490
+ }
491
+
492
+ 40%, 45% {
493
+ opacity: 1;
494
+ transform: translate3d(0, -20px, 0);
495
+ }
496
+
497
+ to {
498
+ opacity: 0;
499
+ transform: translate3d(0, 2000px, 0);
500
+ }
501
+ }
502
+
503
+ .bounceOutDown {
504
+ animation-name: bounceOutDown;
505
+ }
506
+
507
+ @keyframes bounceOutLeft {
508
+ 20% {
509
+ opacity: 1;
510
+ transform: translate3d(20px, 0, 0);
511
+ }
512
+
513
+ to {
514
+ opacity: 0;
515
+ transform: translate3d(-2000px, 0, 0);
516
+ }
517
+ }
518
+
519
+ .bounceOutLeft {
520
+ animation-name: bounceOutLeft;
521
+ }
522
+
523
+ @keyframes bounceOutRight {
524
+ 20% {
525
+ opacity: 1;
526
+ transform: translate3d(-20px, 0, 0);
527
+ }
528
+
529
+ to {
530
+ opacity: 0;
531
+ transform: translate3d(2000px, 0, 0);
532
+ }
533
+ }
534
+
535
+ .bounceOutRight {
536
+ animation-name: bounceOutRight;
537
+ }
538
+
539
+ @keyframes bounceOutUp {
540
+ 20% {
541
+ transform: translate3d(0, -10px, 0);
542
+ }
543
+
544
+ 40%, 45% {
545
+ opacity: 1;
546
+ transform: translate3d(0, 20px, 0);
547
+ }
548
+
549
+ to {
550
+ opacity: 0;
551
+ transform: translate3d(0, -2000px, 0);
552
+ }
553
+ }
554
+
555
+ .bounceOutUp {
556
+ animation-name: bounceOutUp;
557
+ }
558
+
559
+ @keyframes fadeIn {
560
+ from {
561
+ opacity: 0;
562
+ }
563
+
564
+ to {
565
+ opacity: 1;
566
+ }
567
+ }
568
+
569
+ .fadeIn {
570
+ animation-name: fadeIn;
571
+ }
572
+
573
+ @keyframes fadeInDown {
574
+ from {
575
+ opacity: 0;
576
+ transform: translate3d(0, -100%, 0);
577
+ }
578
+
579
+ to {
580
+ opacity: 1;
581
+ transform: none;
582
+ }
583
+ }
584
+
585
+ .fadeInDown {
586
+ animation-name: fadeInDown;
587
+ }
588
+
589
+ @keyframes fadeInDownBig {
590
+ from {
591
+ opacity: 0;
592
+ transform: translate3d(0, -2000px, 0);
593
+ }
594
+
595
+ to {
596
+ opacity: 1;
597
+ transform: none;
598
+ }
599
+ }
600
+
601
+ .fadeInDownBig {
602
+ animation-name: fadeInDownBig;
603
+ }
604
+
605
+ @keyframes fadeInLeft {
606
+ from {
607
+ opacity: 0;
608
+ transform: translate3d(-100%, 0, 0);
609
+ }
610
+
611
+ to {
612
+ opacity: 1;
613
+ transform: none;
614
+ }
615
+ }
616
+
617
+ .fadeInLeft {
618
+ animation-name: fadeInLeft;
619
+ }
620
+
621
+ @keyframes fadeInLeftBig {
622
+ from {
623
+ opacity: 0;
624
+ transform: translate3d(-2000px, 0, 0);
625
+ }
626
+
627
+ to {
628
+ opacity: 1;
629
+ transform: none;
630
+ }
631
+ }
632
+
633
+ .fadeInLeftBig {
634
+ animation-name: fadeInLeftBig;
635
+ }
636
+
637
+ @keyframes fadeInRight {
638
+ from {
639
+ opacity: 0;
640
+ transform: translate3d(100%, 0, 0);
641
+ }
642
+
643
+ to {
644
+ opacity: 1;
645
+ transform: none;
646
+ }
647
+ }
648
+
649
+ .fadeInRight {
650
+ animation-name: fadeInRight;
651
+ }
652
+
653
+ @keyframes fadeInRightBig {
654
+ from {
655
+ opacity: 0;
656
+ transform: translate3d(2000px, 0, 0);
657
+ }
658
+
659
+ to {
660
+ opacity: 1;
661
+ transform: none;
662
+ }
663
+ }
664
+
665
+ .fadeInRightBig {
666
+ animation-name: fadeInRightBig;
667
+ }
668
+
669
+ @keyframes fadeInUp {
670
+ from {
671
+ opacity: 0;
672
+ transform: translate3d(0, 100%, 0);
673
+ }
674
+
675
+ to {
676
+ opacity: 1;
677
+ transform: none;
678
+ }
679
+ }
680
+
681
+ .fadeInUp {
682
+ animation-name: fadeInUp;
683
+ }
684
+
685
+ @keyframes fadeInUpBig {
686
+ from {
687
+ opacity: 0;
688
+ transform: translate3d(0, 2000px, 0);
689
+ }
690
+
691
+ to {
692
+ opacity: 1;
693
+ transform: none;
694
+ }
695
+ }
696
+
697
+ .fadeInUpBig {
698
+ animation-name: fadeInUpBig;
699
+ }
700
+
701
+ @keyframes fadeOut {
702
+ from {
703
+ opacity: 1;
704
+ }
705
+
706
+ to {
707
+ opacity: 0;
708
+ }
709
+ }
710
+
711
+ .fadeOut {
712
+ animation-name: fadeOut;
713
+ }
714
+
715
+ @keyframes fadeOutDown {
716
+ from {
717
+ opacity: 1;
718
+ }
719
+
720
+ to {
721
+ opacity: 0;
722
+ transform: translate3d(0, 100%, 0);
723
+ }
724
+ }
725
+
726
+ .fadeOutDown {
727
+ animation-name: fadeOutDown;
728
+ }
729
+
730
+ @keyframes fadeOutDownBig {
731
+ from {
732
+ opacity: 1;
733
+ }
734
+
735
+ to {
736
+ opacity: 0;
737
+ transform: translate3d(0, 2000px, 0);
738
+ }
739
+ }
740
+
741
+ .fadeOutDownBig {
742
+ animation-name: fadeOutDownBig;
743
+ }
744
+
745
+ @keyframes fadeOutLeft {
746
+ from {
747
+ opacity: 1;
748
+ }
749
+
750
+ to {
751
+ opacity: 0;
752
+ transform: translate3d(-100%, 0, 0);
753
+ }
754
+ }
755
+
756
+ .fadeOutLeft {
757
+ animation-name: fadeOutLeft;
758
+ }
759
+
760
+ @keyframes fadeOutLeftBig {
761
+ from {
762
+ opacity: 1;
763
+ }
764
+
765
+ to {
766
+ opacity: 0;
767
+ transform: translate3d(-2000px, 0, 0);
768
+ }
769
+ }
770
+
771
+ .fadeOutLeftBig {
772
+ animation-name: fadeOutLeftBig;
773
+ }
774
+
775
+ @keyframes fadeOutRight {
776
+ from {
777
+ opacity: 1;
778
+ }
779
+
780
+ to {
781
+ opacity: 0;
782
+ transform: translate3d(100%, 0, 0);
783
+ }
784
+ }
785
+
786
+ .fadeOutRight {
787
+ animation-name: fadeOutRight;
788
+ }
789
+
790
+ @keyframes fadeOutRightBig {
791
+ from {
792
+ opacity: 1;
793
+ }
794
+
795
+ to {
796
+ opacity: 0;
797
+ transform: translate3d(2000px, 0, 0);
798
+ }
799
+ }
800
+
801
+ .fadeOutRightBig {
802
+ animation-name: fadeOutRightBig;
803
+ }
804
+
805
+ @keyframes fadeOutUp {
806
+ from {
807
+ opacity: 1;
808
+ }
809
+
810
+ to {
811
+ opacity: 0;
812
+ transform: translate3d(0, -100%, 0);
813
+ }
814
+ }
815
+
816
+ .fadeOutUp {
817
+ animation-name: fadeOutUp;
818
+ }
819
+
820
+ @keyframes fadeOutUpBig {
821
+ from {
822
+ opacity: 1;
823
+ }
824
+
825
+ to {
826
+ opacity: 0;
827
+ transform: translate3d(0, -2000px, 0);
828
+ }
829
+ }
830
+
831
+ .fadeOutUpBig {
832
+ animation-name: fadeOutUpBig;
833
+ }
834
+
835
+ @keyframes flip {
836
+ from {
837
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
838
+ animation-timing-function: ease-out;
839
+ }
840
+
841
+ 40% {
842
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
843
+ animation-timing-function: ease-out;
844
+ }
845
+
846
+ 50% {
847
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
848
+ animation-timing-function: ease-in;
849
+ }
850
+
851
+ 80% {
852
+ transform: perspective(400px) scale3d(.95, .95, .95);
853
+ animation-timing-function: ease-in;
854
+ }
855
+
856
+ to {
857
+ transform: perspective(400px);
858
+ animation-timing-function: ease-in;
859
+ }
860
+ }
861
+
862
+ .animated.flip {
863
+ -webkit-backface-visibility: visible;
864
+ backface-visibility: visible;
865
+ animation-name: flip;
866
+ }
867
+
868
+ @keyframes flipInX {
869
+ from {
870
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
871
+ animation-timing-function: ease-in;
872
+ opacity: 0;
873
+ }
874
+
875
+ 40% {
876
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
877
+ animation-timing-function: ease-in;
878
+ }
879
+
880
+ 60% {
881
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
882
+ opacity: 1;
883
+ }
884
+
885
+ 80% {
886
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
887
+ }
888
+
889
+ to {
890
+ transform: perspective(400px);
891
+ }
892
+ }
893
+
894
+ .flipInX {
895
+ -webkit-backface-visibility: visible !important;
896
+ backface-visibility: visible !important;
897
+ animation-name: flipInX;
898
+ }
899
+
900
+ @keyframes flipInY {
901
+ from {
902
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
903
+ animation-timing-function: ease-in;
904
+ opacity: 0;
905
+ }
906
+
907
+ 40% {
908
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
909
+ animation-timing-function: ease-in;
910
+ }
911
+
912
+ 60% {
913
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
914
+ opacity: 1;
915
+ }
916
+
917
+ 80% {
918
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
919
+ }
920
+
921
+ to {
922
+ transform: perspective(400px);
923
+ }
924
+ }
925
+
926
+ .flipInY {
927
+ -webkit-backface-visibility: visible !important;
928
+ backface-visibility: visible !important;
929
+ animation-name: flipInY;
930
+ }
931
+
932
+ @keyframes flipOutX {
933
+ from {
934
+ transform: perspective(400px);
935
+ }
936
+
937
+ 30% {
938
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
939
+ opacity: 1;
940
+ }
941
+
942
+ to {
943
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
944
+ opacity: 0;
945
+ }
946
+ }
947
+
948
+ .flipOutX {
949
+ animation-name: flipOutX;
950
+ -webkit-backface-visibility: visible !important;
951
+ backface-visibility: visible !important;
952
+ }
953
+
954
+ @keyframes flipOutY {
955
+ from {
956
+ transform: perspective(400px);
957
+ }
958
+
959
+ 30% {
960
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
961
+ opacity: 1;
962
+ }
963
+
964
+ to {
965
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
966
+ opacity: 0;
967
+ }
968
+ }
969
+
970
+ .flipOutY {
971
+ -webkit-backface-visibility: visible !important;
972
+ backface-visibility: visible !important;
973
+ animation-name: flipOutY;
974
+ }
975
+
976
+ @keyframes lightSpeedIn {
977
+ from {
978
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
979
+ opacity: 0;
980
+ }
981
+
982
+ 60% {
983
+ transform: skewX(20deg);
984
+ opacity: 1;
985
+ }
986
+
987
+ 80% {
988
+ transform: skewX(-5deg);
989
+ opacity: 1;
990
+ }
991
+
992
+ to {
993
+ transform: none;
994
+ opacity: 1;
995
+ }
996
+ }
997
+
998
+ .lightSpeedIn {
999
+ animation-name: lightSpeedIn;
1000
+ animation-timing-function: ease-out;
1001
+ }
1002
+
1003
+ @keyframes lightSpeedOut {
1004
+ from {
1005
+ opacity: 1;
1006
+ }
1007
+
1008
+ to {
1009
+ transform: translate3d(100%, 0, 0) skewX(30deg);
1010
+ opacity: 0;
1011
+ }
1012
+ }
1013
+
1014
+ .lightSpeedOut {
1015
+ animation-name: lightSpeedOut;
1016
+ animation-timing-function: ease-in;
1017
+ }
1018
+
1019
+ @keyframes rotateIn {
1020
+ from {
1021
+ transform-origin: center;
1022
+ transform: rotate3d(0, 0, 1, -200deg);
1023
+ opacity: 0;
1024
+ }
1025
+
1026
+ to {
1027
+ transform-origin: center;
1028
+ transform: none;
1029
+ opacity: 1;
1030
+ }
1031
+ }
1032
+
1033
+ .rotateIn {
1034
+ animation-name: rotateIn;
1035
+ }
1036
+
1037
+ @keyframes rotateInDownLeft {
1038
+ from {
1039
+ transform-origin: left bottom;
1040
+ transform: rotate3d(0, 0, 1, -45deg);
1041
+ opacity: 0;
1042
+ }
1043
+
1044
+ to {
1045
+ transform-origin: left bottom;
1046
+ transform: none;
1047
+ opacity: 1;
1048
+ }
1049
+ }
1050
+
1051
+ .rotateInDownLeft {
1052
+ animation-name: rotateInDownLeft;
1053
+ }
1054
+
1055
+ @keyframes rotateInDownRight {
1056
+ from {
1057
+ transform-origin: right bottom;
1058
+ transform: rotate3d(0, 0, 1, 45deg);
1059
+ opacity: 0;
1060
+ }
1061
+
1062
+ to {
1063
+ transform-origin: right bottom;
1064
+ transform: none;
1065
+ opacity: 1;
1066
+ }
1067
+ }
1068
+
1069
+ .rotateInDownRight {
1070
+ animation-name: rotateInDownRight;
1071
+ }
1072
+
1073
+ @keyframes rotateInUpLeft {
1074
+ from {
1075
+ transform-origin: left bottom;
1076
+ transform: rotate3d(0, 0, 1, 45deg);
1077
+ opacity: 0;
1078
+ }
1079
+
1080
+ to {
1081
+ transform-origin: left bottom;
1082
+ transform: none;
1083
+ opacity: 1;
1084
+ }
1085
+ }
1086
+
1087
+ .rotateInUpLeft {
1088
+ animation-name: rotateInUpLeft;
1089
+ }
1090
+
1091
+ @keyframes rotateInUpRight {
1092
+ from {
1093
+ transform-origin: right bottom;
1094
+ transform: rotate3d(0, 0, 1, -90deg);
1095
+ opacity: 0;
1096
+ }
1097
+
1098
+ to {
1099
+ transform-origin: right bottom;
1100
+ transform: none;
1101
+ opacity: 1;
1102
+ }
1103
+ }
1104
+
1105
+ .rotateInUpRight {
1106
+ animation-name: rotateInUpRight;
1107
+ }
1108
+
1109
+ @keyframes rotateOut {
1110
+ from {
1111
+ transform-origin: center;
1112
+ opacity: 1;
1113
+ }
1114
+
1115
+ to {
1116
+ transform-origin: center;
1117
+ transform: rotate3d(0, 0, 1, 200deg);
1118
+ opacity: 0;
1119
+ }
1120
+ }
1121
+
1122
+ .rotateOut {
1123
+ animation-name: rotateOut;
1124
+ }
1125
+
1126
+ @keyframes rotateOutDownLeft {
1127
+ from {
1128
+ transform-origin: left bottom;
1129
+ opacity: 1;
1130
+ }
1131
+
1132
+ to {
1133
+ transform-origin: left bottom;
1134
+ transform: rotate3d(0, 0, 1, 45deg);
1135
+ opacity: 0;
1136
+ }
1137
+ }
1138
+
1139
+ .rotateOutDownLeft {
1140
+ animation-name: rotateOutDownLeft;
1141
+ }
1142
+
1143
+ @keyframes rotateOutDownRight {
1144
+ from {
1145
+ transform-origin: right bottom;
1146
+ opacity: 1;
1147
+ }
1148
+
1149
+ to {
1150
+ transform-origin: right bottom;
1151
+ transform: rotate3d(0, 0, 1, -45deg);
1152
+ opacity: 0;
1153
+ }
1154
+ }
1155
+
1156
+ .rotateOutDownRight {
1157
+ animation-name: rotateOutDownRight;
1158
+ }
1159
+
1160
+ @keyframes rotateOutUpLeft {
1161
+ from {
1162
+ transform-origin: left bottom;
1163
+ opacity: 1;
1164
+ }
1165
+
1166
+ to {
1167
+ transform-origin: left bottom;
1168
+ transform: rotate3d(0, 0, 1, -45deg);
1169
+ opacity: 0;
1170
+ }
1171
+ }
1172
+
1173
+ .rotateOutUpLeft {
1174
+ animation-name: rotateOutUpLeft;
1175
+ }
1176
+
1177
+ @keyframes rotateOutUpRight {
1178
+ from {
1179
+ transform-origin: right bottom;
1180
+ opacity: 1;
1181
+ }
1182
+
1183
+ to {
1184
+ transform-origin: right bottom;
1185
+ transform: rotate3d(0, 0, 1, 90deg);
1186
+ opacity: 0;
1187
+ }
1188
+ }
1189
+
1190
+ .rotateOutUpRight {
1191
+ animation-name: rotateOutUpRight;
1192
+ }
1193
+
1194
+ @keyframes hinge {
1195
+ 0% {
1196
+ transform-origin: top left;
1197
+ animation-timing-function: ease-in-out;
1198
+ }
1199
+
1200
+ 20%, 60% {
1201
+ transform: rotate3d(0, 0, 1, 80deg);
1202
+ transform-origin: top left;
1203
+ animation-timing-function: ease-in-out;
1204
+ }
1205
+
1206
+ 40%, 80% {
1207
+ transform: rotate3d(0, 0, 1, 60deg);
1208
+ transform-origin: top left;
1209
+ animation-timing-function: ease-in-out;
1210
+ opacity: 1;
1211
+ }
1212
+
1213
+ to {
1214
+ transform: translate3d(0, 700px, 0);
1215
+ opacity: 0;
1216
+ }
1217
+ }
1218
+
1219
+ .hinge {
1220
+ animation-name: hinge;
1221
+ }
1222
+
1223
+ @keyframes jackInTheBox {
1224
+ from {
1225
+ opacity: 0;
1226
+ transform: scale(0.1) rotate(30deg);
1227
+ transform-origin: center bottom;
1228
+ }
1229
+
1230
+ 50% {
1231
+ transform: rotate(-10deg);
1232
+ }
1233
+
1234
+ 70% {
1235
+ transform: rotate(3deg);
1236
+ }
1237
+
1238
+ to {
1239
+ opacity: 1;
1240
+ transform: scale(1);
1241
+ }
1242
+ }
1243
+
1244
+ .jackInTheBox {
1245
+ animation-name: jackInTheBox;
1246
+ }
1247
+
1248
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1249
+
1250
+ @keyframes rollIn {
1251
+ from {
1252
+ opacity: 0;
1253
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
1254
+ }
1255
+
1256
+ to {
1257
+ opacity: 1;
1258
+ transform: none;
1259
+ }
1260
+ }
1261
+
1262
+ .rollIn {
1263
+ animation-name: rollIn;
1264
+ }
1265
+
1266
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1267
+
1268
+ @keyframes rollOut {
1269
+ from {
1270
+ opacity: 1;
1271
+ }
1272
+
1273
+ to {
1274
+ opacity: 0;
1275
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
1276
+ }
1277
+ }
1278
+
1279
+ .rollOut {
1280
+ animation-name: rollOut;
1281
+ }
1282
+
1283
+ @keyframes zoomIn {
1284
+ from {
1285
+ opacity: 0;
1286
+ transform: scale3d(.3, .3, .3);
1287
+ }
1288
+
1289
+ 50% {
1290
+ opacity: 1;
1291
+ }
1292
+ }
1293
+
1294
+ .zoomIn {
1295
+ animation-name: zoomIn;
1296
+ }
1297
+
1298
+ @keyframes zoomInDown {
1299
+ from {
1300
+ opacity: 0;
1301
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
1302
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1303
+ }
1304
+
1305
+ 60% {
1306
+ opacity: 1;
1307
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1308
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1309
+ }
1310
+ }
1311
+
1312
+ .zoomInDown {
1313
+ animation-name: zoomInDown;
1314
+ }
1315
+
1316
+ @keyframes zoomInLeft {
1317
+ from {
1318
+ opacity: 0;
1319
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
1320
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1321
+ }
1322
+
1323
+ 60% {
1324
+ opacity: 1;
1325
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
1326
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1327
+ }
1328
+ }
1329
+
1330
+ .zoomInLeft {
1331
+ animation-name: zoomInLeft;
1332
+ }
1333
+
1334
+ @keyframes zoomInRight {
1335
+ from {
1336
+ opacity: 0;
1337
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
1338
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1339
+ }
1340
+
1341
+ 60% {
1342
+ opacity: 1;
1343
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
1344
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1345
+ }
1346
+ }
1347
+
1348
+ .zoomInRight {
1349
+ animation-name: zoomInRight;
1350
+ }
1351
+
1352
+ @keyframes zoomInUp {
1353
+ from {
1354
+ opacity: 0;
1355
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
1356
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1357
+ }
1358
+
1359
+ 60% {
1360
+ opacity: 1;
1361
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1362
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1363
+ }
1364
+ }
1365
+
1366
+ .zoomInUp {
1367
+ animation-name: zoomInUp;
1368
+ }
1369
+
1370
+ @keyframes zoomOut {
1371
+ from {
1372
+ opacity: 1;
1373
+ }
1374
+
1375
+ 50% {
1376
+ opacity: 0;
1377
+ transform: scale3d(.3, .3, .3);
1378
+ }
1379
+
1380
+ to {
1381
+ opacity: 0;
1382
+ }
1383
+ }
1384
+
1385
+ .zoomOut {
1386
+ animation-name: zoomOut;
1387
+ }
1388
+
1389
+ @keyframes zoomOutDown {
1390
+ 40% {
1391
+ opacity: 1;
1392
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1393
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1394
+ }
1395
+
1396
+ to {
1397
+ opacity: 0;
1398
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
1399
+ transform-origin: center bottom;
1400
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1401
+ }
1402
+ }
1403
+
1404
+ .zoomOutDown {
1405
+ animation-name: zoomOutDown;
1406
+ }
1407
+
1408
+ @keyframes zoomOutLeft {
1409
+ 40% {
1410
+ opacity: 1;
1411
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
1412
+ }
1413
+
1414
+ to {
1415
+ opacity: 0;
1416
+ transform: scale(.1) translate3d(-2000px, 0, 0);
1417
+ transform-origin: left center;
1418
+ }
1419
+ }
1420
+
1421
+ .zoomOutLeft {
1422
+ animation-name: zoomOutLeft;
1423
+ }
1424
+
1425
+ @keyframes zoomOutRight {
1426
+ 40% {
1427
+ opacity: 1;
1428
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
1429
+ }
1430
+
1431
+ to {
1432
+ opacity: 0;
1433
+ transform: scale(.1) translate3d(2000px, 0, 0);
1434
+ transform-origin: right center;
1435
+ }
1436
+ }
1437
+
1438
+ .zoomOutRight {
1439
+ animation-name: zoomOutRight;
1440
+ }
1441
+
1442
+ @keyframes zoomOutUp {
1443
+ 40% {
1444
+ opacity: 1;
1445
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1446
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1447
+ }
1448
+
1449
+ to {
1450
+ opacity: 0;
1451
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
1452
+ transform-origin: center bottom;
1453
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1454
+ }
1455
+ }
1456
+
1457
+ .zoomOutUp {
1458
+ animation-name: zoomOutUp;
1459
+ }
1460
+
1461
+ @keyframes slideInDown {
1462
+ from {
1463
+ transform: translate3d(0, -100%, 0);
1464
+ visibility: visible;
1465
+ }
1466
+
1467
+ to {
1468
+ transform: translate3d(0, 0, 0);
1469
+ }
1470
+ }
1471
+
1472
+ .slideInDown {
1473
+ animation-name: slideInDown;
1474
+ }
1475
+
1476
+ @keyframes slideInLeft {
1477
+ from {
1478
+ transform: translate3d(-100%, 0, 0);
1479
+ visibility: visible;
1480
+ }
1481
+
1482
+ to {
1483
+ transform: translate3d(0, 0, 0);
1484
+ }
1485
+ }
1486
+
1487
+ .slideInLeft {
1488
+ animation-name: slideInLeft;
1489
+ }
1490
+
1491
+ @keyframes slideInRight {
1492
+ from {
1493
+ transform: translate3d(100%, 0, 0);
1494
+ visibility: visible;
1495
+ }
1496
+
1497
+ to {
1498
+ transform: translate3d(0, 0, 0);
1499
+ }
1500
+ }
1501
+
1502
+ .slideInRight {
1503
+ animation-name: slideInRight;
1504
+ }
1505
+
1506
+ @keyframes slideInUp {
1507
+ from {
1508
+ transform: translate3d(0, 100%, 0);
1509
+ visibility: visible;
1510
+ }
1511
+
1512
+ to {
1513
+ transform: translate3d(0, 0, 0);
1514
+ }
1515
+ }
1516
+
1517
+ .slideInUp {
1518
+ animation-name: slideInUp;
1519
+ }
1520
+
1521
+ @keyframes slideOutDown {
1522
+ from {
1523
+ transform: translate3d(0, 0, 0);
1524
+ }
1525
+
1526
+ to {
1527
+ visibility: hidden;
1528
+ transform: translate3d(0, 100%, 0);
1529
+ }
1530
+ }
1531
+
1532
+ .slideOutDown {
1533
+ animation-name: slideOutDown;
1534
+ }
1535
+
1536
+ @keyframes slideOutLeft {
1537
+ from {
1538
+ transform: translate3d(0, 0, 0);
1539
+ }
1540
+
1541
+ to {
1542
+ visibility: hidden;
1543
+ transform: translate3d(-100%, 0, 0);
1544
+ }
1545
+ }
1546
+
1547
+ .slideOutLeft {
1548
+ animation-name: slideOutLeft;
1549
+ }
1550
+
1551
+ @keyframes slideOutRight {
1552
+ from {
1553
+ transform: translate3d(0, 0, 0);
1554
+ }
1555
+
1556
+ to {
1557
+ visibility: hidden;
1558
+ transform: translate3d(100%, 0, 0);
1559
+ }
1560
+ }
1561
+
1562
+ .slideOutRight {
1563
+ animation-name: slideOutRight;
1564
+ }
1565
+
1566
+ @keyframes slideOutUp {
1567
+ from {
1568
+ transform: translate3d(0, 0, 0);
1569
+ }
1570
+
1571
+ to {
1572
+ visibility: hidden;
1573
+ transform: translate3d(0, -100%, 0);
1574
+ }
1575
+ }
1576
+
1577
+ .slideOutUp {
1578
+ animation-name: slideOutUp;
1579
+ }
lib/animate/animate.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.5.2
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2017 Daniel Eden
9
+ */
10
+
11
+ .animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}@keyframes bounce{0%,20%,53%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scaleX(1)}}.pulse{animation-name:pulse}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.tada{animation-name:tada}@keyframes wobble{0%{transform:none}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes jello{0%,11.1%,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{0%{transform:perspective(400px) rotateY(-1turn);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInX}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateY(10deg);opacity:1}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInY}@keyframes flipOutX{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateX(-20deg);opacity:1}to{transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateY(-15deg);opacity:1}to{transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipOutY}@keyframes lightSpeedIn{0%{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{0%{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{0%{transform-origin:center;transform:rotate(-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{0%{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate(200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes jackInTheBox{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}.slideOutUp{animation-name:slideOutUp}
lib/easing/easing.js ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/
3
+ * Open source under the BSD License.
4
+ * Copyright © 2008 George McGinley Smith
5
+ * All rights reserved.
6
+ * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
7
+ */
8
+
9
+ (function (factory) {
10
+ if (typeof define === "function" && define.amd) {
11
+ define(['jquery'], function ($) {
12
+ return factory($);
13
+ });
14
+ } else if (typeof module === "object" && typeof module.exports === "object") {
15
+ exports = factory(require('jquery'));
16
+ } else {
17
+ factory(jQuery);
18
+ }
19
+ })(function($){
20
+
21
+ // Preserve the original jQuery "swing" easing as "jswing"
22
+ if (typeof $.easing !== 'undefined') {
23
+ $.easing['jswing'] = $.easing['swing'];
24
+ }
25
+
26
+ var pow = Math.pow,
27
+ sqrt = Math.sqrt,
28
+ sin = Math.sin,
29
+ cos = Math.cos,
30
+ PI = Math.PI,
31
+ c1 = 1.70158,
32
+ c2 = c1 * 1.525,
33
+ c3 = c1 + 1,
34
+ c4 = ( 2 * PI ) / 3,
35
+ c5 = ( 2 * PI ) / 4.5;
36
+
37
+ // x is the fraction of animation progress, in the range 0..1
38
+ function bounceOut(x) {
39
+ var n1 = 7.5625,
40
+ d1 = 2.75;
41
+ if ( x < 1/d1 ) {
42
+ return n1*x*x;
43
+ } else if ( x < 2/d1 ) {
44
+ return n1*(x-=(1.5/d1))*x + .75;
45
+ } else if ( x < 2.5/d1 ) {
46
+ return n1*(x-=(2.25/d1))*x + .9375;
47
+ } else {
48
+ return n1*(x-=(2.625/d1))*x + .984375;
49
+ }
50
+ }
51
+
52
+ $.extend( $.easing,
53
+ {
54
+ def: 'easeOutQuad',
55
+ swing: function (x) {
56
+ return $.easing[$.easing.def](x);
57
+ },
58
+ easeInQuad: function (x) {
59
+ return x * x;
60
+ },
61
+ easeOutQuad: function (x) {
62
+ return 1 - ( 1 - x ) * ( 1 - x );
63
+ },
64
+ easeInOutQuad: function (x) {
65
+ return x < 0.5 ?
66
+ 2 * x * x :
67
+ 1 - pow( -2 * x + 2, 2 ) / 2;
68
+ },
69
+ easeInCubic: function (x) {
70
+ return x * x * x;
71
+ },
72
+ easeOutCubic: function (x) {
73
+ return 1 - pow( 1 - x, 3 );
74
+ },
75
+ easeInOutCubic: function (x) {
76
+ return x < 0.5 ?
77
+ 4 * x * x * x :
78
+ 1 - pow( -2 * x + 2, 3 ) / 2;
79
+ },
80
+ easeInQuart: function (x) {
81
+ return x * x * x * x;
82
+ },
83
+ easeOutQuart: function (x) {
84
+ return 1 - pow( 1 - x, 4 );
85
+ },
86
+ easeInOutQuart: function (x) {
87
+ return x < 0.5 ?
88
+ 8 * x * x * x * x :
89
+ 1 - pow( -2 * x + 2, 4 ) / 2;
90
+ },
91
+ easeInQuint: function (x) {
92
+ return x * x * x * x * x;
93
+ },
94
+ easeOutQuint: function (x) {
95
+ return 1 - pow( 1 - x, 5 );
96
+ },
97
+ easeInOutQuint: function (x) {
98
+ return x < 0.5 ?
99
+ 16 * x * x * x * x * x :
100
+ 1 - pow( -2 * x + 2, 5 ) / 2;
101
+ },
102
+ easeInSine: function (x) {
103
+ return 1 - cos( x * PI/2 );
104
+ },
105
+ easeOutSine: function (x) {
106
+ return sin( x * PI/2 );
107
+ },
108
+ easeInOutSine: function (x) {
109
+ return -( cos( PI * x ) - 1 ) / 2;
110
+ },
111
+ easeInExpo: function (x) {
112
+ return x === 0 ? 0 : pow( 2, 10 * x - 10 );
113
+ },
114
+ easeOutExpo: function (x) {
115
+ return x === 1 ? 1 : 1 - pow( 2, -10 * x );
116
+ },
117
+ easeInOutExpo: function (x) {
118
+ return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
119
+ pow( 2, 20 * x - 10 ) / 2 :
120
+ ( 2 - pow( 2, -20 * x + 10 ) ) / 2;
121
+ },
122
+ easeInCirc: function (x) {
123
+ return 1 - sqrt( 1 - pow( x, 2 ) );
124
+ },
125
+ easeOutCirc: function (x) {
126
+ return sqrt( 1 - pow( x - 1, 2 ) );
127
+ },
128
+ easeInOutCirc: function (x) {
129
+ return x < 0.5 ?
130
+ ( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
131
+ ( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
132
+ },
133
+ easeInElastic: function (x) {
134
+ return x === 0 ? 0 : x === 1 ? 1 :
135
+ -pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
136
+ },
137
+ easeOutElastic: function (x) {
138
+ return x === 0 ? 0 : x === 1 ? 1 :
139
+ pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
140
+ },
141
+ easeInOutElastic: function (x) {
142
+ return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
143
+ -( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
144
+ pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
145
+ },
146
+ easeInBack: function (x) {
147
+ return c3 * x * x * x - c1 * x * x;
148
+ },
149
+ easeOutBack: function (x) {
150
+ return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
151
+ },
152
+ easeInOutBack: function (x) {
153
+ return x < 0.5 ?
154
+ ( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
155
+ ( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
156
+ },
157
+ easeInBounce: function (x) {
158
+ return 1 - bounceOut( 1 - x );
159
+ },
160
+ easeOutBounce: bounceOut,
161
+ easeInOutBounce: function (x) {
162
+ return x < 0.5 ?
163
+ ( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
164
+ ( 1 + bounceOut( 2 * x - 1 ) ) / 2;
165
+ }
166
+ });
167
+
168
+ });
lib/easing/easing.min.js ADDED
@@ -0,0 +1 @@
 
 
1
+ !function(n){"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&"object"==typeof module.exports?exports=n(require("jquery")):n(jQuery)}(function(n){function e(n){var e=7.5625,t=2.75;return n<1/t?e*n*n:n<2/t?e*(n-=1.5/t)*n+.75:n<2.5/t?e*(n-=2.25/t)*n+.9375:e*(n-=2.625/t)*n+.984375}void 0!==n.easing&&(n.easing.jswing=n.easing.swing);var t=Math.pow,u=Math.sqrt,r=Math.sin,i=Math.cos,a=Math.PI,c=1.70158,o=1.525*c,s=2*a/3,f=2*a/4.5;n.extend(n.easing,{def:"easeOutQuad",swing:function(e){return n.easing[n.easing.def](e)},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return 1-(1-n)*(1-n)},easeInOutQuad:function(n){return n<.5?2*n*n:1-t(-2*n+2,2)/2},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return 1-t(1-n,3)},easeInOutCubic:function(n){return n<.5?4*n*n*n:1-t(-2*n+2,3)/2},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return 1-t(1-n,4)},easeInOutQuart:function(n){return n<.5?8*n*n*n*n:1-t(-2*n+2,4)/2},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return 1-t(1-n,5)},easeInOutQuint:function(n){return n<.5?16*n*n*n*n*n:1-t(-2*n+2,5)/2},easeInSine:function(n){return 1-i(n*a/2)},easeOutSine:function(n){return r(n*a/2)},easeInOutSine:function(n){return-(i(a*n)-1)/2},easeInExpo:function(n){return 0===n?0:t(2,10*n-10)},easeOutExpo:function(n){return 1===n?1:1-t(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:n<.5?t(2,20*n-10)/2:(2-t(2,-20*n+10))/2},easeInCirc:function(n){return 1-u(1-t(n,2))},easeOutCirc:function(n){return u(1-t(n-1,2))},easeInOutCirc:function(n){return n<.5?(1-u(1-t(2*n,2)))/2:(u(1-t(-2*n+2,2))+1)/2},easeInElastic:function(n){return 0===n?0:1===n?1:-t(2,10*n-10)*r((10*n-10.75)*s)},easeOutElastic:function(n){return 0===n?0:1===n?1:t(2,-10*n)*r((10*n-.75)*s)+1},easeInOutElastic:function(n){return 0===n?0:1===n?1:n<.5?-(t(2,20*n-10)*r((20*n-11.125)*f))/2:t(2,-20*n+10)*r((20*n-11.125)*f)/2+1},easeInBack:function(n){return(c+1)*n*n*n-c*n*n},easeOutBack:function(n){return 1+(c+1)*t(n-1,3)+c*t(n-1,2)},easeInOutBack:function(n){return n<.5?t(2*n,2)*(7.189819*n-o)/2:(t(2*n-2,2)*((o+1)*(2*n-2)+o)+2)/2},easeInBounce:function(n){return 1-e(1-n)},easeOutBounce:e,easeInOutBounce:function(n){return n<.5?(1-e(1-2*n))/2:(1+e(2*n-1))/2}})});
lib/owlcarousel/LICENSE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2014 Owl
2
+ Modified work Copyright 2016 David Deutsch
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
lib/owlcarousel/assets/ajax-loader.gif ADDED
lib/owlcarousel/assets/owl.carousel.css ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ /*
7
+ * Owl Carousel - Core
8
+ */
9
+ .owl-carousel {
10
+ display: none;
11
+ width: 100%;
12
+ -webkit-tap-highlight-color: transparent;
13
+ /* position relative and z-index fix webkit rendering fonts issue */
14
+ position: relative;
15
+ z-index: 1; }
16
+ .owl-carousel .owl-stage {
17
+ position: relative;
18
+ -ms-touch-action: pan-Y;
19
+ -moz-backface-visibility: hidden;
20
+ /* fix firefox animation glitch */ }
21
+ .owl-carousel .owl-stage:after {
22
+ content: ".";
23
+ display: block;
24
+ clear: both;
25
+ visibility: hidden;
26
+ line-height: 0;
27
+ height: 0; }
28
+ .owl-carousel .owl-stage-outer {
29
+ position: relative;
30
+ overflow: hidden;
31
+ /* fix for flashing background */
32
+ -webkit-transform: translate3d(0px, 0px, 0px); }
33
+ .owl-carousel .owl-wrapper,
34
+ .owl-carousel .owl-item {
35
+ -webkit-backface-visibility: hidden;
36
+ -moz-backface-visibility: hidden;
37
+ -ms-backface-visibility: hidden;
38
+ -webkit-transform: translate3d(0, 0, 0);
39
+ -moz-transform: translate3d(0, 0, 0);
40
+ -ms-transform: translate3d(0, 0, 0); }
41
+ .owl-carousel .owl-item {
42
+ position: relative;
43
+ min-height: 1px;
44
+ float: left;
45
+ -webkit-backface-visibility: hidden;
46
+ -webkit-tap-highlight-color: transparent;
47
+ -webkit-touch-callout: none; }
48
+ .owl-carousel .owl-item img {
49
+ display: block;
50
+ width: 100%; }
51
+ .owl-carousel .owl-nav.disabled,
52
+ .owl-carousel .owl-dots.disabled {
53
+ display: none; }
54
+ .owl-carousel .owl-nav .owl-prev,
55
+ .owl-carousel .owl-nav .owl-next,
56
+ .owl-carousel .owl-dot {
57
+ cursor: pointer;
58
+ cursor: hand;
59
+ -webkit-user-select: none;
60
+ -khtml-user-select: none;
61
+ -moz-user-select: none;
62
+ -ms-user-select: none;
63
+ user-select: none; }
64
+ .owl-carousel.owl-loaded {
65
+ display: block; }
66
+ .owl-carousel.owl-loading {
67
+ opacity: 0;
68
+ display: block; }
69
+ .owl-carousel.owl-hidden {
70
+ opacity: 0; }
71
+ .owl-carousel.owl-refresh .owl-item {
72
+ visibility: hidden; }
73
+ .owl-carousel.owl-drag .owl-item {
74
+ -webkit-user-select: none;
75
+ -moz-user-select: none;
76
+ -ms-user-select: none;
77
+ user-select: none; }
78
+ .owl-carousel.owl-grab {
79
+ cursor: move;
80
+ cursor: grab; }
81
+ .owl-carousel.owl-rtl {
82
+ direction: rtl; }
83
+ .owl-carousel.owl-rtl .owl-item {
84
+ float: right; }
85
+
86
+ /* No Js */
87
+ .no-js .owl-carousel {
88
+ display: block; }
89
+
90
+ /*
91
+ * Owl Carousel - Animate Plugin
92
+ */
93
+ .owl-carousel .animated {
94
+ animation-duration: 1000ms;
95
+ animation-fill-mode: both; }
96
+
97
+ .owl-carousel .owl-animated-in {
98
+ z-index: 0; }
99
+
100
+ .owl-carousel .owl-animated-out {
101
+ z-index: 1; }
102
+
103
+ .owl-carousel .fadeOut {
104
+ animation-name: fadeOut; }
105
+
106
+ @keyframes fadeOut {
107
+ 0% {
108
+ opacity: 1; }
109
+ 100% {
110
+ opacity: 0; } }
111
+
112
+ /*
113
+ * Owl Carousel - Auto Height Plugin
114
+ */
115
+ .owl-height {
116
+ transition: height 500ms ease-in-out; }
117
+
118
+ /*
119
+ * Owl Carousel - Lazy Load Plugin
120
+ */
121
+ .owl-carousel .owl-item .owl-lazy {
122
+ opacity: 0;
123
+ transition: opacity 400ms ease; }
124
+
125
+ .owl-carousel .owl-item img.owl-lazy {
126
+ transform-style: preserve-3d; }
127
+
128
+ /*
129
+ * Owl Carousel - Video Plugin
130
+ */
131
+ .owl-carousel .owl-video-wrapper {
132
+ position: relative;
133
+ height: 100%;
134
+ background: #000; }
135
+
136
+ .owl-carousel .owl-video-play-icon {
137
+ position: absolute;
138
+ height: 80px;
139
+ width: 80px;
140
+ left: 50%;
141
+ top: 50%;
142
+ margin-left: -40px;
143
+ margin-top: -40px;
144
+ background: url("owl.video.play.png") no-repeat;
145
+ cursor: pointer;
146
+ z-index: 1;
147
+ -webkit-backface-visibility: hidden;
148
+ transition: transform 100ms ease; }
149
+
150
+ .owl-carousel .owl-video-play-icon:hover {
151
+ -ms-transform: scale(1.3, 1.3);
152
+ transform: scale(1.3, 1.3); }
153
+
154
+ .owl-carousel .owl-video-playing .owl-video-tn,
155
+ .owl-carousel .owl-video-playing .owl-video-play-icon {
156
+ display: none; }
157
+
158
+ .owl-carousel .owl-video-tn {
159
+ opacity: 0;
160
+ height: 100%;
161
+ background-position: center center;
162
+ background-repeat: no-repeat;
163
+ background-size: contain;
164
+ transition: opacity 400ms ease; }
165
+
166
+ .owl-carousel .owl-video-frame {
167
+ position: relative;
168
+ z-index: 1;
169
+ height: 100%;
170
+ width: 100%; }
lib/owlcarousel/assets/owl.carousel.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
lib/owlcarousel/assets/owl.theme.default.css ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ /*
7
+ * Default theme - Owl Carousel CSS File
8
+ */
9
+ .owl-theme .owl-nav {
10
+ margin-top: 10px;
11
+ text-align: center;
12
+ -webkit-tap-highlight-color: transparent; }
13
+ .owl-theme .owl-nav [class*='owl-'] {
14
+ color: #FFF;
15
+ font-size: 14px;
16
+ margin: 5px;
17
+ padding: 4px 7px;
18
+ background: #D6D6D6;
19
+ display: inline-block;
20
+ cursor: pointer;
21
+ border-radius: 3px; }
22
+ .owl-theme .owl-nav [class*='owl-']:hover {
23
+ background: #869791;
24
+ color: #FFF;
25
+ text-decoration: none; }
26
+ .owl-theme .owl-nav .disabled {
27
+ opacity: 0.5;
28
+ cursor: default; }
29
+
30
+ .owl-theme .owl-nav.disabled + .owl-dots {
31
+ margin-top: 10px; }
32
+
33
+ .owl-theme .owl-dots {
34
+ text-align: center;
35
+ -webkit-tap-highlight-color: transparent; }
36
+ .owl-theme .owl-dots .owl-dot {
37
+ display: inline-block;
38
+ zoom: 1;
39
+ *display: inline; }
40
+ .owl-theme .owl-dots .owl-dot span {
41
+ width: 10px;
42
+ height: 10px;
43
+ margin: 5px 7px;
44
+ background: #D6D6D6;
45
+ display: block;
46
+ -webkit-backface-visibility: visible;
47
+ transition: opacity 200ms ease;
48
+ border-radius: 30px; }
49
+ .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
50
+ background: #869791; }
lib/owlcarousel/assets/owl.theme.default.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}
lib/owlcarousel/assets/owl.theme.green.css ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ /*
7
+ * Green theme - Owl Carousel CSS File
8
+ */
9
+ .owl-theme .owl-nav {
10
+ margin-top: 10px;
11
+ text-align: center;
12
+ -webkit-tap-highlight-color: transparent; }
13
+ .owl-theme .owl-nav [class*='owl-'] {
14
+ color: #FFF;
15
+ font-size: 14px;
16
+ margin: 5px;
17
+ padding: 4px 7px;
18
+ background: #D6D6D6;
19
+ display: inline-block;
20
+ cursor: pointer;
21
+ border-radius: 3px; }
22
+ .owl-theme .owl-nav [class*='owl-']:hover {
23
+ background: #4DC7A0;
24
+ color: #FFF;
25
+ text-decoration: none; }
26
+ .owl-theme .owl-nav .disabled {
27
+ opacity: 0.5;
28
+ cursor: default; }
29
+
30
+ .owl-theme .owl-nav.disabled + .owl-dots {
31
+ margin-top: 10px; }
32
+
33
+ .owl-theme .owl-dots {
34
+ text-align: center;
35
+ -webkit-tap-highlight-color: transparent; }
36
+ .owl-theme .owl-dots .owl-dot {
37
+ display: inline-block;
38
+ zoom: 1;
39
+ *display: inline; }
40
+ .owl-theme .owl-dots .owl-dot span {
41
+ width: 10px;
42
+ height: 10px;
43
+ margin: 5px 7px;
44
+ background: #D6D6D6;
45
+ display: block;
46
+ -webkit-backface-visibility: visible;
47
+ transition: opacity 200ms ease;
48
+ border-radius: 30px; }
49
+ .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
50
+ background: #4DC7A0; }
lib/owlcarousel/assets/owl.theme.green.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0}
lib/owlcarousel/assets/owl.video.play.png ADDED
lib/owlcarousel/owl.carousel.js ADDED
@@ -0,0 +1,3275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ /**
7
+ * Owl carousel
8
+ * @version 2.1.6
9
+ * @author Bartosz Wojciechowski
10
+ * @author David Deutsch
11
+ * @license The MIT License (MIT)
12
+ * @todo Lazy Load Icon
13
+ * @todo prevent animationend bubling
14
+ * @todo itemsScaleUp
15
+ * @todo Test Zepto
16
+ * @todo stagePadding calculate wrong active classes
17
+ */
18
+ ;(function($, window, document, undefined) {
19
+
20
+ /**
21
+ * Creates a carousel.
22
+ * @class The Owl Carousel.
23
+ * @public
24
+ * @param {HTMLElement|jQuery} element - The element to create the carousel for.
25
+ * @param {Object} [options] - The options
26
+ */
27
+ function Owl(element, options) {
28
+
29
+ /**
30
+ * Current settings for the carousel.
31
+ * @public
32
+ */
33
+ this.settings = null;
34
+
35
+ /**
36
+ * Current options set by the caller including defaults.
37
+ * @public
38
+ */
39
+ this.options = $.extend({}, Owl.Defaults, options);
40
+
41
+ /**
42
+ * Plugin element.
43
+ * @public
44
+ */
45
+ this.$element = $(element);
46
+
47
+ /**
48
+ * Proxied event handlers.
49
+ * @protected
50
+ */
51
+ this._handlers = {};
52
+
53
+ /**
54
+ * References to the running plugins of this carousel.
55
+ * @protected
56
+ */
57
+ this._plugins = {};
58
+
59
+ /**
60
+ * Currently suppressed events to prevent them from beeing retriggered.
61
+ * @protected
62
+ */
63
+ this._supress = {};
64
+
65
+ /**
66
+ * Absolute current position.
67
+ * @protected
68
+ */
69
+ this._current = null;
70
+
71
+ /**
72
+ * Animation speed in milliseconds.
73
+ * @protected
74
+ */
75
+ this._speed = null;
76
+
77
+ /**
78
+ * Coordinates of all items in pixel.
79
+ * @todo The name of this member is missleading.
80
+ * @protected
81
+ */
82
+ this._coordinates = [];
83
+
84
+ /**
85
+ * Current breakpoint.
86
+ * @todo Real media queries would be nice.
87
+ * @protected
88
+ */
89
+ this._breakpoint = null;
90
+
91
+ /**
92
+ * Current width of the plugin element.
93
+ */
94
+ this._width = null;
95
+
96
+ /**
97
+ * All real items.
98
+ * @protected
99
+ */
100
+ this._items = [];
101
+
102
+ /**
103
+ * All cloned items.
104
+ * @protected
105
+ */
106
+ this._clones = [];
107
+
108
+ /**
109
+ * Merge values of all items.
110
+ * @todo Maybe this could be part of a plugin.
111
+ * @protected
112
+ */
113
+ this._mergers = [];
114
+
115
+ /**
116
+ * Widths of all items.
117
+ */
118
+ this._widths = [];
119
+
120
+ /**
121
+ * Invalidated parts within the update process.
122
+ * @protected
123
+ */
124
+ this._invalidated = {};
125
+
126
+ /**
127
+ * Ordered list of workers for the update process.
128
+ * @protected
129
+ */
130
+ this._pipe = [];
131
+
132
+ /**
133
+ * Current state information for the drag operation.
134
+ * @todo #261
135
+ * @protected
136
+ */
137
+ this._drag = {
138
+ time: null,
139
+ target: null,
140
+ pointer: null,
141
+ stage: {
142
+ start: null,
143
+ current: null
144
+ },
145
+ direction: null
146
+ };
147
+
148
+ /**
149
+ * Current state information and their tags.
150
+ * @type {Object}
151
+ * @protected
152
+ */
153
+ this._states = {
154
+ current: {},
155
+ tags: {
156
+ 'initializing': [ 'busy' ],
157
+ 'animating': [ 'busy' ],
158
+ 'dragging': [ 'interacting' ]
159
+ }
160
+ };
161
+
162
+ $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
163
+ this._handlers[handler] = $.proxy(this[handler], this);
164
+ }, this));
165
+
166
+ $.each(Owl.Plugins, $.proxy(function(key, plugin) {
167
+ this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
168
+ = new plugin(this);
169
+ }, this));
170
+
171
+ $.each(Owl.Workers, $.proxy(function(priority, worker) {
172
+ this._pipe.push({
173
+ 'filter': worker.filter,
174
+ 'run': $.proxy(worker.run, this)
175
+ });
176
+ }, this));
177
+
178
+ this.setup();
179
+ this.initialize();
180
+ }
181
+
182
+ /**
183
+ * Default options for the carousel.
184
+ * @public
185
+ */
186
+ Owl.Defaults = {
187
+ items: 3,
188
+ loop: false,
189
+ center: false,
190
+ rewind: false,
191
+
192
+ mouseDrag: true,
193
+ touchDrag: true,
194
+ pullDrag: true,
195
+ freeDrag: false,
196
+
197
+ margin: 0,
198
+ stagePadding: 0,
199
+
200
+ merge: false,
201
+ mergeFit: true,
202
+ autoWidth: false,
203
+
204
+ startPosition: 0,
205
+ rtl: false,
206
+
207
+ smartSpeed: 250,
208
+ fluidSpeed: false,
209
+ dragEndSpeed: false,
210
+
211
+ responsive: {},
212
+ responsiveRefreshRate: 200,
213
+ responsiveBaseElement: window,
214
+
215
+ fallbackEasing: 'swing',
216
+
217
+ info: false,
218
+
219
+ nestedItemSelector: false,
220
+ itemElement: 'div',
221
+ stageElement: 'div',
222
+
223
+ refreshClass: 'owl-refresh',
224
+ loadedClass: 'owl-loaded',
225
+ loadingClass: 'owl-loading',
226
+ rtlClass: 'owl-rtl',
227
+ responsiveClass: 'owl-responsive',
228
+ dragClass: 'owl-drag',
229
+ itemClass: 'owl-item',
230
+ stageClass: 'owl-stage',
231
+ stageOuterClass: 'owl-stage-outer',
232
+ grabClass: 'owl-grab'
233
+ };
234
+
235
+ /**
236
+ * Enumeration for width.
237
+ * @public
238
+ * @readonly
239
+ * @enum {String}
240
+ */
241
+ Owl.Width = {
242
+ Default: 'default',
243
+ Inner: 'inner',
244
+ Outer: 'outer'
245
+ };
246
+
247
+ /**
248
+ * Enumeration for types.
249
+ * @public
250
+ * @readonly
251
+ * @enum {String}
252
+ */
253
+ Owl.Type = {
254
+ Event: 'event',
255
+ State: 'state'
256
+ };
257
+
258
+ /**
259
+ * Contains all registered plugins.
260
+ * @public
261
+ */
262
+ Owl.Plugins = {};
263
+
264
+ /**
265
+ * List of workers involved in the update process.
266
+ */
267
+ Owl.Workers = [ {
268
+ filter: [ 'width', 'settings' ],
269
+ run: function() {
270
+ this._width = this.$element.width();
271
+ }
272
+ }, {
273
+ filter: [ 'width', 'items', 'settings' ],
274
+ run: function(cache) {
275
+ cache.current = this._items && this._items[this.relative(this._current)];
276
+ }
277
+ }, {
278
+ filter: [ 'items', 'settings' ],
279
+ run: function() {
280
+ this.$stage.children('.cloned').remove();
281
+ }
282
+ }, {
283
+ filter: [ 'width', 'items', 'settings' ],
284
+ run: function(cache) {
285
+ var margin = this.settings.margin || '',
286
+ grid = !this.settings.autoWidth,
287
+ rtl = this.settings.rtl,
288
+ css = {
289
+ 'width': 'auto',
290
+ 'margin-left': rtl ? margin : '',
291
+ 'margin-right': rtl ? '' : margin
292
+ };
293
+
294
+ !grid && this.$stage.children().css(css);
295
+
296
+ cache.css = css;
297
+ }
298
+ }, {
299
+ filter: [ 'width', 'items', 'settings' ],
300
+ run: function(cache) {
301
+ var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
302
+ merge = null,
303
+ iterator = this._items.length,
304
+ grid = !this.settings.autoWidth,
305
+ widths = [];
306
+
307
+ cache.items = {
308
+ merge: false,
309
+ width: width
310
+ };
311
+
312
+ while (iterator--) {
313
+ merge = this._mergers[iterator];
314
+ merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;
315
+
316
+ cache.items.merge = merge > 1 || cache.items.merge;
317
+
318
+ widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
319
+ }
320
+
321
+ this._widths = widths;
322
+ }
323
+ }, {
324
+ filter: [ 'items', 'settings' ],
325
+ run: function() {
326
+ var clones = [],
327
+ items = this._items,
328
+ settings = this.settings,
329
+ // TODO: Should be computed from number of min width items in stage
330
+ view = Math.max(settings.items * 2, 4),
331
+ size = Math.ceil(items.length / 2) * 2,
332
+ repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
333
+ append = '',
334
+ prepend = '';
335
+
336
+ repeat /= 2;
337
+
338
+ while (repeat--) {
339
+ // Switch to only using appended clones
340
+ clones.push(this.normalize(clones.length / 2, true));
341
+ append = append + items[clones[clones.length - 1]][0].outerHTML;
342
+ clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
343
+ prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
344
+ }
345
+
346
+ this._clones = clones;
347
+
348
+ $(append).addClass('cloned').appendTo(this.$stage);
349
+ $(prepend).addClass('cloned').prependTo(this.$stage);
350
+ }
351
+ }, {
352
+ filter: [ 'width', 'items', 'settings' ],
353
+ run: function() {
354
+ var rtl = this.settings.rtl ? 1 : -1,
355
+ size = this._clones.length + this._items.length,
356
+ iterator = -1,
357
+ previous = 0,
358
+ current = 0,
359
+ coordinates = [];
360
+
361
+ while (++iterator < size) {
362
+ previous = coordinates[iterator - 1] || 0;
363
+ current = this._widths[this.relative(iterator)] + this.settings.margin;
364
+ coordinates.push(previous + current * rtl);
365
+ }
366
+
367
+ this._coordinates = coordinates;
368
+ }
369
+ }, {
370
+ filter: [ 'width', 'items', 'settings' ],
371
+ run: function() {
372
+ var padding = this.settings.stagePadding,
373
+ coordinates = this._coordinates,
374
+ css = {
375
+ 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
376
+ 'padding-left': padding || '',
377
+ 'padding-right': padding || ''
378
+ };
379
+
380
+ this.$stage.css(css);
381
+ }
382
+ }, {
383
+ filter: [ 'width', 'items', 'settings' ],
384
+ run: function(cache) {
385
+ var iterator = this._coordinates.length,
386
+ grid = !this.settings.autoWidth,
387
+ items = this.$stage.children();
388
+
389
+ if (grid && cache.items.merge) {
390
+ while (iterator--) {
391
+ cache.css.width = this._widths[this.relative(iterator)];
392
+ items.eq(iterator).css(cache.css);
393
+ }
394
+ } else if (grid) {
395
+ cache.css.width = cache.items.width;
396
+ items.css(cache.css);
397
+ }
398
+ }
399
+ }, {
400
+ filter: [ 'items' ],
401
+ run: function() {
402
+ this._coordinates.length < 1 && this.$stage.removeAttr('style');
403
+ }
404
+ }, {
405
+ filter: [ 'width', 'items', 'settings' ],
406
+ run: function(cache) {
407
+ cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
408
+ cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
409
+ this.reset(cache.current);
410
+ }
411
+ }, {
412
+ filter: [ 'position' ],
413
+ run: function() {
414
+ this.animate(this.coordinates(this._current));
415
+ }
416
+ }, {
417
+ filter: [ 'width', 'position', 'items', 'settings' ],
418
+ run: function() {
419
+ var rtl = this.settings.rtl ? 1 : -1,
420
+ padding = this.settings.stagePadding * 2,
421
+ begin = this.coordinates(this.current()) + padding,
422
+ end = begin + this.width() * rtl,
423
+ inner, outer, matches = [], i, n;
424
+
425
+ for (i = 0, n = this._coordinates.length; i < n; i++) {
426
+ inner = this._coordinates[i - 1] || 0;
427
+ outer = Math.abs(this._coordinates[i]) + padding * rtl;
428
+
429
+ if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
430
+ || (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
431
+ matches.push(i);
432
+ }
433
+ }
434
+
435
+ this.$stage.children('.active').removeClass('active');
436
+ this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');
437
+
438
+ if (this.settings.center) {
439
+ this.$stage.children('.center').removeClass('center');
440
+ this.$stage.children().eq(this.current()).addClass('center');
441
+ }
442
+ }
443
+ } ];
444
+
445
+ /**
446
+ * Initializes the carousel.
447
+ * @protected
448
+ */
449
+ Owl.prototype.initialize = function() {
450
+ this.enter('initializing');
451
+ this.trigger('initialize');
452
+
453
+ this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);
454
+
455
+ if (this.settings.autoWidth && !this.is('pre-loading')) {
456
+ var imgs, nestedSelector, width;
457
+ imgs = this.$element.find('img');
458
+ nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
459
+ width = this.$element.children(nestedSelector).width();
460
+
461
+ if (imgs.length && width <= 0) {
462
+ this.preloadAutoWidthImages(imgs);
463
+ }
464
+ }
465
+
466
+ this.$element.addClass(this.options.loadingClass);
467
+
468
+ // create stage
469
+ this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>')
470
+ .wrap('<div class="' + this.settings.stageOuterClass + '"/>');
471
+
472
+ // append stage
473
+ this.$element.append(this.$stage.parent());
474
+
475
+ // append content
476
+ this.replace(this.$element.children().not(this.$stage.parent()));
477
+
478
+ // check visibility
479
+ if (this.$element.is(':visible')) {
480
+ // update view
481
+ this.refresh();
482
+ } else {
483
+ // invalidate width
484
+ this.invalidate('width');
485
+ }
486
+
487
+ this.$element
488
+ .removeClass(this.options.loadingClass)
489
+ .addClass(this.options.loadedClass);
490
+
491
+ // register event handlers
492
+ this.registerEventHandlers();
493
+
494
+ this.leave('initializing');
495
+ this.trigger('initialized');
496
+ };
497
+
498
+ /**
499
+ * Setups the current settings.
500
+ * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
501
+ * @todo Support for media queries by using `matchMedia` would be nice.
502
+ * @public
503
+ */
504
+ Owl.prototype.setup = function() {
505
+ var viewport = this.viewport(),
506
+ overwrites = this.options.responsive,
507
+ match = -1,
508
+ settings = null;
509
+
510
+ if (!overwrites) {
511
+ settings = $.extend({}, this.options);
512
+ } else {
513
+ $.each(overwrites, function(breakpoint) {
514
+ if (breakpoint <= viewport && breakpoint > match) {
515
+ match = Number(breakpoint);
516
+ }
517
+ });
518
+
519
+ settings = $.extend({}, this.options, overwrites[match]);
520
+ if (typeof settings.stagePadding === 'function') {
521
+ settings.stagePadding = settings.stagePadding();
522
+ }
523
+ delete settings.responsive;
524
+
525
+ // responsive class
526
+ if (settings.responsiveClass) {
527
+ this.$element.attr('class',
528
+ this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
529
+ );
530
+ }
531
+ }
532
+
533
+ this.trigger('change', { property: { name: 'settings', value: settings } });
534
+ this._breakpoint = match;
535
+ this.settings = settings;
536
+ this.invalidate('settings');
537
+ this.trigger('changed', { property: { name: 'settings', value: this.settings } });
538
+ };
539
+
540
+ /**
541
+ * Updates option logic if necessery.
542
+ * @protected
543
+ */
544
+ Owl.prototype.optionsLogic = function() {
545
+ if (this.settings.autoWidth) {
546
+ this.settings.stagePadding = false;
547
+ this.settings.merge = false;
548
+ }
549
+ };
550
+
551
+ /**
552
+ * Prepares an item before add.
553
+ * @todo Rename event parameter `content` to `item`.
554
+ * @protected
555
+ * @returns {jQuery|HTMLElement} - The item container.
556
+ */
557
+ Owl.prototype.prepare = function(item) {
558
+ var event = this.trigger('prepare', { content: item });
559
+
560
+ if (!event.data) {
561
+ event.data = $('<' + this.settings.itemElement + '/>')
562
+ .addClass(this.options.itemClass).append(item)
563
+ }
564
+
565
+ this.trigger('prepared', { content: event.data });
566
+
567
+ return event.data;
568
+ };
569
+
570
+ /**
571
+ * Updates the view.
572
+ * @public
573
+ */
574
+ Owl.prototype.update = function() {
575
+ var i = 0,
576
+ n = this._pipe.length,
577
+ filter = $.proxy(function(p) { return this[p] }, this._invalidated),
578
+ cache = {};
579
+
580
+ while (i < n) {
581
+ if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
582
+ this._pipe[i].run(cache);
583
+ }
584
+ i++;
585
+ }
586
+
587
+ this._invalidated = {};
588
+
589
+ !this.is('valid') && this.enter('valid');
590
+ };
591
+
592
+ /**
593
+ * Gets the width of the view.
594
+ * @public
595
+ * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
596
+ * @returns {Number} - The width of the view in pixel.
597
+ */
598
+ Owl.prototype.width = function(dimension) {
599
+ dimension = dimension || Owl.Width.Default;
600
+ switch (dimension) {
601
+ case Owl.Width.Inner:
602
+ case Owl.Width.Outer:
603
+ return this._width;
604
+ default:
605
+ return this._width - this.settings.stagePadding * 2 + this.settings.margin;
606
+ }
607
+ };
608
+
609
+ /**
610
+ * Refreshes the carousel primarily for adaptive purposes.
611
+ * @public
612
+ */
613
+ Owl.prototype.refresh = function() {
614
+ this.enter('refreshing');
615
+ this.trigger('refresh');
616
+
617
+ this.setup();
618
+
619
+ this.optionsLogic();
620
+
621
+ this.$element.addClass(this.options.refreshClass);
622
+
623
+ this.update();
624
+
625
+ this.$element.removeClass(this.options.refreshClass);
626
+
627
+ this.leave('refreshing');
628
+ this.trigger('refreshed');
629
+ };
630
+
631
+ /**
632
+ * Checks window `resize` event.
633
+ * @protected
634
+ */
635
+ Owl.prototype.onThrottledResize = function() {
636
+ window.clearTimeout(this.resizeTimer);
637
+ this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
638
+ };
639
+
640
+ /**
641
+ * Checks window `resize` event.
642
+ * @protected
643
+ */
644
+ Owl.prototype.onResize = function() {
645
+ if (!this._items.length) {
646
+ return false;
647
+ }
648
+
649
+ if (this._width === this.$element.width()) {
650
+ return false;
651
+ }
652
+
653
+ if (!this.$element.is(':visible')) {
654
+ return false;
655
+ }
656
+
657
+ this.enter('resizing');
658
+
659
+ if (this.trigger('resize').isDefaultPrevented()) {
660
+ this.leave('resizing');
661
+ return false;
662
+ }
663
+
664
+ this.invalidate('width');
665
+
666
+ this.refresh();
667
+
668
+ this.leave('resizing');
669
+ this.trigger('resized');
670
+ };
671
+
672
+ /**
673
+ * Registers event handlers.
674
+ * @todo Check `msPointerEnabled`
675
+ * @todo #261
676
+ * @protected
677
+ */
678
+ Owl.prototype.registerEventHandlers = function() {
679
+ if ($.support.transition) {
680
+ this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
681
+ }
682
+
683
+ if (this.settings.responsive !== false) {
684
+ this.on(window, 'resize', this._handlers.onThrottledResize);
685
+ }
686
+
687
+ if (this.settings.mouseDrag) {
688
+ this.$element.addClass(this.options.dragClass);
689
+ this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
690
+ this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
691
+ }
692
+
693
+ if (this.settings.touchDrag){
694
+ this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
695
+ this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
696
+ }
697
+ };
698
+
699
+ /**
700
+ * Handles `touchstart` and `mousedown` events.
701
+ * @todo Horizontal swipe threshold as option
702
+ * @todo #261
703
+ * @protected
704
+ * @param {Event} event - The event arguments.
705
+ */
706
+ Owl.prototype.onDragStart = function(event) {
707
+ var stage = null;
708
+
709
+ if (event.which === 3) {
710
+ return;
711
+ }
712
+
713
+ if ($.support.transform) {
714
+ stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
715
+ stage = {
716
+ x: stage[stage.length === 16 ? 12 : 4],
717
+ y: stage[stage.length === 16 ? 13 : 5]
718
+ };
719
+ } else {
720
+ stage = this.$stage.position();
721
+ stage = {
722
+ x: this.settings.rtl ?
723
+ stage.left + this.$stage.width() - this.width() + this.settings.margin :
724
+ stage.left,
725
+ y: stage.top
726
+ };
727
+ }
728
+
729
+ if (this.is('animating')) {
730
+ $.support.transform ? this.animate(stage.x) : this.$stage.stop()
731
+ this.invalidate('position');
732
+ }
733
+
734
+ this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');
735
+
736
+ this.speed(0);
737
+
738
+ this._drag.time = new Date().getTime();
739
+ this._drag.target = $(event.target);
740
+ this._drag.stage.start = stage;
741
+ this._drag.stage.current = stage;
742
+ this._drag.pointer = this.pointer(event);
743
+
744
+ $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));
745
+
746
+ $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
747
+ var delta = this.difference(this._drag.pointer, this.pointer(event));
748
+
749
+ $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));
750
+
751
+ if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
752
+ return;
753
+ }
754
+
755
+ event.preventDefault();
756
+
757
+ this.enter('dragging');
758
+ this.trigger('drag');
759
+ }, this));
760
+ };
761
+
762
+ /**
763
+ * Handles the `touchmove` and `mousemove` events.
764
+ * @todo #261
765
+ * @protected
766
+ * @param {Event} event - The event arguments.
767
+ */
768
+ Owl.prototype.onDragMove = function(event) {
769
+ var minimum = null,
770
+ maximum = null,
771
+ pull = null,
772
+ delta = this.difference(this._drag.pointer, this.pointer(event)),
773
+ stage = this.difference(this._drag.stage.start, delta);
774
+
775
+ if (!this.is('dragging')) {
776
+ return;
777
+ }
778
+
779
+ event.preventDefault();
780
+
781
+ if (this.settings.loop) {
782
+ minimum = this.coordinates(this.minimum());
783
+ maximum = this.coordinates(this.maximum() + 1) - minimum;
784
+ stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
785
+ } else {
786
+ minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
787
+ maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
788
+ pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
789
+ stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
790
+ }
791
+
792
+ this._drag.stage.current = stage;
793
+
794
+ this.animate(stage.x);
795
+ };
796
+
797
+ /**
798
+ * Handles the `touchend` and `mouseup` events.
799
+ * @todo #261
800
+ * @todo Threshold for click event
801
+ * @protected
802
+ * @param {Event} event - The event arguments.
803
+ */
804
+ Owl.prototype.onDragEnd = function(event) {
805
+ var delta = this.difference(this._drag.pointer, this.pointer(event)),
806
+ stage = this._drag.stage.current,
807
+ direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';
808
+
809
+ $(document).off('.owl.core');
810
+
811
+ this.$element.removeClass(this.options.grabClass);
812
+
813
+ if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
814
+ this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
815
+ this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
816
+ this.invalidate('position');
817
+ this.update();
818
+
819
+ this._drag.direction = direction;
820
+
821
+ if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
822
+ this._drag.target.one('click.owl.core', function() { return false; });
823
+ }
824
+ }
825
+
826
+ if (!this.is('dragging')) {
827
+ return;
828
+ }
829
+
830
+ this.leave('dragging');
831
+ this.trigger('dragged');
832
+ };
833
+
834
+ /**
835
+ * Gets absolute position of the closest item for a coordinate.
836
+ * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
837
+ * @protected
838
+ * @param {Number} coordinate - The coordinate in pixel.
839
+ * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
840
+ * @return {Number} - The absolute position of the closest item.
841
+ */
842
+ Owl.prototype.closest = function(coordinate, direction) {
843
+ var position = -1,
844
+ pull = 30,
845
+ width = this.width(),
846
+ coordinates = this.coordinates();
847
+
848
+ if (!this.settings.freeDrag) {
849
+ // check closest item
850
+ $.each(coordinates, $.proxy(function(index, value) {
851
+ // on a left pull, check on current index
852
+ if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
853
+ position = index;
854
+ // on a right pull, check on previous index
855
+ // to do so, subtract width from value and set position = index + 1
856
+ } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
857
+ position = index + 1;
858
+ } else if (this.op(coordinate, '<', value)
859
+ && this.op(coordinate, '>', coordinates[index + 1] || value - width)) {
860
+ position = direction === 'left' ? index + 1 : index;
861
+ }
862
+ return position === -1;
863
+ }, this));
864
+ }
865
+
866
+ if (!this.settings.loop) {
867
+ // non loop boundries
868
+ if (this.op(coordinate, '>', coordinates[this.minimum()])) {
869
+ position = coordinate = this.minimum();
870
+ } else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
871
+ position = coordinate = this.maximum();
872
+ }
873
+ }
874
+
875
+ return position;
876
+ };
877
+
878
+ /**
879
+ * Animates the stage.
880
+ * @todo #270
881
+ * @public
882
+ * @param {Number} coordinate - The coordinate in pixels.
883
+ */
884
+ Owl.prototype.animate = function(coordinate) {
885
+ var animate = this.speed() > 0;
886
+
887
+ this.is('animating') && this.onTransitionEnd();
888
+
889
+ if (animate) {
890
+ this.enter('animating');
891
+ this.trigger('translate');
892
+ }
893
+
894
+ if ($.support.transform3d && $.support.transition) {
895
+ this.$stage.css({
896
+ transform: 'translate3d(' + coordinate + 'px,0px,0px)',
897
+ transition: (this.speed() / 1000) + 's'
898
+ });
899
+ } else if (animate) {
900
+ this.$stage.animate({
901
+ left: coordinate + 'px'
902
+ }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
903
+ } else {
904
+ this.$stage.css({
905
+ left: coordinate + 'px'
906
+ });
907
+ }
908
+ };
909
+
910
+ /**
911
+ * Checks whether the carousel is in a specific state or not.
912
+ * @param {String} state - The state to check.
913
+ * @returns {Boolean} - The flag which indicates if the carousel is busy.
914
+ */
915
+ Owl.prototype.is = function(state) {
916
+ return this._states.current[state] && this._states.current[state] > 0;
917
+ };
918
+
919
+ /**
920
+ * Sets the absolute position of the current item.
921
+ * @public
922
+ * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
923
+ * @returns {Number} - The absolute position of the current item.
924
+ */
925
+ Owl.prototype.current = function(position) {
926
+ if (position === undefined) {
927
+ return this._current;
928
+ }
929
+
930
+ if (this._items.length === 0) {
931
+ return undefined;
932
+ }
933
+
934
+ position = this.normalize(position);
935
+
936
+ if (this._current !== position) {
937
+ var event = this.trigger('change', { property: { name: 'position', value: position } });
938
+
939
+ if (event.data !== undefined) {
940
+ position = this.normalize(event.data);
941
+ }
942
+
943
+ this._current = position;
944
+
945
+ this.invalidate('position');
946
+
947
+ this.trigger('changed', { property: { name: 'position', value: this._current } });
948
+ }
949
+
950
+ return this._current;
951
+ };
952
+
953
+ /**
954
+ * Invalidates the given part of the update routine.
955
+ * @param {String} [part] - The part to invalidate.
956
+ * @returns {Array.<String>} - The invalidated parts.
957
+ */
958
+ Owl.prototype.invalidate = function(part) {
959
+ if ($.type(part) === 'string') {
960
+ this._invalidated[part] = true;
961
+ this.is('valid') && this.leave('valid');
962
+ }
963
+ return $.map(this._invalidated, function(v, i) { return i });
964
+ };
965
+
966
+ /**
967
+ * Resets the absolute position of the current item.
968
+ * @public
969
+ * @param {Number} position - The absolute position of the new item.
970
+ */
971
+ Owl.prototype.reset = function(position) {
972
+ position = this.normalize(position);
973
+
974
+ if (position === undefined) {
975
+ return;
976
+ }
977
+
978
+ this._speed = 0;
979
+ this._current = position;
980
+
981
+ this.suppress([ 'translate', 'translated' ]);
982
+
983
+ this.animate(this.coordinates(position));
984
+
985
+ this.release([ 'translate', 'translated' ]);
986
+ };
987
+
988
+ /**
989
+ * Normalizes an absolute or a relative position of an item.
990
+ * @public
991
+ * @param {Number} position - The absolute or relative position to normalize.
992
+ * @param {Boolean} [relative=false] - Whether the given position is relative or not.
993
+ * @returns {Number} - The normalized position.
994
+ */
995
+ Owl.prototype.normalize = function(position, relative) {
996
+ var n = this._items.length,
997
+ m = relative ? 0 : this._clones.length;
998
+
999
+ if (!this.isNumeric(position) || n < 1) {
1000
+ position = undefined;
1001
+ } else if (position < 0 || position >= n + m) {
1002
+ position = ((position - m / 2) % n + n) % n + m / 2;
1003
+ }
1004
+
1005
+ return position;
1006
+ };
1007
+
1008
+ /**
1009
+ * Converts an absolute position of an item into a relative one.
1010
+ * @public
1011
+ * @param {Number} position - The absolute position to convert.
1012
+ * @returns {Number} - The converted position.
1013
+ */
1014
+ Owl.prototype.relative = function(position) {
1015
+ position -= this._clones.length / 2;
1016
+ return this.normalize(position, true);
1017
+ };
1018
+
1019
+ /**
1020
+ * Gets the maximum position for the current item.
1021
+ * @public
1022
+ * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
1023
+ * @returns {Number}
1024
+ */
1025
+ Owl.prototype.maximum = function(relative) {
1026
+ var settings = this.settings,
1027
+ maximum = this._coordinates.length,
1028
+ iterator,
1029
+ reciprocalItemsWidth,
1030
+ elementWidth;
1031
+
1032
+ if (settings.loop) {
1033
+ maximum = this._clones.length / 2 + this._items.length - 1;
1034
+ } else if (settings.autoWidth || settings.merge) {
1035
+ iterator = this._items.length;
1036
+ reciprocalItemsWidth = this._items[--iterator].width();
1037
+ elementWidth = this.$element.width();
1038
+ while (iterator--) {
1039
+ reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
1040
+ if (reciprocalItemsWidth > elementWidth) {
1041
+ break;
1042
+ }
1043
+ }
1044
+ maximum = iterator + 1;
1045
+ } else if (settings.center) {
1046
+ maximum = this._items.length - 1;
1047
+ } else {
1048
+ maximum = this._items.length - settings.items;
1049
+ }
1050
+
1051
+ if (relative) {
1052
+ maximum -= this._clones.length / 2;
1053
+ }
1054
+
1055
+ return Math.max(maximum, 0);
1056
+ };
1057
+
1058
+ /**
1059
+ * Gets the minimum position for the current item.
1060
+ * @public
1061
+ * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
1062
+ * @returns {Number}
1063
+ */
1064
+ Owl.prototype.minimum = function(relative) {
1065
+ return relative ? 0 : this._clones.length / 2;
1066
+ };
1067
+
1068
+ /**
1069
+ * Gets an item at the specified relative position.
1070
+ * @public
1071
+ * @param {Number} [position] - The relative position of the item.
1072
+ * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
1073
+ */
1074
+ Owl.prototype.items = function(position) {
1075
+ if (position === undefined) {
1076
+ return this._items.slice();
1077
+ }
1078
+
1079
+ position = this.normalize(position, true);
1080
+ return this._items[position];
1081
+ };
1082
+
1083
+ /**
1084
+ * Gets an item at the specified relative position.
1085
+ * @public
1086
+ * @param {Number} [position] - The relative position of the item.
1087
+ * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
1088
+ */
1089
+ Owl.prototype.mergers = function(position) {
1090
+ if (position === undefined) {
1091
+ return this._mergers.slice();
1092
+ }
1093
+
1094
+ position = this.normalize(position, true);
1095
+ return this._mergers[position];
1096
+ };
1097
+
1098
+ /**
1099
+ * Gets the absolute positions of clones for an item.
1100
+ * @public
1101
+ * @param {Number} [position] - The relative position of the item.
1102
+ * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
1103
+ */
1104
+ Owl.prototype.clones = function(position) {
1105
+ var odd = this._clones.length / 2,
1106
+ even = odd + this._items.length,
1107
+ map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
1108
+
1109
+ if (position === undefined) {
1110
+ return $.map(this._clones, function(v, i) { return map(i) });
1111
+ }
1112
+
1113
+ return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
1114
+ };
1115
+
1116
+ /**
1117
+ * Sets the current animation speed.
1118
+ * @public
1119
+ * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
1120
+ * @returns {Number} - The current animation speed in milliseconds.
1121
+ */
1122
+ Owl.prototype.speed = function(speed) {
1123
+ if (speed !== undefined) {
1124
+ this._speed = speed;
1125
+ }
1126
+
1127
+ return this._speed;
1128
+ };
1129
+
1130
+ /**
1131
+ * Gets the coordinate of an item.
1132
+ * @todo The name of this method is missleanding.
1133
+ * @public
1134
+ * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
1135
+ * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
1136
+ */
1137
+ Owl.prototype.coordinates = function(position) {
1138
+ var multiplier = 1,
1139
+ newPosition = position - 1,
1140
+ coordinate;
1141
+
1142
+ if (position === undefined) {
1143
+ return $.map(this._coordinates, $.proxy(function(coordinate, index) {
1144
+ return this.coordinates(index);
1145
+ }, this));
1146
+ }
1147
+
1148
+ if (this.settings.center) {
1149
+ if (this.settings.rtl) {
1150
+ multiplier = -1;
1151
+ newPosition = position + 1;
1152
+ }
1153
+
1154
+ coordinate = this._coordinates[position];
1155
+ coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
1156
+ } else {
1157
+ coordinate = this._coordinates[newPosition] || 0;
1158
+ }
1159
+
1160
+ coordinate = Math.ceil(coordinate);
1161
+
1162
+ return coordinate;
1163
+ };
1164
+
1165
+ /**
1166
+ * Calculates the speed for a translation.
1167
+ * @protected
1168
+ * @param {Number} from - The absolute position of the start item.
1169
+ * @param {Number} to - The absolute position of the target item.
1170
+ * @param {Number} [factor=undefined] - The time factor in milliseconds.
1171
+ * @returns {Number} - The time in milliseconds for the translation.
1172
+ */
1173
+ Owl.prototype.duration = function(from, to, factor) {
1174
+ if (factor === 0) {
1175
+ return 0;
1176
+ }
1177
+
1178
+ return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
1179
+ };
1180
+
1181
+ /**
1182
+ * Slides to the specified item.
1183
+ * @public
1184
+ * @param {Number} position - The position of the item.
1185
+ * @param {Number} [speed] - The time in milliseconds for the transition.
1186
+ */
1187
+ Owl.prototype.to = function(position, speed) {
1188
+ var current = this.current(),
1189
+ revert = null,
1190
+ distance = position - this.relative(current),
1191
+ direction = (distance > 0) - (distance < 0),
1192
+ items = this._items.length,
1193
+ minimum = this.minimum(),
1194
+ maximum = this.maximum();
1195
+
1196
+ if (this.settings.loop) {
1197
+ if (!this.settings.rewind && Math.abs(distance) > items / 2) {
1198
+ distance += direction * -1 * items;
1199
+ }
1200
+
1201
+ position = current + distance;
1202
+ revert = ((position - minimum) % items + items) % items + minimum;
1203
+
1204
+ if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
1205
+ current = revert - distance;
1206
+ position = revert;
1207
+ this.reset(current);
1208
+ }
1209
+ } else if (this.settings.rewind) {
1210
+ maximum += 1;
1211
+ position = (position % maximum + maximum) % maximum;
1212
+ } else {
1213
+ position = Math.max(minimum, Math.min(maximum, position));
1214
+ }
1215
+
1216
+ this.speed(this.duration(current, position, speed));
1217
+ this.current(position);
1218
+
1219
+ if (this.$element.is(':visible')) {
1220
+ this.update();
1221
+ }
1222
+ };
1223
+
1224
+ /**
1225
+ * Slides to the next item.
1226
+ * @public
1227
+ * @param {Number} [speed] - The time in milliseconds for the transition.
1228
+ */
1229
+ Owl.prototype.next = function(speed) {
1230
+ speed = speed || false;
1231
+ this.to(this.relative(this.current()) + 1, speed);
1232
+ };
1233
+
1234
+ /**
1235
+ * Slides to the previous item.
1236
+ * @public
1237
+ * @param {Number} [speed] - The time in milliseconds for the transition.
1238
+ */
1239
+ Owl.prototype.prev = function(speed) {
1240
+ speed = speed || false;
1241
+ this.to(this.relative(this.current()) - 1, speed);
1242
+ };
1243
+
1244
+ /**
1245
+ * Handles the end of an animation.
1246
+ * @protected
1247
+ * @param {Event} event - The event arguments.
1248
+ */
1249
+ Owl.prototype.onTransitionEnd = function(event) {
1250
+
1251
+ // if css2 animation then event object is undefined
1252
+ if (event !== undefined) {
1253
+ event.stopPropagation();
1254
+
1255
+ // Catch only owl-stage transitionEnd event
1256
+ if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
1257
+ return false;
1258
+ }
1259
+ }
1260
+
1261
+ this.leave('animating');
1262
+ this.trigger('translated');
1263
+ };
1264
+
1265
+ /**
1266
+ * Gets viewport width.
1267
+ * @protected
1268
+ * @return {Number} - The width in pixel.
1269
+ */
1270
+ Owl.prototype.viewport = function() {
1271
+ var width;
1272
+ if (this.options.responsiveBaseElement !== window) {
1273
+ width = $(this.options.responsiveBaseElement).width();
1274
+ } else if (window.innerWidth) {
1275
+ width = window.innerWidth;
1276
+ } else if (document.documentElement && document.documentElement.clientWidth) {
1277
+ width = document.documentElement.clientWidth;
1278
+ } else {
1279
+ console.warn('Can not detect viewport width.');
1280
+ }
1281
+ return width;
1282
+ };
1283
+
1284
+ /**
1285
+ * Replaces the current content.
1286
+ * @public
1287
+ * @param {HTMLElement|jQuery|String} content - The new content.
1288
+ */
1289
+ Owl.prototype.replace = function(content) {
1290
+ this.$stage.empty();
1291
+ this._items = [];
1292
+
1293
+ if (content) {
1294
+ content = (content instanceof jQuery) ? content : $(content);
1295
+ }
1296
+
1297
+ if (this.settings.nestedItemSelector) {
1298
+ content = content.find('.' + this.settings.nestedItemSelector);
1299
+ }
1300
+
1301
+ content.filter(function() {
1302
+ return this.nodeType === 1;
1303
+ }).each($.proxy(function(index, item) {
1304
+ item = this.prepare(item);
1305
+ this.$stage.append(item);
1306
+ this._items.push(item);
1307
+ this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
1308
+ }, this));
1309
+
1310
+ this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
1311
+
1312
+ this.invalidate('items');
1313
+ };
1314
+
1315
+ /**
1316
+ * Adds an item.
1317
+ * @todo Use `item` instead of `content` for the event arguments.
1318
+ * @public
1319
+ * @param {HTMLElement|jQuery|String} content - The item content to add.
1320
+ * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
1321
+ */
1322
+ Owl.prototype.add = function(content, position) {
1323
+ var current = this.relative(this._current);
1324
+
1325
+ position = position === undefined ? this._items.length : this.normalize(position, true);
1326
+ content = content instanceof jQuery ? content : $(content);
1327
+
1328
+ this.trigger('add', { content: content, position: position });
1329
+
1330
+ content = this.prepare(content);
1331
+
1332
+ if (this._items.length === 0 || position === this._items.length) {
1333
+ this._items.length === 0 && this.$stage.append(content);
1334
+ this._items.length !== 0 && this._items[position - 1].after(content);
1335
+ this._items.push(content);
1336
+ this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
1337
+ } else {
1338
+ this._items[position].before(content);
1339
+ this._items.splice(position, 0, content);
1340
+ this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
1341
+ }
1342
+
1343
+ this._items[current] && this.reset(this._items[current].index());
1344
+
1345
+ this.invalidate('items');
1346
+
1347
+ this.trigger('added', { content: content, position: position });
1348
+ };
1349
+
1350
+ /**
1351
+ * Removes an item by its position.
1352
+ * @todo Use `item` instead of `content` for the event arguments.
1353
+ * @public
1354
+ * @param {Number} position - The relative position of the item to remove.
1355
+ */
1356
+ Owl.prototype.remove = function(position) {
1357
+ position = this.normalize(position, true);
1358
+
1359
+ if (position === undefined) {
1360
+ return;
1361
+ }
1362
+
1363
+ this.trigger('remove', { content: this._items[position], position: position });
1364
+
1365
+ this._items[position].remove();
1366
+ this._items.splice(position, 1);
1367
+ this._mergers.splice(position, 1);
1368
+
1369
+ this.invalidate('items');
1370
+
1371
+ this.trigger('removed', { content: null, position: position });
1372
+ };
1373
+
1374
+ /**
1375
+ * Preloads images with auto width.
1376
+ * @todo Replace by a more generic approach
1377
+ * @protected
1378
+ */
1379
+ Owl.prototype.preloadAutoWidthImages = function(images) {
1380
+ images.each($.proxy(function(i, element) {
1381
+ this.enter('pre-loading');
1382
+ element = $(element);
1383
+ $(new Image()).one('load', $.proxy(function(e) {
1384
+ element.attr('src', e.target.src);
1385
+ element.css('opacity', 1);
1386
+ this.leave('pre-loading');
1387
+ !this.is('pre-loading') && !this.is('initializing') && this.refresh();
1388
+ }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
1389
+ }, this));
1390
+ };
1391
+
1392
+ /**
1393
+ * Destroys the carousel.
1394
+ * @public
1395
+ */
1396
+ Owl.prototype.destroy = function() {
1397
+
1398
+ this.$element.off('.owl.core');
1399
+ this.$stage.off('.owl.core');
1400
+ $(document).off('.owl.core');
1401
+
1402
+ if (this.settings.responsive !== false) {
1403
+ window.clearTimeout(this.resizeTimer);
1404
+ this.off(window, 'resize', this._handlers.onThrottledResize);
1405
+ }
1406
+
1407
+ for (var i in this._plugins) {
1408
+ this._plugins[i].destroy();
1409
+ }
1410
+
1411
+ this.$stage.children('.cloned').remove();
1412
+
1413
+ this.$stage.unwrap();
1414
+ this.$stage.children().contents().unwrap();
1415
+ this.$stage.children().unwrap();
1416
+
1417
+ this.$element
1418
+ .removeClass(this.options.refreshClass)
1419
+ .removeClass(this.options.loadingClass)
1420
+ .removeClass(this.options.loadedClass)
1421
+ .removeClass(this.options.rtlClass)
1422
+ .removeClass(this.options.dragClass)
1423
+ .removeClass(this.options.grabClass)
1424
+ .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
1425
+ .removeData('owl.carousel');
1426
+ };
1427
+
1428
+ /**
1429
+ * Operators to calculate right-to-left and left-to-right.
1430
+ * @protected
1431
+ * @param {Number} [a] - The left side operand.
1432
+ * @param {String} [o] - The operator.
1433
+ * @param {Number} [b] - The right side operand.
1434
+ */
1435
+ Owl.prototype.op = function(a, o, b) {
1436
+ var rtl = this.settings.rtl;
1437
+ switch (o) {
1438
+ case '<':
1439
+ return rtl ? a > b : a < b;
1440
+ case '>':
1441
+ return rtl ? a < b : a > b;
1442
+ case '>=':
1443
+ return rtl ? a <= b : a >= b;
1444
+ case '<=':
1445
+ return rtl ? a >= b : a <= b;
1446
+ default:
1447
+ break;
1448
+ }
1449
+ };
1450
+
1451
+ /**
1452
+ * Attaches to an internal event.
1453
+ * @protected
1454
+ * @param {HTMLElement} element - The event source.
1455
+ * @param {String} event - The event name.
1456
+ * @param {Function} listener - The event handler to attach.
1457
+ * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
1458
+ */
1459
+ Owl.prototype.on = function(element, event, listener, capture) {
1460
+ if (element.addEventListener) {
1461
+ element.addEventListener(event, listener, capture);
1462
+ } else if (element.attachEvent) {
1463
+ element.attachEvent('on' + event, listener);
1464
+ }
1465
+ };
1466
+
1467
+ /**
1468
+ * Detaches from an internal event.
1469
+ * @protected
1470
+ * @param {HTMLElement} element - The event source.
1471
+ * @param {String} event - The event name.
1472
+ * @param {Function} listener - The attached event handler to detach.
1473
+ * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
1474
+ */
1475
+ Owl.prototype.off = function(element, event, listener, capture) {
1476
+ if (element.removeEventListener) {
1477
+ element.removeEventListener(event, listener, capture);
1478
+ } else if (element.detachEvent) {
1479
+ element.detachEvent('on' + event, listener);
1480
+ }
1481
+ };
1482
+
1483
+ /**
1484
+ * Triggers a public event.
1485
+ * @todo Remove `status`, `relatedTarget` should be used instead.
1486
+ * @protected
1487
+ * @param {String} name - The event name.
1488
+ * @param {*} [data=null] - The event data.
1489
+ * @param {String} [namespace=carousel] - The event namespace.
1490
+ * @param {String} [state] - The state which is associated with the event.
1491
+ * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
1492
+ * @returns {Event} - The event arguments.
1493
+ */
1494
+ Owl.prototype.trigger = function(name, data, namespace, state, enter) {
1495
+ var status = {
1496
+ item: { count: this._items.length, index: this.current() }
1497
+ }, handler = $.camelCase(
1498
+ $.grep([ 'on', name, namespace ], function(v) { return v })
1499
+ .join('-').toLowerCase()
1500
+ ), event = $.Event(
1501
+ [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
1502
+ $.extend({ relatedTarget: this }, status, data)
1503
+ );
1504
+
1505
+ if (!this._supress[name]) {
1506
+ $.each(this._plugins, function(name, plugin) {
1507
+ if (plugin.onTrigger) {
1508
+ plugin.onTrigger(event);
1509
+ }
1510
+ });
1511
+
1512
+ this.register({ type: Owl.Type.Event, name: name });
1513
+ this.$element.trigger(event);
1514
+
1515
+ if (this.settings && typeof this.settings[handler] === 'function') {
1516
+ this.settings[handler].call(this, event);
1517
+ }
1518
+ }
1519
+
1520
+ return event;
1521
+ };
1522
+
1523
+ /**
1524
+ * Enters a state.
1525
+ * @param name - The state name.
1526
+ */
1527
+ Owl.prototype.enter = function(name) {
1528
+ $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
1529
+ if (this._states.current[name] === undefined) {
1530
+ this._states.current[name] = 0;
1531
+ }
1532
+
1533
+ this._states.current[name]++;
1534
+ }, this));
1535
+ };
1536
+
1537
+ /**
1538
+ * Leaves a state.
1539
+ * @param name - The state name.
1540
+ */
1541
+ Owl.prototype.leave = function(name) {
1542
+ $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
1543
+ this._states.current[name]--;
1544
+ }, this));
1545
+ };
1546
+
1547
+ /**
1548
+ * Registers an event or state.
1549
+ * @public
1550
+ * @param {Object} object - The event or state to register.
1551
+ */
1552
+ Owl.prototype.register = function(object) {
1553
+ if (object.type === Owl.Type.Event) {
1554
+ if (!$.event.special[object.name]) {
1555
+ $.event.special[object.name] = {};
1556
+ }
1557
+
1558
+ if (!$.event.special[object.name].owl) {
1559
+ var _default = $.event.special[object.name]._default;
1560
+ $.event.special[object.name]._default = function(e) {
1561
+ if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
1562
+ return _default.apply(this, arguments);
1563
+ }
1564
+ return e.namespace && e.namespace.indexOf('owl') > -1;
1565
+ };
1566
+ $.event.special[object.name].owl = true;
1567
+ }
1568
+ } else if (object.type === Owl.Type.State) {
1569
+ if (!this._states.tags[object.name]) {
1570
+ this._states.tags[object.name] = object.tags;
1571
+ } else {
1572
+ this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
1573
+ }
1574
+
1575
+ this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
1576
+ return $.inArray(tag, this._states.tags[object.name]) === i;
1577
+ }, this));
1578
+ }
1579
+ };
1580
+
1581
+ /**
1582
+ * Suppresses events.
1583
+ * @protected
1584
+ * @param {Array.<String>} events - The events to suppress.
1585
+ */
1586
+ Owl.prototype.suppress = function(events) {
1587
+ $.each(events, $.proxy(function(index, event) {
1588
+ this._supress[event] = true;
1589
+ }, this));
1590
+ };
1591
+
1592
+ /**
1593
+ * Releases suppressed events.
1594
+ * @protected
1595
+ * @param {Array.<String>} events - The events to release.
1596
+ */
1597
+ Owl.prototype.release = function(events) {
1598
+ $.each(events, $.proxy(function(index, event) {
1599
+ delete this._supress[event];
1600
+ }, this));
1601
+ };
1602
+
1603
+ /**
1604
+ * Gets unified pointer coordinates from event.
1605
+ * @todo #261
1606
+ * @protected
1607
+ * @param {Event} - The `mousedown` or `touchstart` event.
1608
+ * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
1609
+ */
1610
+ Owl.prototype.pointer = function(event) {
1611
+ var result = { x: null, y: null };
1612
+
1613
+ event = event.originalEvent || event || window.event;
1614
+
1615
+ event = event.touches && event.touches.length ?
1616
+ event.touches[0] : event.changedTouches && event.changedTouches.length ?
1617
+ event.changedTouches[0] : event;
1618
+
1619
+ if (event.pageX) {
1620
+ result.x = event.pageX;
1621
+ result.y = event.pageY;
1622
+ } else {
1623
+ result.x = event.clientX;
1624
+ result.y = event.clientY;
1625
+ }
1626
+
1627
+ return result;
1628
+ };
1629
+
1630
+ /**
1631
+ * Determines if the input is a Number or something that can be coerced to a Number
1632
+ * @protected
1633
+ * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
1634
+ * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
1635
+ */
1636
+ Owl.prototype.isNumeric = function(number) {
1637
+ return !isNaN(parseFloat(number));
1638
+ };
1639
+
1640
+ /**
1641
+ * Gets the difference of two vectors.
1642
+ * @todo #261
1643
+ * @protected
1644
+ * @param {Object} - The first vector.
1645
+ * @param {Object} - The second vector.
1646
+ * @returns {Object} - The difference.
1647
+ */
1648
+ Owl.prototype.difference = function(first, second) {
1649
+ return {
1650
+ x: first.x - second.x,
1651
+ y: first.y - second.y
1652
+ };
1653
+ };
1654
+
1655
+ /**
1656
+ * The jQuery Plugin for the Owl Carousel
1657
+ * @todo Navigation plugin `next` and `prev`
1658
+ * @public
1659
+ */
1660
+ $.fn.owlCarousel = function(option) {
1661
+ var args = Array.prototype.slice.call(arguments, 1);
1662
+
1663
+ return this.each(function() {
1664
+ var $this = $(this),
1665
+ data = $this.data('owl.carousel');
1666
+
1667
+ if (!data) {
1668
+ data = new Owl(this, typeof option == 'object' && option);
1669
+ $this.data('owl.carousel', data);
1670
+
1671
+ $.each([
1672
+ 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
1673
+ ], function(i, event) {
1674
+ data.register({ type: Owl.Type.Event, name: event });
1675
+ data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
1676
+ if (e.namespace && e.relatedTarget !== this) {
1677
+ this.suppress([ event ]);
1678
+ data[event].apply(this, [].slice.call(arguments, 1));
1679
+ this.release([ event ]);
1680
+ }
1681
+ }, data));
1682
+ });
1683
+ }
1684
+
1685
+ if (typeof option == 'string' && option.charAt(0) !== '_') {
1686
+ data[option].apply(data, args);
1687
+ }
1688
+ });
1689
+ };
1690
+
1691
+ /**
1692
+ * The constructor for the jQuery Plugin
1693
+ * @public
1694
+ */
1695
+ $.fn.owlCarousel.Constructor = Owl;
1696
+
1697
+ })(window.Zepto || window.jQuery, window, document);
1698
+
1699
+ /**
1700
+ * AutoRefresh Plugin
1701
+ * @version 2.1.0
1702
+ * @author Artus Kolanowski
1703
+ * @author David Deutsch
1704
+ * @license The MIT License (MIT)
1705
+ */
1706
+ ;(function($, window, document, undefined) {
1707
+
1708
+ /**
1709
+ * Creates the auto refresh plugin.
1710
+ * @class The Auto Refresh Plugin
1711
+ * @param {Owl} carousel - The Owl Carousel
1712
+ */
1713
+ var AutoRefresh = function(carousel) {
1714
+ /**
1715
+ * Reference to the core.
1716
+ * @protected
1717
+ * @type {Owl}
1718
+ */
1719
+ this._core = carousel;
1720
+
1721
+ /**
1722
+ * Refresh interval.
1723
+ * @protected
1724
+ * @type {number}
1725
+ */
1726
+ this._interval = null;
1727
+
1728
+ /**
1729
+ * Whether the element is currently visible or not.
1730
+ * @protected
1731
+ * @type {Boolean}
1732
+ */
1733
+ this._visible = null;
1734
+
1735
+ /**
1736
+ * All event handlers.
1737
+ * @protected
1738
+ * @type {Object}
1739
+ */
1740
+ this._handlers = {
1741
+ 'initialized.owl.carousel': $.proxy(function(e) {
1742
+ if (e.namespace && this._core.settings.autoRefresh) {
1743
+ this.watch();
1744
+ }
1745
+ }, this)
1746
+ };
1747
+
1748
+ // set default options
1749
+ this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);
1750
+
1751
+ // register event handlers
1752
+ this._core.$element.on(this._handlers);
1753
+ };
1754
+
1755
+ /**
1756
+ * Default options.
1757
+ * @public
1758
+ */
1759
+ AutoRefresh.Defaults = {
1760
+ autoRefresh: true,
1761
+ autoRefreshInterval: 500
1762
+ };
1763
+
1764
+ /**
1765
+ * Watches the element.
1766
+ */
1767
+ AutoRefresh.prototype.watch = function() {
1768
+ if (this._interval) {
1769
+ return;
1770
+ }
1771
+
1772
+ this._visible = this._core.$element.is(':visible');
1773
+ this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
1774
+ };
1775
+
1776
+ /**
1777
+ * Refreshes the element.
1778
+ */
1779
+ AutoRefresh.prototype.refresh = function() {
1780
+ if (this._core.$element.is(':visible') === this._visible) {
1781
+ return;
1782
+ }
1783
+
1784
+ this._visible = !this._visible;
1785
+
1786
+ this._core.$element.toggleClass('owl-hidden', !this._visible);
1787
+
1788
+ this._visible && (this._core.invalidate('width') && this._core.refresh());
1789
+ };
1790
+
1791
+ /**
1792
+ * Destroys the plugin.
1793
+ */
1794
+ AutoRefresh.prototype.destroy = function() {
1795
+ var handler, property;
1796
+
1797
+ window.clearInterval(this._interval);
1798
+
1799
+ for (handler in this._handlers) {
1800
+ this._core.$element.off(handler, this._handlers[handler]);
1801
+ }
1802
+ for (property in Object.getOwnPropertyNames(this)) {
1803
+ typeof this[property] != 'function' && (this[property] = null);
1804
+ }
1805
+ };
1806
+
1807
+ $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;
1808
+
1809
+ })(window.Zepto || window.jQuery, window, document);
1810
+
1811
+ /**
1812
+ * Lazy Plugin
1813
+ * @version 2.1.0
1814
+ * @author Bartosz Wojciechowski
1815
+ * @author David Deutsch
1816
+ * @license The MIT License (MIT)
1817
+ */
1818
+ ;(function($, window, document, undefined) {
1819
+
1820
+ /**
1821
+ * Creates the lazy plugin.
1822
+ * @class The Lazy Plugin
1823
+ * @param {Owl} carousel - The Owl Carousel
1824
+ */
1825
+ var Lazy = function(carousel) {
1826
+
1827
+ /**
1828
+ * Reference to the core.
1829
+ * @protected
1830
+ * @type {Owl}
1831
+ */
1832
+ this._core = carousel;
1833
+
1834
+ /**
1835
+ * Already loaded items.
1836
+ * @protected
1837
+ * @type {Array.<jQuery>}
1838
+ */
1839
+ this._loaded = [];
1840
+
1841
+ /**
1842
+ * Event handlers.
1843
+ * @protected
1844
+ * @type {Object}
1845
+ */
1846
+ this._handlers = {
1847
+ 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
1848
+ if (!e.namespace) {
1849
+ return;
1850
+ }
1851
+
1852
+ if (!this._core.settings || !this._core.settings.lazyLoad) {
1853
+ return;
1854
+ }
1855
+
1856
+ if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
1857
+ var settings = this._core.settings,
1858
+ n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
1859
+ i = ((settings.center && n * -1) || 0),
1860
+ position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
1861
+ clones = this._core.clones().length,
1862
+ load = $.proxy(function(i, v) { this.load(v) }, this);
1863
+
1864
+ while (i++ < n) {
1865
+ this.load(clones / 2 + this._core.relative(position));
1866
+ clones && $.each(this._core.clones(this._core.relative(position)), load);
1867
+ position++;
1868
+ }
1869
+ }
1870
+ }, this)
1871
+ };
1872
+
1873
+ // set the default options
1874
+ this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
1875
+
1876
+ // register event handler
1877
+ this._core.$element.on(this._handlers);
1878
+ };
1879
+
1880
+ /**
1881
+ * Default options.
1882
+ * @public
1883
+ */
1884
+ Lazy.Defaults = {
1885
+ lazyLoad: false
1886
+ };
1887
+
1888
+ /**
1889
+ * Loads all resources of an item at the specified position.
1890
+ * @param {Number} position - The absolute position of the item.
1891
+ * @protected
1892
+ */
1893
+ Lazy.prototype.load = function(position) {
1894
+ var $item = this._core.$stage.children().eq(position),
1895
+ $elements = $item && $item.find('.owl-lazy');
1896
+
1897
+ if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
1898
+ return;
1899
+ }
1900
+
1901
+ $elements.each($.proxy(function(index, element) {
1902
+ var $element = $(element), image,
1903
+ url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');
1904
+
1905
+ this._core.trigger('load', { element: $element, url: url }, 'lazy');
1906
+
1907
+ if ($element.is('img')) {
1908
+ $element.one('load.owl.lazy', $.proxy(function() {
1909
+ $element.css('opacity', 1);
1910
+ this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
1911
+ }, this)).attr('src', url);
1912
+ } else {
1913
+ image = new Image();
1914
+ image.onload = $.proxy(function() {
1915
+ $element.css({
1916
+ 'background-image': 'url("' + url + '")',
1917
+ 'opacity': '1'
1918
+ });
1919
+ this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
1920
+ }, this);
1921
+ image.src = url;
1922
+ }
1923
+ }, this));
1924
+
1925
+ this._loaded.push($item.get(0));
1926
+ };
1927
+
1928
+ /**
1929
+ * Destroys the plugin.
1930
+ * @public
1931
+ */
1932
+ Lazy.prototype.destroy = function() {
1933
+ var handler, property;
1934
+
1935
+ for (handler in this.handlers) {
1936
+ this._core.$element.off(handler, this.handlers[handler]);
1937
+ }
1938
+ for (property in Object.getOwnPropertyNames(this)) {
1939
+ typeof this[property] != 'function' && (this[property] = null);
1940
+ }
1941
+ };
1942
+
1943
+ $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
1944
+
1945
+ })(window.Zepto || window.jQuery, window, document);
1946
+
1947
+ /**
1948
+ * AutoHeight Plugin
1949
+ * @version 2.1.0
1950
+ * @author Bartosz Wojciechowski
1951
+ * @author David Deutsch
1952
+ * @license The MIT License (MIT)
1953
+ */
1954
+ ;(function($, window, document, undefined) {
1955
+
1956
+ /**
1957
+ * Creates the auto height plugin.
1958
+ * @class The Auto Height Plugin
1959
+ * @param {Owl} carousel - The Owl Carousel
1960
+ */
1961
+ var AutoHeight = function(carousel) {
1962
+ /**
1963
+ * Reference to the core.
1964
+ * @protected
1965
+ * @type {Owl}
1966
+ */
1967
+ this._core = carousel;
1968
+
1969
+ /**
1970
+ * All event handlers.
1971
+ * @protected
1972
+ * @type {Object}
1973
+ */
1974
+ this._handlers = {
1975
+ 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
1976
+ if (e.namespace && this._core.settings.autoHeight) {
1977
+ this.update();
1978
+ }
1979
+ }, this),
1980
+ 'changed.owl.carousel': $.proxy(function(e) {
1981
+ if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){
1982
+ this.update();
1983
+ }
1984
+ }, this),
1985
+ 'loaded.owl.lazy': $.proxy(function(e) {
1986
+ if (e.namespace && this._core.settings.autoHeight
1987
+ && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
1988
+ this.update();
1989
+ }
1990
+ }, this)
1991
+ };
1992
+
1993
+ // set default options
1994
+ this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
1995
+
1996
+ // register event handlers
1997
+ this._core.$element.on(this._handlers);
1998
+ };
1999
+
2000
+ /**
2001
+ * Default options.
2002
+ * @public
2003
+ */
2004
+ AutoHeight.Defaults = {
2005
+ autoHeight: false,
2006
+ autoHeightClass: 'owl-height'
2007
+ };
2008
+
2009
+ /**
2010
+ * Updates the view.
2011
+ */
2012
+ AutoHeight.prototype.update = function() {
2013
+ var start = this._core._current,
2014
+ end = start + this._core.settings.items,
2015
+ visible = this._core.$stage.children().toArray().slice(start, end),
2016
+ heights = [],
2017
+ maxheight = 0;
2018
+
2019
+ $.each(visible, function(index, item) {
2020
+ heights.push($(item).height());
2021
+ });
2022
+
2023
+ maxheight = Math.max.apply(null, heights);
2024
+
2025
+ this._core.$stage.parent()
2026
+ .height(maxheight)
2027
+ .addClass(this._core.settings.autoHeightClass);
2028
+ };
2029
+
2030
+ AutoHeight.prototype.destroy = function() {
2031
+ var handler, property;
2032
+
2033
+ for (handler in this._handlers) {
2034
+ this._core.$element.off(handler, this._handlers[handler]);
2035
+ }
2036
+ for (property in Object.getOwnPropertyNames(this)) {
2037
+ typeof this[property] != 'function' && (this[property] = null);
2038
+ }
2039
+ };
2040
+
2041
+ $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
2042
+
2043
+ })(window.Zepto || window.jQuery, window, document);
2044
+
2045
+ /**
2046
+ * Video Plugin
2047
+ * @version 2.1.0
2048
+ * @author Bartosz Wojciechowski
2049
+ * @author David Deutsch
2050
+ * @license The MIT License (MIT)
2051
+ */
2052
+ ;(function($, window, document, undefined) {
2053
+
2054
+ /**
2055
+ * Creates the video plugin.
2056
+ * @class The Video Plugin
2057
+ * @param {Owl} carousel - The Owl Carousel
2058
+ */
2059
+ var Video = function(carousel) {
2060
+ /**
2061
+ * Reference to the core.
2062
+ * @protected
2063
+ * @type {Owl}
2064
+ */
2065
+ this._core = carousel;
2066
+
2067
+ /**
2068
+ * Cache all video URLs.
2069
+ * @protected
2070
+ * @type {Object}
2071
+ */
2072
+ this._videos = {};
2073
+
2074
+ /**
2075
+ * Current playing item.
2076
+ * @protected
2077
+ * @type {jQuery}
2078
+ */
2079
+ this._playing = null;
2080
+
2081
+ /**
2082
+ * All event handlers.
2083
+ * @todo The cloned content removale is too late
2084
+ * @protected
2085
+ * @type {Object}
2086
+ */
2087
+ this._handlers = {
2088
+ 'initialized.owl.carousel': $.proxy(function(e) {
2089
+ if (e.namespace) {
2090
+ this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
2091
+ }
2092
+ }, this),
2093
+ 'resize.owl.carousel': $.proxy(function(e) {
2094
+ if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
2095
+ e.preventDefault();
2096
+ }
2097
+ }, this),
2098
+ 'refreshed.owl.carousel': $.proxy(function(e) {
2099
+ if (e.namespace && this._core.is('resizing')) {
2100
+ this._core.$stage.find('.cloned .owl-video-frame').remove();
2101
+ }
2102
+ }, this),
2103
+ 'changed.owl.carousel': $.proxy(function(e) {
2104
+ if (e.namespace && e.property.name === 'position' && this._playing) {
2105
+ this.stop();
2106
+ }
2107
+ }, this),
2108
+ 'prepared.owl.carousel': $.proxy(function(e) {
2109
+ if (!e.namespace) {
2110
+ return;
2111
+ }
2112
+
2113
+ var $element = $(e.content).find('.owl-video');
2114
+
2115
+ if ($element.length) {
2116
+ $element.css('display', 'none');
2117
+ this.fetch($element, $(e.content));
2118
+ }
2119
+ }, this)
2120
+ };
2121
+
2122
+ // set default options
2123
+ this._core.options = $.extend({}, Video.Defaults, this._core.options);
2124
+
2125
+ // register event handlers
2126
+ this._core.$element.on(this._handlers);
2127
+
2128
+ this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
2129
+ this.play(e);
2130
+ }, this));
2131
+ };
2132
+
2133
+ /**
2134
+ * Default options.
2135
+ * @public
2136
+ */
2137
+ Video.Defaults = {
2138
+ video: false,
2139
+ videoHeight: false,
2140
+ videoWidth: false
2141
+ };
2142
+
2143
+ /**
2144
+ * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
2145
+ * @protected
2146
+ * @param {jQuery} target - The target containing the video data.
2147
+ * @param {jQuery} item - The item containing the video.
2148
+ */
2149
+ Video.prototype.fetch = function(target, item) {
2150
+ var type = (function() {
2151
+ if (target.attr('data-vimeo-id')) {
2152
+ return 'vimeo';
2153
+ } else if (target.attr('data-vzaar-id')) {
2154
+ return 'vzaar'
2155
+ } else {
2156
+ return 'youtube';
2157
+ }
2158
+ })(),
2159
+ id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
2160
+ width = target.attr('data-width') || this._core.settings.videoWidth,
2161
+ height = target.attr('data-height') || this._core.settings.videoHeight,
2162
+ url = target.attr('href');
2163
+
2164
+ if (url) {
2165
+
2166
+ /*
2167
+ Parses the id's out of the following urls (and probably more):
2168
+ https://www.youtube.com/watch?v=:id
2169
+ https://youtu.be/:id
2170
+ https://vimeo.com/:id
2171
+ https://vimeo.com/channels/:channel/:id
2172
+ https://vimeo.com/groups/:group/videos/:id
2173
+ https://app.vzaar.com/videos/:id
2174
+
2175
+ Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
2176
+ */
2177
+
2178
+ id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
2179
+
2180
+ if (id[3].indexOf('youtu') > -1) {
2181
+ type = 'youtube';
2182
+ } else if (id[3].indexOf('vimeo') > -1) {
2183
+ type = 'vimeo';
2184
+ } else if (id[3].indexOf('vzaar') > -1) {
2185
+ type = 'vzaar';
2186
+ } else {
2187
+ throw new Error('Video URL not supported.');
2188
+ }
2189
+ id = id[6];
2190
+ } else {
2191
+ throw new Error('Missing video URL.');
2192
+ }
2193
+
2194
+ this._videos[url] = {
2195
+ type: type,
2196
+ id: id,
2197
+ width: width,
2198
+ height: height
2199
+ };
2200
+
2201
+ item.attr('data-video', url);
2202
+
2203
+ this.thumbnail(target, this._videos[url]);
2204
+ };
2205
+
2206
+ /**
2207
+ * Creates video thumbnail.
2208
+ * @protected
2209
+ * @param {jQuery} target - The target containing the video data.
2210
+ * @param {Object} info - The video info object.
2211
+ * @see `fetch`
2212
+ */
2213
+ Video.prototype.thumbnail = function(target, video) {
2214
+ var tnLink,
2215
+ icon,
2216
+ path,
2217
+ dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '',
2218
+ customTn = target.find('img'),
2219
+ srcType = 'src',
2220
+ lazyClass = '',
2221
+ settings = this._core.settings,
2222
+ create = function(path) {
2223
+ icon = '<div class="owl-video-play-icon"></div>';
2224
+
2225
+ if (settings.lazyLoad) {
2226
+ tnLink = '<div class="owl-video-tn ' + lazyClass + '" ' + srcType + '="' + path + '"></div>';
2227
+ } else {
2228
+ tnLink = '<div class="owl-video-tn" style="opacity:1;background-image:url(' + path + ')"></div>';
2229
+ }
2230
+ target.after(tnLink);
2231
+ target.after(icon);
2232
+ };
2233
+
2234
+ // wrap video content into owl-video-wrapper div
2235
+ target.wrap('<div class="owl-video-wrapper"' + dimensions + '></div>');
2236
+
2237
+ if (this._core.settings.lazyLoad) {
2238
+ srcType = 'data-src';
2239
+ lazyClass = 'owl-lazy';
2240
+ }
2241
+
2242
+ // custom thumbnail
2243
+ if (customTn.length) {
2244
+ create(customTn.attr(srcType));
2245
+ customTn.remove();
2246
+ return false;
2247
+ }
2248
+
2249
+ if (video.type === 'youtube') {
2250
+ path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
2251
+ create(path);
2252
+ } else if (video.type === 'vimeo') {
2253
+ $.ajax({
2254
+ type: 'GET',
2255
+ url: '//vimeo.com/api/v2/video/' + video.id + '.json',
2256
+ jsonp: 'callback',
2257
+ dataType: 'jsonp',
2258
+ success: function(data) {
2259
+ path = data[0].thumbnail_large;
2260
+ create(path);
2261
+ }
2262
+ });
2263
+ } else if (video.type === 'vzaar') {
2264
+ $.ajax({
2265
+ type: 'GET',
2266
+ url: '//vzaar.com/api/videos/' + video.id + '.json',
2267
+ jsonp: 'callback',
2268
+ dataType: 'jsonp',
2269
+ success: function(data) {
2270
+ path = data.framegrab_url;
2271
+ create(path);
2272
+ }
2273
+ });
2274
+ }
2275
+ };
2276
+
2277
+ /**
2278
+ * Stops the current video.
2279
+ * @public
2280
+ */
2281
+ Video.prototype.stop = function() {
2282
+ this._core.trigger('stop', null, 'video');
2283
+ this._playing.find('.owl-video-frame').remove();
2284
+ this._playing.removeClass('owl-video-playing');
2285
+ this._playing = null;
2286
+ this._core.leave('playing');
2287
+ this._core.trigger('stopped', null, 'video');
2288
+ };
2289
+
2290
+ /**
2291
+ * Starts the current video.
2292
+ * @public
2293
+ * @param {Event} event - The event arguments.
2294
+ */
2295
+ Video.prototype.play = function(event) {
2296
+ var target = $(event.target),
2297
+ item = target.closest('.' + this._core.settings.itemClass),
2298
+ video = this._videos[item.attr('data-video')],
2299
+ width = video.width || '100%',
2300
+ height = video.height || this._core.$stage.height(),
2301
+ html;
2302
+
2303
+ if (this._playing) {
2304
+ return;
2305
+ }
2306
+
2307
+ this._core.enter('playing');
2308
+ this._core.trigger('play', null, 'video');
2309
+
2310
+ item = this._core.items(this._core.relative(item.index()));
2311
+
2312
+ this._core.reset(item.index());
2313
+
2314
+ if (video.type === 'youtube') {
2315
+ html = '<iframe width="' + width + '" height="' + height + '" src="//www.youtube.com/embed/' +
2316
+ video.id + '?autoplay=1&rel=0&v=' + video.id + '" frameborder="0" allowfullscreen></iframe>';
2317
+ } else if (video.type === 'vimeo') {
2318
+ html = '<iframe src="//player.vimeo.com/video/' + video.id +
2319
+ '?autoplay=1" width="' + width + '" height="' + height +
2320
+ '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
2321
+ } else if (video.type === 'vzaar') {
2322
+ html = '<iframe frameborder="0"' + 'height="' + height + '"' + 'width="' + width +
2323
+ '" allowfullscreen mozallowfullscreen webkitAllowFullScreen ' +
2324
+ 'src="//view.vzaar.com/' + video.id + '/player?autoplay=true"></iframe>';
2325
+ }
2326
+
2327
+ $('<div class="owl-video-frame">' + html + '</div>').insertAfter(item.find('.owl-video'));
2328
+
2329
+ this._playing = item.addClass('owl-video-playing');
2330
+ };
2331
+
2332
+ /**
2333
+ * Checks whether an video is currently in full screen mode or not.
2334
+ * @todo Bad style because looks like a readonly method but changes members.
2335
+ * @protected
2336
+ * @returns {Boolean}
2337
+ */
2338
+ Video.prototype.isInFullScreen = function() {
2339
+ var element = document.fullscreenElement || document.mozFullScreenElement ||
2340
+ document.webkitFullscreenElement;
2341
+
2342
+ return element && $(element).parent().hasClass('owl-video-frame');
2343
+ };
2344
+
2345
+ /**
2346
+ * Destroys the plugin.
2347
+ */
2348
+ Video.prototype.destroy = function() {
2349
+ var handler, property;
2350
+
2351
+ this._core.$element.off('click.owl.video');
2352
+
2353
+ for (handler in this._handlers) {
2354
+ this._core.$element.off(handler, this._handlers[handler]);
2355
+ }
2356
+ for (property in Object.getOwnPropertyNames(this)) {
2357
+ typeof this[property] != 'function' && (this[property] = null);
2358
+ }
2359
+ };
2360
+
2361
+ $.fn.owlCarousel.Constructor.Plugins.Video = Video;
2362
+
2363
+ })(window.Zepto || window.jQuery, window, document);
2364
+
2365
+ /**
2366
+ * Animate Plugin
2367
+ * @version 2.1.0
2368
+ * @author Bartosz Wojciechowski
2369
+ * @author David Deutsch
2370
+ * @license The MIT License (MIT)
2371
+ */
2372
+ ;(function($, window, document, undefined) {
2373
+
2374
+ /**
2375
+ * Creates the animate plugin.
2376
+ * @class The Navigation Plugin
2377
+ * @param {Owl} scope - The Owl Carousel
2378
+ */
2379
+ var Animate = function(scope) {
2380
+ this.core = scope;
2381
+ this.core.options = $.extend({}, Animate.Defaults, this.core.options);
2382
+ this.swapping = true;
2383
+ this.previous = undefined;
2384
+ this.next = undefined;
2385
+
2386
+ this.handlers = {
2387
+ 'change.owl.carousel': $.proxy(function(e) {
2388
+ if (e.namespace && e.property.name == 'position') {
2389
+ this.previous = this.core.current();
2390
+ this.next = e.property.value;
2391
+ }
2392
+ }, this),
2393
+ 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
2394
+ if (e.namespace) {
2395
+ this.swapping = e.type == 'translated';
2396
+ }
2397
+ }, this),
2398
+ 'translate.owl.carousel': $.proxy(function(e) {
2399
+ if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
2400
+ this.swap();
2401
+ }
2402
+ }, this)
2403
+ };
2404
+
2405
+ this.core.$element.on(this.handlers);
2406
+ };
2407
+
2408
+ /**
2409
+ * Default options.
2410
+ * @public
2411
+ */
2412
+ Animate.Defaults = {
2413
+ animateOut: false,
2414
+ animateIn: false
2415
+ };
2416
+
2417
+ /**
2418
+ * Toggles the animation classes whenever an translations starts.
2419
+ * @protected
2420
+ * @returns {Boolean|undefined}
2421
+ */
2422
+ Animate.prototype.swap = function() {
2423
+
2424
+ if (this.core.settings.items !== 1) {
2425
+ return;
2426
+ }
2427
+
2428
+ if (!$.support.animation || !$.support.transition) {
2429
+ return;
2430
+ }
2431
+
2432
+ this.core.speed(0);
2433
+
2434
+ var left,
2435
+ clear = $.proxy(this.clear, this),
2436
+ previous = this.core.$stage.children().eq(this.previous),
2437
+ next = this.core.$stage.children().eq(this.next),
2438
+ incoming = this.core.settings.animateIn,
2439
+ outgoing = this.core.settings.animateOut;
2440
+
2441
+ if (this.core.current() === this.previous) {
2442
+ return;
2443
+ }
2444
+
2445
+ if (outgoing) {
2446
+ left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
2447
+ previous.one($.support.animation.end, clear)
2448
+ .css( { 'left': left + 'px' } )
2449
+ .addClass('animated owl-animated-out')
2450
+ .addClass(outgoing);
2451
+ }
2452
+
2453
+ if (incoming) {
2454
+ next.one($.support.animation.end, clear)
2455
+ .addClass('animated owl-animated-in')
2456
+ .addClass(incoming);
2457
+ }
2458
+ };
2459
+
2460
+ Animate.prototype.clear = function(e) {
2461
+ $(e.target).css( { 'left': '' } )
2462
+ .removeClass('animated owl-animated-out owl-animated-in')
2463
+ .removeClass(this.core.settings.animateIn)
2464
+ .removeClass(this.core.settings.animateOut);
2465
+ this.core.onTransitionEnd();
2466
+ };
2467
+
2468
+ /**
2469
+ * Destroys the plugin.
2470
+ * @public
2471
+ */
2472
+ Animate.prototype.destroy = function() {
2473
+ var handler, property;
2474
+
2475
+ for (handler in this.handlers) {
2476
+ this.core.$element.off(handler, this.handlers[handler]);
2477
+ }
2478
+ for (property in Object.getOwnPropertyNames(this)) {
2479
+ typeof this[property] != 'function' && (this[property] = null);
2480
+ }
2481
+ };
2482
+
2483
+ $.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
2484
+
2485
+ })(window.Zepto || window.jQuery, window, document);
2486
+
2487
+ /**
2488
+ * Autoplay Plugin
2489
+ * @version 2.1.0
2490
+ * @author Bartosz Wojciechowski
2491
+ * @author Artus Kolanowski
2492
+ * @author David Deutsch
2493
+ * @license The MIT License (MIT)
2494
+ */
2495
+ ;(function($, window, document, undefined) {
2496
+
2497
+ /**
2498
+ * Creates the autoplay plugin.
2499
+ * @class The Autoplay Plugin
2500
+ * @param {Owl} scope - The Owl Carousel
2501
+ */
2502
+ var Autoplay = function(carousel) {
2503
+ /**
2504
+ * Reference to the core.
2505
+ * @protected
2506
+ * @type {Owl}
2507
+ */
2508
+ this._core = carousel;
2509
+
2510
+ /**
2511
+ * The autoplay timeout.
2512
+ * @type {Timeout}
2513
+ */
2514
+ this._timeout = null;
2515
+
2516
+ /**
2517
+ * Indicates whenever the autoplay is paused.
2518
+ * @type {Boolean}
2519
+ */
2520
+ this._paused = false;
2521
+
2522
+ /**
2523
+ * All event handlers.
2524
+ * @protected
2525
+ * @type {Object}
2526
+ */
2527
+ this._handlers = {
2528
+ 'changed.owl.carousel': $.proxy(function(e) {
2529
+ if (e.namespace && e.property.name === 'settings') {
2530
+ if (this._core.settings.autoplay) {
2531
+ this.play();
2532
+ } else {
2533
+ this.stop();
2534
+ }
2535
+ } else if (e.namespace && e.property.name === 'position') {
2536
+ //console.log('play?', e);
2537
+ if (this._core.settings.autoplay) {
2538
+ this._setAutoPlayInterval();
2539
+ }
2540
+ }
2541
+ }, this),
2542
+ 'initialized.owl.carousel': $.proxy(function(e) {
2543
+ if (e.namespace && this._core.settings.autoplay) {
2544
+ this.play();
2545
+ }
2546
+ }, this),
2547
+ 'play.owl.autoplay': $.proxy(function(e, t, s) {
2548
+ if (e.namespace) {
2549
+ this.play(t, s);
2550
+ }
2551
+ }, this),
2552
+ 'stop.owl.autoplay': $.proxy(function(e) {
2553
+ if (e.namespace) {
2554
+ this.stop();
2555
+ }
2556
+ }, this),
2557
+ 'mouseover.owl.autoplay': $.proxy(function() {
2558
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
2559
+ this.pause();
2560
+ }
2561
+ }, this),
2562
+ 'mouseleave.owl.autoplay': $.proxy(function() {
2563
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
2564
+ this.play();
2565
+ }
2566
+ }, this),
2567
+ 'touchstart.owl.core': $.proxy(function() {
2568
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
2569
+ this.pause();
2570
+ }
2571
+ }, this),
2572
+ 'touchend.owl.core': $.proxy(function() {
2573
+ if (this._core.settings.autoplayHoverPause) {
2574
+ this.play();
2575
+ }
2576
+ }, this)
2577
+ };
2578
+
2579
+ // register event handlers
2580
+ this._core.$element.on(this._handlers);
2581
+
2582
+ // set default options
2583
+ this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
2584
+ };
2585
+
2586
+ /**
2587
+ * Default options.
2588
+ * @public
2589
+ */
2590
+ Autoplay.Defaults = {
2591
+ autoplay: false,
2592
+ autoplayTimeout: 5000,
2593
+ autoplayHoverPause: false,
2594
+ autoplaySpeed: false
2595
+ };
2596
+
2597
+ /**
2598
+ * Starts the autoplay.
2599
+ * @public
2600
+ * @param {Number} [timeout] - The interval before the next animation starts.
2601
+ * @param {Number} [speed] - The animation speed for the animations.
2602
+ */
2603
+ Autoplay.prototype.play = function(timeout, speed) {
2604
+ this._paused = false;
2605
+
2606
+ if (this._core.is('rotating')) {
2607
+ return;
2608
+ }
2609
+
2610
+ this._core.enter('rotating');
2611
+
2612
+ this._setAutoPlayInterval();
2613
+ };
2614
+
2615
+ /**
2616
+ * Gets a new timeout
2617
+ * @private
2618
+ * @param {Number} [timeout] - The interval before the next animation starts.
2619
+ * @param {Number} [speed] - The animation speed for the animations.
2620
+ * @return {Timeout}
2621
+ */
2622
+ Autoplay.prototype._getNextTimeout = function(timeout, speed) {
2623
+ if ( this._timeout ) {
2624
+ window.clearTimeout(this._timeout);
2625
+ }
2626
+ return window.setTimeout($.proxy(function() {
2627
+ if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {
2628
+ return;
2629
+ }
2630
+ this._core.next(speed || this._core.settings.autoplaySpeed);
2631
+ }, this), timeout || this._core.settings.autoplayTimeout);
2632
+ };
2633
+
2634
+ /**
2635
+ * Sets autoplay in motion.
2636
+ * @private
2637
+ */
2638
+ Autoplay.prototype._setAutoPlayInterval = function() {
2639
+ this._timeout = this._getNextTimeout();
2640
+ };
2641
+
2642
+ /**
2643
+ * Stops the autoplay.
2644
+ * @public
2645
+ */
2646
+ Autoplay.prototype.stop = function() {
2647
+ if (!this._core.is('rotating')) {
2648
+ return;
2649
+ }
2650
+
2651
+ window.clearTimeout(this._timeout);
2652
+ this._core.leave('rotating');
2653
+ };
2654
+
2655
+ /**
2656
+ * Stops the autoplay.
2657
+ * @public
2658
+ */
2659
+ Autoplay.prototype.pause = function() {
2660
+ if (!this._core.is('rotating')) {
2661
+ return;
2662
+ }
2663
+
2664
+ this._paused = true;
2665
+ };
2666
+
2667
+ /**
2668
+ * Destroys the plugin.
2669
+ */
2670
+ Autoplay.prototype.destroy = function() {
2671
+ var handler, property;
2672
+
2673
+ this.stop();
2674
+
2675
+ for (handler in this._handlers) {
2676
+ this._core.$element.off(handler, this._handlers[handler]);
2677
+ }
2678
+ for (property in Object.getOwnPropertyNames(this)) {
2679
+ typeof this[property] != 'function' && (this[property] = null);
2680
+ }
2681
+ };
2682
+
2683
+ $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
2684
+
2685
+ })(window.Zepto || window.jQuery, window, document);
2686
+
2687
+ /**
2688
+ * Navigation Plugin
2689
+ * @version 2.1.0
2690
+ * @author Artus Kolanowski
2691
+ * @author David Deutsch
2692
+ * @license The MIT License (MIT)
2693
+ */
2694
+ ;(function($, window, document, undefined) {
2695
+ 'use strict';
2696
+
2697
+ /**
2698
+ * Creates the navigation plugin.
2699
+ * @class The Navigation Plugin
2700
+ * @param {Owl} carousel - The Owl Carousel.
2701
+ */
2702
+ var Navigation = function(carousel) {
2703
+ /**
2704
+ * Reference to the core.
2705
+ * @protected
2706
+ * @type {Owl}
2707
+ */
2708
+ this._core = carousel;
2709
+
2710
+ /**
2711
+ * Indicates whether the plugin is initialized or not.
2712
+ * @protected
2713
+ * @type {Boolean}
2714
+ */
2715
+ this._initialized = false;
2716
+
2717
+ /**
2718
+ * The current paging indexes.
2719
+ * @protected
2720
+ * @type {Array}
2721
+ */
2722
+ this._pages = [];
2723
+
2724
+ /**
2725
+ * All DOM elements of the user interface.
2726
+ * @protected
2727
+ * @type {Object}
2728
+ */
2729
+ this._controls = {};
2730
+
2731
+ /**
2732
+ * Markup for an indicator.
2733
+ * @protected
2734
+ * @type {Array.<String>}
2735
+ */
2736
+ this._templates = [];
2737
+
2738
+ /**
2739
+ * The carousel element.
2740
+ * @type {jQuery}
2741
+ */
2742
+ this.$element = this._core.$element;
2743
+
2744
+ /**
2745
+ * Overridden methods of the carousel.
2746
+ * @protected
2747
+ * @type {Object}
2748
+ */
2749
+ this._overrides = {
2750
+ next: this._core.next,
2751
+ prev: this._core.prev,
2752
+ to: this._core.to
2753
+ };
2754
+
2755
+ /**
2756
+ * All event handlers.
2757
+ * @protected
2758
+ * @type {Object}
2759
+ */
2760
+ this._handlers = {
2761
+ 'prepared.owl.carousel': $.proxy(function(e) {
2762
+ if (e.namespace && this._core.settings.dotsData) {
2763
+ this._templates.push('<div class="' + this._core.settings.dotClass + '">' +
2764
+ $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');
2765
+ }
2766
+ }, this),
2767
+ 'added.owl.carousel': $.proxy(function(e) {
2768
+ if (e.namespace && this._core.settings.dotsData) {
2769
+ this._templates.splice(e.position, 0, this._templates.pop());
2770
+ }
2771
+ }, this),
2772
+ 'remove.owl.carousel': $.proxy(function(e) {
2773
+ if (e.namespace && this._core.settings.dotsData) {
2774
+ this._templates.splice(e.position, 1);
2775
+ }
2776
+ }, this),
2777
+ 'changed.owl.carousel': $.proxy(function(e) {
2778
+ if (e.namespace && e.property.name == 'position') {
2779
+ this.draw();
2780
+ }
2781
+ }, this),
2782
+ 'initialized.owl.carousel': $.proxy(function(e) {
2783
+ if (e.namespace && !this._initialized) {
2784
+ this._core.trigger('initialize', null, 'navigation');
2785
+ this.initialize();
2786
+ this.update();
2787
+ this.draw();
2788
+ this._initialized = true;
2789
+ this._core.trigger('initialized', null, 'navigation');
2790
+ }
2791
+ }, this),
2792
+ 'refreshed.owl.carousel': $.proxy(function(e) {
2793
+ if (e.namespace && this._initialized) {
2794
+ this._core.trigger('refresh', null, 'navigation');
2795
+ this.update();
2796
+ this.draw();
2797
+ this._core.trigger('refreshed', null, 'navigation');
2798
+ }
2799
+ }, this)
2800
+ };
2801
+
2802
+ // set default options
2803
+ this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
2804
+
2805
+ // register event handlers
2806
+ this.$element.on(this._handlers);
2807
+ };
2808
+
2809
+ /**
2810
+ * Default options.
2811
+ * @public
2812
+ * @todo Rename `slideBy` to `navBy`
2813
+ */
2814
+ Navigation.Defaults = {
2815
+ nav: false,
2816
+ navText: [ 'prev', 'next' ],
2817
+ navSpeed: false,
2818
+ navElement: 'div',
2819
+ navContainer: false,
2820
+ navContainerClass: 'owl-nav',
2821
+ navClass: [ 'owl-prev', 'owl-next' ],
2822
+ slideBy: 1,
2823
+ dotClass: 'owl-dot',
2824
+ dotsClass: 'owl-dots',
2825
+ dots: true,
2826
+ dotsEach: false,
2827
+ dotsData: false,
2828
+ dotsSpeed: false,
2829
+ dotsContainer: false
2830
+ };
2831
+
2832
+ /**
2833
+ * Initializes the layout of the plugin and extends the carousel.
2834
+ * @protected
2835
+ */
2836
+ Navigation.prototype.initialize = function() {
2837
+ var override,
2838
+ settings = this._core.settings;
2839
+
2840
+ // create DOM structure for relative navigation
2841
+ this._controls.$relative = (settings.navContainer ? $(settings.navContainer)
2842
+ : $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');
2843
+
2844
+ this._controls.$previous = $('<' + settings.navElement + '>')
2845
+ .addClass(settings.navClass[0])
2846
+ .html(settings.navText[0])
2847
+ .prependTo(this._controls.$relative)
2848
+ .on('click', $.proxy(function(e) {
2849
+ this.prev(settings.navSpeed);
2850
+ }, this));
2851
+ this._controls.$next = $('<' + settings.navElement + '>')
2852
+ .addClass(settings.navClass[1])
2853
+ .html(settings.navText[1])
2854
+ .appendTo(this._controls.$relative)
2855
+ .on('click', $.proxy(function(e) {
2856
+ this.next(settings.navSpeed);
2857
+ }, this));
2858
+
2859
+ // create DOM structure for absolute navigation
2860
+ if (!settings.dotsData) {
2861
+ this._templates = [ $('<div>')
2862
+ .addClass(settings.dotClass)
2863
+ .append($('<span>'))
2864
+ .prop('outerHTML') ];
2865
+ }
2866
+
2867
+ this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)
2868
+ : $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');
2869
+
2870
+ this._controls.$absolute.on('click', 'div', $.proxy(function(e) {
2871
+ var index = $(e.target).parent().is(this._controls.$absolute)
2872
+ ? $(e.target).index() : $(e.target).parent().index();
2873
+
2874
+ e.preventDefault();
2875
+
2876
+ this.to(index, settings.dotsSpeed);
2877
+ }, this));
2878
+
2879
+ // override public methods of the carousel
2880
+ for (override in this._overrides) {
2881
+ this._core[override] = $.proxy(this[override], this);
2882
+ }
2883
+ };
2884
+
2885
+ /**
2886
+ * Destroys the plugin.
2887
+ * @protected
2888
+ */
2889
+ Navigation.prototype.destroy = function() {
2890
+ var handler, control, property, override;
2891
+
2892
+ for (handler in this._handlers) {
2893
+ this.$element.off(handler, this._handlers[handler]);
2894
+ }
2895
+ for (control in this._controls) {
2896
+ this._controls[control].remove();
2897
+ }
2898
+ for (override in this.overides) {
2899
+ this._core[override] = this._overrides[override];
2900
+ }
2901
+ for (property in Object.getOwnPropertyNames(this)) {
2902
+ typeof this[property] != 'function' && (this[property] = null);
2903
+ }
2904
+ };
2905
+
2906
+ /**
2907
+ * Updates the internal state.
2908
+ * @protected
2909
+ */
2910
+ Navigation.prototype.update = function() {
2911
+ var i, j, k,
2912
+ lower = this._core.clones().length / 2,
2913
+ upper = lower + this._core.items().length,
2914
+ maximum = this._core.maximum(true),
2915
+ settings = this._core.settings,
2916
+ size = settings.center || settings.autoWidth || settings.dotsData
2917
+ ? 1 : settings.dotsEach || settings.items;
2918
+
2919
+ if (settings.slideBy !== 'page') {
2920
+ settings.slideBy = Math.min(settings.slideBy, settings.items);
2921
+ }
2922
+
2923
+ if (settings.dots || settings.slideBy == 'page') {
2924
+ this._pages = [];
2925
+
2926
+ for (i = lower, j = 0, k = 0; i < upper; i++) {
2927
+ if (j >= size || j === 0) {
2928
+ this._pages.push({
2929
+ start: Math.min(maximum, i - lower),
2930
+ end: i - lower + size - 1
2931
+ });
2932
+ if (Math.min(maximum, i - lower) === maximum) {
2933
+ break;
2934
+ }
2935
+ j = 0, ++k;
2936
+ }
2937
+ j += this._core.mergers(this._core.relative(i));
2938
+ }
2939
+ }
2940
+ };
2941
+
2942
+ /**
2943
+ * Draws the user interface.
2944
+ * @todo The option `dotsData` wont work.
2945
+ * @protected
2946
+ */
2947
+ Navigation.prototype.draw = function() {
2948
+ var difference,
2949
+ settings = this._core.settings,
2950
+ disabled = this._core.items().length <= settings.items,
2951
+ index = this._core.relative(this._core.current()),
2952
+ loop = settings.loop || settings.rewind;
2953
+
2954
+ this._controls.$relative.toggleClass('disabled', !settings.nav || disabled);
2955
+
2956
+ if (settings.nav) {
2957
+ this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));
2958
+ this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));
2959
+ }
2960
+
2961
+ this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);
2962
+
2963
+ if (settings.dots) {
2964
+ difference = this._pages.length - this._controls.$absolute.children().length;
2965
+
2966
+ if (settings.dotsData && difference !== 0) {
2967
+ this._controls.$absolute.html(this._templates.join(''));
2968
+ } else if (difference > 0) {
2969
+ this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));
2970
+ } else if (difference < 0) {
2971
+ this._controls.$absolute.children().slice(difference).remove();
2972
+ }
2973
+
2974
+ this._controls.$absolute.find('.active').removeClass('active');
2975
+ this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');
2976
+ }
2977
+ };
2978
+
2979
+ /**
2980
+ * Extends event data.
2981
+ * @protected
2982
+ * @param {Event} event - The event object which gets thrown.
2983
+ */
2984
+ Navigation.prototype.onTrigger = function(event) {
2985
+ var settings = this._core.settings;
2986
+
2987
+ event.page = {
2988
+ index: $.inArray(this.current(), this._pages),
2989
+ count: this._pages.length,
2990
+ size: settings && (settings.center || settings.autoWidth || settings.dotsData
2991
+ ? 1 : settings.dotsEach || settings.items)
2992
+ };
2993
+ };
2994
+
2995
+ /**
2996
+ * Gets the current page position of the carousel.
2997
+ * @protected
2998
+ * @returns {Number}
2999
+ */
3000
+ Navigation.prototype.current = function() {
3001
+ var current = this._core.relative(this._core.current());
3002
+ return $.grep(this._pages, $.proxy(function(page, index) {
3003
+ return page.start <= current && page.end >= current;
3004
+ }, this)).pop();
3005
+ };
3006
+
3007
+ /**
3008
+ * Gets the current succesor/predecessor position.
3009
+ * @protected
3010
+ * @returns {Number}
3011
+ */
3012
+ Navigation.prototype.getPosition = function(successor) {
3013
+ var position, length,
3014
+ settings = this._core.settings;
3015
+
3016
+ if (settings.slideBy == 'page') {
3017
+ position = $.inArray(this.current(), this._pages);
3018
+ length = this._pages.length;
3019
+ successor ? ++position : --position;
3020
+ position = this._pages[((position % length) + length) % length].start;
3021
+ } else {
3022
+ position = this._core.relative(this._core.current());
3023
+ length = this._core.items().length;
3024
+ successor ? position += settings.slideBy : position -= settings.slideBy;
3025
+ }
3026
+
3027
+ return position;
3028
+ };
3029
+
3030
+ /**
3031
+ * Slides to the next item or page.
3032
+ * @public
3033
+ * @param {Number} [speed=false] - The time in milliseconds for the transition.
3034
+ */
3035
+ Navigation.prototype.next = function(speed) {
3036
+ $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
3037
+ };
3038
+
3039
+ /**
3040
+ * Slides to the previous item or page.
3041
+ * @public
3042
+ * @param {Number} [speed=false] - The time in milliseconds for the transition.
3043
+ */
3044
+ Navigation.prototype.prev = function(speed) {
3045
+ $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
3046
+ };
3047
+
3048
+ /**
3049
+ * Slides to the specified item or page.
3050
+ * @public
3051
+ * @param {Number} position - The position of the item or page.
3052
+ * @param {Number} [speed] - The time in milliseconds for the transition.
3053
+ * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
3054
+ */
3055
+ Navigation.prototype.to = function(position, speed, standard) {
3056
+ var length;
3057
+
3058
+ if (!standard && this._pages.length) {
3059
+ length = this._pages.length;
3060
+ $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
3061
+ } else {
3062
+ $.proxy(this._overrides.to, this._core)(position, speed);
3063
+ }
3064
+ };
3065
+
3066
+ $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
3067
+
3068
+ })(window.Zepto || window.jQuery, window, document);
3069
+
3070
+ /**
3071
+ * Hash Plugin
3072
+ * @version 2.1.0
3073
+ * @author Artus Kolanowski
3074
+ * @author David Deutsch
3075
+ * @license The MIT License (MIT)
3076
+ */
3077
+ ;(function($, window, document, undefined) {
3078
+ 'use strict';
3079
+
3080
+ /**
3081
+ * Creates the hash plugin.
3082
+ * @class The Hash Plugin
3083
+ * @param {Owl} carousel - The Owl Carousel
3084
+ */
3085
+ var Hash = function(carousel) {
3086
+ /**
3087
+ * Reference to the core.
3088
+ * @protected
3089
+ * @type {Owl}
3090
+ */
3091
+ this._core = carousel;
3092
+
3093
+ /**
3094
+ * Hash index for the items.
3095
+ * @protected
3096
+ * @type {Object}
3097
+ */
3098
+ this._hashes = {};
3099
+
3100
+ /**
3101
+ * The carousel element.
3102
+ * @type {jQuery}
3103
+ */
3104
+ this.$element = this._core.$element;
3105
+
3106
+ /**
3107
+ * All event handlers.
3108
+ * @protected
3109
+ * @type {Object}
3110
+ */
3111
+ this._handlers = {
3112
+ 'initialized.owl.carousel': $.proxy(function(e) {
3113
+ if (e.namespace && this._core.settings.startPosition === 'URLHash') {
3114
+ $(window).trigger('hashchange.owl.navigation');
3115
+ }
3116
+ }, this),
3117
+ 'prepared.owl.carousel': $.proxy(function(e) {
3118
+ if (e.namespace) {
3119
+ var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');
3120
+
3121
+ if (!hash) {
3122
+ return;
3123
+ }
3124
+
3125
+ this._hashes[hash] = e.content;
3126
+ }
3127
+ }, this),
3128
+ 'changed.owl.carousel': $.proxy(function(e) {
3129
+ if (e.namespace && e.property.name === 'position') {
3130
+ var current = this._core.items(this._core.relative(this._core.current())),
3131
+ hash = $.map(this._hashes, function(item, hash) {
3132
+ return item === current ? hash : null;
3133
+ }).join();
3134
+
3135
+ if (!hash || window.location.hash.slice(1) === hash) {
3136
+ return;
3137
+ }
3138
+
3139
+ window.location.hash = hash;
3140
+ }
3141
+ }, this)
3142
+ };
3143
+
3144
+ // set default options
3145
+ this._core.options = $.extend({}, Hash.Defaults, this._core.options);
3146
+
3147
+ // register the event handlers
3148
+ this.$element.on(this._handlers);
3149
+
3150
+ // register event listener for hash navigation
3151
+ $(window).on('hashchange.owl.navigation', $.proxy(function(e) {
3152
+ var hash = window.location.hash.substring(1),
3153
+ items = this._core.$stage.children(),
3154
+ position = this._hashes[hash] && items.index(this._hashes[hash]);
3155
+
3156
+ if (position === undefined || position === this._core.current()) {
3157
+ return;
3158
+ }
3159
+
3160
+ this._core.to(this._core.relative(position), false, true);
3161
+ }, this));
3162
+ };
3163
+
3164
+ /**
3165
+ * Default options.
3166
+ * @public
3167
+ */
3168
+ Hash.Defaults = {
3169
+ URLhashListener: false
3170
+ };
3171
+
3172
+ /**
3173
+ * Destroys the plugin.
3174
+ * @public
3175
+ */
3176
+ Hash.prototype.destroy = function() {
3177
+ var handler, property;
3178
+
3179
+ $(window).off('hashchange.owl.navigation');
3180
+
3181
+ for (handler in this._handlers) {
3182
+ this._core.$element.off(handler, this._handlers[handler]);
3183
+ }
3184
+ for (property in Object.getOwnPropertyNames(this)) {
3185
+ typeof this[property] != 'function' && (this[property] = null);
3186
+ }
3187
+ };
3188
+
3189
+ $.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
3190
+
3191
+ })(window.Zepto || window.jQuery, window, document);
3192
+
3193
+ /**
3194
+ * Support Plugin
3195
+ *
3196
+ * @version 2.1.0
3197
+ * @author Vivid Planet Software GmbH
3198
+ * @author Artus Kolanowski
3199
+ * @author David Deutsch
3200
+ * @license The MIT License (MIT)
3201
+ */
3202
+ ;(function($, window, document, undefined) {
3203
+
3204
+ var style = $('<support>').get(0).style,
3205
+ prefixes = 'Webkit Moz O ms'.split(' '),
3206
+ events = {
3207
+ transition: {
3208
+ end: {
3209
+ WebkitTransition: 'webkitTransitionEnd',
3210
+ MozTransition: 'transitionend',
3211
+ OTransition: 'oTransitionEnd',
3212
+ transition: 'transitionend'
3213
+ }
3214
+ },
3215
+ animation: {
3216
+ end: {
3217
+ WebkitAnimation: 'webkitAnimationEnd',
3218
+ MozAnimation: 'animationend',
3219
+ OAnimation: 'oAnimationEnd',
3220
+ animation: 'animationend'
3221
+ }
3222
+ }
3223
+ },
3224
+ tests = {
3225
+ csstransforms: function() {
3226
+ return !!test('transform');
3227
+ },
3228
+ csstransforms3d: function() {
3229
+ return !!test('perspective');
3230
+ },
3231
+ csstransitions: function() {
3232
+ return !!test('transition');
3233
+ },
3234
+ cssanimations: function() {
3235
+ return !!test('animation');
3236
+ }
3237
+ };
3238
+
3239
+ function test(property, prefixed) {
3240
+ var result = false,
3241
+ upper = property.charAt(0).toUpperCase() + property.slice(1);
3242
+
3243
+ $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {
3244
+ if (style[property] !== undefined) {
3245
+ result = prefixed ? property : true;
3246
+ return false;
3247
+ }
3248
+ });
3249
+
3250
+ return result;
3251
+ }
3252
+
3253
+ function prefixed(property) {
3254
+ return test(property, true);
3255
+ }
3256
+
3257
+ if (tests.csstransitions()) {
3258
+ /* jshint -W053 */
3259
+ $.support.transition = new String(prefixed('transition'))
3260
+ $.support.transition.end = events.transition.end[ $.support.transition ];
3261
+ }
3262
+
3263
+ if (tests.cssanimations()) {
3264
+ /* jshint -W053 */
3265
+ $.support.animation = new String(prefixed('animation'))
3266
+ $.support.animation.end = events.animation.end[ $.support.animation ];
3267
+ }
3268
+
3269
+ if (tests.csstransforms()) {
3270
+ /* jshint -W053 */
3271
+ $.support.transform = new String(prefixed('transform'));
3272
+ $.support.transform3d = tests.csstransforms3d();
3273
+ }
3274
+
3275
+ })(window.Zepto || window.jQuery, window, document);
lib/owlcarousel/owl.carousel.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Owl Carousel v2.2.1
3
+ * Copyright 2013-2017 David Deutsch
4
+ * Licensed under ()
5
+ */
6
+ !function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&b<h+e?d=a:"right"===c&&b>h-f-e&&b<h-f+e?d=a+1:this.op(b,"<",h)&&this.op(b,">",g[a+1]||h-f)&&(d="left"===c?a+1:a),d===-1},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){for(b=this._items.length,c=this._items[--b].width(),d=this.$element.width();b--&&(c+=this._items[b].width()+this.settings.margin,!(c>d)););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2===0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=f*-1*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&a.namespace.indexOf("owl")!==-1?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&e*-1||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?'<div class="owl-video-tn '+j+'" '+i+'="'+a+'"></div>':'<div class="owl-video-tn" style="opacity:1;background-image:url('+a+')"></div>',b.after(d),b.after(e)};if(b.wrap('<div class="owl-video-wrapper"'+g+"></div>"),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='<iframe width="'+g+'" height="'+h+'" src="//www.youtube.com/embed/'+f.id+"?autoplay=1&rel=0&v="+f.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===f.type?c='<iframe src="//player.vimeo.com/video/'+f.id+'?autoplay=1" width="'+g+'" height="'+h+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>':"vzaar"===f.type&&(c='<iframe frameborder="0"height="'+h+'"width="'+g+'" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/'+f.id+'/player?autoplay=true"></iframe>'),a('<div class="owl-video-frame">'+c+"</div>").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},
7
+ a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("<div>").addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document);
lib/tempusdominus/css/tempusdominus-bootstrap-4.css ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*@preserve
2
+ * Tempus Dominus Bootstrap4 v5.1.2 (https://tempusdominus.github.io/bootstrap-4/)
3
+ * Copyright 2016-2018 Jonathan Peterson
4
+ * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5
+ */
6
+
7
+ .sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {
8
+ position: absolute;
9
+ width: 1px;
10
+ height: 1px;
11
+ margin: -1px;
12
+ padding: 0;
13
+ overflow: hidden;
14
+ clip: rect(0, 0, 0, 0);
15
+ border: 0; }
16
+
17
+ .bootstrap-datetimepicker-widget {
18
+ list-style: none; }
19
+ .bootstrap-datetimepicker-widget.dropdown-menu {
20
+ display: block;
21
+ margin: 2px 0;
22
+ padding: 4px;
23
+ width: 14rem; }
24
+ @media (min-width: 576px) {
25
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
26
+ width: 38em; } }
27
+ @media (min-width: 768px) {
28
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
29
+ width: 38em; } }
30
+ @media (min-width: 992px) {
31
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
32
+ width: 38em; } }
33
+ .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {
34
+ content: '';
35
+ display: inline-block;
36
+ position: absolute; }
37
+ .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
38
+ border-left: 7px solid transparent;
39
+ border-right: 7px solid transparent;
40
+ border-bottom: 7px solid #ccc;
41
+ border-bottom-color: rgba(0, 0, 0, 0.2);
42
+ top: -7px;
43
+ left: 7px; }
44
+ .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
45
+ border-left: 6px solid transparent;
46
+ border-right: 6px solid transparent;
47
+ border-bottom: 6px solid white;
48
+ top: -6px;
49
+ left: 8px; }
50
+ .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
51
+ border-left: 7px solid transparent;
52
+ border-right: 7px solid transparent;
53
+ border-top: 7px solid #ccc;
54
+ border-top-color: rgba(0, 0, 0, 0.2);
55
+ bottom: -7px;
56
+ left: 6px; }
57
+ .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
58
+ border-left: 6px solid transparent;
59
+ border-right: 6px solid transparent;
60
+ border-top: 6px solid white;
61
+ bottom: -6px;
62
+ left: 7px; }
63
+ .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {
64
+ left: auto;
65
+ right: 6px; }
66
+ .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {
67
+ left: auto;
68
+ right: 7px; }
69
+ .bootstrap-datetimepicker-widget.dropdown-menu.wider {
70
+ width: 16rem; }
71
+ .bootstrap-datetimepicker-widget .list-unstyled {
72
+ margin: 0; }
73
+ .bootstrap-datetimepicker-widget a[data-action] {
74
+ padding: 6px 0; }
75
+ .bootstrap-datetimepicker-widget a[data-action]:active {
76
+ box-shadow: none; }
77
+ .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {
78
+ width: 54px;
79
+ font-weight: bold;
80
+ font-size: 1.2em;
81
+ margin: 0; }
82
+ .bootstrap-datetimepicker-widget button[data-action] {
83
+ padding: 6px; }
84
+ .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
85
+ content: "Increment Hours"; }
86
+ .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
87
+ content: "Increment Minutes"; }
88
+ .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
89
+ content: "Decrement Hours"; }
90
+ .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
91
+ content: "Decrement Minutes"; }
92
+ .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
93
+ content: "Show Hours"; }
94
+ .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
95
+ content: "Show Minutes"; }
96
+ .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
97
+ content: "Toggle AM/PM"; }
98
+ .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
99
+ content: "Clear the picker"; }
100
+ .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
101
+ content: "Set the date to today"; }
102
+ .bootstrap-datetimepicker-widget .picker-switch {
103
+ text-align: center; }
104
+ .bootstrap-datetimepicker-widget .picker-switch::after {
105
+ content: "Toggle Date and Time Screens"; }
106
+ .bootstrap-datetimepicker-widget .picker-switch td {
107
+ padding: 0;
108
+ margin: 0;
109
+ height: auto;
110
+ width: auto;
111
+ line-height: inherit; }
112
+ .bootstrap-datetimepicker-widget .picker-switch td span {
113
+ line-height: 2.5;
114
+ height: 2.5em;
115
+ width: 100%; }
116
+ .bootstrap-datetimepicker-widget table {
117
+ width: 100%;
118
+ margin: 0; }
119
+ .bootstrap-datetimepicker-widget table td,
120
+ .bootstrap-datetimepicker-widget table th {
121
+ text-align: center;
122
+ border-radius: 0.25rem; }
123
+ .bootstrap-datetimepicker-widget table th {
124
+ height: 20px;
125
+ line-height: 20px;
126
+ width: 20px; }
127
+ .bootstrap-datetimepicker-widget table th.picker-switch {
128
+ width: 145px; }
129
+ .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {
130
+ background: none;
131
+ color: #6c757d;
132
+ cursor: not-allowed; }
133
+ .bootstrap-datetimepicker-widget table th.prev::after {
134
+ content: "Previous Month"; }
135
+ .bootstrap-datetimepicker-widget table th.next::after {
136
+ content: "Next Month"; }
137
+ .bootstrap-datetimepicker-widget table thead tr:first-child th {
138
+ cursor: pointer; }
139
+ .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
140
+ background: #e9ecef; }
141
+ .bootstrap-datetimepicker-widget table td {
142
+ height: 54px;
143
+ line-height: 54px;
144
+ width: 54px; }
145
+ .bootstrap-datetimepicker-widget table td.cw {
146
+ font-size: .8em;
147
+ height: 20px;
148
+ line-height: 20px;
149
+ color: #6c757d; }
150
+ .bootstrap-datetimepicker-widget table td.day {
151
+ height: 20px;
152
+ line-height: 20px;
153
+ width: 20px; }
154
+ .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {
155
+ background: #e9ecef;
156
+ cursor: pointer; }
157
+ .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {
158
+ color: #6c757d; }
159
+ .bootstrap-datetimepicker-widget table td.today {
160
+ position: relative; }
161
+ .bootstrap-datetimepicker-widget table td.today:before {
162
+ content: '';
163
+ display: inline-block;
164
+ border: solid transparent;
165
+ border-width: 0 0 7px 7px;
166
+ border-bottom-color: #007bff;
167
+ border-top-color: rgba(0, 0, 0, 0.2);
168
+ position: absolute;
169
+ bottom: 4px;
170
+ right: 4px; }
171
+ .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {
172
+ background-color: #007bff;
173
+ color: #fff;
174
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
175
+ .bootstrap-datetimepicker-widget table td.active.today:before {
176
+ border-bottom-color: #fff; }
177
+ .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {
178
+ background: none;
179
+ color: #6c757d;
180
+ cursor: not-allowed; }
181
+ .bootstrap-datetimepicker-widget table td span {
182
+ display: inline-block;
183
+ width: 54px;
184
+ height: 54px;
185
+ line-height: 54px;
186
+ margin: 2px 1.5px;
187
+ cursor: pointer;
188
+ border-radius: 0.25rem; }
189
+ .bootstrap-datetimepicker-widget table td span:hover {
190
+ background: #e9ecef; }
191
+ .bootstrap-datetimepicker-widget table td span.active {
192
+ background-color: #007bff;
193
+ color: #fff;
194
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
195
+ .bootstrap-datetimepicker-widget table td span.old {
196
+ color: #6c757d; }
197
+ .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {
198
+ background: none;
199
+ color: #6c757d;
200
+ cursor: not-allowed; }
201
+ .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
202
+ height: 27px;
203
+ line-height: 27px; }
204
+
205
+ .input-group [data-toggle="datetimepicker"] {
206
+ cursor: pointer; }
lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*@preserve
2
+ * Tempus Dominus Bootstrap4 v5.1.2 (https://tempusdominus.github.io/bootstrap-4/)
3
+ * Copyright 2016-2018 Jonathan Peterson
4
+ * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5
+ */
6
+
7
+ .sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {
8
+ position: absolute;
9
+ width: 1px;
10
+ height: 1px;
11
+ margin: -1px;
12
+ padding: 0;
13
+ overflow: hidden;
14
+ clip: rect(0, 0, 0, 0);
15
+ border: 0; }
16
+
17
+ .bootstrap-datetimepicker-widget {
18
+ list-style: none; }
19
+ .bootstrap-datetimepicker-widget.dropdown-menu {
20
+ display: block;
21
+ margin: 0;
22
+ padding: 15px;
23
+ width: auto; }
24
+ @media (min-width: 576px) {
25
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
26
+ width: 38em; } }
27
+ @media (min-width: 768px) {
28
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
29
+ width: 38em; } }
30
+ @media (min-width: 992px) {
31
+ .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
32
+ width: 38em; } }
33
+ .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {
34
+ content: '';
35
+ display: inline-block;
36
+ position: absolute; }
37
+ .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
38
+ border-left: 7px solid transparent;
39
+ border-right: 7px solid transparent;
40
+ border-bottom: 7px solid #ccc;
41
+ border-bottom-color: rgba(0, 0, 0, 0.2);
42
+ top: -7px;
43
+ left: 7px; }
44
+ .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
45
+ border-left: 6px solid transparent;
46
+ border-right: 6px solid transparent;
47
+ border-bottom: 6px solid white;
48
+ top: -6px;
49
+ left: 8px; }
50
+ .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
51
+ border-left: 7px solid transparent;
52
+ border-right: 7px solid transparent;
53
+ border-top: 7px solid #ccc;
54
+ border-top-color: rgba(0, 0, 0, 0.2);
55
+ bottom: -7px;
56
+ left: 6px; }
57
+ .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
58
+ border-left: 6px solid transparent;
59
+ border-right: 6px solid transparent;
60
+ border-top: 6px solid white;
61
+ bottom: -6px;
62
+ left: 7px; }
63
+ .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {
64
+ left: auto;
65
+ right: 6px; }
66
+ .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {
67
+ left: auto;
68
+ right: 7px; }
69
+ .bootstrap-datetimepicker-widget.dropdown-menu.wider {
70
+ width: 16rem; }
71
+ .bootstrap-datetimepicker-widget .list-unstyled {
72
+ margin: 0; }
73
+ .bootstrap-datetimepicker-widget a[data-action] {
74
+ padding: 6px 0; }
75
+ .bootstrap-datetimepicker-widget a[data-action]:active {
76
+ box-shadow: none; }
77
+ .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {
78
+ width: 54px;
79
+ font-weight: bold;
80
+ font-size: 1.2em;
81
+ margin: 0; }
82
+ .bootstrap-datetimepicker-widget button[data-action] {
83
+ padding: 6px; }
84
+ .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
85
+ content: "Increment Hours"; }
86
+ .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
87
+ content: "Increment Minutes"; }
88
+ .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
89
+ content: "Decrement Hours"; }
90
+ .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
91
+ content: "Decrement Minutes"; }
92
+ .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
93
+ content: "Show Hours"; }
94
+ .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
95
+ content: "Show Minutes"; }
96
+ .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
97
+ content: "Toggle AM/PM"; }
98
+ .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
99
+ content: "Clear the picker"; }
100
+ .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
101
+ content: "Set the date to today"; }
102
+ .bootstrap-datetimepicker-widget .picker-switch {
103
+ text-align: center; }
104
+ .bootstrap-datetimepicker-widget .picker-switch::after {
105
+ content: "Toggle Date and Time Screens"; }
106
+ .bootstrap-datetimepicker-widget .picker-switch td {
107
+ padding: 0;
108
+ margin: 0;
109
+ height: auto;
110
+ width: auto;
111
+ line-height: inherit; }
112
+ .bootstrap-datetimepicker-widget .picker-switch td span {
113
+ line-height: 2.5;
114
+ height: 2.5em;
115
+ width: 100%; }
116
+ .bootstrap-datetimepicker-widget table {
117
+ width: 100%;
118
+ margin: 0; }
119
+ .bootstrap-datetimepicker-widget table td,
120
+ .bootstrap-datetimepicker-widget table th {
121
+ text-align: center;
122
+ border-radius: 0.25rem; }
123
+ .bootstrap-datetimepicker-widget table th {
124
+ height: 20px;
125
+ line-height: 20px;
126
+ width: 20px; }
127
+ .bootstrap-datetimepicker-widget table th.picker-switch {
128
+ width: 145px; }
129
+ .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {
130
+ background: none;
131
+ color: #6c757d;
132
+ cursor: not-allowed; }
133
+ .bootstrap-datetimepicker-widget table th.prev::after {
134
+ content: "Previous Month"; }
135
+ .bootstrap-datetimepicker-widget table th.next::after {
136
+ content: "Next Month"; }
137
+ .bootstrap-datetimepicker-widget table thead tr:first-child th {
138
+ cursor: pointer; }
139
+ .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
140
+ background: #e9ecef; }
141
+ .bootstrap-datetimepicker-widget table td {
142
+ height: 54px;
143
+ line-height: 54px;
144
+ width: 54px; }
145
+ .bootstrap-datetimepicker-widget table td.cw {
146
+ font-size: .8em;
147
+ height: 20px;
148
+ line-height: 20px;
149
+ color: #6c757d; }
150
+ .bootstrap-datetimepicker-widget table td.day {
151
+ height: 20px;
152
+ line-height: 20px;
153
+ width: 20px; }
154
+ .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {
155
+ background: #e9ecef;
156
+ cursor: pointer; }
157
+ .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {
158
+ color: #6c757d; }
159
+ .bootstrap-datetimepicker-widget table td.today {
160
+ position: relative; }
161
+ .bootstrap-datetimepicker-widget table td.today:before {
162
+ content: '';
163
+ display: inline-block;
164
+ border: solid transparent;
165
+ border-width: 0 0 7px 7px;
166
+ border-bottom-color: #007bff;
167
+ border-top-color: rgba(0, 0, 0, 0.2);
168
+ position: absolute;
169
+ bottom: 4px;
170
+ right: 4px; }
171
+ .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {
172
+ background-color: #007bff;
173
+ color: #fff;
174
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
175
+ .bootstrap-datetimepicker-widget table td.active.today:before {
176
+ border-bottom-color: #fff; }
177
+ .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {
178
+ background: none;
179
+ color: #6c757d;
180
+ cursor: not-allowed; }
181
+ .bootstrap-datetimepicker-widget table td span {
182
+ display: inline-block;
183
+ width: 54px;
184
+ height: 54px;
185
+ line-height: 54px;
186
+ margin: 2px 1.5px;
187
+ cursor: pointer;
188
+ border-radius: 0.25rem; }
189
+ .bootstrap-datetimepicker-widget table td span:hover {
190
+ background: #e9ecef; }
191
+ .bootstrap-datetimepicker-widget table td span.active {
192
+ background-color: #007bff;
193
+ color: #fff;
194
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
195
+ .bootstrap-datetimepicker-widget table td span.old {
196
+ color: #6c757d; }
197
+ .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {
198
+ background: none;
199
+ color: #6c757d;
200
+ cursor: not-allowed; }
201
+ .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
202
+ height: 27px;
203
+ line-height: 27px; }
204
+
205
+ .input-group [data-toggle="datetimepicker"] {
206
+ cursor: pointer; }
lib/tempusdominus/js/moment-timezone.min.js ADDED
@@ -0,0 +1 @@
 
 
1
+ !function(a,i){"use strict";"object"==typeof module&&module.exports?module.exports=i(require("moment")):"function"==typeof define&&define.amd?define(["moment"],i):i(a.moment)}(this,function(A){"use strict";var i,c={},n={},s={},u={};A&&"string"==typeof A.version||N("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var a=A.version.split("."),e=+a[0],r=+a[1];function t(a){return 96<a?a-87:64<a?a-29:a-48}function o(a){var i=0,e=a.split("."),r=e[0],o=e[1]||"",A=1,c=0,n=1;for(45===a.charCodeAt(0)&&(n=-(i=1));i<r.length;i++)c=60*c+t(r.charCodeAt(i));for(i=0;i<o.length;i++)A/=60,c+=t(o.charCodeAt(i))*A;return c*n}function m(a){for(var i=0;i<a.length;i++)a[i]=o(a[i])}function f(a,i){var e,r=[];for(e=0;e<i.length;e++)r[e]=a[i[e]];return r}function l(a){var i=a.split("|"),e=i[2].split(" "),r=i[3].split(""),o=i[4].split(" ");return m(e),m(r),m(o),function(a,i){for(var e=0;e<i;e++)a[e]=Math.round((a[e-1]||0)+6e4*a[e]);a[i-1]=1/0}(o,r.length),{name:i[0],abbrs:f(i[1].split(" "),r),offsets:f(e,r),untils:o,population:0|i[5]}}function p(a){a&&this._set(l(a))}function b(a){var i=a.toTimeString(),e=i.match(/\([a-z ]+\)/i);"GMT"===(e=e&&e[0]?(e=e[0].match(/[A-Z]/g))?e.join(""):void 0:(e=i.match(/[A-Z]{3,5}/g))?e[0]:void 0)&&(e=void 0),this.at=+a,this.abbr=e,this.offset=a.getTimezoneOffset()}function M(a){this.zone=a,this.offsetScore=0,this.abbrScore=0}function d(a,i){for(var e,r;r=6e4*((i.at-a.at)/12e4|0);)(e=new b(new Date(a.at+r))).offset===a.offset?a=e:i=e;return a}function h(a,i){return a.offsetScore!==i.offsetScore?a.offsetScore-i.offsetScore:a.abbrScore!==i.abbrScore?a.abbrScore-i.abbrScore:i.zone.population-a.zone.population}function z(a,i){var e,r;for(m(i),e=0;e<i.length;e++)r=i[e],u[r]=u[r]||{},u[r][a]=!0}function E(){try{var a=Intl.DateTimeFormat().resolvedOptions().timeZone;if(a&&3<a.length){var i=s[g(a)];if(i)return i;N("Moment Timezone found "+a+" from the Intl api, but did not have that data loaded.")}}catch(a){}var e,r,o,A=function(){var a,i,e,r=(new Date).getFullYear()-2,o=new b(new Date(r,0,1)),A=[o];for(e=1;e<48;e++)(i=new b(new Date(r,e,1))).offset!==o.offset&&(a=d(o,i),A.push(a),A.push(new b(new Date(a.at+6e4)))),o=i;for(e=0;e<4;e++)A.push(new b(new Date(r+e,0,1))),A.push(new b(new Date(r+e,6,1)));return A}(),c=A.length,n=function(a){var i,e,r,o=a.length,A={},c=[];for(i=0;i<o;i++)for(e in r=u[a[i].offset]||{})r.hasOwnProperty(e)&&(A[e]=!0);for(i in A)A.hasOwnProperty(i)&&c.push(s[i]);return c}(A),t=[];for(r=0;r<n.length;r++){for(e=new M(S(n[r]),c),o=0;o<c;o++)e.scoreOffsetAt(A[o]);t.push(e)}return t.sort(h),0<t.length?t[0].zone.name:void 0}function g(a){return(a||"").toLowerCase().replace(/\//g,"_")}function T(a){var i,e,r,o;for("string"==typeof a&&(a=[a]),i=0;i<a.length;i++)o=g(e=(r=a[i].split("|"))[0]),c[o]=a[i],s[o]=e,z(o,r[2].split(" "))}function S(a,i){a=g(a);var e,r=c[a];return r instanceof p?r:"string"==typeof r?(r=new p(r),c[a]=r):n[a]&&i!==S&&(e=S(n[a],S))?((r=c[a]=new p)._set(e),r.name=s[a],r):null}function P(a){var i,e,r,o;for("string"==typeof a&&(a=[a]),i=0;i<a.length;i++)r=g((e=a[i].split("|"))[0]),o=g(e[1]),n[r]=o,s[r]=e[0],n[o]=r,s[o]=e[1]}function _(a){T(a.zones),P(a.links),C.dataVersion=a.version}function k(a){var i="X"===a._f||"x"===a._f;return!(!a._a||void 0!==a._tzm||i)}function N(a){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(a)}function C(a){var i=Array.prototype.slice.call(arguments,0,-1),e=arguments[arguments.length-1],r=S(e),o=A.utc.apply(null,i);return r&&!A.isMoment(a)&&k(o)&&o.add(r.parse(o),"minutes"),o.tz(e),o}(e<2||2===e&&r<6)&&N("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+A.version+". See momentjs.com"),p.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i<r.length;i++)if(e<r[i])return i},parse:function(a){var i,e,r,o,A=+a,c=this.offsets,n=this.untils,t=n.length-1;for(o=0;o<t;o++)if(i=c[o],e=c[o+1],r=c[o?o-1:o],i<e&&C.moveAmbiguousForward?i=e:r<i&&C.moveInvalidForward&&(i=r),A<n[o]-6e4*i)return c[o];return c[t]},abbr:function(a){return this.abbrs[this._index(a)]},offset:function(a){return N("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(a)]},utcOffset:function(a){return this.offsets[this._index(a)]}},M.prototype.scoreOffsetAt=function(a){this.offsetScore+=Math.abs(this.zone.utcOffset(a.at)-a.offset),this.zone.abbr(a.at).replace(/[^A-Z]/g,"")!==a.abbr&&this.abbrScore++},C.version="0.5.21",C.dataVersion="",C._zones=c,C._links=n,C._names=s,C.add=T,C.link=P,C.load=_,C.zone=S,C.zoneExists=function a(i){return a.didShowError||(a.didShowError=!0,N("moment.tz.zoneExists('"+i+"') has been deprecated in favor of !moment.tz.zone('"+i+"')")),!!S(i)},C.guess=function(a){return i&&!a||(i=E()),i},C.names=function(){var a,i=[];for(a in s)s.hasOwnProperty(a)&&(c[a]||c[n[a]])&&s[a]&&i.push(s[a]);return i.sort()},C.Zone=p,C.unpack=l,C.unpackBase60=o,C.needsOffset=k,C.moveInvalidForward=!0,C.moveAmbiguousForward=!1;var O,B=A.fn;function G(a){return function(){return this._z?this._z.abbr(this):a.call(this)}}A.tz=C,A.defaultZone=null,A.updateOffset=function(a,i){var e,r=A.defaultZone;void 0===a._z&&(r&&k(a)&&!a._isUTC&&(a._d=A.utc(a._a)._d,a.utc().add(r.parse(a),"minutes")),a._z=r),a._z&&(e=a._z.utcOffset(a),Math.abs(e)<16&&(e/=60),void 0!==a.utcOffset?a.utcOffset(-e,i):a.zone(e,i))},B.tz=function(a,i){if(a){if("string"!=typeof a)throw new Error("Time zone name must be a string, got "+a+" ["+typeof a+"]");return this._z=S(a),this._z?A.updateOffset(this,i):N("Moment Timezone has no data for "+a+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},B.zoneName=G(B.zoneName),B.zoneAbbr=G(B.zoneAbbr),B.utc=(O=B.utc,function(){return this._z=null,O.apply(this,arguments)}),A.tz.setDefault=function(a){return(e<2||2===e&&r<9)&&N("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+A.version+"."),A.defaultZone=a?S(a):null,A};var D=A.momentProperties;return"[object Array]"===Object.prototype.toString.call(D)?(D.push("_z"),D.push("_a")):D&&(D._z=null),_({version:"2018e",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|WET WEST|0 -10|0101010101010101010101010101010101010101010|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|01|1UQN0","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|01010101010101010101010|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|0121212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|62e5","America/Sao_Paulo|-02 -03|20 30|01010101010101010101010|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Guadalcanal|+11|-b0|0||11e4","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Manila|+08|-80|0||24e6","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BAu|29e5","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0|","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0|","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0|","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0|","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Astrakhan|+04 +03|-40 -30|010|1N7y0 3rd0","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Volgograd|+04 +03|-40 -30|01|1N7y0|10e5","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Juba","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qyzylorda","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Makassar|Asia/Ujung_Pandang","Asia/Manila|Asia/Brunei","Asia/Manila|Asia/Kuala_Lumpur","Asia/Manila|Asia/Kuching","Asia/Manila|Asia/Singapore","Asia/Manila|Etc/GMT-8","Asia/Manila|Singapore","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Astrakhan|Europe/Ulyanovsk","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Volgograd|Europe/Kirov","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Antarctica/Macquarie","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"]}),A});
lib/tempusdominus/js/moment.min.js ADDED
The diff for this file is too large to render. See raw diff
 
lib/tempusdominus/js/tempusdominus-bootstrap-4.js ADDED
The diff for this file is too large to render. See raw diff
 
lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ /*@preserve
2
+ * Tempus Dominus Bootstrap4 v5.1.2 (https://tempusdominus.github.io/bootstrap-4/)
3
+ * Copyright 2016-2018 Jonathan Peterson
4
+ * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5
+ */
6
+ if("undefined"==typeof jQuery)throw new Error("Tempus Dominus Bootstrap4's requires jQuery. jQuery must be included before Tempus Dominus Bootstrap4's JavaScript.");if(+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1===b[0]&&9===b[1]&&b[2]<1||b[0]>=4)throw new Error("Tempus Dominus Bootstrap4's requires at least jQuery v3.0.0 but less than v4.0.0")}(jQuery),"undefined"==typeof moment)throw new Error("Tempus Dominus Bootstrap4's requires moment.js. Moment.js must be included before Tempus Dominus Bootstrap4's JavaScript.");var version=moment.version.split(".");if(version[0]<=2&&version[1]<17||version[0]>=3)throw new Error("Tempus Dominus Bootstrap4's requires at least moment.js v2.17.0 but less than v3.0.0");+function(){function a(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function b(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){var d="datetimepicker",f=""+d,g="."+f,h=".data-api",i={DATA_TOGGLE:'[data-toggle="'+f+'"]'},j={INPUT:d+"-input"},k={CHANGE:"change"+g,BLUR:"blur"+g,KEYUP:"keyup"+g,KEYDOWN:"keydown"+g,FOCUS:"focus"+g,CLICK_DATA_API:"click"+g+h,UPDATE:"update"+g,ERROR:"error"+g,HIDE:"hide"+g,SHOW:"show"+g},l=[{CLASS_NAME:"days",NAV_FUNCTION:"M",NAV_STEP:1},{CLASS_NAME:"months",NAV_FUNCTION:"y",NAV_STEP:1},{CLASS_NAME:"years",NAV_FUNCTION:"y",NAV_STEP:10},{CLASS_NAME:"decades",NAV_FUNCTION:"y",NAV_STEP:100}],m={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t",delete:46,46:"delete"},n=["times","days","months","years","decades"],o={},p={},q={timeZone:"",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:b.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"fa fa-clock-o",date:"fa fa-calendar",up:"fa fa-arrow-up",down:"fa fa-arrow-down",previous:"fa fa-chevron-left",next:"fa fa-chevron-right",today:"fa fa-calendar-check-o",clear:"fa fa-delete",close:"fa fa-times"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time",selectDate:"Select Date"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",buttons:{showToday:!1,showClear:!1,showClose:!1},widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,keyBinds:{up:function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")?this.date(a.clone().subtract(7,"d")):this.date(a.clone().add(this.stepping(),"m")),!0},down:function(){if(!this.widget)return this.show(),!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")?this.date(a.clone().add(7,"d")):this.date(a.clone().subtract(this.stepping(),"m")),!0},"control up":function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")?this.date(a.clone().subtract(1,"y")):this.date(a.clone().add(1,"h")),!0},"control down":function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")?this.date(a.clone().add(1,"y")):this.date(a.clone().subtract(1,"h")),!0},left:function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")&&this.date(a.clone().subtract(1,"d")),!0},right:function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")&&this.date(a.clone().add(1,"d")),!0},pageUp:function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")&&this.date(a.clone().subtract(1,"M")),!0},pageDown:function(){if(!this.widget)return!1;var a=this._dates[0]||this.getMoment();return this.widget.find(".datepicker").is(":visible")&&this.date(a.clone().add(1,"M")),!0},enter:function(){return!!this.widget&&(this.hide(),!0)},escape:function(){return!!this.widget&&(this.hide(),!0)},"control space":function(){return!!this.widget&&(this.widget.find(".timepicker").is(":visible")&&this.widget.find('.btn[data-action="togglePeriod"]').click(),!0)},t:function(){return!!this.widget&&(this.date(this.getMoment()),!0)},delete:function(){return!!this.widget&&(this.clear(),!0)}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1,allowMultidate:!1,multidateSeparator:","},r=function(){function r(a,b){c(this,r),this._options=this._getOptions(b),this._element=a,this._dates=[],this._datesFormatted=[],this._viewDate=null,this.unset=!0,this.component=!1,this.widget=!1,this.use24Hours=null,this.actualFormat=null,this.parseFormats=null,this.currentViewMode=null,this.MinViewModeNumber=0,this._int()}return r.prototype._int=function(){var b=this._element.data("target-input");this._element.is("input")?this.input=this._element:void 0!==b&&("nearest"===b?this.input=this._element.find("input"):this.input=a(b)),this._dates=[],this._dates[0]=this.getMoment(),this._viewDate=this.getMoment().clone(),a.extend(!0,this._options,this._dataToOptions()),this.options(this._options),this._initFormatting(),void 0!==this.input&&this.input.is("input")&&0!==this.input.val().trim().length?this._setValue(this._parseInputDate(this.input.val().trim()),0):this._options.defaultDate&&void 0!==this.input&&void 0===this.input.attr("placeholder")&&this._setValue(this._options.defaultDate,0),this._options.inline&&this.show()},r.prototype._update=function(){this.widget&&(this._fillDate(),this._fillTime())},r.prototype._setValue=function(a,b){var c=this.unset?null:this._dates[b],d="";if(!a)return this._options.allowMultidate&&1!==this._dates.length?(d=this._element.data("date")+",",d=d.replace(c.format(this.actualFormat)+",","").replace(",,","").replace(/,\s*$/,""),this._dates.splice(b,1),this._datesFormatted.splice(b,1)):(this.unset=!0,this._dates=[],this._datesFormatted=[]),void 0!==this.input&&(this.input.val(d),this.input.trigger("input")),this._element.data("date",d),this._notifyEvent({type:r.Event.CHANGE,date:!1,oldDate:c}),void this._update();if(a=a.clone().locale(this._options.locale),this._hasTimeZone()&&a.tz(this._options.timeZone),1!==this._options.stepping&&a.minutes(Math.round(a.minutes()/this._options.stepping)*this._options.stepping).seconds(0),this._isValid(a)){if(this._dates[b]=a,this._datesFormatted[b]=a.format("YYYY-MM-DD"),this._viewDate=a.clone(),this._options.allowMultidate&&this._dates.length>1){for(var e=0;e<this._dates.length;e++)d+=""+this._dates[e].format(this.actualFormat)+this._options.multidateSeparator;d=d.replace(/,\s*$/,"")}else d=this._dates[b].format(this.actualFormat);void 0!==this.input&&(this.input.val(d),this.input.trigger("input")),this._element.data("date",d),this.unset=!1,this._update(),this._notifyEvent({type:r.Event.CHANGE,date:this._dates[b].clone(),oldDate:c})}else this._options.keepInvalid?this._notifyEvent({type:r.Event.CHANGE,date:a,oldDate:c}):void 0!==this.input&&(this.input.val(""+(this.unset?"":this._dates[b].format(this.actualFormat))),this.input.trigger("input")),this._notifyEvent({type:r.Event.ERROR,date:a,oldDate:c})},r.prototype._change=function(b){var c=a(b.target).val().trim(),d=c?this._parseInputDate(c):null;return this._setValue(d),b.stopImmediatePropagation(),!1},r.prototype._getOptions=function(b){return b=a.extend(!0,{},q,b)},r.prototype._hasTimeZone=function(){return void 0!==b.tz&&void 0!==this._options.timeZone&&null!==this._options.timeZone&&""!==this._options.timeZone},r.prototype._isEnabled=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return this.actualFormat.indexOf("Y")!==-1;case"M":return this.actualFormat.indexOf("M")!==-1;case"d":return this.actualFormat.toLowerCase().indexOf("d")!==-1;case"h":case"H":return this.actualFormat.toLowerCase().indexOf("h")!==-1;case"m":return this.actualFormat.indexOf("m")!==-1;case"s":return this.actualFormat.indexOf("s")!==-1;case"a":case"A":return this.actualFormat.toLowerCase().indexOf("a")!==-1;default:return!1}},r.prototype._hasTime=function(){return this._isEnabled("h")||this._isEnabled("m")||this._isEnabled("s")},r.prototype._hasDate=function(){return this._isEnabled("y")||this._isEnabled("M")||this._isEnabled("d")},r.prototype._dataToOptions=function(){var b=this._element.data(),c={};return b.dateOptions&&b.dateOptions instanceof Object&&(c=a.extend(!0,c,b.dateOptions)),a.each(this._options,function(a){var d="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[d]?c[a]=b[d]:delete c[a]}),c},r.prototype._notifyEvent=function(a){a.type===r.Event.CHANGE&&(a.date&&a.date.isSame(a.oldDate))||!a.date&&!a.oldDate||this._element.trigger(a)},r.prototype._viewUpdate=function(a){"y"===a&&(a="YYYY"),this._notifyEvent({type:r.Event.UPDATE,change:a,viewDate:this._viewDate.clone()})},r.prototype._showMode=function(a){this.widget&&(a&&(this.currentViewMode=Math.max(this.MinViewModeNumber,Math.min(3,this.currentViewMode+a))),this.widget.find(".datepicker > div").hide().filter(".datepicker-"+l[this.currentViewMode].CLASS_NAME).show())},r.prototype._isInDisabledDates=function(a){return this._options.disabledDates[a.format("YYYY-MM-DD")]===!0},r.prototype._isInEnabledDates=function(a){return this._options.enabledDates[a.format("YYYY-MM-DD")]===!0},r.prototype._isInDisabledHours=function(a){return this._options.disabledHours[a.format("H")]===!0},r.prototype._isInEnabledHours=function(a){return this._options.enabledHours[a.format("H")]===!0},r.prototype._isValid=function(b,c){if(!b.isValid())return!1;if(this._options.disabledDates&&"d"===c&&this._isInDisabledDates(b))return!1;if(this._options.enabledDates&&"d"===c&&!this._isInEnabledDates(b))return!1;if(this._options.minDate&&b.isBefore(this._options.minDate,c))return!1;if(this._options.maxDate&&b.isAfter(this._options.maxDate,c))return!1;if(this._options.daysOfWeekDisabled&&"d"===c&&this._options.daysOfWeekDisabled.indexOf(b.day())!==-1)return!1;if(this._options.disabledHours&&("h"===c||"m"===c||"s"===c)&&this._isInDisabledHours(b))return!1;if(this._options.enabledHours&&("h"===c||"m"===c||"s"===c)&&!this._isInEnabledHours(b))return!1;if(this._options.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var d=!1;if(a.each(this._options.disabledTimeIntervals,function(){if(b.isBetween(this[0],this[1]))return d=!0,!1}),d)return!1}return!0},r.prototype._parseInputDate=function(a){return void 0===this._options.parseInputDate?b.isMoment(a)||(a=this.getMoment(a)):a=this._options.parseInputDate(a),a},r.prototype._keydown=function(a){var b=null,c=void 0,d=void 0,e=void 0,f=void 0,g=[],h={},i=a.which,j="p";o[i]=j;for(c in o)o.hasOwnProperty(c)&&o[c]===j&&(g.push(c),parseInt(c,10)!==i&&(h[c]=!0));for(c in this._options.keyBinds)if(this._options.keyBinds.hasOwnProperty(c)&&"function"==typeof this._options.keyBinds[c]&&(e=c.split(" "),e.length===g.length&&m[i]===e[e.length-1])){for(f=!0,d=e.length-2;d>=0;d--)if(!(m[e[d]]in h)){f=!1;break}if(f){b=this._options.keyBinds[c];break}}b&&b.call(this)&&(a.stopPropagation(),a.preventDefault())},r.prototype._keyup=function(a){o[a.which]="r",p[a.which]&&(p[a.which]=!1,a.stopPropagation(),a.preventDefault())},r.prototype._indexGivenDates=function(b){var c={},d=this;return a.each(b,function(){var a=d._parseInputDate(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),!!Object.keys(c).length&&c},r.prototype._indexGivenHours=function(b){var c={};return a.each(b,function(){c[this]=!0}),!!Object.keys(c).length&&c},r.prototype._initFormatting=function(){var a=this._options.format||"L LT",b=this;this.actualFormat=a.replace(/(\[[^\[]*])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){return b._dates[0].localeData().longDateFormat(a)||a}),this.parseFormats=this._options.extraFormats?this._options.extraFormats.slice():[],this.parseFormats.indexOf(a)<0&&this.parseFormats.indexOf(this.actualFormat)<0&&this.parseFormats.push(this.actualFormat),this.use24Hours=this.actualFormat.toLowerCase().indexOf("a")<1&&this.actualFormat.replace(/\[.*?]/g,"").indexOf("h")<1,this._isEnabled("y")&&(this.MinViewModeNumber=2),this._isEnabled("M")&&(this.MinViewModeNumber=1),this._isEnabled("d")&&(this.MinViewModeNumber=0),this.currentViewMode=Math.max(this.MinViewModeNumber,this.currentViewMode),this.unset||this._setValue(this._dates[0],0)},r.prototype._getLastPickedDate=function(){return this._dates[this._getLastPickedDateIndex()]},r.prototype._getLastPickedDateIndex=function(){return this._dates.length-1},r.prototype.getMoment=function(a){var c=void 0;return c=void 0===a||null===a?b():this._hasTimeZone()?b.tz(a,this.parseFormats,this._options.locale,this._options.useStrict,this._options.timeZone):b(a,this.parseFormats,this._options.locale,this._options.useStrict),this._hasTimeZone()&&c.tz(this._options.timeZone),c},r.prototype.toggle=function(){return this.widget?this.hide():this.show()},r.prototype.ignoreReadonly=function(a){if(0===arguments.length)return this._options.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");this._options.ignoreReadonly=a},r.prototype.options=function(b){if(0===arguments.length)return a.extend(!0,{},this._options);if(!(b instanceof Object))throw new TypeError("options() this.options parameter should be an object");a.extend(!0,this._options,b);var c=this;a.each(this._options,function(a,b){void 0!==c[a]&&c[a](b)})},r.prototype.date=function(a,c){if(c=c||0,0===arguments.length)return this.unset?null:this._options.allowMultidate?this._dates.join(this._options.multidateSeparator):this._dates[c].clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");this._setValue(null===a?null:this._parseInputDate(a),c)},r.prototype.format=function(a){if(0===arguments.length)return this._options.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a string or boolean:false parameter "+a);this._options.format=a,this.actualFormat&&this._initFormatting()},r.prototype.timeZone=function(a){if(0===arguments.length)return this._options.timeZone;if("string"!=typeof a)throw new TypeError("newZone() expects a string parameter");this._options.timeZone=a},r.prototype.dayViewHeaderFormat=function(a){if(0===arguments.length)return this._options.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");this._options.dayViewHeaderFormat=a},r.prototype.extraFormats=function(a){if(0===arguments.length)return this._options.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");this._options.extraFormats=a,this.parseFormats&&this._initFormatting()},r.prototype.disabledDates=function(b){if(0===arguments.length)return this._options.disabledDates?a.extend({},this._options.disabledDates):this._options.disabledDates;if(!b)return this._options.disabledDates=!1,this._update(),!0;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");this._options.disabledDates=this._indexGivenDates(b),this._options.enabledDates=!1,this._update()},r.prototype.enabledDates=function(b){if(0===arguments.length)return this._options.enabledDates?a.extend({},this._options.enabledDates):this._options.enabledDates;if(!b)return this._options.enabledDates=!1,this._update(),!0;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");this._options.enabledDates=this._indexGivenDates(b),this._options.disabledDates=!1,this._update()},r.prototype.daysOfWeekDisabled=function(a){if(0===arguments.length)return this._options.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return this._options.daysOfWeekDisabled=!1,this._update(),!0;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(this._options.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||b<0||isNaN(b)?a:(a.indexOf(b)===-1&&a.push(b),a)},[]).sort(),this._options.useCurrent&&!this._options.keepInvalid)for(var b=0;b<this._dates.length;b++){for(var c=0;!this._isValid(this._dates[b],"d");){if(this._dates[b].add(1,"d"),31===c)throw"Tried 31 times to find a valid date";c++}this._setValue(this._dates[b],b)}this._update()},r.prototype.maxDate=function(a){if(0===arguments.length)return this._options.maxDate?this._options.maxDate.clone():this._options.maxDate;if("boolean"==typeof a&&a===!1)return this._options.maxDate=!1,this._update(),!0;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=this.getMoment()));var b=this._parseInputDate(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(this._options.minDate&&b.isBefore(this._options.minDate))throw new TypeError("maxDate() date parameter is before this.options.minDate: "+b.format(this.actualFormat));this._options.maxDate=b;for(var c=0;c<this._dates.length;c++)this._options.useCurrent&&!this._options.keepInvalid&&this._dates[c].isAfter(a)&&this._setValue(this._options.maxDate,c);this._viewDate.isAfter(b)&&(this._viewDate=b.clone().subtract(this._options.stepping,"m")),this._update()},r.prototype.minDate=function(a){if(0===arguments.length)return this._options.minDate?this._options.minDate.clone():this._options.minDate;if("boolean"==typeof a&&a===!1)return this._options.minDate=!1,this._update(),!0;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=this.getMoment()));var b=this._parseInputDate(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(this._options.maxDate&&b.isAfter(this._options.maxDate))throw new TypeError("minDate() date parameter is after this.options.maxDate: "+b.format(this.actualFormat));this._options.minDate=b;for(var c=0;c<this._dates.length;c++)this._options.useCurrent&&!this._options.keepInvalid&&this._dates[c].isBefore(a)&&this._setValue(this._options.minDate,c);this._viewDate.isBefore(b)&&(this._viewDate=b.clone().add(this._options.stepping,"m")),this._update()},r.prototype.defaultDate=function(a){if(0===arguments.length)return this._options.defaultDate?this._options.defaultDate.clone():this._options.defaultDate;if(!a)return this._options.defaultDate=!1,!0;"string"==typeof a&&(a="now"===a||"moment"===a?this.getMoment():this.getMoment(a));var b=this._parseInputDate(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!this._isValid(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");this._options.defaultDate=b,(this._options.defaultDate&&this._options.inline||void 0!==this.input&&""===this.input.val().trim())&&this._setValue(this._options.defaultDate,0)},r.prototype.locale=function(a){if(0===arguments.length)return this._options.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");this._options.locale=a;for(var c=0;c<this._dates.length;c++)this._dates[c].locale(this._options.locale);this._viewDate.locale(this._options.locale),this.actualFormat&&this._initFormatting(),this.widget&&(this.hide(),this.show())},r.prototype.stepping=function(a){return 0===arguments.length?this._options.stepping:(a=parseInt(a,10),(isNaN(a)||a<1)&&(a=1),void(this._options.stepping=a))},r.prototype.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return this._options.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&b.indexOf(a.toLowerCase())===-1)throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));this._options.useCurrent=a},r.prototype.collapse=function(a){if(0===arguments.length)return this._options.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return this._options.collapse===a||(this._options.collapse=a,void(this.widget&&(this.hide(),this.show())))},r.prototype.icons=function(b){if(0===arguments.length)return a.extend({},this._options.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");a.extend(this._options.icons,b),this.widget&&(this.hide(),this.show())},r.prototype.tooltips=function(b){if(0===arguments.length)return a.extend({},this._options.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");a.extend(this._options.tooltips,b),this.widget&&(this.hide(),this.show())},r.prototype.useStrict=function(a){if(0===arguments.length)return this._options.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");this._options.useStrict=a},r.prototype.sideBySide=function(a){if(0===arguments.length)return this._options.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");this._options.sideBySide=a,this.widget&&(this.hide(),this.show())},r.prototype.viewMode=function(a){if(0===arguments.length)return this._options.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(r.ViewModes.indexOf(a)===-1)throw new TypeError("viewMode() parameter must be one of ("+r.ViewModes.join(", ")+") value");this._options.viewMode=a,this.currentViewMode=Math.max(r.ViewModes.indexOf(a)-1,this.MinViewModeNumber),this._showMode()},r.prototype.calendarWeeks=function(a){if(0===arguments.length)return this._options.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");this._options.calendarWeeks=a,this._update()},r.prototype.buttons=function(b){if(0===arguments.length)return a.extend({},this._options.buttons);if(!(b instanceof Object))throw new TypeError("buttons() expects parameter to be an Object");if(a.extend(this._options.buttons,b),"boolean"!=typeof this._options.buttons.showToday)throw new TypeError("buttons.showToday expects a boolean parameter");if("boolean"!=typeof this._options.buttons.showClear)throw new TypeError("buttons.showClear expects a boolean parameter");if("boolean"!=typeof this._options.buttons.showClose)throw new TypeError("buttons.showClose expects a boolean parameter");this.widget&&(this.hide(),this.show())},r.prototype.keepOpen=function(a){if(0===arguments.length)return this._options.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");this._options.keepOpen=a},r.prototype.focusOnShow=function(a){if(0===arguments.length)return this._options.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");this._options.focusOnShow=a},r.prototype.inline=function(a){if(0===arguments.length)return this._options.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");this._options.inline=a},r.prototype.clear=function(){this._setValue(null)},r.prototype.keyBinds=function(a){return 0===arguments.length?this._options.keyBinds:void(this._options.keyBinds=a)},r.prototype.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");this._options.debug=a},r.prototype.allowInputToggle=function(a){if(0===arguments.length)return this._options.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");this._options.allowInputToggle=a},r.prototype.keepInvalid=function(a){if(0===arguments.length)return this._options.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");this._options.keepInvalid=a},r.prototype.datepickerInput=function(a){if(0===arguments.length)return this._options.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");this._options.datepickerInput=a},r.prototype.parseInputDate=function(a){if(0===arguments.length)return this._options.parseInputDate;if("function"!=typeof a)throw new TypeError("parseInputDate() should be as function");this._options.parseInputDate=a},r.prototype.disabledTimeIntervals=function(b){if(0===arguments.length)return this._options.disabledTimeIntervals?a.extend({},this._options.disabledTimeIntervals):this._options.disabledTimeIntervals;if(!b)return this._options.disabledTimeIntervals=!1,this._update(),!0;if(!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");this._options.disabledTimeIntervals=b,this._update()},r.prototype.disabledHours=function(b){if(0===arguments.length)return this._options.disabledHours?a.extend({},this._options.disabledHours):this._options.disabledHours;if(!b)return this._options.disabledHours=!1,this._update(),!0;if(!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(this._options.disabledHours=this._indexGivenHours(b),this._options.enabledHours=!1,this._options.useCurrent&&!this._options.keepInvalid)for(var c=0;c<this._dates.length;c++){for(var d=0;!this._isValid(this._dates[c],"h");){if(this._dates[c].add(1,"h"),24===d)throw"Tried 24 times to find a valid date";d++}this._setValue(this._dates[c],c)}this._update()},r.prototype.enabledHours=function(b){if(0===arguments.length)return this._options.enabledHours?a.extend({},this._options.enabledHours):this._options.enabledHours;if(!b)return this._options.enabledHours=!1,this._update(),!0;if(!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(this._options.enabledHours=this._indexGivenHours(b),this._options.disabledHours=!1,this._options.useCurrent&&!this._options.keepInvalid)for(var c=0;c<this._dates.length;c++){for(var d=0;!this._isValid(this._dates[c],"h");){if(this._dates[c].add(1,"h"),24===d)throw"Tried 24 times to find a valid date";d++}this._setValue(this._dates[c],c)}this._update()},r.prototype.viewDate=function(a){if(0===arguments.length)return this._viewDate.clone();if(!a)return this._viewDate=(this._dates[0]||this.getMoment()).clone(),!0;if(!("string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");this._viewDate=this._parseInputDate(a),this._viewUpdate()},r.prototype.allowMultidate=function(a){if("boolean"!=typeof a)throw new TypeError("allowMultidate() expects a boolean parameter");this._options.allowMultidate=a},r.prototype.multidateSeparator=function(a){if(0===arguments.length)return this._options.multidateSeparator;if("string"!=typeof a||a.length>1)throw new TypeError("multidateSeparator expects a single character string parameter");this._options.multidateSeparator=a},e(r,null,[{key:"NAME",get:function(){return d}},{key:"DATA_KEY",get:function(){return f}},{key:"EVENT_KEY",get:function(){return g}},{key:"DATA_API_KEY",get:function(){return h}},{key:"DatePickerModes",get:function(){return l}},{key:"ViewModes",get:function(){return n}},{key:"Event",get:function(){return k}},{key:"Selector",get:function(){return i}},{key:"Default",get:function(){return q},set:function(a){q=a}},{key:"ClassName",get:function(){return j}}]),r}();return r}(jQuery,moment);(function(e){var g=e.fn[f.NAME],h=["top","bottom","auto"],i=["left","right","auto"],j=["default","top","bottom"],k=function(a){var b=a.data("target"),c=void 0;return b||(b=a.attr("href")||"",b=/^#[a-z]/i.test(b)?b:null),c=e(b),0===c.length?c:(c.data(f.DATA_KEY)||e.extend({},c.data(),e(this).data()),c)},l=function(g){function k(b,d){c(this,k);var e=a(this,g.call(this,b,d));return e._init(),e}return b(k,g),k.prototype._init=function(){if(this._element.hasClass("input-group")){var a=this._element.find(".datepickerbutton");0===a.length?this.component=this._element.find('[data-toggle="datetimepicker"]'):this.component=a}},k.prototype._getDatePickerTemplate=function(){var a=e("<thead>").append(e("<tr>").append(e("<th>").addClass("prev").attr("data-action","previous").append(e("<span>").addClass(this._options.icons.previous))).append(e("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",""+(this._options.calendarWeeks?"6":"5"))).append(e("<th>").addClass("next").attr("data-action","next").append(e("<span>").addClass(this._options.icons.next)))),b=e("<tbody>").append(e("<tr>").append(e("<td>").attr("colspan",""+(this._options.calendarWeeks?"8":"7"))));return[e("<div>").addClass("datepicker-days").append(e("<table>").addClass("table table-sm").append(a).append(e("<tbody>"))),e("<div>").addClass("datepicker-months").append(e("<table>").addClass("table-condensed").append(a.clone()).append(b.clone())),e("<div>").addClass("datepicker-years").append(e("<table>").addClass("table-condensed").append(a.clone()).append(b.clone())),e("<div>").addClass("datepicker-decades").append(e("<table>").addClass("table-condensed").append(a.clone()).append(b.clone()))]},k.prototype._getTimePickerMainTemplate=function(){var a=e("<tr>"),b=e("<tr>"),c=e("<tr>");return this._isEnabled("h")&&(a.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(e("<span>").addClass(this._options.icons.up)))),b.append(e("<td>").append(e("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:this._options.tooltips.pickHour}).attr("data-action","showHours"))),c.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(e("<span>").addClass(this._options.icons.down))))),this._isEnabled("m")&&(this._isEnabled("h")&&(a.append(e("<td>").addClass("separator")),b.append(e("<td>").addClass("separator").html(":")),c.append(e("<td>").addClass("separator"))),a.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(e("<span>").addClass(this._options.icons.up)))),b.append(e("<td>").append(e("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:this._options.tooltips.pickMinute}).attr("data-action","showMinutes"))),c.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.decrementMinute
7
+ }).addClass("btn").attr("data-action","decrementMinutes").append(e("<span>").addClass(this._options.icons.down))))),this._isEnabled("s")&&(this._isEnabled("m")&&(a.append(e("<td>").addClass("separator")),b.append(e("<td>").addClass("separator").html(":")),c.append(e("<td>").addClass("separator"))),a.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(e("<span>").addClass(this._options.icons.up)))),b.append(e("<td>").append(e("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:this._options.tooltips.pickSecond}).attr("data-action","showSeconds"))),c.append(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1",title:this._options.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(e("<span>").addClass(this._options.icons.down))))),this.use24Hours||(a.append(e("<td>").addClass("separator")),b.append(e("<td>").append(e("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:this._options.tooltips.togglePeriod}))),c.append(e("<td>").addClass("separator"))),e("<div>").addClass("timepicker-picker").append(e("<table>").addClass("table-condensed").append([a,b,c]))},k.prototype._getTimePickerTemplate=function(){var a=e("<div>").addClass("timepicker-hours").append(e("<table>").addClass("table-condensed")),b=e("<div>").addClass("timepicker-minutes").append(e("<table>").addClass("table-condensed")),c=e("<div>").addClass("timepicker-seconds").append(e("<table>").addClass("table-condensed")),d=[this._getTimePickerMainTemplate()];return this._isEnabled("h")&&d.push(a),this._isEnabled("m")&&d.push(b),this._isEnabled("s")&&d.push(c),d},k.prototype._getToolbar=function(){var a=[];if(this._options.buttons.showToday&&a.push(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1","data-action":"today",title:this._options.tooltips.today}).append(e("<span>").addClass(this._options.icons.today)))),!this._options.sideBySide&&this._hasDate()&&this._hasTime()){var b=void 0,c=void 0;"times"===this._options.viewMode?(b=this._options.tooltips.selectDate,c=this._options.icons.date):(b=this._options.tooltips.selectTime,c=this._options.icons.time),a.push(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1","data-action":"togglePicker",title:b}).append(e("<span>").addClass(c))))}return this._options.buttons.showClear&&a.push(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1","data-action":"clear",title:this._options.tooltips.clear}).append(e("<span>").addClass(this._options.icons.clear)))),this._options.buttons.showClose&&a.push(e("<td>").append(e("<a>").attr({href:"#",tabindex:"-1","data-action":"close",title:this._options.tooltips.close}).append(e("<span>").addClass(this._options.icons.close)))),0===a.length?"":e("<table>").addClass("table-condensed").append(e("<tbody>").append(e("<tr>").append(a)))},k.prototype._getTemplate=function(){var a=e("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),b=e("<div>").addClass("datepicker").append(this._getDatePickerTemplate()),c=e("<div>").addClass("timepicker").append(this._getTimePickerTemplate()),d=e("<ul>").addClass("list-unstyled"),f=e("<li>").addClass("picker-switch"+(this._options.collapse?" accordion-toggle":"")).append(this._getToolbar());return this._options.inline&&a.removeClass("dropdown-menu"),this.use24Hours&&a.addClass("usetwentyfour"),this._isEnabled("s")&&!this.use24Hours&&a.addClass("wider"),this._options.sideBySide&&this._hasDate()&&this._hasTime()?(a.addClass("timepicker-sbs"),"top"===this._options.toolbarPlacement&&a.append(f),a.append(e("<div>").addClass("row").append(b.addClass("col-md-6")).append(c.addClass("col-md-6"))),"bottom"!==this._options.toolbarPlacement&&"default"!==this._options.toolbarPlacement||a.append(f),a):("top"===this._options.toolbarPlacement&&d.append(f),this._hasDate()&&d.append(e("<li>").addClass(this._options.collapse&&this._hasTime()?"collapse":"").addClass(this._options.collapse&&this._hasTime()&&"times"===this._options.viewMode?"":"show").append(b)),"default"===this._options.toolbarPlacement&&d.append(f),this._hasTime()&&d.append(e("<li>").addClass(this._options.collapse&&this._hasDate()?"collapse":"").addClass(this._options.collapse&&this._hasDate()&&"times"===this._options.viewMode?"show":"").append(c)),"bottom"===this._options.toolbarPlacement&&d.append(f),a.append(d))},k.prototype._place=function(a){var b=a&&a.data&&a.data.picker||this,c=b._options.widgetPositioning.vertical,d=b._options.widgetPositioning.horizontal,f=void 0,g=(b.component&&b.component.length?b.component:b._element).position(),h=(b.component&&b.component.length?b.component:b._element).offset();if(b._options.widgetParent)f=b._options.widgetParent.append(b.widget);else if(b._element.is("input"))f=b._element.after(b.widget).parent();else{if(b._options.inline)return void(f=b._element.append(b.widget));f=b._element,b._element.children().first().after(b.widget)}if("auto"===c&&(c=h.top+1.5*b.widget.height()>=e(window).height()+e(window).scrollTop()&&b.widget.height()+b._element.outerHeight()<h.top?"top":"bottom"),"auto"===d&&(d=f.width()<h.left+b.widget.outerWidth()/2&&h.left+b.widget.outerWidth()>e(window).width()?"right":"left"),"top"===c?b.widget.addClass("top").removeClass("bottom"):b.widget.addClass("bottom").removeClass("top"),"right"===d?b.widget.addClass("float-right"):b.widget.removeClass("float-right"),"relative"!==f.css("position")&&(f=f.parents().filter(function(){return"relative"===e(this).css("position")}).first()),0===f.length)throw new Error("datetimepicker component should be placed within a relative positioned container");b.widget.css({top:"top"===c?"auto":g.top+b._element.outerHeight()+"px",bottom:"top"===c?f.outerHeight()-(f===b._element?0:g.top)+"px":"auto",left:"left"===d?(f===b._element?0:g.left)+"px":"auto",right:"left"===d?"auto":f.outerWidth()-b._element.outerWidth()-(f===b._element?0:g.left)+"px"})},k.prototype._fillDow=function(){var a=e("<tr>"),b=this._viewDate.clone().startOf("w").startOf("d");for(this._options.calendarWeeks===!0&&a.append(e("<th>").addClass("cw").text("#"));b.isBefore(this._viewDate.clone().endOf("w"));)a.append(e("<th>").addClass("dow").text(b.format("dd"))),b.add(1,"d");this.widget.find(".datepicker-days thead").append(a)},k.prototype._fillMonths=function(){for(var a=[],b=this._viewDate.clone().startOf("y").startOf("d");b.isSame(this._viewDate,"y");)a.push(e("<span>").attr("data-action","selectMonth").addClass("month").text(b.format("MMM"))),b.add(1,"M");this.widget.find(".datepicker-months td").empty().append(a)},k.prototype._updateMonths=function(){var a=this.widget.find(".datepicker-months"),b=a.find("th"),c=a.find("tbody").find("span"),d=this;b.eq(0).find("span").attr("title",this._options.tooltips.prevYear),b.eq(1).attr("title",this._options.tooltips.selectYear),b.eq(2).find("span").attr("title",this._options.tooltips.nextYear),a.find(".disabled").removeClass("disabled"),this._isValid(this._viewDate.clone().subtract(1,"y"),"y")||b.eq(0).addClass("disabled"),b.eq(1).text(this._viewDate.year()),this._isValid(this._viewDate.clone().add(1,"y"),"y")||b.eq(2).addClass("disabled"),c.removeClass("active"),this._getLastPickedDate().isSame(this._viewDate,"y")&&!this.unset&&c.eq(this._getLastPickedDate().month()).addClass("active"),c.each(function(a){d._isValid(d._viewDate.clone().month(a),"M")||e(this).addClass("disabled")})},k.prototype._getStartEndYear=function(a,b){var c=a/10,d=Math.floor(b/a)*a,e=d+9*c,f=Math.floor(b/c)*c;return[d,e,f]},k.prototype._updateYears=function(){var a=this.widget.find(".datepicker-years"),b=a.find("th"),c=this._getStartEndYear(10,this._viewDate.year()),d=this._viewDate.clone().year(c[0]),e=this._viewDate.clone().year(c[1]),f="";for(b.eq(0).find("span").attr("title",this._options.tooltips.prevDecade),b.eq(1).attr("title",this._options.tooltips.selectDecade),b.eq(2).find("span").attr("title",this._options.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),this._options.minDate&&this._options.minDate.isAfter(d,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(d.year()+"-"+e.year()),this._options.maxDate&&this._options.maxDate.isBefore(e,"y")&&b.eq(2).addClass("disabled"),f+='<span data-action="selectYear" class="year old'+(this._isValid(d,"y")?"":" disabled")+'">'+(d.year()-1)+"</span>";!d.isAfter(e,"y");)f+='<span data-action="selectYear" class="year'+(d.isSame(this._getLastPickedDate(),"y")&&!this.unset?" active":"")+(this._isValid(d,"y")?"":" disabled")+'">'+d.year()+"</span>",d.add(1,"y");f+='<span data-action="selectYear" class="year old'+(this._isValid(d,"y")?"":" disabled")+'">'+d.year()+"</span>",a.find("td").html(f)},k.prototype._updateDecades=function(){var a=this.widget.find(".datepicker-decades"),b=a.find("th"),c=this._getStartEndYear(100,this._viewDate.year()),d=this._viewDate.clone().year(c[0]),e=this._viewDate.clone().year(c[1]),f=!1,g=!1,h=void 0,i="";for(b.eq(0).find("span").attr("title",this._options.tooltips.prevCentury),b.eq(2).find("span").attr("title",this._options.tooltips.nextCentury),a.find(".disabled").removeClass("disabled"),(0===d.year()||this._options.minDate&&this._options.minDate.isAfter(d,"y"))&&b.eq(0).addClass("disabled"),b.eq(1).text(d.year()+"-"+e.year()),this._options.maxDate&&this._options.maxDate.isBefore(e,"y")&&b.eq(2).addClass("disabled"),i+=d.year()-10<0?"<span>&nbsp;</span>":'<span data-action="selectDecade" class="decade old" data-selection="'+(d.year()+6)+'">'+(d.year()-10)+"</span>";!d.isAfter(e,"y");)h=d.year()+11,f=this._options.minDate&&this._options.minDate.isAfter(d,"y")&&this._options.minDate.year()<=h,g=this._options.maxDate&&this._options.maxDate.isAfter(d,"y")&&this._options.maxDate.year()<=h,i+='<span data-action="selectDecade" class="decade'+(this._getLastPickedDate().isAfter(d)&&this._getLastPickedDate().year()<=h?" active":"")+(this._isValid(d,"y")||f||g?"":" disabled")+'" data-selection="'+(d.year()+6)+'">'+d.year()+"</span>",d.add(10,"y");i+='<span data-action="selectDecade" class="decade old" data-selection="'+(d.year()+6)+'">'+d.year()+"</span>",a.find("td").html(i)},k.prototype._fillDate=function(){var a=this.widget.find(".datepicker-days"),b=a.find("th"),c=[],d=void 0,f=void 0,g=void 0,h=void 0;if(this._hasDate()){for(b.eq(0).find("span").attr("title",this._options.tooltips.prevMonth),b.eq(1).attr("title",this._options.tooltips.selectMonth),b.eq(2).find("span").attr("title",this._options.tooltips.nextMonth),a.find(".disabled").removeClass("disabled"),b.eq(1).text(this._viewDate.format(this._options.dayViewHeaderFormat)),this._isValid(this._viewDate.clone().subtract(1,"M"),"M")||b.eq(0).addClass("disabled"),this._isValid(this._viewDate.clone().add(1,"M"),"M")||b.eq(2).addClass("disabled"),d=this._viewDate.clone().startOf("M").startOf("w").startOf("d"),h=0;h<42;h++){if(0===d.weekday()&&(f=e("<tr>"),this._options.calendarWeeks&&f.append('<td class="cw">'+d.week()+"</td>"),c.push(f)),g="",d.isBefore(this._viewDate,"M")&&(g+=" old"),d.isAfter(this._viewDate,"M")&&(g+=" new"),this._options.allowMultidate){var i=this._datesFormatted.indexOf(d.format("YYYY-MM-DD"));i!==-1&&d.isSame(this._datesFormatted[i],"d")&&!this.unset&&(g+=" active")}else d.isSame(this._getLastPickedDate(),"d")&&!this.unset&&(g+=" active");this._isValid(d,"d")||(g+=" disabled"),d.isSame(this.getMoment(),"d")&&(g+=" today"),0!==d.day()&&6!==d.day()||(g+=" weekend"),f.append('<td data-action="selectDay" data-day="'+d.format("L")+'" class="day'+g+'">'+d.date()+"</td>"),d.add(1,"d")}a.find("tbody").empty().append(c),this._updateMonths(),this._updateYears(),this._updateDecades()}},k.prototype._fillHours=function(){var a=this.widget.find(".timepicker-hours table"),b=this._viewDate.clone().startOf("d"),c=[],d=e("<tr>");for(this._viewDate.hour()>11&&!this.use24Hours&&b.hour(12);b.isSame(this._viewDate,"d")&&(this.use24Hours||this._viewDate.hour()<12&&b.hour()<12||this._viewDate.hour()>11);)b.hour()%4===0&&(d=e("<tr>"),c.push(d)),d.append('<td data-action="selectHour" class="hour'+(this._isValid(b,"h")?"":" disabled")+'">'+b.format(this.use24Hours?"HH":"hh")+"</td>"),b.add(1,"h");a.empty().append(c)},k.prototype._fillMinutes=function(){for(var a=this.widget.find(".timepicker-minutes table"),b=this._viewDate.clone().startOf("h"),c=[],d=1===this._options.stepping?5:this._options.stepping,f=e("<tr>");this._viewDate.isSame(b,"h");)b.minute()%(4*d)===0&&(f=e("<tr>"),c.push(f)),f.append('<td data-action="selectMinute" class="minute'+(this._isValid(b,"m")?"":" disabled")+'">'+b.format("mm")+"</td>"),b.add(d,"m");a.empty().append(c)},k.prototype._fillSeconds=function(){for(var a=this.widget.find(".timepicker-seconds table"),b=this._viewDate.clone().startOf("m"),c=[],d=e("<tr>");this._viewDate.isSame(b,"m");)b.second()%20===0&&(d=e("<tr>"),c.push(d)),d.append('<td data-action="selectSecond" class="second'+(this._isValid(b,"s")?"":" disabled")+'">'+b.format("ss")+"</td>"),b.add(5,"s");a.empty().append(c)},k.prototype._fillTime=function(){var a=void 0,b=void 0,c=this.widget.find(".timepicker span[data-time-component]");this.use24Hours||(a=this.widget.find(".timepicker [data-action=togglePeriod]"),b=this._getLastPickedDate().clone().add(this._getLastPickedDate().hours()>=12?-12:12,"h"),a.text(this._getLastPickedDate().format("A")),this._isValid(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(this._getLastPickedDate().format(""+(this.use24Hours?"HH":"hh"))),c.filter("[data-time-component=minutes]").text(this._getLastPickedDate().format("mm")),c.filter("[data-time-component=seconds]").text(this._getLastPickedDate().format("ss")),this._fillHours(),this._fillMinutes(),this._fillSeconds()},k.prototype._doAction=function(a,b){var c=this._getLastPickedDate();if(e(a.currentTarget).is(".disabled"))return!1;switch(b=b||e(a.currentTarget).data("action")){case"next":var d=f.DatePickerModes[this.currentViewMode].NAV_FUNCTION;this._viewDate.add(f.DatePickerModes[this.currentViewMode].NAV_STEP,d),this._fillDate(),this._viewUpdate(d);break;case"previous":var g=f.DatePickerModes[this.currentViewMode].NAV_FUNCTION;this._viewDate.subtract(f.DatePickerModes[this.currentViewMode].NAV_STEP,g),this._fillDate(),this._viewUpdate(g);break;case"pickerSwitch":this._showMode(1);break;case"selectMonth":var h=e(a.target).closest("tbody").find("span").index(e(a.target));this._viewDate.month(h),this.currentViewMode===this.MinViewModeNumber?(this._setValue(c.clone().year(this._viewDate.year()).month(this._viewDate.month()),this._getLastPickedDateIndex()),this._options.inline||this.hide()):(this._showMode(-1),this._fillDate()),this._viewUpdate("M");break;case"selectYear":var i=parseInt(e(a.target).text(),10)||0;this._viewDate.year(i),this.currentViewMode===this.MinViewModeNumber?(this._setValue(c.clone().year(this._viewDate.year()),this._getLastPickedDateIndex()),this._options.inline||this.hide()):(this._showMode(-1),this._fillDate()),this._viewUpdate("YYYY");break;case"selectDecade":var j=parseInt(e(a.target).data("selection"),10)||0;this._viewDate.year(j),this.currentViewMode===this.MinViewModeNumber?(this._setValue(c.clone().year(this._viewDate.year()),this._getLastPickedDateIndex()),this._options.inline||this.hide()):(this._showMode(-1),this._fillDate()),this._viewUpdate("YYYY");break;case"selectDay":var k=this._viewDate.clone();e(a.target).is(".old")&&k.subtract(1,"M"),e(a.target).is(".new")&&k.add(1,"M");var l=k.date(parseInt(e(a.target).text(),10)),m=0;this._options.allowMultidate?(m=this._datesFormatted.indexOf(l.format("YYYY-MM-DD")),m!==-1?this._setValue(null,m):this._setValue(l,this._getLastPickedDateIndex()+1)):this._setValue(l,this._getLastPickedDateIndex()),this._hasTime()||this._options.keepOpen||this._options.inline||this._options.allowMultidate||this.hide();break;case"incrementHours":var n=c.clone().add(1,"h");this._isValid(n,"h")&&this._setValue(n,this._getLastPickedDateIndex());break;case"incrementMinutes":var o=c.clone().add(this._options.stepping,"m");this._isValid(o,"m")&&this._setValue(o,this._getLastPickedDateIndex());break;case"incrementSeconds":var p=c.clone().add(1,"s");this._isValid(p,"s")&&this._setValue(p,this._getLastPickedDateIndex());break;case"decrementHours":var q=c.clone().subtract(1,"h");this._isValid(q,"h")&&this._setValue(q,this._getLastPickedDateIndex());break;case"decrementMinutes":var r=c.clone().subtract(this._options.stepping,"m");this._isValid(r,"m")&&this._setValue(r,this._getLastPickedDateIndex());break;case"decrementSeconds":var s=c.clone().subtract(1,"s");this._isValid(s,"s")&&this._setValue(s,this._getLastPickedDateIndex());break;case"togglePeriod":this._setValue(c.clone().add(c.hours()>=12?-12:12,"h"),this._getLastPickedDateIndex());break;case"togglePicker":var t=e(a.target),u=t.closest("a"),v=t.closest("ul"),w=v.find(".show"),x=v.find(".collapse:not(.show)"),y=t.is("span")?t:t.find("span"),z=void 0;if(w&&w.length){if(z=w.data("collapse"),z&&z.transitioning)return!0;w.collapse?(w.collapse("hide"),x.collapse("show")):(w.removeClass("show"),x.addClass("show")),y.toggleClass(this._options.icons.time+" "+this._options.icons.date),y.hasClass(this._options.icons.date)?u.attr("title",this._options.tooltips.selectDate):u.attr("title",this._options.tooltips.selectTime)}break;case"showPicker":this.widget.find(".timepicker > div:not(.timepicker-picker)").hide(),this.widget.find(".timepicker .timepicker-picker").show();break;case"showHours":this.widget.find(".timepicker .timepicker-picker").hide(),this.widget.find(".timepicker .timepicker-hours").show();break;case"showMinutes":this.widget.find(".timepicker .timepicker-picker").hide(),this.widget.find(".timepicker .timepicker-minutes").show();break;case"showSeconds":this.widget.find(".timepicker .timepicker-picker").hide(),this.widget.find(".timepicker .timepicker-seconds").show();break;case"selectHour":var A=parseInt(e(a.target).text(),10);this.use24Hours||(c.hours()>=12?12!==A&&(A+=12):12===A&&(A=0)),this._setValue(c.clone().hours(A),this._getLastPickedDateIndex()),this._isEnabled("a")||this._isEnabled("m")||this._options.keepOpen||this._options.inline?this._doAction(a,"showPicker"):this.hide();break;case"selectMinute":this._setValue(c.clone().minutes(parseInt(e(a.target).text(),10)),this._getLastPickedDateIndex()),this._isEnabled("a")||this._isEnabled("s")||this._options.keepOpen||this._options.inline?this._doAction(a,"showPicker"):this.hide();break;case"selectSecond":this._setValue(c.clone().seconds(parseInt(e(a.target).text(),10)),this._getLastPickedDateIndex()),this._isEnabled("a")||this._options.keepOpen||this._options.inline?this._doAction(a,"showPicker"):this.hide();break;case"clear":this.clear();break;case"close":this.hide();break;case"today":var B=this.getMoment();this._isValid(B,"d")&&this._setValue(B,this._getLastPickedDateIndex())}return!1},k.prototype.hide=function(){var a=!1;this.widget&&(this.widget.find(".collapse").each(function(){var b=e(this).data("collapse");return!b||!b.transitioning||(a=!0,!1)}),a||(this.component&&this.component.hasClass("btn")&&this.component.toggleClass("active"),this.widget.hide(),e(window).off("resize",this._place()),this.widget.off("click","[data-action]"),this.widget.off("mousedown",!1),this.widget.remove(),this.widget=!1,this._notifyEvent({type:f.Event.HIDE,date:this._getLastPickedDate().clone()}),void 0!==this.input&&this.input.blur(),this._viewDate=this._getLastPickedDate().clone()))},k.prototype.show=function(){var a=void 0,b={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};if(void 0!==this.input){if(this.input.prop("disabled")||!this._options.ignoreReadonly&&this.input.prop("readonly")||this.widget)return;void 0!==this.input.val()&&0!==this.input.val().trim().length?this._setValue(this._parseInputDate(this.input.val().trim()),0):this.unset&&this._options.useCurrent&&(a=this.getMoment(),"string"==typeof this._options.useCurrent&&(a=b[this._options.useCurrent](a)),this._setValue(a,0))}else this.unset&&this._options.useCurrent&&(a=this.getMoment(),"string"==typeof this._options.useCurrent&&(a=b[this._options.useCurrent](a)),this._setValue(a,0));this.widget=this._getTemplate(),this._fillDow(),this._fillMonths(),this.widget.find(".timepicker-hours").hide(),this.widget.find(".timepicker-minutes").hide(),this.widget.find(".timepicker-seconds").hide(),this._update(),this._showMode(),e(window).on("resize",{picker:this},this._place),this.widget.on("click","[data-action]",e.proxy(this._doAction,this)),this.widget.on("mousedown",!1),this.component&&this.component.hasClass("btn")&&this.component.toggleClass("active"),this._place(),this.widget.show(),void 0!==this.input&&this._options.focusOnShow&&!this.input.is(":focus")&&this.input.focus(),this._notifyEvent({type:f.Event.SHOW})},k.prototype.destroy=function(){this.hide(),this._element.removeData(f.DATA_KEY),this._element.removeData("date")},k.prototype.disable=function(){this.hide(),this.component&&this.component.hasClass("btn")&&this.component.addClass("disabled"),void 0!==this.input&&this.input.prop("disabled",!0)},k.prototype.enable=function(){this.component&&this.component.hasClass("btn")&&this.component.removeClass("disabled"),void 0!==this.input&&this.input.prop("disabled",!1)},k.prototype.toolbarPlacement=function(a){if(0===arguments.length)return this._options.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(j.indexOf(a)===-1)throw new TypeError("toolbarPlacement() parameter must be one of ("+j.join(", ")+") value");this._options.toolbarPlacement=a,this.widget&&(this.hide(),this.show())},k.prototype.widgetPositioning=function(a){if(0===arguments.length)return e.extend({},this._options.widgetPositioning);if("[object Object]"!=={}.toString.call(a))throw new TypeError("widgetPositioning() expects an object variable");if(a.horizontal){if("string"!=typeof a.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(a.horizontal=a.horizontal.toLowerCase(),i.indexOf(a.horizontal)===-1)throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+i.join(", ")+")");this._options.widgetPositioning.horizontal=a.horizontal}if(a.vertical){if("string"!=typeof a.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(a.vertical=a.vertical.toLowerCase(),h.indexOf(a.vertical)===-1)throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+h.join(", ")+")");this._options.widgetPositioning.vertical=a.vertical}this._update()},k.prototype.widgetParent=function(a){if(0===arguments.length)return this._options.widgetParent;if("string"==typeof a&&(a=e(a)),null!==a&&"string"!=typeof a&&!(a instanceof e))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");this._options.widgetParent=a,this.widget&&(this.hide(),this.show())},k._jQueryHandleThis=function(a,b,c){var g=e(a).data(f.DATA_KEY);if("object"===("undefined"==typeof b?"undefined":d(b))&&e.extend({},f.Default,b),g||(g=new k(e(a),b),e(a).data(f.DATA_KEY,g)),"string"==typeof b){if(void 0===g[b])throw new Error('No method named "'+b+'"');return void 0===c?g[b]():g[b](c)}},k._jQueryInterface=function(a,b){return 1===this.length?k._jQueryHandleThis(this[0],a,b):this.each(function(){k._jQueryHandleThis(this,a,b)})},k}(f);return e(document).on(f.Event.CLICK_DATA_API,f.Selector.DATA_TOGGLE,function(){var a=k(e(this));0!==a.length&&l._jQueryInterface.call(a,"toggle")}).on(f.Event.CHANGE,"."+f.ClassName.INPUT,function(a){var b=k(e(this));0!==b.length&&l._jQueryInterface.call(b,"_change",a)}).on(f.Event.BLUR,"."+f.ClassName.INPUT,function(a){var b=k(e(this)),c=b.data(f.DATA_KEY);0!==b.length&&(c._options.debug||window.debug||l._jQueryInterface.call(b,"hide",a))}).on(f.Event.KEYDOWN,"."+f.ClassName.INPUT,function(a){var b=k(e(this));0!==b.length&&l._jQueryInterface.call(b,"_keydown",a)}).on(f.Event.KEYUP,"."+f.ClassName.INPUT,function(a){var b=k(e(this));0!==b.length&&l._jQueryInterface.call(b,"_keyup",a)}).on(f.Event.FOCUS,"."+f.ClassName.INPUT,function(a){var b=k(e(this)),c=b.data(f.DATA_KEY);0!==b.length&&c._options.allowInputToggle&&l._jQueryInterface.call(b,"show",a)}),e.fn[f.NAME]=l._jQueryInterface,e.fn[f.NAME].Constructor=l,e.fn[f.NAME].noConflict=function(){return e.fn[f.NAME]=g,l._jQueryInterface},l})(jQuery)}();
lib/twentytwenty/jquery.event.move.js ADDED
@@ -0,0 +1,599 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // DOM.event.move
2
+ //
3
+ // 2.0.0
4
+ //
5
+ // Stephen Band
6
+ //
7
+ // Triggers 'movestart', 'move' and 'moveend' events after
8
+ // mousemoves following a mousedown cross a distance threshold,
9
+ // similar to the native 'dragstart', 'drag' and 'dragend' events.
10
+ // Move events are throttled to animation frames. Move event objects
11
+ // have the properties:
12
+ //
13
+ // pageX:
14
+ // pageY: Page coordinates of pointer.
15
+ // startX:
16
+ // startY: Page coordinates of pointer at movestart.
17
+ // distX:
18
+ // distY: Distance the pointer has moved since movestart.
19
+ // deltaX:
20
+ // deltaY: Distance the finger has moved since last event.
21
+ // velocityX:
22
+ // velocityY: Average velocity over last few events.
23
+
24
+
25
+ (function(fn) {
26
+ if (typeof define === 'function' && define.amd) {
27
+ define([], fn);
28
+ } else if ((typeof module !== "undefined" && module !== null) && module.exports) {
29
+ module.exports = fn;
30
+ } else {
31
+ fn();
32
+ }
33
+ })(function(){
34
+ var assign = Object.assign || window.jQuery && jQuery.extend;
35
+
36
+ // Number of pixels a pressed pointer travels before movestart
37
+ // event is fired.
38
+ var threshold = 8;
39
+
40
+ // Shim for requestAnimationFrame, falling back to timer. See:
41
+ // see http://paulirish.com/2011/requestanimationframe-for-smart-animating/
42
+ var requestFrame = (function(){
43
+ return (
44
+ window.requestAnimationFrame ||
45
+ window.webkitRequestAnimationFrame ||
46
+ window.mozRequestAnimationFrame ||
47
+ window.oRequestAnimationFrame ||
48
+ window.msRequestAnimationFrame ||
49
+ function(fn, element){
50
+ return window.setTimeout(function(){
51
+ fn();
52
+ }, 25);
53
+ }
54
+ );
55
+ })();
56
+
57
+ // Shim for customEvent
58
+ // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
59
+ (function () {
60
+ if ( typeof window.CustomEvent === "function" ) return false;
61
+ function CustomEvent ( event, params ) {
62
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
63
+ var evt = document.createEvent( 'CustomEvent' );
64
+ evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
65
+ return evt;
66
+ }
67
+
68
+ CustomEvent.prototype = window.Event.prototype;
69
+ window.CustomEvent = CustomEvent;
70
+ })();
71
+
72
+ var ignoreTags = {
73
+ textarea: true,
74
+ input: true,
75
+ select: true,
76
+ button: true
77
+ };
78
+
79
+ var mouseevents = {
80
+ move: 'mousemove',
81
+ cancel: 'mouseup dragstart',
82
+ end: 'mouseup'
83
+ };
84
+
85
+ var touchevents = {
86
+ move: 'touchmove',
87
+ cancel: 'touchend',
88
+ end: 'touchend'
89
+ };
90
+
91
+ var rspaces = /\s+/;
92
+
93
+
94
+ // DOM Events
95
+
96
+ var eventOptions = { bubbles: true, cancelable: true };
97
+
98
+ var eventsSymbol = typeof Symbol === "function" ? Symbol('events') : {};
99
+
100
+ function createEvent(type) {
101
+ return new CustomEvent(type, eventOptions);
102
+ }
103
+
104
+ function getEvents(node) {
105
+ return node[eventsSymbol] || (node[eventsSymbol] = {});
106
+ }
107
+
108
+ function on(node, types, fn, data, selector) {
109
+ types = types.split(rspaces);
110
+
111
+ var events = getEvents(node);
112
+ var i = types.length;
113
+ var handlers, type;
114
+
115
+ function handler(e) { fn(e, data); }
116
+
117
+ while (i--) {
118
+ type = types[i];
119
+ handlers = events[type] || (events[type] = []);
120
+ handlers.push([fn, handler]);
121
+ node.addEventListener(type, handler);
122
+ }
123
+ }
124
+
125
+ function off(node, types, fn, selector) {
126
+ types = types.split(rspaces);
127
+
128
+ var events = getEvents(node);
129
+ var i = types.length;
130
+ var type, handlers, k;
131
+
132
+ if (!events) { return; }
133
+
134
+ while (i--) {
135
+ type = types[i];
136
+ handlers = events[type];
137
+ if (!handlers) { continue; }
138
+ k = handlers.length;
139
+ while (k--) {
140
+ if (handlers[k][0] === fn) {
141
+ node.removeEventListener(type, handlers[k][1]);
142
+ handlers.splice(k, 1);
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ function trigger(node, type, properties) {
149
+ // Don't cache events. It prevents you from triggering an event of a
150
+ // given type from inside the handler of another event of that type.
151
+ var event = createEvent(type);
152
+ if (properties) { assign(event, properties); }
153
+ node.dispatchEvent(event);
154
+ }
155
+
156
+
157
+ // Constructors
158
+
159
+ function Timer(fn){
160
+ var callback = fn,
161
+ active = false,
162
+ running = false;
163
+
164
+ function trigger(time) {
165
+ if (active){
166
+ callback();
167
+ requestFrame(trigger);
168
+ running = true;
169
+ active = false;
170
+ }
171
+ else {
172
+ running = false;
173
+ }
174
+ }
175
+
176
+ this.kick = function(fn) {
177
+ active = true;
178
+ if (!running) { trigger(); }
179
+ };
180
+
181
+ this.end = function(fn) {
182
+ var cb = callback;
183
+
184
+ if (!fn) { return; }
185
+
186
+ // If the timer is not running, simply call the end callback.
187
+ if (!running) {
188
+ fn();
189
+ }
190
+ // If the timer is running, and has been kicked lately, then
191
+ // queue up the current callback and the end callback, otherwise
192
+ // just the end callback.
193
+ else {
194
+ callback = active ?
195
+ function(){ cb(); fn(); } :
196
+ fn ;
197
+
198
+ active = true;
199
+ }
200
+ };
201
+ }
202
+
203
+
204
+ // Functions
205
+
206
+ function noop() {}
207
+
208
+ function preventDefault(e) {
209
+ e.preventDefault();
210
+ }
211
+
212
+ function isIgnoreTag(e) {
213
+ return !!ignoreTags[e.target.tagName.toLowerCase()];
214
+ }
215
+
216
+ function isPrimaryButton(e) {
217
+ // Ignore mousedowns on any button other than the left (or primary)
218
+ // mouse button, or when a modifier key is pressed.
219
+ return (e.which === 1 && !e.ctrlKey && !e.altKey);
220
+ }
221
+
222
+ function identifiedTouch(touchList, id) {
223
+ var i, l;
224
+
225
+ if (touchList.identifiedTouch) {
226
+ return touchList.identifiedTouch(id);
227
+ }
228
+
229
+ // touchList.identifiedTouch() does not exist in
230
+ // webkit yet… we must do the search ourselves...
231
+
232
+ i = -1;
233
+ l = touchList.length;
234
+
235
+ while (++i < l) {
236
+ if (touchList[i].identifier === id) {
237
+ return touchList[i];
238
+ }
239
+ }
240
+ }
241
+
242
+ function changedTouch(e, data) {
243
+ var touch = identifiedTouch(e.changedTouches, data.identifier);
244
+
245
+ // This isn't the touch you're looking for.
246
+ if (!touch) { return; }
247
+
248
+ // Chrome Android (at least) includes touches that have not
249
+ // changed in e.changedTouches. That's a bit annoying. Check
250
+ // that this touch has changed.
251
+ if (touch.pageX === data.pageX && touch.pageY === data.pageY) { return; }
252
+
253
+ return touch;
254
+ }
255
+
256
+
257
+ // Handlers that decide when the first movestart is triggered
258
+
259
+ function mousedown(e){
260
+ // Ignore non-primary buttons
261
+ if (!isPrimaryButton(e)) { return; }
262
+
263
+ // Ignore form and interactive elements
264
+ if (isIgnoreTag(e)) { return; }
265
+
266
+ on(document, mouseevents.move, mousemove, e);
267
+ on(document, mouseevents.cancel, mouseend, e);
268
+ }
269
+
270
+ function mousemove(e, data){
271
+ checkThreshold(e, data, e, removeMouse);
272
+ }
273
+
274
+ function mouseend(e, data) {
275
+ removeMouse();
276
+ }
277
+
278
+ function removeMouse() {
279
+ off(document, mouseevents.move, mousemove);
280
+ off(document, mouseevents.cancel, mouseend);
281
+ }
282
+
283
+ function touchstart(e) {
284
+ // Don't get in the way of interaction with form elements
285
+ if (ignoreTags[e.target.tagName.toLowerCase()]) { return; }
286
+
287
+ var touch = e.changedTouches[0];
288
+
289
+ // iOS live updates the touch objects whereas Android gives us copies.
290
+ // That means we can't trust the touchstart object to stay the same,
291
+ // so we must copy the data. This object acts as a template for
292
+ // movestart, move and moveend event objects.
293
+ var data = {
294
+ target: touch.target,
295
+ pageX: touch.pageX,
296
+ pageY: touch.pageY,
297
+ identifier: touch.identifier,
298
+
299
+ // The only way to make handlers individually unbindable is by
300
+ // making them unique.
301
+ touchmove: function(e, data) { touchmove(e, data); },
302
+ touchend: function(e, data) { touchend(e, data); }
303
+ };
304
+
305
+ on(document, touchevents.move, data.touchmove, data);
306
+ on(document, touchevents.cancel, data.touchend, data);
307
+ }
308
+
309
+ function touchmove(e, data) {
310
+ var touch = changedTouch(e, data);
311
+ if (!touch) { return; }
312
+ checkThreshold(e, data, touch, removeTouch);
313
+ }
314
+
315
+ function touchend(e, data) {
316
+ var touch = identifiedTouch(e.changedTouches, data.identifier);
317
+ if (!touch) { return; }
318
+ removeTouch(data);
319
+ }
320
+
321
+ function removeTouch(data) {
322
+ off(document, touchevents.move, data.touchmove);
323
+ off(document, touchevents.cancel, data.touchend);
324
+ }
325
+
326
+ function checkThreshold(e, data, touch, fn) {
327
+ var distX = touch.pageX - data.pageX;
328
+ var distY = touch.pageY - data.pageY;
329
+
330
+ // Do nothing if the threshold has not been crossed.
331
+ if ((distX * distX) + (distY * distY) < (threshold * threshold)) { return; }
332
+
333
+ triggerStart(e, data, touch, distX, distY, fn);
334
+ }
335
+
336
+ function triggerStart(e, data, touch, distX, distY, fn) {
337
+ var touches = e.targetTouches;
338
+ var time = e.timeStamp - data.timeStamp;
339
+
340
+ // Create a movestart object with some special properties that
341
+ // are passed only to the movestart handlers.
342
+ var template = {
343
+ altKey: e.altKey,
344
+ ctrlKey: e.ctrlKey,
345
+ shiftKey: e.shiftKey,
346
+ startX: data.pageX,
347
+ startY: data.pageY,
348
+ distX: distX,
349
+ distY: distY,
350
+ deltaX: distX,
351
+ deltaY: distY,
352
+ pageX: touch.pageX,
353
+ pageY: touch.pageY,
354
+ velocityX: distX / time,
355
+ velocityY: distY / time,
356
+ identifier: data.identifier,
357
+ targetTouches: touches,
358
+ finger: touches ? touches.length : 1,
359
+ enableMove: function() {
360
+ this.moveEnabled = true;
361
+ this.enableMove = noop;
362
+ e.preventDefault();
363
+ }
364
+ };
365
+
366
+ // Trigger the movestart event.
367
+ trigger(data.target, 'movestart', template);
368
+
369
+ // Unbind handlers that tracked the touch or mouse up till now.
370
+ fn(data);
371
+ }
372
+
373
+
374
+ // Handlers that control what happens following a movestart
375
+
376
+ function activeMousemove(e, data) {
377
+ var timer = data.timer;
378
+
379
+ data.touch = e;
380
+ data.timeStamp = e.timeStamp;
381
+ timer.kick();
382
+ }
383
+
384
+ function activeMouseend(e, data) {
385
+ var target = data.target;
386
+ var event = data.event;
387
+ var timer = data.timer;
388
+
389
+ removeActiveMouse();
390
+
391
+ endEvent(target, event, timer, function() {
392
+ // Unbind the click suppressor, waiting until after mouseup
393
+ // has been handled.
394
+ setTimeout(function(){
395
+ off(target, 'click', preventDefault);
396
+ }, 0);
397
+ });
398
+ }
399
+
400
+ function removeActiveMouse() {
401
+ off(document, mouseevents.move, activeMousemove);
402
+ off(document, mouseevents.end, activeMouseend);
403
+ }
404
+
405
+ function activeTouchmove(e, data) {
406
+ var event = data.event;
407
+ var timer = data.timer;
408
+ var touch = changedTouch(e, event);
409
+
410
+ if (!touch) { return; }
411
+
412
+ // Stop the interface from gesturing
413
+ e.preventDefault();
414
+
415
+ event.targetTouches = e.targetTouches;
416
+ data.touch = touch;
417
+ data.timeStamp = e.timeStamp;
418
+
419
+ timer.kick();
420
+ }
421
+
422
+ function activeTouchend(e, data) {
423
+ var target = data.target;
424
+ var event = data.event;
425
+ var timer = data.timer;
426
+ var touch = identifiedTouch(e.changedTouches, event.identifier);
427
+
428
+ // This isn't the touch you're looking for.
429
+ if (!touch) { return; }
430
+
431
+ removeActiveTouch(data);
432
+ endEvent(target, event, timer);
433
+ }
434
+
435
+ function removeActiveTouch(data) {
436
+ off(document, touchevents.move, data.activeTouchmove);
437
+ off(document, touchevents.end, data.activeTouchend);
438
+ }
439
+
440
+
441
+ // Logic for triggering move and moveend events
442
+
443
+ function updateEvent(event, touch, timeStamp) {
444
+ var time = timeStamp - event.timeStamp;
445
+
446
+ event.distX = touch.pageX - event.startX;
447
+ event.distY = touch.pageY - event.startY;
448
+ event.deltaX = touch.pageX - event.pageX;
449
+ event.deltaY = touch.pageY - event.pageY;
450
+
451
+ // Average the velocity of the last few events using a decay
452
+ // curve to even out spurious jumps in values.
453
+ event.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time;
454
+ event.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time;
455
+ event.pageX = touch.pageX;
456
+ event.pageY = touch.pageY;
457
+ }
458
+
459
+ function endEvent(target, event, timer, fn) {
460
+ timer.end(function(){
461
+ trigger(target, 'moveend', event);
462
+ return fn && fn();
463
+ });
464
+ }
465
+
466
+
467
+ // Set up the DOM
468
+
469
+ function movestart(e) {
470
+ if (e.defaultPrevented) { return; }
471
+ if (!e.moveEnabled) { return; }
472
+
473
+ var event = {
474
+ startX: e.startX,
475
+ startY: e.startY,
476
+ pageX: e.pageX,
477
+ pageY: e.pageY,
478
+ distX: e.distX,
479
+ distY: e.distY,
480
+ deltaX: e.deltaX,
481
+ deltaY: e.deltaY,
482
+ velocityX: e.velocityX,
483
+ velocityY: e.velocityY,
484
+ identifier: e.identifier,
485
+ targetTouches: e.targetTouches,
486
+ finger: e.finger
487
+ };
488
+
489
+ var data = {
490
+ target: e.target,
491
+ event: event,
492
+ timer: new Timer(update),
493
+ touch: undefined,
494
+ timeStamp: e.timeStamp
495
+ };
496
+
497
+ function update(time) {
498
+ updateEvent(event, data.touch, data.timeStamp);
499
+ trigger(data.target, 'move', event);
500
+ }
501
+
502
+ if (e.identifier === undefined) {
503
+ // We're dealing with a mouse event.
504
+ // Stop clicks from propagating during a move
505
+ on(e.target, 'click', preventDefault);
506
+ on(document, mouseevents.move, activeMousemove, data);
507
+ on(document, mouseevents.end, activeMouseend, data);
508
+ }
509
+ else {
510
+ // In order to unbind correct handlers they have to be unique
511
+ data.activeTouchmove = function(e, data) { activeTouchmove(e, data); };
512
+ data.activeTouchend = function(e, data) { activeTouchend(e, data); };
513
+
514
+ // We're dealing with a touch.
515
+ on(document, touchevents.move, data.activeTouchmove, data);
516
+ on(document, touchevents.end, data.activeTouchend, data);
517
+ }
518
+ }
519
+
520
+ on(document, 'mousedown', mousedown);
521
+ on(document, 'touchstart', touchstart);
522
+ on(document, 'movestart', movestart);
523
+
524
+
525
+ // jQuery special events
526
+ //
527
+ // jQuery event objects are copies of DOM event objects. They need
528
+ // a little help copying the move properties across.
529
+
530
+ if (!window.jQuery) { return; }
531
+
532
+ var properties = ("startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY").split(' ');
533
+
534
+ function enableMove1(e) { e.enableMove(); }
535
+ function enableMove2(e) { e.enableMove(); }
536
+ function enableMove3(e) { e.enableMove(); }
537
+
538
+ function add(handleObj) {
539
+ var handler = handleObj.handler;
540
+
541
+ handleObj.handler = function(e) {
542
+ // Copy move properties across from originalEvent
543
+ var i = properties.length;
544
+ var property;
545
+
546
+ while(i--) {
547
+ property = properties[i];
548
+ e[property] = e.originalEvent[property];
549
+ }
550
+
551
+ handler.apply(this, arguments);
552
+ };
553
+ }
554
+
555
+ jQuery.event.special.movestart = {
556
+ setup: function() {
557
+ // Movestart must be enabled to allow other move events
558
+ on(this, 'movestart', enableMove1);
559
+
560
+ // Do listen to DOM events
561
+ return false;
562
+ },
563
+
564
+ teardown: function() {
565
+ off(this, 'movestart', enableMove1);
566
+ return false;
567
+ },
568
+
569
+ add: add
570
+ };
571
+
572
+ jQuery.event.special.move = {
573
+ setup: function() {
574
+ on(this, 'movestart', enableMove2);
575
+ return false;
576
+ },
577
+
578
+ teardown: function() {
579
+ off(this, 'movestart', enableMove2);
580
+ return false;
581
+ },
582
+
583
+ add: add
584
+ };
585
+
586
+ jQuery.event.special.moveend = {
587
+ setup: function() {
588
+ on(this, 'movestart', enableMove3);
589
+ return false;
590
+ },
591
+
592
+ teardown: function() {
593
+ off(this, 'movestart', enableMove3);
594
+ return false;
595
+ },
596
+
597
+ add: add
598
+ };
599
+ });
lib/twentytwenty/jquery.twentytwenty.js ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($){
2
+
3
+ $.fn.twentytwenty = function(options) {
4
+ var options = $.extend({
5
+ default_offset_pct: 0.5,
6
+ orientation: 'horizontal',
7
+ before_label: 'Before',
8
+ after_label: 'After',
9
+ no_overlay: false,
10
+ move_slider_on_hover: false,
11
+ move_with_handle_only: true,
12
+ click_to_move: false
13
+ }, options);
14
+
15
+ return this.each(function() {
16
+
17
+ var sliderPct = options.default_offset_pct;
18
+ var container = $(this);
19
+ var sliderOrientation = options.orientation;
20
+ var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';
21
+ var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';
22
+
23
+
24
+ container.wrap("<div class='twentytwenty-wrapper twentytwenty-" + sliderOrientation + "'></div>");
25
+ if(!options.no_overlay) {
26
+ container.append("<div class='twentytwenty-overlay'></div>");
27
+ var overlay = container.find(".twentytwenty-overlay");
28
+ overlay.append("<div class='twentytwenty-before-label' data-content='"+options.before_label+"'></div>");
29
+ overlay.append("<div class='twentytwenty-after-label' data-content='"+options.after_label+"'></div>");
30
+ }
31
+ var beforeImg = container.find("img:first");
32
+ var afterImg = container.find("img:last");
33
+ container.append("<div class='twentytwenty-handle'></div>");
34
+ var slider = container.find(".twentytwenty-handle");
35
+ slider.append("<span class='twentytwenty-" + beforeDirection + "-arrow'></span>");
36
+ slider.append("<span class='twentytwenty-" + afterDirection + "-arrow'></span>");
37
+ container.addClass("twentytwenty-container");
38
+ beforeImg.addClass("twentytwenty-before");
39
+ afterImg.addClass("twentytwenty-after");
40
+
41
+ var calcOffset = function(dimensionPct) {
42
+ var w = beforeImg.width();
43
+ var h = beforeImg.height();
44
+ return {
45
+ w: w+"px",
46
+ h: h+"px",
47
+ cw: (dimensionPct*w)+"px",
48
+ ch: (dimensionPct*h)+"px"
49
+ };
50
+ };
51
+
52
+ var adjustContainer = function(offset) {
53
+ if (sliderOrientation === 'vertical') {
54
+ beforeImg.css("clip", "rect(0,"+offset.w+","+offset.ch+",0)");
55
+ afterImg.css("clip", "rect("+offset.ch+","+offset.w+","+offset.h+",0)");
56
+ }
57
+ else {
58
+ beforeImg.css("clip", "rect(0,"+offset.cw+","+offset.h+",0)");
59
+ afterImg.css("clip", "rect(0,"+offset.w+","+offset.h+","+offset.cw+")");
60
+ }
61
+ container.css("height", offset.h);
62
+ };
63
+
64
+ var adjustSlider = function(pct) {
65
+ var offset = calcOffset(pct);
66
+ slider.css((sliderOrientation==="vertical") ? "top" : "left", (sliderOrientation==="vertical") ? offset.ch : offset.cw);
67
+ adjustContainer(offset);
68
+ };
69
+
70
+ // Return the number specified or the min/max number if it outside the range given.
71
+ var minMaxNumber = function(num, min, max) {
72
+ return Math.max(min, Math.min(max, num));
73
+ };
74
+
75
+ // Calculate the slider percentage based on the position.
76
+ var getSliderPercentage = function(positionX, positionY) {
77
+ var sliderPercentage = (sliderOrientation === 'vertical') ?
78
+ (positionY-offsetY)/imgHeight :
79
+ (positionX-offsetX)/imgWidth;
80
+
81
+ return minMaxNumber(sliderPercentage, 0, 1);
82
+ };
83
+
84
+
85
+ $(window).on("resize.twentytwenty", function(e) {
86
+ adjustSlider(sliderPct);
87
+ });
88
+
89
+ var offsetX = 0;
90
+ var offsetY = 0;
91
+ var imgWidth = 0;
92
+ var imgHeight = 0;
93
+ var onMoveStart = function(e) {
94
+ if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {
95
+ e.preventDefault();
96
+ }
97
+ else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {
98
+ e.preventDefault();
99
+ }
100
+ container.addClass("active");
101
+ offsetX = container.offset().left;
102
+ offsetY = container.offset().top;
103
+ imgWidth = beforeImg.width();
104
+ imgHeight = beforeImg.height();
105
+ };
106
+ var onMove = function(e) {
107
+ if (container.hasClass("active")) {
108
+ sliderPct = getSliderPercentage(e.pageX, e.pageY);
109
+ adjustSlider(sliderPct);
110
+ }
111
+ };
112
+ var onMoveEnd = function() {
113
+ container.removeClass("active");
114
+ };
115
+
116
+ var moveTarget = options.move_with_handle_only ? slider : container;
117
+ moveTarget.on("movestart",onMoveStart);
118
+ moveTarget.on("move",onMove);
119
+ moveTarget.on("moveend",onMoveEnd);
120
+
121
+ if (options.move_slider_on_hover) {
122
+ container.on("mouseenter", onMoveStart);
123
+ container.on("mousemove", onMove);
124
+ container.on("mouseleave", onMoveEnd);
125
+ }
126
+
127
+ slider.on("touchmove", function(e) {
128
+ e.preventDefault();
129
+ });
130
+
131
+ container.find("img").on("mousedown", function(event) {
132
+ event.preventDefault();
133
+ });
134
+
135
+ if (options.click_to_move) {
136
+ container.on('click', function(e) {
137
+ offsetX = container.offset().left;
138
+ offsetY = container.offset().top;
139
+ imgWidth = beforeImg.width();
140
+ imgHeight = beforeImg.height();
141
+
142
+ sliderPct = getSliderPercentage(e.pageX, e.pageY);
143
+ adjustSlider(sliderPct);
144
+ });
145
+ }
146
+
147
+ $(window).trigger("resize.twentytwenty");
148
+ });
149
+ };
150
+
151
+ })(jQuery);
lib/twentytwenty/twentytwenty.css ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .twentytwenty-horizontal .twentytwenty-handle:before, .twentytwenty-horizontal .twentytwenty-handle:after, .twentytwenty-vertical .twentytwenty-handle:before, .twentytwenty-vertical .twentytwenty-handle:after {
2
+ content: " ";
3
+ display: block;
4
+ background: white;
5
+ position: absolute;
6
+ z-index: 30;
7
+ -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
8
+ -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
9
+ box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); }
10
+
11
+ .twentytwenty-horizontal .twentytwenty-handle:before, .twentytwenty-horizontal .twentytwenty-handle:after {
12
+ width: 3px;
13
+ height: 9999px;
14
+ left: 50%;
15
+ margin-left: -1.5px; }
16
+
17
+ .twentytwenty-vertical .twentytwenty-handle:before, .twentytwenty-vertical .twentytwenty-handle:after {
18
+ width: 9999px;
19
+ height: 3px;
20
+ top: 50%;
21
+ margin-top: -1.5px; }
22
+
23
+ .twentytwenty-before-label, .twentytwenty-after-label, .twentytwenty-overlay {
24
+ position: absolute;
25
+ top: 0;
26
+ width: 100%;
27
+ height: 100%; }
28
+
29
+ .twentytwenty-before-label, .twentytwenty-after-label, .twentytwenty-overlay {
30
+ -webkit-transition-duration: 0.5s;
31
+ -moz-transition-duration: 0.5s;
32
+ transition-duration: 0.5s; }
33
+
34
+ .twentytwenty-before-label, .twentytwenty-after-label {
35
+ -webkit-transition-property: opacity;
36
+ -moz-transition-property: opacity;
37
+ transition-property: opacity; }
38
+
39
+ .twentytwenty-before-label:before, .twentytwenty-after-label:before {
40
+ color: white;
41
+ font-size: 13px;
42
+ letter-spacing: 0.1em; }
43
+
44
+ .twentytwenty-before-label:before, .twentytwenty-after-label:before {
45
+ position: absolute;
46
+ background: rgba(255, 255, 255, 0.2);
47
+ line-height: 38px;
48
+ padding: 0 20px;
49
+ -webkit-border-radius: 2px;
50
+ -moz-border-radius: 2px;
51
+ border-radius: 2px; }
52
+
53
+ .twentytwenty-horizontal .twentytwenty-before-label:before, .twentytwenty-horizontal .twentytwenty-after-label:before {
54
+ top: 50%;
55
+ margin-top: -19px; }
56
+
57
+ .twentytwenty-vertical .twentytwenty-before-label:before, .twentytwenty-vertical .twentytwenty-after-label:before {
58
+ left: 50%;
59
+ margin-left: -45px;
60
+ text-align: center;
61
+ width: 90px; }
62
+
63
+ .twentytwenty-left-arrow, .twentytwenty-right-arrow, .twentytwenty-up-arrow, .twentytwenty-down-arrow {
64
+ width: 0;
65
+ height: 0;
66
+ border: 6px inset transparent;
67
+ position: absolute; }
68
+
69
+ .twentytwenty-left-arrow, .twentytwenty-right-arrow {
70
+ top: 50%;
71
+ margin-top: -6px; }
72
+
73
+ .twentytwenty-up-arrow, .twentytwenty-down-arrow {
74
+ left: 50%;
75
+ margin-left: -6px; }
76
+
77
+ .twentytwenty-container {
78
+ -webkit-box-sizing: content-box;
79
+ -moz-box-sizing: content-box;
80
+ box-sizing: content-box;
81
+ z-index: 0;
82
+ overflow: hidden;
83
+ position: relative;
84
+ -webkit-user-select: none;
85
+ -moz-user-select: none;
86
+ -ms-user-select: none; }
87
+ .twentytwenty-container img {
88
+ max-width: 100%;
89
+ position: absolute;
90
+ top: 0;
91
+ display: block; }
92
+ .twentytwenty-container.active .twentytwenty-overlay, .twentytwenty-container.active :hover.twentytwenty-overlay {
93
+ background: rgba(0, 0, 0, 0); }
94
+ .twentytwenty-container.active .twentytwenty-overlay .twentytwenty-before-label,
95
+ .twentytwenty-container.active .twentytwenty-overlay .twentytwenty-after-label, .twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-before-label,
96
+ .twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-after-label {
97
+ opacity: 0; }
98
+ .twentytwenty-container * {
99
+ -webkit-box-sizing: content-box;
100
+ -moz-box-sizing: content-box;
101
+ box-sizing: content-box; }
102
+
103
+ .twentytwenty-before-label {
104
+ opacity: 0; }
105
+ .twentytwenty-before-label:before {
106
+ content: attr(data-content); }
107
+
108
+ .twentytwenty-after-label {
109
+ opacity: 0; }
110
+ .twentytwenty-after-label:before {
111
+ content: attr(data-content); }
112
+
113
+ .twentytwenty-horizontal .twentytwenty-before-label:before {
114
+ left: 10px; }
115
+
116
+ .twentytwenty-horizontal .twentytwenty-after-label:before {
117
+ right: 10px; }
118
+
119
+ .twentytwenty-vertical .twentytwenty-before-label:before {
120
+ top: 10px; }
121
+
122
+ .twentytwenty-vertical .twentytwenty-after-label:before {
123
+ bottom: 10px; }
124
+
125
+ .twentytwenty-overlay {
126
+ -webkit-transition-property: background;
127
+ -moz-transition-property: background;
128
+ transition-property: background;
129
+ background: rgba(0, 0, 0, 0);
130
+ z-index: 25; }
131
+ .twentytwenty-overlay:hover {
132
+ background: rgba(0, 0, 0, 0.5); }
133
+ .twentytwenty-overlay:hover .twentytwenty-after-label {
134
+ opacity: 1; }
135
+ .twentytwenty-overlay:hover .twentytwenty-before-label {
136
+ opacity: 1; }
137
+
138
+ .twentytwenty-before {
139
+ z-index: 20; }
140
+
141
+ .twentytwenty-after {
142
+ z-index: 10; }
143
+
144
+ .twentytwenty-handle {
145
+ height: 38px;
146
+ width: 38px;
147
+ position: absolute;
148
+ left: 50%;
149
+ top: 50%;
150
+ margin-left: -22px;
151
+ margin-top: -22px;
152
+ border: 3px solid white;
153
+ -webkit-border-radius: 1000px;
154
+ -moz-border-radius: 1000px;
155
+ border-radius: 1000px;
156
+ -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
157
+ -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
158
+ box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
159
+ z-index: 40;
160
+ cursor: pointer; }
161
+
162
+ .twentytwenty-horizontal .twentytwenty-handle:before {
163
+ bottom: 50%;
164
+ margin-bottom: 22px;
165
+ -webkit-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
166
+ -moz-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
167
+ box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
168
+ .twentytwenty-horizontal .twentytwenty-handle:after {
169
+ top: 50%;
170
+ margin-top: 22px;
171
+ -webkit-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
172
+ -moz-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
173
+ box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
174
+
175
+ .twentytwenty-vertical .twentytwenty-handle:before {
176
+ left: 50%;
177
+ margin-left: 22px;
178
+ -webkit-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
179
+ -moz-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
180
+ box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
181
+ .twentytwenty-vertical .twentytwenty-handle:after {
182
+ right: 50%;
183
+ margin-right: 22px;
184
+ -webkit-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
185
+ -moz-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
186
+ box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
187
+
188
+ .twentytwenty-left-arrow {
189
+ border-right: 6px solid white;
190
+ left: 50%;
191
+ margin-left: -17px; }
192
+
193
+ .twentytwenty-right-arrow {
194
+ border-left: 6px solid white;
195
+ right: 50%;
196
+ margin-right: -17px; }
197
+
198
+ .twentytwenty-up-arrow {
199
+ border-bottom: 6px solid white;
200
+ top: 50%;
201
+ margin-top: -17px; }
202
+
203
+ .twentytwenty-down-arrow {
204
+ border-top: 6px solid white;
205
+ bottom: 50%;
206
+ margin-bottom: -17px; }
lib/waypoints/links.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ <?php
2
+ $links = array(
3
+ 'js' => 'lib/waypoints/waypoints.min.js'
4
+ );
5
+ ?>
lib/waypoints/waypoints.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Waypoints - 4.0.1
3
+ Copyright © 2011-2016 Caleb Troughton
4
+ Licensed under the MIT license.
5
+ https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
6
+ */
7
+ !function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,n.windowContext||(n.windowContext=!0,n.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var l=o.oldScroll<a.triggerPoint,h=o.newScroll>=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=Math.floor(y+l-f),h=w<s.oldScroll,p=d.triggerPoint>=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}();
lib/wow/wow.js ADDED
@@ -0,0 +1,542 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * WOW wow.js - v1.3.0 - 2016-10-04
3
+ * https://wowjs.uk
4
+ * Copyright (c) 2016 Thomas Grainger; Licensed MIT
5
+ */
6
+
7
+ (function (global, factory) {
8
+ if (typeof define === "function" && define.amd) {
9
+ define(['module', 'exports'], factory);
10
+ } else if (typeof exports !== "undefined") {
11
+ factory(module, exports);
12
+ } else {
13
+ var mod = {
14
+ exports: {}
15
+ };
16
+ factory(mod, mod.exports);
17
+ global.WOW = mod.exports;
18
+ }
19
+ })(this, function (module, exports) {
20
+ 'use strict';
21
+
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+
26
+ var _class, _temp;
27
+
28
+ function _classCallCheck(instance, Constructor) {
29
+ if (!(instance instanceof Constructor)) {
30
+ throw new TypeError("Cannot call a class as a function");
31
+ }
32
+ }
33
+
34
+ var _createClass = function () {
35
+ function defineProperties(target, props) {
36
+ for (var i = 0; i < props.length; i++) {
37
+ var descriptor = props[i];
38
+ descriptor.enumerable = descriptor.enumerable || false;
39
+ descriptor.configurable = true;
40
+ if ("value" in descriptor) descriptor.writable = true;
41
+ Object.defineProperty(target, descriptor.key, descriptor);
42
+ }
43
+ }
44
+
45
+ return function (Constructor, protoProps, staticProps) {
46
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
47
+ if (staticProps) defineProperties(Constructor, staticProps);
48
+ return Constructor;
49
+ };
50
+ }();
51
+
52
+ function isIn(needle, haystack) {
53
+ return haystack.indexOf(needle) >= 0;
54
+ }
55
+
56
+ function extend(custom, defaults) {
57
+ for (var key in defaults) {
58
+ if (custom[key] == null) {
59
+ var value = defaults[key];
60
+ custom[key] = value;
61
+ }
62
+ }
63
+ return custom;
64
+ }
65
+
66
+ function isMobile(agent) {
67
+ return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent)
68
+ );
69
+ }
70
+
71
+ function createEvent(event) {
72
+ var bubble = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
73
+ var cancel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
74
+ var detail = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
75
+
76
+ var customEvent = void 0;
77
+ if (document.createEvent != null) {
78
+ // W3C DOM
79
+ customEvent = document.createEvent('CustomEvent');
80
+ customEvent.initCustomEvent(event, bubble, cancel, detail);
81
+ } else if (document.createEventObject != null) {
82
+ // IE DOM < 9
83
+ customEvent = document.createEventObject();
84
+ customEvent.eventType = event;
85
+ } else {
86
+ customEvent.eventName = event;
87
+ }
88
+
89
+ return customEvent;
90
+ }
91
+
92
+ function emitEvent(elem, event) {
93
+ if (elem.dispatchEvent != null) {
94
+ // W3C DOM
95
+ elem.dispatchEvent(event);
96
+ } else if (event in (elem != null)) {
97
+ elem[event]();
98
+ } else if ('on' + event in (elem != null)) {
99
+ elem['on' + event]();
100
+ }
101
+ }
102
+
103
+ function addEvent(elem, event, fn) {
104
+ if (elem.addEventListener != null) {
105
+ // W3C DOM
106
+ elem.addEventListener(event, fn, false);
107
+ } else if (elem.attachEvent != null) {
108
+ // IE DOM
109
+ elem.attachEvent('on' + event, fn);
110
+ } else {
111
+ // fallback
112
+ elem[event] = fn;
113
+ }
114
+ }
115
+
116
+ function removeEvent(elem, event, fn) {
117
+ if (elem.removeEventListener != null) {
118
+ // W3C DOM
119
+ elem.removeEventListener(event, fn, false);
120
+ } else if (elem.detachEvent != null) {
121
+ // IE DOM
122
+ elem.detachEvent('on' + event, fn);
123
+ } else {
124
+ // fallback
125
+ delete elem[event];
126
+ }
127
+ }
128
+
129
+ function getInnerHeight() {
130
+ if ('innerHeight' in window) {
131
+ return window.innerHeight;
132
+ }
133
+
134
+ return document.documentElement.clientHeight;
135
+ }
136
+
137
+ // Minimalistic WeakMap shim, just in case.
138
+ var WeakMap = window.WeakMap || window.MozWeakMap || function () {
139
+ function WeakMap() {
140
+ _classCallCheck(this, WeakMap);
141
+
142
+ this.keys = [];
143
+ this.values = [];
144
+ }
145
+
146
+ _createClass(WeakMap, [{
147
+ key: 'get',
148
+ value: function get(key) {
149
+ for (var i = 0; i < this.keys.length; i++) {
150
+ var item = this.keys[i];
151
+ if (item === key) {
152
+ return this.values[i];
153
+ }
154
+ }
155
+ return undefined;
156
+ }
157
+ }, {
158
+ key: 'set',
159
+ value: function set(key, value) {
160
+ for (var i = 0; i < this.keys.length; i++) {
161
+ var item = this.keys[i];
162
+ if (item === key) {
163
+ this.values[i] = value;
164
+ return this;
165
+ }
166
+ }
167
+ this.keys.push(key);
168
+ this.values.push(value);
169
+ return this;
170
+ }
171
+ }]);
172
+
173
+ return WeakMap;
174
+ }();
175
+
176
+ // Dummy MutationObserver, to avoid raising exceptions.
177
+ var MutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver || (_temp = _class = function () {
178
+ function MutationObserver() {
179
+ _classCallCheck(this, MutationObserver);
180
+
181
+ if (typeof console !== 'undefined' && console !== null) {
182
+ console.warn('MutationObserver is not supported by your browser.');
183
+ console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');
184
+ }
185
+ }
186
+
187
+ _createClass(MutationObserver, [{
188
+ key: 'observe',
189
+ value: function observe() {}
190
+ }]);
191
+
192
+ return MutationObserver;
193
+ }(), _class.notSupported = true, _temp);
194
+
195
+ // getComputedStyle shim, from http://stackoverflow.com/a/21797294
196
+ var getComputedStyle = window.getComputedStyle || function getComputedStyle(el) {
197
+ var getComputedStyleRX = /(\-([a-z]){1})/g;
198
+ return {
199
+ getPropertyValue: function getPropertyValue(prop) {
200
+ if (prop === 'float') {
201
+ prop = 'styleFloat';
202
+ }
203
+ if (getComputedStyleRX.test(prop)) {
204
+ prop.replace(getComputedStyleRX, function (_, _char) {
205
+ return _char.toUpperCase();
206
+ });
207
+ }
208
+ var currentStyle = el.currentStyle;
209
+
210
+ return (currentStyle != null ? currentStyle[prop] : void 0) || null;
211
+ }
212
+ };
213
+ };
214
+
215
+ var WOW = function () {
216
+ function WOW() {
217
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
218
+
219
+ _classCallCheck(this, WOW);
220
+
221
+ this.defaults = {
222
+ boxClass: 'wow',
223
+ animateClass: 'animated',
224
+ offset: 0,
225
+ mobile: true,
226
+ live: true,
227
+ callback: null,
228
+ scrollContainer: null,
229
+ resetAnimation: true
230
+ };
231
+
232
+ this.animate = function animateFactory() {
233
+ if ('requestAnimationFrame' in window) {
234
+ return function (callback) {
235
+ return window.requestAnimationFrame(callback);
236
+ };
237
+ }
238
+ return function (callback) {
239
+ return callback();
240
+ };
241
+ }();
242
+
243
+ this.vendors = ['moz', 'webkit'];
244
+
245
+ this.start = this.start.bind(this);
246
+ this.resetAnimation = this.resetAnimation.bind(this);
247
+ this.scrollHandler = this.scrollHandler.bind(this);
248
+ this.scrollCallback = this.scrollCallback.bind(this);
249
+ this.scrolled = true;
250
+ this.config = extend(options, this.defaults);
251
+ if (options.scrollContainer != null) {
252
+ this.config.scrollContainer = document.querySelector(options.scrollContainer);
253
+ }
254
+ // Map of elements to animation names:
255
+ this.animationNameCache = new WeakMap();
256
+ this.wowEvent = createEvent(this.config.boxClass);
257
+ }
258
+
259
+ _createClass(WOW, [{
260
+ key: 'init',
261
+ value: function init() {
262
+ this.element = window.document.documentElement;
263
+ if (isIn(document.readyState, ['interactive', 'complete'])) {
264
+ this.start();
265
+ } else {
266
+ addEvent(document, 'DOMContentLoaded', this.start);
267
+ }
268
+ this.finished = [];
269
+ }
270
+ }, {
271
+ key: 'start',
272
+ value: function start() {
273
+ var _this = this;
274
+
275
+ this.stopped = false;
276
+ this.boxes = [].slice.call(this.element.querySelectorAll('.' + this.config.boxClass));
277
+ this.all = this.boxes.slice(0);
278
+ if (this.boxes.length) {
279
+ if (this.disabled()) {
280
+ this.resetStyle();
281
+ } else {
282
+ for (var i = 0; i < this.boxes.length; i++) {
283
+ var box = this.boxes[i];
284
+ this.applyStyle(box, true);
285
+ }
286
+ }
287
+ }
288
+ if (!this.disabled()) {
289
+ addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
290
+ addEvent(window, 'resize', this.scrollHandler);
291
+ this.interval = setInterval(this.scrollCallback, 50);
292
+ }
293
+ if (this.config.live) {
294
+ var mut = new MutationObserver(function (records) {
295
+ for (var j = 0; j < records.length; j++) {
296
+ var record = records[j];
297
+ for (var k = 0; k < record.addedNodes.length; k++) {
298
+ var node = record.addedNodes[k];
299
+ _this.doSync(node);
300
+ }
301
+ }
302
+ return undefined;
303
+ });
304
+ mut.observe(document.body, {
305
+ childList: true,
306
+ subtree: true
307
+ });
308
+ }
309
+ }
310
+ }, {
311
+ key: 'stop',
312
+ value: function stop() {
313
+ this.stopped = true;
314
+ removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
315
+ removeEvent(window, 'resize', this.scrollHandler);
316
+ if (this.interval != null) {
317
+ clearInterval(this.interval);
318
+ }
319
+ }
320
+ }, {
321
+ key: 'sync',
322
+ value: function sync() {
323
+ if (MutationObserver.notSupported) {
324
+ this.doSync(this.element);
325
+ }
326
+ }
327
+ }, {
328
+ key: 'doSync',
329
+ value: function doSync(element) {
330
+ if (typeof element === 'undefined' || element === null) {
331
+ element = this.element;
332
+ }
333
+ if (element.nodeType !== 1) {
334
+ return;
335
+ }
336
+ element = element.parentNode || element;
337
+ var iterable = element.querySelectorAll('.' + this.config.boxClass);
338
+ for (var i = 0; i < iterable.length; i++) {
339
+ var box = iterable[i];
340
+ if (!isIn(box, this.all)) {
341
+ this.boxes.push(box);
342
+ this.all.push(box);
343
+ if (this.stopped || this.disabled()) {
344
+ this.resetStyle();
345
+ } else {
346
+ this.applyStyle(box, true);
347
+ }
348
+ this.scrolled = true;
349
+ }
350
+ }
351
+ }
352
+ }, {
353
+ key: 'show',
354
+ value: function show(box) {
355
+ this.applyStyle(box);
356
+ box.className = box.className + ' ' + this.config.animateClass;
357
+ if (this.config.callback != null) {
358
+ this.config.callback(box);
359
+ }
360
+ emitEvent(box, this.wowEvent);
361
+
362
+ if (this.config.resetAnimation) {
363
+ addEvent(box, 'animationend', this.resetAnimation);
364
+ addEvent(box, 'oanimationend', this.resetAnimation);
365
+ addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
366
+ addEvent(box, 'MSAnimationEnd', this.resetAnimation);
367
+ }
368
+
369
+ return box;
370
+ }
371
+ }, {
372
+ key: 'applyStyle',
373
+ value: function applyStyle(box, hidden) {
374
+ var _this2 = this;
375
+
376
+ var duration = box.getAttribute('data-wow-duration');
377
+ var delay = box.getAttribute('data-wow-delay');
378
+ var iteration = box.getAttribute('data-wow-iteration');
379
+
380
+ return this.animate(function () {
381
+ return _this2.customStyle(box, hidden, duration, delay, iteration);
382
+ });
383
+ }
384
+ }, {
385
+ key: 'resetStyle',
386
+ value: function resetStyle() {
387
+ for (var i = 0; i < this.boxes.length; i++) {
388
+ var box = this.boxes[i];
389
+ box.style.visibility = 'visible';
390
+ }
391
+ return undefined;
392
+ }
393
+ }, {
394
+ key: 'resetAnimation',
395
+ value: function resetAnimation(event) {
396
+ if (event.type.toLowerCase().indexOf('animationend') >= 0) {
397
+ var target = event.target || event.srcElement;
398
+ target.className = target.className.replace(this.config.animateClass, '').trim();
399
+ }
400
+ }
401
+ }, {
402
+ key: 'customStyle',
403
+ value: function customStyle(box, hidden, duration, delay, iteration) {
404
+ if (hidden) {
405
+ this.cacheAnimationName(box);
406
+ }
407
+ box.style.visibility = hidden ? 'hidden' : 'visible';
408
+
409
+ if (duration) {
410
+ this.vendorSet(box.style, { animationDuration: duration });
411
+ }
412
+ if (delay) {
413
+ this.vendorSet(box.style, { animationDelay: delay });
414
+ }
415
+ if (iteration) {
416
+ this.vendorSet(box.style, { animationIterationCount: iteration });
417
+ }
418
+ this.vendorSet(box.style, { animationName: hidden ? 'none' : this.cachedAnimationName(box) });
419
+
420
+ return box;
421
+ }
422
+ }, {
423
+ key: 'vendorSet',
424
+ value: function vendorSet(elem, properties) {
425
+ for (var name in properties) {
426
+ if (properties.hasOwnProperty(name)) {
427
+ var value = properties[name];
428
+ elem['' + name] = value;
429
+ for (var i = 0; i < this.vendors.length; i++) {
430
+ var vendor = this.vendors[i];
431
+ elem['' + vendor + name.charAt(0).toUpperCase() + name.substr(1)] = value;
432
+ }
433
+ }
434
+ }
435
+ }
436
+ }, {
437
+ key: 'vendorCSS',
438
+ value: function vendorCSS(elem, property) {
439
+ var style = getComputedStyle(elem);
440
+ var result = style.getPropertyCSSValue(property);
441
+ for (var i = 0; i < this.vendors.length; i++) {
442
+ var vendor = this.vendors[i];
443
+ result = result || style.getPropertyCSSValue('-' + vendor + '-' + property);
444
+ }
445
+ return result;
446
+ }
447
+ }, {
448
+ key: 'animationName',
449
+ value: function animationName(box) {
450
+ var aName = void 0;
451
+ try {
452
+ aName = this.vendorCSS(box, 'animation-name').cssText;
453
+ } catch (error) {
454
+ // Opera, fall back to plain property value
455
+ aName = getComputedStyle(box).getPropertyValue('animation-name');
456
+ }
457
+
458
+ if (aName === 'none') {
459
+ return ''; // SVG/Firefox, unable to get animation name?
460
+ }
461
+
462
+ return aName;
463
+ }
464
+ }, {
465
+ key: 'cacheAnimationName',
466
+ value: function cacheAnimationName(box) {
467
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=921834
468
+ // box.dataset is not supported for SVG elements in Firefox
469
+ return this.animationNameCache.set(box, this.animationName(box));
470
+ }
471
+ }, {
472
+ key: 'cachedAnimationName',
473
+ value: function cachedAnimationName(box) {
474
+ return this.animationNameCache.get(box);
475
+ }
476
+ }, {
477
+ key: 'scrollHandler',
478
+ value: function scrollHandler() {
479
+ this.scrolled = true;
480
+ }
481
+ }, {
482
+ key: 'scrollCallback',
483
+ value: function scrollCallback() {
484
+ if (this.scrolled) {
485
+ this.scrolled = false;
486
+ var results = [];
487
+ for (var i = 0; i < this.boxes.length; i++) {
488
+ var box = this.boxes[i];
489
+ if (box) {
490
+ if (this.isVisible(box)) {
491
+ this.show(box);
492
+ continue;
493
+ }
494
+ results.push(box);
495
+ }
496
+ }
497
+ this.boxes = results;
498
+ if (!this.boxes.length && !this.config.live) {
499
+ this.stop();
500
+ }
501
+ }
502
+ }
503
+ }, {
504
+ key: 'offsetTop',
505
+ value: function offsetTop(element) {
506
+ // SVG elements don't have an offsetTop in Firefox.
507
+ // This will use their nearest parent that has an offsetTop.
508
+ // Also, using ('offsetTop' of element) causes an exception in Firefox.
509
+ while (element.offsetTop === undefined) {
510
+ element = element.parentNode;
511
+ }
512
+ var top = element.offsetTop;
513
+ while (element.offsetParent) {
514
+ element = element.offsetParent;
515
+ top += element.offsetTop;
516
+ }
517
+ return top;
518
+ }
519
+ }, {
520
+ key: 'isVisible',
521
+ value: function isVisible(box) {
522
+ var offset = box.getAttribute('data-wow-offset') || this.config.offset;
523
+ var viewTop = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset;
524
+ var viewBottom = viewTop + Math.min(this.element.clientHeight, getInnerHeight()) - offset;
525
+ var top = this.offsetTop(box);
526
+ var bottom = top + box.clientHeight;
527
+
528
+ return top <= viewBottom && bottom >= viewTop;
529
+ }
530
+ }, {
531
+ key: 'disabled',
532
+ value: function disabled() {
533
+ return !this.config.mobile && isMobile(navigator.userAgent);
534
+ }
535
+ }]);
536
+
537
+ return WOW;
538
+ }();
539
+
540
+ exports.default = WOW;
541
+ module.exports = exports['default'];
542
+ });
lib/wow/wow.min.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ /*! WOW wow.js - v1.3.0 - 2016-10-04
2
+ * https://wowjs.uk
3
+ * Copyright (c) 2016 Thomas Grainger; Licensed MIT */!function(a,b){if("function"==typeof define&&define.amd)define(["module","exports"],b);else if("undefined"!=typeof exports)b(module,exports);else{var c={exports:{}};b(c,c.exports),a.WOW=c.exports}}(this,function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function d(a,b){return b.indexOf(a)>=0}function e(a,b){for(var c in b)if(null==a[c]){var d=b[c];a[c]=d}return a}function f(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)}function g(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],d=arguments.length<=3||void 0===arguments[3]?null:arguments[3],e=void 0;return null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e}function h(a,b){null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)&&a["on"+b]()}function i(a,b,c){null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c}function j(a,b,c){null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]}function k(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight}Object.defineProperty(b,"__esModule",{value:!0});var l,m,n=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),o=window.WeakMap||window.MozWeakMap||function(){function a(){c(this,a),this.keys=[],this.values=[]}return n(a,[{key:"get",value:function(a){for(var b=0;b<this.keys.length;b++){var c=this.keys[b];if(c===a)return this.values[b]}}},{key:"set",value:function(a,b){for(var c=0;c<this.keys.length;c++){var d=this.keys[c];if(d===a)return this.values[c]=b,this}return this.keys.push(a),this.values.push(b),this}}]),a}(),p=window.MutationObserver||window.WebkitMutationObserver||window.MozMutationObserver||(m=l=function(){function a(){c(this,a),"undefined"!=typeof console&&null!==console&&(console.warn("MutationObserver is not supported by your browser."),console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content."))}return n(a,[{key:"observe",value:function(){}}]),a}(),l.notSupported=!0,m),q=window.getComputedStyle||function(a){var b=/(\-([a-z]){1})/g;return{getPropertyValue:function(c){"float"===c&&(c="styleFloat"),b.test(c)&&c.replace(b,function(a,b){return b.toUpperCase()});var d=a.currentStyle;return(null!=d?d[c]:void 0)||null}}},r=function(){function a(){var b=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];c(this,a),this.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null,resetAnimation:!0},this.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),this.vendors=["moz","webkit"],this.start=this.start.bind(this),this.resetAnimation=this.resetAnimation.bind(this),this.scrollHandler=this.scrollHandler.bind(this),this.scrollCallback=this.scrollCallback.bind(this),this.scrolled=!0,this.config=e(b,this.defaults),null!=b.scrollContainer&&(this.config.scrollContainer=document.querySelector(b.scrollContainer)),this.animationNameCache=new o,this.wowEvent=g(this.config.boxClass)}return n(a,[{key:"init",value:function(){this.element=window.document.documentElement,d(document.readyState,["interactive","complete"])?this.start():i(document,"DOMContentLoaded",this.start),this.finished=[]}},{key:"start",value:function(){var a=this;if(this.stopped=!1,this.boxes=[].slice.call(this.element.querySelectorAll("."+this.config.boxClass)),this.all=this.boxes.slice(0),this.boxes.length)if(this.disabled())this.resetStyle();else for(var b=0;b<this.boxes.length;b++){var c=this.boxes[b];this.applyStyle(c,!0)}if(this.disabled()||(i(this.config.scrollContainer||window,"scroll",this.scrollHandler),i(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live){var d=new p(function(b){for(var c=0;c<b.length;c++)for(var d=b[c],e=0;e<d.addedNodes.length;e++){var f=d.addedNodes[e];a.doSync(f)}});d.observe(document.body,{childList:!0,subtree:!0})}}},{key:"stop",value:function(){this.stopped=!0,j(this.config.scrollContainer||window,"scroll",this.scrollHandler),j(window,"resize",this.scrollHandler),null!=this.interval&&clearInterval(this.interval)}},{key:"sync",value:function(){p.notSupported&&this.doSync(this.element)}},{key:"doSync",value:function(a){if("undefined"!=typeof a&&null!==a||(a=this.element),1===a.nodeType){a=a.parentNode||a;for(var b=a.querySelectorAll("."+this.config.boxClass),c=0;c<b.length;c++){var e=b[c];d(e,this.all)||(this.boxes.push(e),this.all.push(e),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(e,!0),this.scrolled=!0)}}}},{key:"show",value:function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),h(a,this.wowEvent),this.config.resetAnimation&&(i(a,"animationend",this.resetAnimation),i(a,"oanimationend",this.resetAnimation),i(a,"webkitAnimationEnd",this.resetAnimation),i(a,"MSAnimationEnd",this.resetAnimation)),a}},{key:"applyStyle",value:function(a,b){var c=this,d=a.getAttribute("data-wow-duration"),e=a.getAttribute("data-wow-delay"),f=a.getAttribute("data-wow-iteration");return this.animate(function(){return c.customStyle(a,b,d,e,f)})}},{key:"resetStyle",value:function(){for(var a=0;a<this.boxes.length;a++){var b=this.boxes[a];b.style.visibility="visible"}}},{key:"resetAnimation",value:function(a){if(a.type.toLowerCase().indexOf("animationend")>=0){var b=a.target||a.srcElement;b.className=b.className.replace(this.config.animateClass,"").trim()}}},{key:"customStyle",value:function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a}},{key:"vendorSet",value:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];a[""+c]=d;for(var e=0;e<this.vendors.length;e++){var f=this.vendors[e];a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=d}}}},{key:"vendorCSS",value:function(a,b){for(var c=q(a),d=c.getPropertyCSSValue(b),e=0;e<this.vendors.length;e++){var f=this.vendors[e];d=d||c.getPropertyCSSValue("-"+f+"-"+b)}return d}},{key:"animationName",value:function(a){var b=void 0;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=q(a).getPropertyValue("animation-name")}return"none"===b?"":b}},{key:"cacheAnimationName",value:function(a){return this.animationNameCache.set(a,this.animationName(a))}},{key:"cachedAnimationName",value:function(a){return this.animationNameCache.get(a)}},{key:"scrollHandler",value:function(){this.scrolled=!0}},{key:"scrollCallback",value:function(){if(this.scrolled){this.scrolled=!1;for(var a=[],b=0;b<this.boxes.length;b++){var c=this.boxes[b];if(c){if(this.isVisible(c)){this.show(c);continue}a.push(c)}}this.boxes=a,this.boxes.length||this.config.live||this.stop()}}},{key:"offsetTop",value:function(a){for(;void 0===a.offsetTop;)a=a.parentNode;for(var b=a.offsetTop;a.offsetParent;)a=a.offsetParent,b+=a.offsetTop;return b}},{key:"isVisible",value:function(a){var b=a.getAttribute("data-wow-offset")||this.config.offset,c=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,d=c+Math.min(this.element.clientHeight,k())-b,e=this.offsetTop(a),f=e+a.clientHeight;return d>=e&&f>=c}},{key:"disabled",value:function(){return!this.config.mobile&&f(navigator.userAgent)}}]),a}();b["default"]=r,a.exports=b["default"]});