Spaces:
Runtime error
Runtime error
medbenhasan
commited on
Commit
•
271bc4f
1
Parent(s):
2160a6e
Upload 134 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +2 -0
- README.md +1 -12
- about.html +265 -0
- appointment.html +314 -0
- contact.html +296 -0
- css/bootstrap.min.css +0 -0
- css/style.css +325 -0
- img/about.png +3 -0
- img/after.jpeg +0 -0
- img/before.jpg +0 -0
- img/carousel-1.png +0 -0
- img/carousel-2.webp +0 -0
- img/price-1.jpg +0 -0
- img/price-2.jpg +0 -0
- img/price-3.jpg +0 -0
- img/service-1.png +3 -0
- img/service-2.png +0 -0
- img/service-3.jpg +0 -0
- img/service-4.jpg +0 -0
- img/team-1.jpg +0 -0
- index.html +464 -0
- js/main.js +121 -0
- lib/animate/animate.css +1579 -0
- lib/animate/animate.min.css +11 -0
- lib/easing/easing.js +168 -0
- lib/easing/easing.min.js +1 -0
- lib/owlcarousel/LICENSE +23 -0
- lib/owlcarousel/assets/ajax-loader.gif +0 -0
- lib/owlcarousel/assets/owl.carousel.css +170 -0
- lib/owlcarousel/assets/owl.carousel.min.css +6 -0
- lib/owlcarousel/assets/owl.theme.default.css +50 -0
- lib/owlcarousel/assets/owl.theme.default.min.css +6 -0
- lib/owlcarousel/assets/owl.theme.green.css +50 -0
- lib/owlcarousel/assets/owl.theme.green.min.css +6 -0
- lib/owlcarousel/assets/owl.video.play.png +0 -0
- lib/owlcarousel/owl.carousel.js +3275 -0
- lib/owlcarousel/owl.carousel.min.js +7 -0
- lib/tempusdominus/css/tempusdominus-bootstrap-4.css +206 -0
- lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css +206 -0
- lib/tempusdominus/js/moment-timezone.min.js +1 -0
- lib/tempusdominus/js/moment.min.js +0 -0
- lib/tempusdominus/js/tempusdominus-bootstrap-4.js +0 -0
- lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js +7 -0
- lib/twentytwenty/jquery.event.move.js +599 -0
- lib/twentytwenty/jquery.twentytwenty.js +151 -0
- lib/twentytwenty/twentytwenty.css +206 -0
- lib/waypoints/links.php +5 -0
- lib/waypoints/waypoints.min.js +7 -0
- lib/wow/wow.js +542 -0
- 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">© <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">© <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">© <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
|
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
|
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">© <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> </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"]});
|