Spaces:
Sleeping
Sleeping
Commit ·
fb7733d
1
Parent(s): 6e57488
Added images and model using Git LFS
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +4 -0
- app.py +67 -0
- dockerfile +21 -0
- requirements.txt +6 -0
- static/css/bootstrap.min.css +0 -0
- static/css/style.css +592 -0
- static/js/main.js +171 -0
- static/lib/animate/animate.css +1579 -0
- static/lib/animate/animate.min.css +11 -0
- static/lib/counterup/counterup.min.js +11 -0
- static/lib/easing/easing.js +168 -0
- static/lib/easing/easing.min.js +1 -0
- static/lib/owlcarousel/LICENSE +23 -0
- static/lib/owlcarousel/assets/ajax-loader.gif +0 -0
- static/lib/owlcarousel/assets/owl.carousel.css +170 -0
- static/lib/owlcarousel/assets/owl.carousel.min.css +6 -0
- static/lib/owlcarousel/assets/owl.theme.default.css +50 -0
- static/lib/owlcarousel/assets/owl.theme.default.min.css +6 -0
- static/lib/owlcarousel/assets/owl.theme.green.css +50 -0
- static/lib/owlcarousel/assets/owl.theme.green.min.css +6 -0
- static/lib/owlcarousel/assets/owl.video.play.png +0 -0
- static/lib/owlcarousel/owl.carousel.js +3275 -0
- static/lib/owlcarousel/owl.carousel.min.js +7 -0
- static/lib/waypoints/links.php +5 -0
- static/lib/waypoints/waypoints.min.js +7 -0
- static/lib/wow/wow.js +542 -0
- static/lib/wow/wow.min.js +3 -0
- static/scss/bootstrap.scss +28 -0
- static/scss/bootstrap/scss/_accordion.scss +118 -0
- static/scss/bootstrap/scss/_alert.scss +57 -0
- static/scss/bootstrap/scss/_badge.scss +29 -0
- static/scss/bootstrap/scss/_breadcrumb.scss +28 -0
- static/scss/bootstrap/scss/_button-group.scss +139 -0
- static/scss/bootstrap/scss/_buttons.scss +111 -0
- static/scss/bootstrap/scss/_card.scss +215 -0
- static/scss/bootstrap/scss/_carousel.scss +229 -0
- static/scss/bootstrap/scss/_close.scss +40 -0
- static/scss/bootstrap/scss/_containers.scss +41 -0
- static/scss/bootstrap/scss/_dropdown.scss +240 -0
- static/scss/bootstrap/scss/_forms.scss +9 -0
- static/scss/bootstrap/scss/_functions.scss +205 -0
- static/scss/bootstrap/scss/_grid.scss +22 -0
- static/scss/bootstrap/scss/_helpers.scss +7 -0
- static/scss/bootstrap/scss/_images.scss +42 -0
- static/scss/bootstrap/scss/_list-group.scss +174 -0
- static/scss/bootstrap/scss/_mixins.scss +42 -0
- static/scss/bootstrap/scss/_modal.scss +228 -0
- static/scss/bootstrap/scss/_nav.scss +139 -0
- static/scss/bootstrap/scss/_navbar.scss +306 -0
- static/scss/bootstrap/scss/_offcanvas.scss +77 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,7 @@ 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 |
+
*.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
*.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
*.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
*.keras filter=lfs diff=lfs merge=lfs -text
|
app.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import os
|
| 3 |
+
from tensorflow.keras.models import load_model # type: ignore
|
| 4 |
+
from tensorflow.keras.preprocessing import image # type: ignore
|
| 5 |
+
from tensorflow.keras.layers import Flatten # type: ignore
|
| 6 |
+
from tensorflow.keras.applications.densenet import preprocess_input# type: ignore
|
| 7 |
+
import tensorflow as tf
|
| 8 |
+
|
| 9 |
+
from flask import Flask , request, render_template
|
| 10 |
+
#from werkzeug.utils import secure_filename
|
| 11 |
+
#from gevent.pywsgi import WSGIServer
|
| 12 |
+
|
| 13 |
+
app = Flask(__name__)
|
| 14 |
+
basepath = os.path.dirname(__file__)
|
| 15 |
+
modelpath = os.path.join(basepath,'uploads',"best1den.keras")
|
| 16 |
+
model = load_model(modelpath,compile=False, safe_mode=False)
|
| 17 |
+
@app.route('/')
|
| 18 |
+
def index():
|
| 19 |
+
return render_template('index.html')
|
| 20 |
+
|
| 21 |
+
@app.route('/about')
|
| 22 |
+
def about():
|
| 23 |
+
return render_template('about.html')
|
| 24 |
+
|
| 25 |
+
@app.route('/service')
|
| 26 |
+
def service():
|
| 27 |
+
return render_template('service.html')
|
| 28 |
+
|
| 29 |
+
@app.route('/predict',methods = ['GET','POST'])
|
| 30 |
+
def upload():
|
| 31 |
+
if request.method == 'POST':
|
| 32 |
+
f = request.files['image']
|
| 33 |
+
|
| 34 |
+
#print("current path")
|
| 35 |
+
basepath = os.path.dirname(__file__)
|
| 36 |
+
print("current path", basepath)
|
| 37 |
+
filepath = os.path.join(basepath,'uploads',f.filename)
|
| 38 |
+
print("upload folder is ", filepath)
|
| 39 |
+
f.save(filepath)
|
| 40 |
+
|
| 41 |
+
img=image.load_img(filepath,target_size=(224,224))
|
| 42 |
+
img=image.img_to_array(img)
|
| 43 |
+
img=img.reshape((1,img.shape[0],img.shape[1],img.shape[2]))
|
| 44 |
+
img=preprocess_input(img)
|
| 45 |
+
pred=model.predict(img)
|
| 46 |
+
pred=pred.flatten()
|
| 47 |
+
pred=list(pred)
|
| 48 |
+
n=max(pred)
|
| 49 |
+
val_dict={0: 'Aircraft Carrier',
|
| 50 |
+
1: 'Bulkers',
|
| 51 |
+
2: 'Car Carrier',
|
| 52 |
+
3: 'Container Ship',
|
| 53 |
+
4: 'Cruise',
|
| 54 |
+
5: 'DDG',
|
| 55 |
+
6: 'Recreational',
|
| 56 |
+
7: 'Sailboat',
|
| 57 |
+
8: 'Submarine',
|
| 58 |
+
9: 'Tug'}
|
| 59 |
+
result=val_dict[pred.index(n)]
|
| 60 |
+
print(result)
|
| 61 |
+
text = "the Ship Category is " + result
|
| 62 |
+
return text
|
| 63 |
+
|
| 64 |
+
if __name__ == '__main__':
|
| 65 |
+
app.run(debug = True)
|
| 66 |
+
|
| 67 |
+
|
dockerfile
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use official Python runtime as base image
|
| 2 |
+
FROM python:3.9
|
| 3 |
+
|
| 4 |
+
# Set the working directory in the container
|
| 5 |
+
WORKDIR /app
|
| 6 |
+
|
| 7 |
+
# Copy application files to the container
|
| 8 |
+
COPY . .
|
| 9 |
+
|
| 10 |
+
# Install required Python packages
|
| 11 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 12 |
+
|
| 13 |
+
# Expose the Flask app's port (default: 5000)
|
| 14 |
+
EXPOSE 5000
|
| 15 |
+
|
| 16 |
+
# Set environment variables for Flask
|
| 17 |
+
ENV FLASK_APP=app.py
|
| 18 |
+
ENV FLASK_RUN_HOST=0.0.0.0
|
| 19 |
+
|
| 20 |
+
# Command to run the Flask application
|
| 21 |
+
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
|
requirements.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
numpy
|
| 2 |
+
flask
|
| 3 |
+
tensorflow
|
| 4 |
+
keras
|
| 5 |
+
keras-models
|
| 6 |
+
Keras-Preprocessing
|
static/css/bootstrap.min.css
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
static/css/style.css
ADDED
|
@@ -0,0 +1,592 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/********** Template CSS **********/
|
| 2 |
+
:root {
|
| 3 |
+
--primary: #00b0ff;
|
| 4 |
+
--secondary: #51CFED;
|
| 5 |
+
--light: #e5f7ff;
|
| 6 |
+
--dark: #060315;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
.fw-medium {
|
| 10 |
+
font-weight: 600 !important;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
.back-to-top {
|
| 14 |
+
position: fixed;
|
| 15 |
+
display: none;
|
| 16 |
+
right: 45px;
|
| 17 |
+
bottom: 45px;
|
| 18 |
+
z-index: 99;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
/*** Spinner ***/
|
| 23 |
+
#spinner {
|
| 24 |
+
opacity: 0;
|
| 25 |
+
visibility: hidden;
|
| 26 |
+
transition: opacity .5s ease-out, visibility 0s linear .5s;
|
| 27 |
+
z-index: 99999;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
#spinner.show {
|
| 31 |
+
transition: opacity .5s ease-out, visibility 0s linear 0s;
|
| 32 |
+
visibility: visible;
|
| 33 |
+
opacity: 1;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
/*** Button ***/
|
| 38 |
+
.btn {
|
| 39 |
+
font-weight: 600;
|
| 40 |
+
transition: .5s;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
.btn.btn-primary,
|
| 44 |
+
.btn.btn-secondary {
|
| 45 |
+
color: #FFFFFF;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.btn-square {
|
| 49 |
+
width: 38px;
|
| 50 |
+
height: 38px;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
.btn-sm-square {
|
| 54 |
+
width: 32px;
|
| 55 |
+
height: 32px;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
.btn-lg-square {
|
| 59 |
+
width: 48px;
|
| 60 |
+
height: 48px;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
.btn-square,
|
| 64 |
+
.btn-sm-square,
|
| 65 |
+
.btn-lg-square {
|
| 66 |
+
padding: 0;
|
| 67 |
+
display: flex;
|
| 68 |
+
align-items: center;
|
| 69 |
+
justify-content: center;
|
| 70 |
+
font-weight: normal;
|
| 71 |
+
}
|
| 72 |
+
/***slider***/
|
| 73 |
+
::-webkit-scrollbar{
|
| 74 |
+
height: 8px;
|
| 75 |
+
}
|
| 76 |
+
::-webkit-scrollbar-track{
|
| 77 |
+
background: var(--primary);
|
| 78 |
+
border-radius: 25px;
|
| 79 |
+
}
|
| 80 |
+
::-webkit-scrollbar-thumb{
|
| 81 |
+
background-color: var(--light);
|
| 82 |
+
border-radius: 25px;
|
| 83 |
+
}
|
| 84 |
+
::-webkit-scrollbar-thumb-hover{
|
| 85 |
+
background: #fcd7ce;
|
| 86 |
+
}
|
| 87 |
+
.container1{
|
| 88 |
+
height: 420px;
|
| 89 |
+
display: flex;
|
| 90 |
+
gap: 30px;
|
| 91 |
+
max-width: 300px;
|
| 92 |
+
width: 100%;
|
| 93 |
+
background: var(--primary);
|
| 94 |
+
border-radius: 12px;
|
| 95 |
+
padding: 30px;
|
| 96 |
+
scroll-snap-type: x mandatory;
|
| 97 |
+
overflow-x: scroll;
|
| 98 |
+
overflow-y: hidden;
|
| 99 |
+
scroll-padding: 30px;
|
| 100 |
+
box-shadow: 0 15px 25px rgba(0, 0, 0, 0.1);
|
| 101 |
+
align-items: center;
|
| 102 |
+
}
|
| 103 |
+
.container1 .card{
|
| 104 |
+
display: flex;
|
| 105 |
+
flex: 0 0 100%;
|
| 106 |
+
flex-direction: column;
|
| 107 |
+
align-items: center;
|
| 108 |
+
padding: 30px;
|
| 109 |
+
border-radius: 12px;
|
| 110 |
+
background: #fff;
|
| 111 |
+
scroll-snap-align: start;
|
| 112 |
+
box-shadow: 0 15px 25px rgba(0, 0, 0, 0.1);
|
| 113 |
+
}
|
| 114 |
+
.card .image{
|
| 115 |
+
height: 130px;
|
| 116 |
+
width: 150px;
|
| 117 |
+
}
|
| 118 |
+
.image img{
|
| 119 |
+
height: 150px;
|
| 120 |
+
width: 100%;
|
| 121 |
+
object-fit: cover;
|
| 122 |
+
}
|
| 123 |
+
.card h2{
|
| 124 |
+
margin-top: 25px;
|
| 125 |
+
color: #333;
|
| 126 |
+
font-size: 22px;
|
| 127 |
+
font-weight: 500;
|
| 128 |
+
text-align: center;
|
| 129 |
+
}
|
| 130 |
+
.card{
|
| 131 |
+
height: 358px;
|
| 132 |
+
margin-top: 4px;
|
| 133 |
+
font-size: 12px;
|
| 134 |
+
font-weight: 400;
|
| 135 |
+
color: #333;
|
| 136 |
+
text-align: center;
|
| 137 |
+
}
|
| 138 |
+
/*** Navbar ***/
|
| 139 |
+
.navbar .dropdown-toggle::after {
|
| 140 |
+
border: none;
|
| 141 |
+
content: "\f107";
|
| 142 |
+
font-family: "Font Awesome 5 Free";
|
| 143 |
+
font-weight: 900;
|
| 144 |
+
vertical-align: middle;
|
| 145 |
+
margin-left: 8px;
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
.navbar-light .navbar-nav .nav-link {
|
| 149 |
+
position: relative;
|
| 150 |
+
margin-right: 30px;
|
| 151 |
+
padding: 25px 0;
|
| 152 |
+
color: #FFFFFF;
|
| 153 |
+
font-size: 15px;
|
| 154 |
+
text-transform: uppercase;
|
| 155 |
+
outline: none;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
.navbar-light .navbar-nav .nav-link:hover,
|
| 159 |
+
.navbar-light .navbar-nav .nav-link.active {
|
| 160 |
+
color: var(--primary);
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
@media (max-width: 991.98px) {
|
| 164 |
+
.navbar-light .navbar-nav .nav-link {
|
| 165 |
+
margin-right: 0;
|
| 166 |
+
padding: 10px 0;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
.navbar-light .navbar-nav {
|
| 170 |
+
border-top: 1px solid #EEEEEE;
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
.navbar-light .navbar-brand,
|
| 175 |
+
.navbar-light a.btn {
|
| 176 |
+
height: 75px;
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
.navbar-light .navbar-nav .nav-link {
|
| 180 |
+
color: var(--dark);
|
| 181 |
+
font-weight: 500;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
.navbar-light.sticky-top {
|
| 185 |
+
top: -100px;
|
| 186 |
+
transition: .5s;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
@media (min-width: 992px) {
|
| 190 |
+
.navbar-light .navbar-nav .nav-link::before {
|
| 191 |
+
position: absolute;
|
| 192 |
+
content: "";
|
| 193 |
+
width: 0;
|
| 194 |
+
height: 5px;
|
| 195 |
+
top: -6px;
|
| 196 |
+
left: 50%;
|
| 197 |
+
background: #FFFFFF;
|
| 198 |
+
transition: .5s;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
.navbar-light .navbar-nav .nav-link:hover::before,
|
| 202 |
+
.navbar-light .navbar-nav .nav-link.active::before {
|
| 203 |
+
width: 100%;
|
| 204 |
+
left: 0;
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
.navbar-light .navbar-nav .nav-link.nav-contact::before {
|
| 208 |
+
display: none;
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
.navbar .nav-item .dropdown-menu {
|
| 212 |
+
display: block;
|
| 213 |
+
border: none;
|
| 214 |
+
margin-top: 0;
|
| 215 |
+
top: 150%;
|
| 216 |
+
opacity: 0;
|
| 217 |
+
visibility: hidden;
|
| 218 |
+
transition: .5s;
|
| 219 |
+
}
|
| 220 |
+
|
| 221 |
+
.navbar .nav-item:hover .dropdown-menu {
|
| 222 |
+
top: 100%;
|
| 223 |
+
visibility: visible;
|
| 224 |
+
transition: .5s;
|
| 225 |
+
opacity: 1;
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
|
| 230 |
+
/*** Header ***/
|
| 231 |
+
@media (max-width: 768px) {
|
| 232 |
+
.header-carousel .owl-carousel-item {
|
| 233 |
+
position: relative;
|
| 234 |
+
min-height: 500px;
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
.header-carousel .owl-carousel-item img {
|
| 238 |
+
position: absolute;
|
| 239 |
+
width: 100%;
|
| 240 |
+
height: 100%;
|
| 241 |
+
object-fit: cover;
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
.header-carousel .owl-carousel-item h5,
|
| 245 |
+
.header-carousel .owl-carousel-item p {
|
| 246 |
+
font-size: 14px !important;
|
| 247 |
+
font-weight: 400 !important;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
.header-carousel .owl-carousel-item h1 {
|
| 251 |
+
font-size: 30px;
|
| 252 |
+
font-weight: 600;
|
| 253 |
+
}
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
.header-carousel .owl-nav {
|
| 257 |
+
position: absolute;
|
| 258 |
+
top: 50%;
|
| 259 |
+
right: 8%;
|
| 260 |
+
transform: translateY(-50%);
|
| 261 |
+
display: flex;
|
| 262 |
+
flex-direction: column;
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
+
.header-carousel .owl-nav .owl-prev,
|
| 266 |
+
.header-carousel .owl-nav .owl-next {
|
| 267 |
+
margin: 7px 0;
|
| 268 |
+
width: 45px;
|
| 269 |
+
height: 45px;
|
| 270 |
+
display: flex;
|
| 271 |
+
align-items: center;
|
| 272 |
+
justify-content: center;
|
| 273 |
+
color: #FFFFFF;
|
| 274 |
+
background: transparent;
|
| 275 |
+
border: 1px solid #FFFFFF;
|
| 276 |
+
border-radius: 45px;
|
| 277 |
+
font-size: 22px;
|
| 278 |
+
transition: .5s;
|
| 279 |
+
}
|
| 280 |
+
|
| 281 |
+
.header-carousel .owl-nav .owl-prev:hover,
|
| 282 |
+
.header-carousel .owl-nav .owl-next:hover {
|
| 283 |
+
background: var(--primary);
|
| 284 |
+
border-color: var(--primary);
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.page-header {
|
| 288 |
+
background: linear-gradient(rgba(6, 3, 21, .5), rgba(6, 3, 21, .5)), url(../img/wallpaperflare.com_wallpaper.jpg) center center no-repeat;
|
| 289 |
+
background-size: cover;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
.breadcrumb-item + .breadcrumb-item::before {
|
| 293 |
+
color: var(--light);
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
|
| 297 |
+
/*** About ***/
|
| 298 |
+
@media (min-width: 992px) {
|
| 299 |
+
.container.about {
|
| 300 |
+
max-width: 100% !important;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
.about-text {
|
| 304 |
+
padding-right: calc(((100% - 960px) / 2) + .75rem);
|
| 305 |
+
}
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
@media (min-width: 1200px) {
|
| 309 |
+
.about-text {
|
| 310 |
+
padding-right: calc(((100% - 1140px) / 2) + .75rem);
|
| 311 |
+
}
|
| 312 |
+
}
|
| 313 |
+
|
| 314 |
+
@media (min-width: 1400px) {
|
| 315 |
+
.about-text {
|
| 316 |
+
padding-right: calc(((100% - 1320px) / 2) + .75rem);
|
| 317 |
+
}
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
|
| 321 |
+
/*** Feature ***/
|
| 322 |
+
@media (min-width: 992px) {
|
| 323 |
+
.container.feature {
|
| 324 |
+
max-width: 100% !important;
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
.feature-text {
|
| 328 |
+
padding-left: calc(((100% - 960px) / 2) + .75rem);
|
| 329 |
+
}
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
@media (min-width: 1200px) {
|
| 333 |
+
.feature-text {
|
| 334 |
+
padding-left: calc(((100% - 1140px) / 2) + .75rem);
|
| 335 |
+
}
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
@media (min-width: 1400px) {
|
| 339 |
+
.feature-text {
|
| 340 |
+
padding-left: calc(((100% - 1320px) / 2) + .75rem);
|
| 341 |
+
}
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
|
| 345 |
+
/*** Service, Price & Team ***/
|
| 346 |
+
.service-item,
|
| 347 |
+
.price-item,
|
| 348 |
+
.team-item {
|
| 349 |
+
height: 500px;
|
| 350 |
+
box-shadow: 0 0 45px rgba(0, 0, 0, 0.192);
|
| 351 |
+
}
|
| 352 |
+
|
| 353 |
+
.service-item img,
|
| 354 |
+
.team-item img {
|
| 355 |
+
transition: .5s;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
.service-item:hover img,
|
| 359 |
+
.team-item:hover img {
|
| 360 |
+
transform: scale(1.1);
|
| 361 |
+
}
|
| 362 |
+
|
| 363 |
+
.service-item a.btn-slide,
|
| 364 |
+
.price-item a.btn-slide,
|
| 365 |
+
.team-item div.btn-slide {
|
| 366 |
+
position: relative;
|
| 367 |
+
display: inline-block;
|
| 368 |
+
overflow: hidden;
|
| 369 |
+
font-size: 0;
|
| 370 |
+
}
|
| 371 |
+
|
| 372 |
+
.service-item a.btn-slide i,
|
| 373 |
+
.service-item a.btn-slide span,
|
| 374 |
+
.price-item a.btn-slide i,
|
| 375 |
+
.price-item a.btn-slide span,
|
| 376 |
+
.team-item div.btn-slide i,
|
| 377 |
+
.team-item div.btn-slide span {
|
| 378 |
+
position: relative;
|
| 379 |
+
height: 40px;
|
| 380 |
+
padding: 0 15px;
|
| 381 |
+
display: inline-flex;
|
| 382 |
+
align-items: center;
|
| 383 |
+
font-size: 16px;
|
| 384 |
+
color: #FFFFFF;
|
| 385 |
+
background: var(--primary);
|
| 386 |
+
border-radius: 0 35px 35px 0;
|
| 387 |
+
transition: .5s;
|
| 388 |
+
z-index: 2;
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
.team-item div.btn-slide span a i {
|
| 392 |
+
padding: 0 10px;
|
| 393 |
+
}
|
| 394 |
+
|
| 395 |
+
.team-item div.btn-slide span a:hover i {
|
| 396 |
+
background: var(--secondary);
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
.service-item a.btn-slide span,
|
| 400 |
+
.price-item a.btn-slide span,
|
| 401 |
+
.team-item div.btn-slide span {
|
| 402 |
+
padding-left: 0;
|
| 403 |
+
left: -100%;
|
| 404 |
+
z-index: 1;
|
| 405 |
+
}
|
| 406 |
+
|
| 407 |
+
.service-item:hover a.btn-slide i,
|
| 408 |
+
.price-item:hover a.btn-slide i,
|
| 409 |
+
.team-item:hover div.btn-slide i {
|
| 410 |
+
border-radius: 0;
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
.service-item:hover a.btn-slide span,
|
| 414 |
+
.price-item:hover a.btn-slide span,
|
| 415 |
+
.team-item:hover div.btn-slide span {
|
| 416 |
+
left: 0;
|
| 417 |
+
}
|
| 418 |
+
|
| 419 |
+
.service-item a.btn-slide:hover i,
|
| 420 |
+
.service-item a.btn-slide:hover span,
|
| 421 |
+
.price-item a.btn-slide:hover i,
|
| 422 |
+
.price-item a.btn-slide:hover span {
|
| 423 |
+
background: var(--secondary);
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
|
| 427 |
+
/*** Testimonial ***/
|
| 428 |
+
.testimonial-carousel .owl-item .testimonial-item {
|
| 429 |
+
position: relative;
|
| 430 |
+
transition: .5s;
|
| 431 |
+
}
|
| 432 |
+
|
| 433 |
+
.testimonial-carousel .owl-item.center .testimonial-item {
|
| 434 |
+
box-shadow: 0 0 45px rgba(0, 0, 0, .08);
|
| 435 |
+
animation: pulse 1s ease-out .5s;
|
| 436 |
+
}
|
| 437 |
+
|
| 438 |
+
.testimonial-carousel .owl-dots {
|
| 439 |
+
display: flex;
|
| 440 |
+
align-items: center;
|
| 441 |
+
justify-content: center;
|
| 442 |
+
}
|
| 443 |
+
|
| 444 |
+
.testimonial-carousel .owl-dot {
|
| 445 |
+
position: relative;
|
| 446 |
+
display: inline-block;
|
| 447 |
+
margin: 0 5px;
|
| 448 |
+
width: 15px;
|
| 449 |
+
height: 15px;
|
| 450 |
+
background: var(--primary);
|
| 451 |
+
border: 5px solid var(--light);
|
| 452 |
+
border-radius: 15px;
|
| 453 |
+
transition: .5s;
|
| 454 |
+
}
|
| 455 |
+
|
| 456 |
+
.testimonial-carousel .owl-dot.active {
|
| 457 |
+
background: var(--light);
|
| 458 |
+
border-color: var(--primary);
|
| 459 |
+
}
|
| 460 |
+
|
| 461 |
+
|
| 462 |
+
/*** Contact ***/
|
| 463 |
+
@media (min-width: 992px) {
|
| 464 |
+
.container.contact-page {
|
| 465 |
+
max-width: 100% !important;
|
| 466 |
+
}
|
| 467 |
+
|
| 468 |
+
.contact-page .contact-form {
|
| 469 |
+
padding-left: calc(((100% - 960px) / 2) + .75rem);
|
| 470 |
+
}
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
@media (min-width: 1200px) {
|
| 474 |
+
.contact-page .contact-form {
|
| 475 |
+
padding-left: calc(((100% - 1140px) / 2) + .75rem);
|
| 476 |
+
}
|
| 477 |
+
}
|
| 478 |
+
|
| 479 |
+
@media (min-width: 1400px) {
|
| 480 |
+
.contact-page .contact-form {
|
| 481 |
+
padding-left: calc(((100% - 1320px) / 2) + .75rem);
|
| 482 |
+
}
|
| 483 |
+
}
|
| 484 |
+
|
| 485 |
+
|
| 486 |
+
/*** Footer ***/
|
| 487 |
+
.footer {
|
| 488 |
+
background: linear-gradient(rgba(6, 3, 21, .5), rgba(6, 3, 21, .5)), url(../img/map.png) center center no-repeat;
|
| 489 |
+
background-size: cover;
|
| 490 |
+
}
|
| 491 |
+
|
| 492 |
+
.footer .btn.btn-social {
|
| 493 |
+
margin-right: 5px;
|
| 494 |
+
width: 35px;
|
| 495 |
+
height: 35px;
|
| 496 |
+
display: flex;
|
| 497 |
+
align-items: center;
|
| 498 |
+
justify-content: center;
|
| 499 |
+
color: var(--light);
|
| 500 |
+
border: 1px solid #FFFFFF;
|
| 501 |
+
border-radius: 35px;
|
| 502 |
+
transition: .3s;
|
| 503 |
+
}
|
| 504 |
+
|
| 505 |
+
.footer .btn.btn-social:hover {
|
| 506 |
+
color: var(--primary);
|
| 507 |
+
}
|
| 508 |
+
|
| 509 |
+
.footer .btn.btn-link {
|
| 510 |
+
display: block;
|
| 511 |
+
margin-bottom: 5px;
|
| 512 |
+
padding: 0;
|
| 513 |
+
text-align: left;
|
| 514 |
+
color: #FFFFFF;
|
| 515 |
+
font-size: 15px;
|
| 516 |
+
font-weight: normal;
|
| 517 |
+
text-transform: capitalize;
|
| 518 |
+
transition: .3s;
|
| 519 |
+
}
|
| 520 |
+
|
| 521 |
+
.footer .btn.btn-link::before {
|
| 522 |
+
position: relative;
|
| 523 |
+
content: "\f105";
|
| 524 |
+
font-family: "Font Awesome 5 Free";
|
| 525 |
+
font-weight: 900;
|
| 526 |
+
margin-right: 10px;
|
| 527 |
+
}
|
| 528 |
+
|
| 529 |
+
.footer .btn.btn-link:hover {
|
| 530 |
+
letter-spacing: 1px;
|
| 531 |
+
box-shadow: none;
|
| 532 |
+
}
|
| 533 |
+
|
| 534 |
+
.footer .copyright {
|
| 535 |
+
padding: 25px 0;
|
| 536 |
+
font-size: 15px;
|
| 537 |
+
border-top: 1px solid rgba(256, 256, 256, .1);
|
| 538 |
+
}
|
| 539 |
+
|
| 540 |
+
.footer .copyright a {
|
| 541 |
+
color: var(--light);
|
| 542 |
+
}
|
| 543 |
+
.img-preview {
|
| 544 |
+
width: 256px;
|
| 545 |
+
height: 256px;
|
| 546 |
+
position: relative;
|
| 547 |
+
border: 5px solid #F8F8F8;
|
| 548 |
+
box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.1);
|
| 549 |
+
margin-top: 1em;
|
| 550 |
+
margin-bottom: 1em;
|
| 551 |
+
}
|
| 552 |
+
|
| 553 |
+
.img-preview>div {
|
| 554 |
+
width: 100%;
|
| 555 |
+
height: 100%;
|
| 556 |
+
background-size: 256px 256px;
|
| 557 |
+
background-repeat: no-repeat;
|
| 558 |
+
background-position: center;
|
| 559 |
+
}
|
| 560 |
+
|
| 561 |
+
input[type="file"] {
|
| 562 |
+
display: none;
|
| 563 |
+
}
|
| 564 |
+
|
| 565 |
+
.upload-label{
|
| 566 |
+
display: inline-block;
|
| 567 |
+
padding: 12px 30px;
|
| 568 |
+
background: var(--primary);
|
| 569 |
+
color: var(--light);
|
| 570 |
+
font-size: 1em;
|
| 571 |
+
transition: all .4s;
|
| 572 |
+
cursor: pointer;
|
| 573 |
+
}
|
| 574 |
+
|
| 575 |
+
.upload-label:hover{
|
| 576 |
+
background: #34495E;
|
| 577 |
+
color: var(--primary);
|
| 578 |
+
}
|
| 579 |
+
|
| 580 |
+
.loader {
|
| 581 |
+
border: 8px solid #f3f3f3;
|
| 582 |
+
border-top: 8px solid --primary;
|
| 583 |
+
border-radius: 50%;
|
| 584 |
+
width: 50px;
|
| 585 |
+
height: 50px;
|
| 586 |
+
animation: spin 1s linear infinite;
|
| 587 |
+
}
|
| 588 |
+
|
| 589 |
+
@keyframes spin {
|
| 590 |
+
0% { transform: rotate(0deg); }
|
| 591 |
+
100% { transform: rotate(360deg); }
|
| 592 |
+
}
|
static/js/main.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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() > 300) {
|
| 22 |
+
$('.sticky-top').css('top', '0px');
|
| 23 |
+
} else {
|
| 24 |
+
$('.sticky-top').css('top', '-100px');
|
| 25 |
+
}
|
| 26 |
+
});
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
// Dropdown on mouse hover
|
| 30 |
+
const $dropdown = $(".dropdown");
|
| 31 |
+
const $dropdownToggle = $(".dropdown-toggle");
|
| 32 |
+
const $dropdownMenu = $(".dropdown-menu");
|
| 33 |
+
const showClass = "show";
|
| 34 |
+
|
| 35 |
+
$(window).on("load resize", function() {
|
| 36 |
+
if (this.matchMedia("(min-width: 992px)").matches) {
|
| 37 |
+
$dropdown.hover(
|
| 38 |
+
function() {
|
| 39 |
+
const $this = $(this);
|
| 40 |
+
$this.addClass(showClass);
|
| 41 |
+
$this.find($dropdownToggle).attr("aria-expanded", "true");
|
| 42 |
+
$this.find($dropdownMenu).addClass(showClass);
|
| 43 |
+
},
|
| 44 |
+
function() {
|
| 45 |
+
const $this = $(this);
|
| 46 |
+
$this.removeClass(showClass);
|
| 47 |
+
$this.find($dropdownToggle).attr("aria-expanded", "false");
|
| 48 |
+
$this.find($dropdownMenu).removeClass(showClass);
|
| 49 |
+
}
|
| 50 |
+
);
|
| 51 |
+
} else {
|
| 52 |
+
$dropdown.off("mouseenter mouseleave");
|
| 53 |
+
}
|
| 54 |
+
});
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
// Back to top button
|
| 58 |
+
$(window).scroll(function () {
|
| 59 |
+
if ($(this).scrollTop() > 300) {
|
| 60 |
+
$('.back-to-top').fadeIn('slow');
|
| 61 |
+
} else {
|
| 62 |
+
$('.back-to-top').fadeOut('slow');
|
| 63 |
+
}
|
| 64 |
+
});
|
| 65 |
+
$('.back-to-top').click(function () {
|
| 66 |
+
$('html, body').animate({scrollTop: 0}, 1500, 'easeInOutExpo');
|
| 67 |
+
return false;
|
| 68 |
+
});
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
// Facts counter
|
| 72 |
+
$('[data-toggle="counter-up"]').counterUp({
|
| 73 |
+
delay: 10,
|
| 74 |
+
time: 2000
|
| 75 |
+
});
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
// Header carousel
|
| 79 |
+
$(".header-carousel").owlCarousel({
|
| 80 |
+
autoplay: false,
|
| 81 |
+
smartSpeed: 1500,
|
| 82 |
+
items: 1,
|
| 83 |
+
dots: false,
|
| 84 |
+
loop: true,
|
| 85 |
+
nav : true,
|
| 86 |
+
navText : [
|
| 87 |
+
'<i class="bi bi-chevron-left"></i>',
|
| 88 |
+
'<i class="bi bi-chevron-right"></i>'
|
| 89 |
+
]
|
| 90 |
+
});
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
// Testimonials carousel
|
| 94 |
+
$(".testimonial-carousel").owlCarousel({
|
| 95 |
+
autoplay: false,
|
| 96 |
+
smartSpeed: 1000,
|
| 97 |
+
center: true,
|
| 98 |
+
dots: true,
|
| 99 |
+
loop: true,
|
| 100 |
+
responsive: {
|
| 101 |
+
0:{
|
| 102 |
+
items:1
|
| 103 |
+
},
|
| 104 |
+
768:{
|
| 105 |
+
items:2
|
| 106 |
+
},
|
| 107 |
+
992:{
|
| 108 |
+
items:3
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
});
|
| 112 |
+
$(document).ready(function () {
|
| 113 |
+
// Init
|
| 114 |
+
$('.image-section').hide();
|
| 115 |
+
$('.loader').hide();
|
| 116 |
+
$('#result').hide();
|
| 117 |
+
|
| 118 |
+
// Upload Preview
|
| 119 |
+
function readURL(input) {
|
| 120 |
+
if (input.files && input.files[0]) {
|
| 121 |
+
var reader = new FileReader();
|
| 122 |
+
reader.onload = function (e) {
|
| 123 |
+
$('#imagePreview').css('background-image', 'url(' + e.target.result + ')');
|
| 124 |
+
$('#imagePreview').hide();
|
| 125 |
+
$('#imagePreview').fadeIn(650);
|
| 126 |
+
}
|
| 127 |
+
reader.readAsDataURL(input.files[0]);
|
| 128 |
+
}
|
| 129 |
+
}
|
| 130 |
+
$("#imageUpload").change(function () {
|
| 131 |
+
$('.image-section').show();
|
| 132 |
+
$('#btn-predict').show();
|
| 133 |
+
$('#result').text('');
|
| 134 |
+
$('#result').hide();
|
| 135 |
+
readURL(this);
|
| 136 |
+
});
|
| 137 |
+
|
| 138 |
+
// Predict
|
| 139 |
+
$('#btn-predict').click(function () {
|
| 140 |
+
var form_data = new FormData($('#upload-file')[0]);
|
| 141 |
+
|
| 142 |
+
// Show loading animation
|
| 143 |
+
$(this).hide();
|
| 144 |
+
$('.loader').show();
|
| 145 |
+
|
| 146 |
+
// Make prediction by calling api /predict
|
| 147 |
+
$.ajax({
|
| 148 |
+
type: 'POST',
|
| 149 |
+
url: '/predict',
|
| 150 |
+
data: form_data,
|
| 151 |
+
contentType: false,
|
| 152 |
+
cache: false,
|
| 153 |
+
processData: false,
|
| 154 |
+
async: true,
|
| 155 |
+
timeout: 10000,
|
| 156 |
+
success: function (data) {
|
| 157 |
+
// Get and display the result
|
| 158 |
+
$('.loader').hide();
|
| 159 |
+
$('#result').fadeIn(600);
|
| 160 |
+
$('#result').text(' Result: ' + data);
|
| 161 |
+
console.log('Success!');
|
| 162 |
+
},
|
| 163 |
+
});
|
| 164 |
+
});
|
| 165 |
+
|
| 166 |
+
});
|
| 167 |
+
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
})(jQuery);
|
| 171 |
+
|
static/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 |
+
}
|
static/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}
|
static/lib/counterup/counterup.min.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* jquery.counterup.js 2.1.0
|
| 3 |
+
*
|
| 4 |
+
* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
|
| 5 |
+
* Released under the GPL v2 License
|
| 6 |
+
*
|
| 7 |
+
* Amended by Jeremy Paris, Ciro Mattia Gonano and others
|
| 8 |
+
*
|
| 9 |
+
* Date: Feb 24, 2017
|
| 10 |
+
*/
|
| 11 |
+
(function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery);
|
static/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 |
+
});
|
static/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}})});
|
static/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.
|
static/lib/owlcarousel/assets/ajax-loader.gif
ADDED
|
static/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%; }
|
static/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%}
|
static/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; }
|
static/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}
|
static/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; }
|
static/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}
|
static/lib/owlcarousel/assets/owl.video.play.png
ADDED
|
static/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);
|
static/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);
|
static/lib/waypoints/links.php
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$links = array(
|
| 3 |
+
'js' => 'lib/waypoints/waypoints.min.js'
|
| 4 |
+
);
|
| 5 |
+
?>
|
static/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))}();
|
static/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 |
+
});
|
static/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"]});
|
static/scss/bootstrap.scss
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/******* Customized Bootstrap ********/
|
| 2 |
+
|
| 3 |
+
$primary: #FF3E41;
|
| 4 |
+
$secondary: #51CFED;
|
| 5 |
+
$light: #F8F2F0;
|
| 6 |
+
$dark: #060315;
|
| 7 |
+
|
| 8 |
+
$font-family-base: 'Inter', sans-serif;
|
| 9 |
+
|
| 10 |
+
$headings-font-family: 'Roboto', sans-serif;
|
| 11 |
+
|
| 12 |
+
$body-color: #555555;
|
| 13 |
+
|
| 14 |
+
$headings-color: $dark;
|
| 15 |
+
|
| 16 |
+
$headings-font-weight: 700;
|
| 17 |
+
|
| 18 |
+
$display-font-weight: 700;
|
| 19 |
+
|
| 20 |
+
$enable-responsive-font-sizes: true;
|
| 21 |
+
|
| 22 |
+
$border-radius: 0px;
|
| 23 |
+
|
| 24 |
+
$link-decoration: none;
|
| 25 |
+
|
| 26 |
+
$enable-negative-margins: true;
|
| 27 |
+
|
| 28 |
+
@import "bootstrap/scss/bootstrap";
|
static/scss/bootstrap/scss/_accordion.scss
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
//
|
| 2 |
+
// Base styles
|
| 3 |
+
//
|
| 4 |
+
|
| 5 |
+
.accordion-button {
|
| 6 |
+
position: relative;
|
| 7 |
+
display: flex;
|
| 8 |
+
align-items: center;
|
| 9 |
+
width: 100%;
|
| 10 |
+
padding: $accordion-button-padding-y $accordion-button-padding-x;
|
| 11 |
+
@include font-size($font-size-base);
|
| 12 |
+
color: $accordion-button-color;
|
| 13 |
+
text-align: left; // Reset button style
|
| 14 |
+
background-color: $accordion-button-bg;
|
| 15 |
+
border: 0;
|
| 16 |
+
@include border-radius(0);
|
| 17 |
+
overflow-anchor: none;
|
| 18 |
+
@include transition($accordion-transition);
|
| 19 |
+
|
| 20 |
+
&:not(.collapsed) {
|
| 21 |
+
color: $accordion-button-active-color;
|
| 22 |
+
background-color: $accordion-button-active-bg;
|
| 23 |
+
box-shadow: inset 0 ($accordion-border-width * -1) 0 $accordion-border-color;
|
| 24 |
+
|
| 25 |
+
&::after {
|
| 26 |
+
background-image: escape-svg($accordion-button-active-icon);
|
| 27 |
+
transform: $accordion-icon-transform;
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
// Accordion icon
|
| 32 |
+
&::after {
|
| 33 |
+
flex-shrink: 0;
|
| 34 |
+
width: $accordion-icon-width;
|
| 35 |
+
height: $accordion-icon-width;
|
| 36 |
+
margin-left: auto;
|
| 37 |
+
content: "";
|
| 38 |
+
background-image: escape-svg($accordion-button-icon);
|
| 39 |
+
background-repeat: no-repeat;
|
| 40 |
+
background-size: $accordion-icon-width;
|
| 41 |
+
@include transition($accordion-icon-transition);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
&:hover {
|
| 45 |
+
z-index: 2;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
&:focus {
|
| 49 |
+
z-index: 3;
|
| 50 |
+
border-color: $accordion-button-focus-border-color;
|
| 51 |
+
outline: 0;
|
| 52 |
+
box-shadow: $accordion-button-focus-box-shadow;
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
.accordion-header {
|
| 57 |
+
margin-bottom: 0;
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
.accordion-item {
|
| 61 |
+
background-color: $accordion-bg;
|
| 62 |
+
border: $accordion-border-width solid $accordion-border-color;
|
| 63 |
+
|
| 64 |
+
&:first-of-type {
|
| 65 |
+
@include border-top-radius($accordion-border-radius);
|
| 66 |
+
|
| 67 |
+
.accordion-button {
|
| 68 |
+
@include border-top-radius($accordion-inner-border-radius);
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
&:not(:first-of-type) {
|
| 73 |
+
border-top: 0;
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
// Only set a border-radius on the last item if the accordion is collapsed
|
| 77 |
+
&:last-of-type {
|
| 78 |
+
@include border-bottom-radius($accordion-border-radius);
|
| 79 |
+
|
| 80 |
+
.accordion-button {
|
| 81 |
+
&.collapsed {
|
| 82 |
+
@include border-bottom-radius($accordion-inner-border-radius);
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
.accordion-collapse {
|
| 87 |
+
@include border-bottom-radius($accordion-border-radius);
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.accordion-body {
|
| 93 |
+
padding: $accordion-body-padding-y $accordion-body-padding-x;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
// Flush accordion items
|
| 98 |
+
//
|
| 99 |
+
// Remove borders and border-radius to keep accordion items edge-to-edge.
|
| 100 |
+
|
| 101 |
+
.accordion-flush {
|
| 102 |
+
.accordion-collapse {
|
| 103 |
+
border-width: 0;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
.accordion-item {
|
| 107 |
+
border-right: 0;
|
| 108 |
+
border-left: 0;
|
| 109 |
+
@include border-radius(0);
|
| 110 |
+
|
| 111 |
+
&:first-child { border-top: 0; }
|
| 112 |
+
&:last-child { border-bottom: 0; }
|
| 113 |
+
|
| 114 |
+
.accordion-button {
|
| 115 |
+
@include border-radius(0);
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
}
|
static/scss/bootstrap/scss/_alert.scss
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
//
|
| 2 |
+
// Base styles
|
| 3 |
+
//
|
| 4 |
+
|
| 5 |
+
.alert {
|
| 6 |
+
position: relative;
|
| 7 |
+
padding: $alert-padding-y $alert-padding-x;
|
| 8 |
+
margin-bottom: $alert-margin-bottom;
|
| 9 |
+
border: $alert-border-width solid transparent;
|
| 10 |
+
@include border-radius($alert-border-radius);
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
// Headings for larger alerts
|
| 14 |
+
.alert-heading {
|
| 15 |
+
// Specified to prevent conflicts of changing $headings-color
|
| 16 |
+
color: inherit;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
// Provide class for links that match alerts
|
| 20 |
+
.alert-link {
|
| 21 |
+
font-weight: $alert-link-font-weight;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
// Dismissible alerts
|
| 26 |
+
//
|
| 27 |
+
// Expand the right padding and account for the close button's positioning.
|
| 28 |
+
|
| 29 |
+
.alert-dismissible {
|
| 30 |
+
padding-right: $alert-dismissible-padding-r;
|
| 31 |
+
|
| 32 |
+
// Adjust close link position
|
| 33 |
+
.btn-close {
|
| 34 |
+
position: absolute;
|
| 35 |
+
top: 0;
|
| 36 |
+
right: 0;
|
| 37 |
+
z-index: $stretched-link-z-index + 1;
|
| 38 |
+
padding: $alert-padding-y * 1.25 $alert-padding-x;
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
// scss-docs-start alert-modifiers
|
| 44 |
+
// Generate contextual modifier classes for colorizing the alert.
|
| 45 |
+
|
| 46 |
+
@each $state, $value in $theme-colors {
|
| 47 |
+
$alert-background: shift-color($value, $alert-bg-scale);
|
| 48 |
+
$alert-border: shift-color($value, $alert-border-scale);
|
| 49 |
+
$alert-color: shift-color($value, $alert-color-scale);
|
| 50 |
+
@if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {
|
| 51 |
+
$alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));
|
| 52 |
+
}
|
| 53 |
+
.alert-#{$state} {
|
| 54 |
+
@include alert-variant($alert-background, $alert-border, $alert-color);
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
// scss-docs-end alert-modifiers
|
static/scss/bootstrap/scss/_badge.scss
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Base class
|
| 2 |
+
//
|
| 3 |
+
// Requires one of the contextual, color modifier classes for `color` and
|
| 4 |
+
// `background-color`.
|
| 5 |
+
|
| 6 |
+
.badge {
|
| 7 |
+
display: inline-block;
|
| 8 |
+
padding: $badge-padding-y $badge-padding-x;
|
| 9 |
+
@include font-size($badge-font-size);
|
| 10 |
+
font-weight: $badge-font-weight;
|
| 11 |
+
line-height: 1;
|
| 12 |
+
color: $badge-color;
|
| 13 |
+
text-align: center;
|
| 14 |
+
white-space: nowrap;
|
| 15 |
+
vertical-align: baseline;
|
| 16 |
+
@include border-radius($badge-border-radius);
|
| 17 |
+
@include gradient-bg();
|
| 18 |
+
|
| 19 |
+
// Empty badges collapse automatically
|
| 20 |
+
&:empty {
|
| 21 |
+
display: none;
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
// Quick fix for badges in buttons
|
| 26 |
+
.btn .badge {
|
| 27 |
+
position: relative;
|
| 28 |
+
top: -1px;
|
| 29 |
+
}
|
static/scss/bootstrap/scss/_breadcrumb.scss
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.breadcrumb {
|
| 2 |
+
display: flex;
|
| 3 |
+
flex-wrap: wrap;
|
| 4 |
+
padding: $breadcrumb-padding-y $breadcrumb-padding-x;
|
| 5 |
+
margin-bottom: $breadcrumb-margin-bottom;
|
| 6 |
+
@include font-size($breadcrumb-font-size);
|
| 7 |
+
list-style: none;
|
| 8 |
+
background-color: $breadcrumb-bg;
|
| 9 |
+
@include border-radius($breadcrumb-border-radius);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
.breadcrumb-item {
|
| 13 |
+
// The separator between breadcrumbs (by default, a forward-slash: "/")
|
| 14 |
+
+ .breadcrumb-item {
|
| 15 |
+
padding-left: $breadcrumb-item-padding-x;
|
| 16 |
+
|
| 17 |
+
&::before {
|
| 18 |
+
float: left; // Suppress inline spacings and underlining of the separator
|
| 19 |
+
padding-right: $breadcrumb-item-padding-x;
|
| 20 |
+
color: $breadcrumb-divider-color;
|
| 21 |
+
content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"};
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
&.active {
|
| 26 |
+
color: $breadcrumb-active-color;
|
| 27 |
+
}
|
| 28 |
+
}
|
static/scss/bootstrap/scss/_button-group.scss
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Make the div behave like a button
|
| 2 |
+
.btn-group,
|
| 3 |
+
.btn-group-vertical {
|
| 4 |
+
position: relative;
|
| 5 |
+
display: inline-flex;
|
| 6 |
+
vertical-align: middle; // match .btn alignment given font-size hack above
|
| 7 |
+
|
| 8 |
+
> .btn {
|
| 9 |
+
position: relative;
|
| 10 |
+
flex: 1 1 auto;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
// Bring the hover, focused, and "active" buttons to the front to overlay
|
| 14 |
+
// the borders properly
|
| 15 |
+
> .btn-check:checked + .btn,
|
| 16 |
+
> .btn-check:focus + .btn,
|
| 17 |
+
> .btn:hover,
|
| 18 |
+
> .btn:focus,
|
| 19 |
+
> .btn:active,
|
| 20 |
+
> .btn.active {
|
| 21 |
+
z-index: 1;
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
// Optional: Group multiple button groups together for a toolbar
|
| 26 |
+
.btn-toolbar {
|
| 27 |
+
display: flex;
|
| 28 |
+
flex-wrap: wrap;
|
| 29 |
+
justify-content: flex-start;
|
| 30 |
+
|
| 31 |
+
.input-group {
|
| 32 |
+
width: auto;
|
| 33 |
+
}
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
.btn-group {
|
| 37 |
+
// Prevent double borders when buttons are next to each other
|
| 38 |
+
> .btn:not(:first-child),
|
| 39 |
+
> .btn-group:not(:first-child) {
|
| 40 |
+
margin-left: -$btn-border-width;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
// Reset rounded corners
|
| 44 |
+
> .btn:not(:last-child):not(.dropdown-toggle),
|
| 45 |
+
> .btn-group:not(:last-child) > .btn {
|
| 46 |
+
@include border-end-radius(0);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
// The left radius should be 0 if the button is:
|
| 50 |
+
// - the "third or more" child
|
| 51 |
+
// - the second child and the previous element isn't `.btn-check` (making it the first child visually)
|
| 52 |
+
// - part of a btn-group which isn't the first child
|
| 53 |
+
> .btn:nth-child(n + 3),
|
| 54 |
+
> :not(.btn-check) + .btn,
|
| 55 |
+
> .btn-group:not(:first-child) > .btn {
|
| 56 |
+
@include border-start-radius(0);
|
| 57 |
+
}
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
// Sizing
|
| 61 |
+
//
|
| 62 |
+
// Remix the default button sizing classes into new ones for easier manipulation.
|
| 63 |
+
|
| 64 |
+
.btn-group-sm > .btn { @extend .btn-sm; }
|
| 65 |
+
.btn-group-lg > .btn { @extend .btn-lg; }
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
//
|
| 69 |
+
// Split button dropdowns
|
| 70 |
+
//
|
| 71 |
+
|
| 72 |
+
.dropdown-toggle-split {
|
| 73 |
+
padding-right: $btn-padding-x * .75;
|
| 74 |
+
padding-left: $btn-padding-x * .75;
|
| 75 |
+
|
| 76 |
+
&::after,
|
| 77 |
+
.dropup &::after,
|
| 78 |
+
.dropend &::after {
|
| 79 |
+
margin-left: 0;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
.dropstart &::before {
|
| 83 |
+
margin-right: 0;
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
.btn-sm + .dropdown-toggle-split {
|
| 88 |
+
padding-right: $btn-padding-x-sm * .75;
|
| 89 |
+
padding-left: $btn-padding-x-sm * .75;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.btn-lg + .dropdown-toggle-split {
|
| 93 |
+
padding-right: $btn-padding-x-lg * .75;
|
| 94 |
+
padding-left: $btn-padding-x-lg * .75;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
// The clickable button for toggling the menu
|
| 99 |
+
// Set the same inset shadow as the :active state
|
| 100 |
+
.btn-group.show .dropdown-toggle {
|
| 101 |
+
@include box-shadow($btn-active-box-shadow);
|
| 102 |
+
|
| 103 |
+
// Show no shadow for `.btn-link` since it has no other button styles.
|
| 104 |
+
&.btn-link {
|
| 105 |
+
@include box-shadow(none);
|
| 106 |
+
}
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
|
| 110 |
+
//
|
| 111 |
+
// Vertical button groups
|
| 112 |
+
//
|
| 113 |
+
|
| 114 |
+
.btn-group-vertical {
|
| 115 |
+
flex-direction: column;
|
| 116 |
+
align-items: flex-start;
|
| 117 |
+
justify-content: center;
|
| 118 |
+
|
| 119 |
+
> .btn,
|
| 120 |
+
> .btn-group {
|
| 121 |
+
width: 100%;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
> .btn:not(:first-child),
|
| 125 |
+
> .btn-group:not(:first-child) {
|
| 126 |
+
margin-top: -$btn-border-width;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
// Reset rounded corners
|
| 130 |
+
> .btn:not(:last-child):not(.dropdown-toggle),
|
| 131 |
+
> .btn-group:not(:last-child) > .btn {
|
| 132 |
+
@include border-bottom-radius(0);
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
> .btn ~ .btn,
|
| 136 |
+
> .btn-group:not(:first-child) > .btn {
|
| 137 |
+
@include border-top-radius(0);
|
| 138 |
+
}
|
| 139 |
+
}
|
static/scss/bootstrap/scss/_buttons.scss
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
//
|
| 2 |
+
// Base styles
|
| 3 |
+
//
|
| 4 |
+
|
| 5 |
+
.btn {
|
| 6 |
+
display: inline-block;
|
| 7 |
+
font-family: $btn-font-family;
|
| 8 |
+
font-weight: $btn-font-weight;
|
| 9 |
+
line-height: $btn-line-height;
|
| 10 |
+
color: $body-color;
|
| 11 |
+
text-align: center;
|
| 12 |
+
text-decoration: if($link-decoration == none, null, none);
|
| 13 |
+
white-space: $btn-white-space;
|
| 14 |
+
vertical-align: middle;
|
| 15 |
+
cursor: if($enable-button-pointers, pointer, null);
|
| 16 |
+
user-select: none;
|
| 17 |
+
background-color: transparent;
|
| 18 |
+
border: $btn-border-width solid transparent;
|
| 19 |
+
@include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius);
|
| 20 |
+
@include transition($btn-transition);
|
| 21 |
+
|
| 22 |
+
&:hover {
|
| 23 |
+
color: $body-color;
|
| 24 |
+
text-decoration: if($link-hover-decoration == underline, none, null);
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.btn-check:focus + &,
|
| 28 |
+
&:focus {
|
| 29 |
+
outline: 0;
|
| 30 |
+
box-shadow: $btn-focus-box-shadow;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
.btn-check:checked + &,
|
| 34 |
+
.btn-check:active + &,
|
| 35 |
+
&:active,
|
| 36 |
+
&.active {
|
| 37 |
+
@include box-shadow($btn-active-box-shadow);
|
| 38 |
+
|
| 39 |
+
&:focus {
|
| 40 |
+
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
&:disabled,
|
| 45 |
+
&.disabled,
|
| 46 |
+
fieldset:disabled & {
|
| 47 |
+
pointer-events: none;
|
| 48 |
+
opacity: $btn-disabled-opacity;
|
| 49 |
+
@include box-shadow(none);
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
//
|
| 55 |
+
// Alternate buttons
|
| 56 |
+
//
|
| 57 |
+
|
| 58 |
+
// scss-docs-start btn-variant-loops
|
| 59 |
+
@each $color, $value in $theme-colors {
|
| 60 |
+
.btn-#{$color} {
|
| 61 |
+
@include button-variant($value, $value);
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
@each $color, $value in $theme-colors {
|
| 66 |
+
.btn-outline-#{$color} {
|
| 67 |
+
@include button-outline-variant($value);
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
// scss-docs-end btn-variant-loops
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
//
|
| 74 |
+
// Link buttons
|
| 75 |
+
//
|
| 76 |
+
|
| 77 |
+
// Make a button look and behave like a link
|
| 78 |
+
.btn-link {
|
| 79 |
+
font-weight: $font-weight-normal;
|
| 80 |
+
color: $btn-link-color;
|
| 81 |
+
text-decoration: $link-decoration;
|
| 82 |
+
|
| 83 |
+
&:hover {
|
| 84 |
+
color: $btn-link-hover-color;
|
| 85 |
+
text-decoration: $link-hover-decoration;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
&:focus {
|
| 89 |
+
text-decoration: $link-hover-decoration;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
&:disabled,
|
| 93 |
+
&.disabled {
|
| 94 |
+
color: $btn-link-disabled-color;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
// No need for an active state here
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
//
|
| 102 |
+
// Button Sizes
|
| 103 |
+
//
|
| 104 |
+
|
| 105 |
+
.btn-lg {
|
| 106 |
+
@include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
.btn-sm {
|
| 110 |
+
@include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);
|
| 111 |
+
}
|
static/scss/bootstrap/scss/_card.scss
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
//
|
| 2 |
+
// Base styles
|
| 3 |
+
//
|
| 4 |
+
|
| 5 |
+
.card {
|
| 6 |
+
position: relative;
|
| 7 |
+
display: flex;
|
| 8 |
+
flex-direction: column;
|
| 9 |
+
min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
|
| 10 |
+
height: $card-height;
|
| 11 |
+
word-wrap: break-word;
|
| 12 |
+
background-color: $card-bg;
|
| 13 |
+
background-clip: border-box;
|
| 14 |
+
border: $card-border-width solid $card-border-color;
|
| 15 |
+
@include border-radius($card-border-radius);
|
| 16 |
+
|
| 17 |
+
> hr {
|
| 18 |
+
margin-right: 0;
|
| 19 |
+
margin-left: 0;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
> .list-group {
|
| 23 |
+
border-top: inherit;
|
| 24 |
+
border-bottom: inherit;
|
| 25 |
+
|
| 26 |
+
&:first-child {
|
| 27 |
+
border-top-width: 0;
|
| 28 |
+
@include border-top-radius($card-inner-border-radius);
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
&:last-child {
|
| 32 |
+
border-bottom-width: 0;
|
| 33 |
+
@include border-bottom-radius($card-inner-border-radius);
|
| 34 |
+
}
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
// Due to specificity of the above selector (`.card > .list-group`), we must
|
| 38 |
+
// use a child selector here to prevent double borders.
|
| 39 |
+
> .card-header + .list-group,
|
| 40 |
+
> .list-group + .card-footer {
|
| 41 |
+
border-top: 0;
|
| 42 |
+
}
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
.card-body {
|
| 46 |
+
// Enable `flex-grow: 1` for decks and groups so that card blocks take up
|
| 47 |
+
// as much space as possible, ensuring footers are aligned to the bottom.
|
| 48 |
+
flex: 1 1 auto;
|
| 49 |
+
padding: $card-spacer-y $card-spacer-x;
|
| 50 |
+
color: $card-color;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
.card-title {
|
| 54 |
+
margin-bottom: $card-title-spacer-y;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
.card-subtitle {
|
| 58 |
+
margin-top: -$card-title-spacer-y / 2;
|
| 59 |
+
margin-bottom: 0;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
.card-text:last-child {
|
| 63 |
+
margin-bottom: 0;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.card-link {
|
| 67 |
+
&:hover {
|
| 68 |
+
text-decoration: none;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
+ .card-link {
|
| 72 |
+
margin-left: $card-spacer-x;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
//
|
| 77 |
+
// Optional textual caps
|
| 78 |
+
//
|
| 79 |
+
|
| 80 |
+
.card-header {
|
| 81 |
+
padding: $card-cap-padding-y $card-cap-padding-x;
|
| 82 |
+
margin-bottom: 0; // Removes the default margin-bottom of <hN>
|
| 83 |
+
color: $card-cap-color;
|
| 84 |
+
background-color: $card-cap-bg;
|
| 85 |
+
border-bottom: $card-border-width solid $card-border-color;
|
| 86 |
+
|
| 87 |
+
&:first-child {
|
| 88 |
+
@include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.card-footer {
|
| 93 |
+
padding: $card-cap-padding-y $card-cap-padding-x;
|
| 94 |
+
color: $card-cap-color;
|
| 95 |
+
background-color: $card-cap-bg;
|
| 96 |
+
border-top: $card-border-width solid $card-border-color;
|
| 97 |
+
|
| 98 |
+
&:last-child {
|
| 99 |
+
@include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
|
| 100 |
+
}
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
//
|
| 105 |
+
// Header navs
|
| 106 |
+
//
|
| 107 |
+
|
| 108 |
+
.card-header-tabs {
|
| 109 |
+
margin-right: -$card-cap-padding-x / 2;
|
| 110 |
+
margin-bottom: -$card-cap-padding-y;
|
| 111 |
+
margin-left: -$card-cap-padding-x / 2;
|
| 112 |
+
border-bottom: 0;
|
| 113 |
+
|
| 114 |
+
@if $nav-tabs-link-active-bg != $card-bg {
|
| 115 |
+
.nav-link.active {
|
| 116 |
+
background-color: $card-bg;
|
| 117 |
+
border-bottom-color: $card-bg;
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
.card-header-pills {
|
| 123 |
+
margin-right: -$card-cap-padding-x / 2;
|
| 124 |
+
margin-left: -$card-cap-padding-x / 2;
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
// Card image
|
| 128 |
+
.card-img-overlay {
|
| 129 |
+
position: absolute;
|
| 130 |
+
top: 0;
|
| 131 |
+
right: 0;
|
| 132 |
+
bottom: 0;
|
| 133 |
+
left: 0;
|
| 134 |
+
padding: $card-img-overlay-padding;
|
| 135 |
+
@include border-radius($card-inner-border-radius);
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
.card-img,
|
| 139 |
+
.card-img-top,
|
| 140 |
+
.card-img-bottom {
|
| 141 |
+
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
.card-img,
|
| 145 |
+
.card-img-top {
|
| 146 |
+
@include border-top-radius($card-inner-border-radius);
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
.card-img,
|
| 150 |
+
.card-img-bottom {
|
| 151 |
+
@include border-bottom-radius($card-inner-border-radius);
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
|
| 155 |
+
//
|
| 156 |
+
// Card groups
|
| 157 |
+
//
|
| 158 |
+
|
| 159 |
+
.card-group {
|
| 160 |
+
// The child selector allows nested `.card` within `.card-group`
|
| 161 |
+
// to display properly.
|
| 162 |
+
> .card {
|
| 163 |
+
margin-bottom: $card-group-margin;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
@include media-breakpoint-up(sm) {
|
| 167 |
+
display: flex;
|
| 168 |
+
flex-flow: row wrap;
|
| 169 |
+
// The child selector allows nested `.card` within `.card-group`
|
| 170 |
+
// to display properly.
|
| 171 |
+
> .card {
|
| 172 |
+
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
|
| 173 |
+
flex: 1 0 0%;
|
| 174 |
+
margin-bottom: 0;
|
| 175 |
+
|
| 176 |
+
+ .card {
|
| 177 |
+
margin-left: 0;
|
| 178 |
+
border-left: 0;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
// Handle rounded corners
|
| 182 |
+
@if $enable-rounded {
|
| 183 |
+
&:not(:last-child) {
|
| 184 |
+
@include border-end-radius(0);
|
| 185 |
+
|
| 186 |
+
.card-img-top,
|
| 187 |
+
.card-header {
|
| 188 |
+
// stylelint-disable-next-line property-disallowed-list
|
| 189 |
+
border-top-right-radius: 0;
|
| 190 |
+
}
|
| 191 |
+
.card-img-bottom,
|
| 192 |
+
.card-footer {
|
| 193 |
+
// stylelint-disable-next-line property-disallowed-list
|
| 194 |
+
border-bottom-right-radius: 0;
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
&:not(:first-child) {
|
| 199 |
+
@include border-start-radius(0);
|
| 200 |
+
|
| 201 |
+
.card-img-top,
|
| 202 |
+
.card-header {
|
| 203 |
+
// stylelint-disable-next-line property-disallowed-list
|
| 204 |
+
border-top-left-radius: 0;
|
| 205 |
+
}
|
| 206 |
+
.card-img-bottom,
|
| 207 |
+
.card-footer {
|
| 208 |
+
// stylelint-disable-next-line property-disallowed-list
|
| 209 |
+
border-bottom-left-radius: 0;
|
| 210 |
+
}
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
}
|
| 214 |
+
}
|
| 215 |
+
}
|
static/scss/bootstrap/scss/_carousel.scss
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Notes on the classes:
|
| 2 |
+
//
|
| 3 |
+
// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
|
| 4 |
+
// even when their scroll action started on a carousel, but for compatibility (with Firefox)
|
| 5 |
+
// we're preventing all actions instead
|
| 6 |
+
// 2. The .carousel-item-start and .carousel-item-end is used to indicate where
|
| 7 |
+
// the active slide is heading.
|
| 8 |
+
// 3. .active.carousel-item is the current slide.
|
| 9 |
+
// 4. .active.carousel-item-start and .active.carousel-item-end is the current
|
| 10 |
+
// slide in its in-transition state. Only one of these occurs at a time.
|
| 11 |
+
// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end
|
| 12 |
+
// is the upcoming slide in transition.
|
| 13 |
+
|
| 14 |
+
.carousel {
|
| 15 |
+
position: relative;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
.carousel.pointer-event {
|
| 19 |
+
touch-action: pan-y;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
.carousel-inner {
|
| 23 |
+
position: relative;
|
| 24 |
+
width: 100%;
|
| 25 |
+
overflow: hidden;
|
| 26 |
+
@include clearfix();
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
.carousel-item {
|
| 30 |
+
position: relative;
|
| 31 |
+
display: none;
|
| 32 |
+
float: left;
|
| 33 |
+
width: 100%;
|
| 34 |
+
margin-right: -100%;
|
| 35 |
+
backface-visibility: hidden;
|
| 36 |
+
@include transition($carousel-transition);
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.carousel-item.active,
|
| 40 |
+
.carousel-item-next,
|
| 41 |
+
.carousel-item-prev {
|
| 42 |
+
display: block;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
/* rtl:begin:ignore */
|
| 46 |
+
.carousel-item-next:not(.carousel-item-start),
|
| 47 |
+
.active.carousel-item-end {
|
| 48 |
+
transform: translateX(100%);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
.carousel-item-prev:not(.carousel-item-end),
|
| 52 |
+
.active.carousel-item-start {
|
| 53 |
+
transform: translateX(-100%);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
/* rtl:end:ignore */
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
//
|
| 60 |
+
// Alternate transitions
|
| 61 |
+
//
|
| 62 |
+
|
| 63 |
+
.carousel-fade {
|
| 64 |
+
.carousel-item {
|
| 65 |
+
opacity: 0;
|
| 66 |
+
transition-property: opacity;
|
| 67 |
+
transform: none;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.carousel-item.active,
|
| 71 |
+
.carousel-item-next.carousel-item-start,
|
| 72 |
+
.carousel-item-prev.carousel-item-end {
|
| 73 |
+
z-index: 1;
|
| 74 |
+
opacity: 1;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
.active.carousel-item-start,
|
| 78 |
+
.active.carousel-item-end {
|
| 79 |
+
z-index: 0;
|
| 80 |
+
opacity: 0;
|
| 81 |
+
@include transition(opacity 0s $carousel-transition-duration);
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
//
|
| 87 |
+
// Left/right controls for nav
|
| 88 |
+
//
|
| 89 |
+
|
| 90 |
+
.carousel-control-prev,
|
| 91 |
+
.carousel-control-next {
|
| 92 |
+
position: absolute;
|
| 93 |
+
top: 0;
|
| 94 |
+
bottom: 0;
|
| 95 |
+
z-index: 1;
|
| 96 |
+
// Use flex for alignment (1-3)
|
| 97 |
+
display: flex; // 1. allow flex styles
|
| 98 |
+
align-items: center; // 2. vertically center contents
|
| 99 |
+
justify-content: center; // 3. horizontally center contents
|
| 100 |
+
width: $carousel-control-width;
|
| 101 |
+
padding: 0;
|
| 102 |
+
color: $carousel-control-color;
|
| 103 |
+
text-align: center;
|
| 104 |
+
background: none;
|
| 105 |
+
border: 0;
|
| 106 |
+
opacity: $carousel-control-opacity;
|
| 107 |
+
@include transition($carousel-control-transition);
|
| 108 |
+
|
| 109 |
+
// Hover/focus state
|
| 110 |
+
&:hover,
|
| 111 |
+
&:focus {
|
| 112 |
+
color: $carousel-control-color;
|
| 113 |
+
text-decoration: none;
|
| 114 |
+
outline: 0;
|
| 115 |
+
opacity: $carousel-control-hover-opacity;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
.carousel-control-prev {
|
| 119 |
+
left: 0;
|
| 120 |
+
background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);
|
| 121 |
+
}
|
| 122 |
+
.carousel-control-next {
|
| 123 |
+
right: 0;
|
| 124 |
+
background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
// Icons for within
|
| 128 |
+
.carousel-control-prev-icon,
|
| 129 |
+
.carousel-control-next-icon {
|
| 130 |
+
display: inline-block;
|
| 131 |
+
width: $carousel-control-icon-width;
|
| 132 |
+
height: $carousel-control-icon-width;
|
| 133 |
+
background-repeat: no-repeat;
|
| 134 |
+
background-position: 50%;
|
| 135 |
+
background-size: 100% 100%;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
/* rtl:options: {
|
| 139 |
+
"autoRename": true,
|
| 140 |
+
"stringMap":[ {
|
| 141 |
+
"name" : "prev-next",
|
| 142 |
+
"search" : "prev",
|
| 143 |
+
"replace" : "next"
|
| 144 |
+
} ]
|
| 145 |
+
} */
|
| 146 |
+
.carousel-control-prev-icon {
|
| 147 |
+
background-image: escape-svg($carousel-control-prev-icon-bg);
|
| 148 |
+
}
|
| 149 |
+
.carousel-control-next-icon {
|
| 150 |
+
background-image: escape-svg($carousel-control-next-icon-bg);
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
// Optional indicator pips/controls
|
| 154 |
+
//
|
| 155 |
+
// Add a container (such as a list) with the following class and add an item (ideally a focusable control,
|
| 156 |
+
// like a button) with data-bs-target for each slide your carousel holds.
|
| 157 |
+
|
| 158 |
+
.carousel-indicators {
|
| 159 |
+
position: absolute;
|
| 160 |
+
right: 0;
|
| 161 |
+
bottom: 0;
|
| 162 |
+
left: 0;
|
| 163 |
+
z-index: 2;
|
| 164 |
+
display: flex;
|
| 165 |
+
justify-content: center;
|
| 166 |
+
padding: 0;
|
| 167 |
+
// Use the .carousel-control's width as margin so we don't overlay those
|
| 168 |
+
margin-right: $carousel-control-width;
|
| 169 |
+
margin-bottom: 1rem;
|
| 170 |
+
margin-left: $carousel-control-width;
|
| 171 |
+
list-style: none;
|
| 172 |
+
|
| 173 |
+
[data-bs-target] {
|
| 174 |
+
box-sizing: content-box;
|
| 175 |
+
flex: 0 1 auto;
|
| 176 |
+
width: $carousel-indicator-width;
|
| 177 |
+
height: $carousel-indicator-height;
|
| 178 |
+
padding: 0;
|
| 179 |
+
margin-right: $carousel-indicator-spacer;
|
| 180 |
+
margin-left: $carousel-indicator-spacer;
|
| 181 |
+
text-indent: -999px;
|
| 182 |
+
cursor: pointer;
|
| 183 |
+
background-color: $carousel-indicator-active-bg;
|
| 184 |
+
background-clip: padding-box;
|
| 185 |
+
border: 0;
|
| 186 |
+
// Use transparent borders to increase the hit area by 10px on top and bottom.
|
| 187 |
+
border-top: $carousel-indicator-hit-area-height solid transparent;
|
| 188 |
+
border-bottom: $carousel-indicator-hit-area-height solid transparent;
|
| 189 |
+
opacity: $carousel-indicator-opacity;
|
| 190 |
+
@include transition($carousel-indicator-transition);
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
.active {
|
| 194 |
+
opacity: $carousel-indicator-active-opacity;
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
|
| 199 |
+
// Optional captions
|
| 200 |
+
//
|
| 201 |
+
//
|
| 202 |
+
|
| 203 |
+
.carousel-caption {
|
| 204 |
+
position: absolute;
|
| 205 |
+
right: (100% - $carousel-caption-width) / 2;
|
| 206 |
+
bottom: $carousel-caption-spacer;
|
| 207 |
+
left: (100% - $carousel-caption-width) / 2;
|
| 208 |
+
padding-top: $carousel-caption-padding-y;
|
| 209 |
+
padding-bottom: $carousel-caption-padding-y;
|
| 210 |
+
color: $carousel-caption-color;
|
| 211 |
+
text-align: center;
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
// Dark mode carousel
|
| 215 |
+
|
| 216 |
+
.carousel-dark {
|
| 217 |
+
.carousel-control-prev-icon,
|
| 218 |
+
.carousel-control-next-icon {
|
| 219 |
+
filter: $carousel-dark-control-icon-filter;
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
.carousel-indicators [data-bs-target] {
|
| 223 |
+
background-color: $carousel-dark-indicator-active-bg;
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
.carousel-caption {
|
| 227 |
+
color: $carousel-dark-caption-color;
|
| 228 |
+
}
|
| 229 |
+
}
|
static/scss/bootstrap/scss/_close.scss
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// transparent background and border properties included for button version.
|
| 2 |
+
// iOS requires the button element instead of an anchor tag.
|
| 3 |
+
// If you want the anchor version, it requires `href="#"`.
|
| 4 |
+
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
|
| 5 |
+
|
| 6 |
+
.btn-close {
|
| 7 |
+
box-sizing: content-box;
|
| 8 |
+
width: $btn-close-width;
|
| 9 |
+
height: $btn-close-height;
|
| 10 |
+
padding: $btn-close-padding-y $btn-close-padding-x;
|
| 11 |
+
color: $btn-close-color;
|
| 12 |
+
background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
|
| 13 |
+
border: 0; // for button elements
|
| 14 |
+
@include border-radius();
|
| 15 |
+
opacity: $btn-close-opacity;
|
| 16 |
+
|
| 17 |
+
// Override <a>'s hover style
|
| 18 |
+
&:hover {
|
| 19 |
+
color: $btn-close-color;
|
| 20 |
+
text-decoration: none;
|
| 21 |
+
opacity: $btn-close-hover-opacity;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
&:focus {
|
| 25 |
+
outline: 0;
|
| 26 |
+
box-shadow: $btn-close-focus-shadow;
|
| 27 |
+
opacity: $btn-close-focus-opacity;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
&:disabled,
|
| 31 |
+
&.disabled {
|
| 32 |
+
pointer-events: none;
|
| 33 |
+
user-select: none;
|
| 34 |
+
opacity: $btn-close-disabled-opacity;
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
.btn-close-white {
|
| 39 |
+
filter: $btn-close-white-filter;
|
| 40 |
+
}
|
static/scss/bootstrap/scss/_containers.scss
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Container widths
|
| 2 |
+
//
|
| 3 |
+
// Set the container width, and override it for fixed navbars in media queries.
|
| 4 |
+
|
| 5 |
+
@if $enable-grid-classes {
|
| 6 |
+
// Single container class with breakpoint max-widths
|
| 7 |
+
.container,
|
| 8 |
+
// 100% wide container at all breakpoints
|
| 9 |
+
.container-fluid {
|
| 10 |
+
@include make-container();
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
// Responsive containers that are 100% wide until a breakpoint
|
| 14 |
+
@each $breakpoint, $container-max-width in $container-max-widths {
|
| 15 |
+
.container-#{$breakpoint} {
|
| 16 |
+
@extend .container-fluid;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
@include media-breakpoint-up($breakpoint, $grid-breakpoints) {
|
| 20 |
+
%responsive-container-#{$breakpoint} {
|
| 21 |
+
max-width: $container-max-width;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
// Extend each breakpoint which is smaller or equal to the current breakpoint
|
| 25 |
+
$extend-breakpoint: true;
|
| 26 |
+
|
| 27 |
+
@each $name, $width in $grid-breakpoints {
|
| 28 |
+
@if ($extend-breakpoint) {
|
| 29 |
+
.container#{breakpoint-infix($name, $grid-breakpoints)} {
|
| 30 |
+
@extend %responsive-container-#{$breakpoint};
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
// Once the current breakpoint is reached, stop extending
|
| 34 |
+
@if ($breakpoint == $name) {
|
| 35 |
+
$extend-breakpoint: false;
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
}
|
static/scss/bootstrap/scss/_dropdown.scss
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// The dropdown wrapper (`<div>`)
|
| 2 |
+
.dropup,
|
| 3 |
+
.dropend,
|
| 4 |
+
.dropdown,
|
| 5 |
+
.dropstart {
|
| 6 |
+
position: relative;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
.dropdown-toggle {
|
| 10 |
+
white-space: nowrap;
|
| 11 |
+
|
| 12 |
+
// Generate the caret automatically
|
| 13 |
+
@include caret();
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
// The dropdown menu
|
| 17 |
+
.dropdown-menu {
|
| 18 |
+
position: absolute;
|
| 19 |
+
z-index: $zindex-dropdown;
|
| 20 |
+
display: none; // none by default, but block on "open" of the menu
|
| 21 |
+
min-width: $dropdown-min-width;
|
| 22 |
+
padding: $dropdown-padding-y $dropdown-padding-x;
|
| 23 |
+
margin: 0; // Override default margin of ul
|
| 24 |
+
@include font-size($dropdown-font-size);
|
| 25 |
+
color: $dropdown-color;
|
| 26 |
+
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
|
| 27 |
+
list-style: none;
|
| 28 |
+
background-color: $dropdown-bg;
|
| 29 |
+
background-clip: padding-box;
|
| 30 |
+
border: $dropdown-border-width solid $dropdown-border-color;
|
| 31 |
+
@include border-radius($dropdown-border-radius);
|
| 32 |
+
@include box-shadow($dropdown-box-shadow);
|
| 33 |
+
|
| 34 |
+
&[data-bs-popper] {
|
| 35 |
+
top: 100%;
|
| 36 |
+
left: 0;
|
| 37 |
+
margin-top: $dropdown-spacer;
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
// scss-docs-start responsive-breakpoints
|
| 42 |
+
// We deliberately hardcode the `bs-` prefix because we check
|
| 43 |
+
// this custom property in JS to determine Popper's positioning
|
| 44 |
+
|
| 45 |
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
| 46 |
+
@include media-breakpoint-up($breakpoint) {
|
| 47 |
+
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
| 48 |
+
|
| 49 |
+
.dropdown-menu#{$infix}-start {
|
| 50 |
+
--bs-position: start;
|
| 51 |
+
|
| 52 |
+
&[data-bs-popper] {
|
| 53 |
+
right: auto #{"/* rtl:ignore */"};
|
| 54 |
+
left: 0 #{"/* rtl:ignore */"};
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
.dropdown-menu#{$infix}-end {
|
| 59 |
+
--bs-position: end;
|
| 60 |
+
|
| 61 |
+
&[data-bs-popper] {
|
| 62 |
+
right: 0 #{"/* rtl:ignore */"};
|
| 63 |
+
left: auto #{"/* rtl:ignore */"};
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
}
|
| 67 |
+
}
|
| 68 |
+
// scss-docs-end responsive-breakpoints
|
| 69 |
+
|
| 70 |
+
// Allow for dropdowns to go bottom up (aka, dropup-menu)
|
| 71 |
+
// Just add .dropup after the standard .dropdown class and you're set.
|
| 72 |
+
.dropup {
|
| 73 |
+
.dropdown-menu[data-bs-popper] {
|
| 74 |
+
top: auto;
|
| 75 |
+
bottom: 100%;
|
| 76 |
+
margin-top: 0;
|
| 77 |
+
margin-bottom: $dropdown-spacer;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
.dropdown-toggle {
|
| 81 |
+
@include caret(up);
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
.dropend {
|
| 86 |
+
.dropdown-menu[data-bs-popper] {
|
| 87 |
+
top: 0;
|
| 88 |
+
right: auto;
|
| 89 |
+
left: 100%;
|
| 90 |
+
margin-top: 0;
|
| 91 |
+
margin-left: $dropdown-spacer;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
.dropdown-toggle {
|
| 95 |
+
@include caret(end);
|
| 96 |
+
&::after {
|
| 97 |
+
vertical-align: 0;
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
.dropstart {
|
| 103 |
+
.dropdown-menu[data-bs-popper] {
|
| 104 |
+
top: 0;
|
| 105 |
+
right: 100%;
|
| 106 |
+
left: auto;
|
| 107 |
+
margin-top: 0;
|
| 108 |
+
margin-right: $dropdown-spacer;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
.dropdown-toggle {
|
| 112 |
+
@include caret(start);
|
| 113 |
+
&::before {
|
| 114 |
+
vertical-align: 0;
|
| 115 |
+
}
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
// Dividers (basically an `<hr>`) within the dropdown
|
| 121 |
+
.dropdown-divider {
|
| 122 |
+
height: 0;
|
| 123 |
+
margin: $dropdown-divider-margin-y 0;
|
| 124 |
+
overflow: hidden;
|
| 125 |
+
border-top: 1px solid $dropdown-divider-bg;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
// Links, buttons, and more within the dropdown menu
|
| 129 |
+
//
|
| 130 |
+
// `<button>`-specific styles are denoted with `// For <button>s`
|
| 131 |
+
.dropdown-item {
|
| 132 |
+
display: block;
|
| 133 |
+
width: 100%; // For `<button>`s
|
| 134 |
+
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
|
| 135 |
+
clear: both;
|
| 136 |
+
font-weight: $font-weight-normal;
|
| 137 |
+
color: $dropdown-link-color;
|
| 138 |
+
text-align: inherit; // For `<button>`s
|
| 139 |
+
text-decoration: if($link-decoration == none, null, none);
|
| 140 |
+
white-space: nowrap; // prevent links from randomly breaking onto new lines
|
| 141 |
+
background-color: transparent; // For `<button>`s
|
| 142 |
+
border: 0; // For `<button>`s
|
| 143 |
+
|
| 144 |
+
// Prevent dropdown overflow if there's no padding
|
| 145 |
+
// See https://github.com/twbs/bootstrap/pull/27703
|
| 146 |
+
@if $dropdown-padding-y == 0 {
|
| 147 |
+
&:first-child {
|
| 148 |
+
@include border-top-radius($dropdown-inner-border-radius);
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
&:last-child {
|
| 152 |
+
@include border-bottom-radius($dropdown-inner-border-radius);
|
| 153 |
+
}
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
&:hover,
|
| 157 |
+
&:focus {
|
| 158 |
+
color: $dropdown-link-hover-color;
|
| 159 |
+
text-decoration: if($link-hover-decoration == underline, none, null);
|
| 160 |
+
@include gradient-bg($dropdown-link-hover-bg);
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
&.active,
|
| 164 |
+
&:active {
|
| 165 |
+
color: $dropdown-link-active-color;
|
| 166 |
+
text-decoration: none;
|
| 167 |
+
@include gradient-bg($dropdown-link-active-bg);
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
&.disabled,
|
| 171 |
+
&:disabled {
|
| 172 |
+
color: $dropdown-link-disabled-color;
|
| 173 |
+
pointer-events: none;
|
| 174 |
+
background-color: transparent;
|
| 175 |
+
// Remove CSS gradients if they're enabled
|
| 176 |
+
background-image: if($enable-gradients, none, null);
|
| 177 |
+
}
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
.dropdown-menu.show {
|
| 181 |
+
display: block;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
// Dropdown section headers
|
| 185 |
+
.dropdown-header {
|
| 186 |
+
display: block;
|
| 187 |
+
padding: $dropdown-header-padding;
|
| 188 |
+
margin-bottom: 0; // for use with heading elements
|
| 189 |
+
@include font-size($font-size-sm);
|
| 190 |
+
color: $dropdown-header-color;
|
| 191 |
+
white-space: nowrap; // as with > li > a
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
// Dropdown text
|
| 195 |
+
.dropdown-item-text {
|
| 196 |
+
display: block;
|
| 197 |
+
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
|
| 198 |
+
color: $dropdown-link-color;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
// Dark dropdowns
|
| 202 |
+
.dropdown-menu-dark {
|
| 203 |
+
color: $dropdown-dark-color;
|
| 204 |
+
background-color: $dropdown-dark-bg;
|
| 205 |
+
border-color: $dropdown-dark-border-color;
|
| 206 |
+
@include box-shadow($dropdown-dark-box-shadow);
|
| 207 |
+
|
| 208 |
+
.dropdown-item {
|
| 209 |
+
color: $dropdown-dark-link-color;
|
| 210 |
+
|
| 211 |
+
&:hover,
|
| 212 |
+
&:focus {
|
| 213 |
+
color: $dropdown-dark-link-hover-color;
|
| 214 |
+
@include gradient-bg($dropdown-dark-link-hover-bg);
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
&.active,
|
| 218 |
+
&:active {
|
| 219 |
+
color: $dropdown-dark-link-active-color;
|
| 220 |
+
@include gradient-bg($dropdown-dark-link-active-bg);
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
&.disabled,
|
| 224 |
+
&:disabled {
|
| 225 |
+
color: $dropdown-dark-link-disabled-color;
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
.dropdown-divider {
|
| 230 |
+
border-color: $dropdown-dark-divider-bg;
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
.dropdown-item-text {
|
| 234 |
+
color: $dropdown-dark-link-color;
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
.dropdown-header {
|
| 238 |
+
color: $dropdown-dark-header-color;
|
| 239 |
+
}
|
| 240 |
+
}
|
static/scss/bootstrap/scss/_forms.scss
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import "forms/labels";
|
| 2 |
+
@import "forms/form-text";
|
| 3 |
+
@import "forms/form-control";
|
| 4 |
+
@import "forms/form-select";
|
| 5 |
+
@import "forms/form-check";
|
| 6 |
+
@import "forms/form-range";
|
| 7 |
+
@import "forms/floating-labels";
|
| 8 |
+
@import "forms/input-group";
|
| 9 |
+
@import "forms/validation";
|
static/scss/bootstrap/scss/_functions.scss
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Bootstrap functions
|
| 2 |
+
//
|
| 3 |
+
// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
|
| 4 |
+
|
| 5 |
+
// Ascending
|
| 6 |
+
// Used to evaluate Sass maps like our grid breakpoints.
|
| 7 |
+
@mixin _assert-ascending($map, $map-name) {
|
| 8 |
+
$prev-key: null;
|
| 9 |
+
$prev-num: null;
|
| 10 |
+
@each $key, $num in $map {
|
| 11 |
+
@if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" {
|
| 12 |
+
// Do nothing
|
| 13 |
+
} @else if not comparable($prev-num, $num) {
|
| 14 |
+
@warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
|
| 15 |
+
} @else if $prev-num >= $num {
|
| 16 |
+
@warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
|
| 17 |
+
}
|
| 18 |
+
$prev-key: $key;
|
| 19 |
+
$prev-num: $num;
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
// Starts at zero
|
| 24 |
+
// Used to ensure the min-width of the lowest breakpoint starts at 0.
|
| 25 |
+
@mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
|
| 26 |
+
@if length($map) > 0 {
|
| 27 |
+
$values: map-values($map);
|
| 28 |
+
$first-value: nth($values, 1);
|
| 29 |
+
@if $first-value != 0 {
|
| 30 |
+
@warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
// Internal Bootstrap function to turn maps into its negative variant.
|
| 36 |
+
// It prefixes the keys with `n` and makes the value negative.
|
| 37 |
+
@function negativify-map($map) {
|
| 38 |
+
$result: ();
|
| 39 |
+
@each $key, $value in $map {
|
| 40 |
+
@if $key != 0 {
|
| 41 |
+
$result: map-merge($result, ("n" + $key: (-$value)));
|
| 42 |
+
}
|
| 43 |
+
}
|
| 44 |
+
@return $result;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
// Get multiple keys from a sass map
|
| 48 |
+
@function map-get-multiple($map, $values) {
|
| 49 |
+
$result: ();
|
| 50 |
+
@each $key, $value in $map {
|
| 51 |
+
@if (index($values, $key) != null) {
|
| 52 |
+
$result: map-merge($result, ($key: $value));
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
@return $result;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
// Replace `$search` with `$replace` in `$string`
|
| 59 |
+
// Used on our SVG icon backgrounds for custom forms.
|
| 60 |
+
//
|
| 61 |
+
// @author Hugo Giraudel
|
| 62 |
+
// @param {String} $string - Initial string
|
| 63 |
+
// @param {String} $search - Substring to replace
|
| 64 |
+
// @param {String} $replace ('') - New value
|
| 65 |
+
// @return {String} - Updated string
|
| 66 |
+
@function str-replace($string, $search, $replace: "") {
|
| 67 |
+
$index: str-index($string, $search);
|
| 68 |
+
|
| 69 |
+
@if $index {
|
| 70 |
+
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
@return $string;
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
// See https://codepen.io/kevinweber/pen/dXWoRw
|
| 77 |
+
//
|
| 78 |
+
// Requires the use of quotes around data URIs.
|
| 79 |
+
|
| 80 |
+
@function escape-svg($string) {
|
| 81 |
+
@if str-index($string, "data:image/svg+xml") {
|
| 82 |
+
@each $char, $encoded in $escaped-characters {
|
| 83 |
+
// Do not escape the url brackets
|
| 84 |
+
@if str-index($string, "url(") == 1 {
|
| 85 |
+
$string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
|
| 86 |
+
} @else {
|
| 87 |
+
$string: str-replace($string, $char, $encoded);
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
@return $string;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
// Color contrast
|
| 96 |
+
// See https://github.com/twbs/bootstrap/pull/30168
|
| 97 |
+
|
| 98 |
+
// A list of pre-calculated numbers of pow(($value / 255 + .055) / 1.055, 2.4). (from 0 to 255)
|
| 99 |
+
// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern
|
| 100 |
+
$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .9911 1;
|
| 101 |
+
|
| 102 |
+
@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) {
|
| 103 |
+
$foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;
|
| 104 |
+
$max-ratio: 0;
|
| 105 |
+
$max-ratio-color: null;
|
| 106 |
+
|
| 107 |
+
@each $color in $foregrounds {
|
| 108 |
+
$contrast-ratio: contrast-ratio($background, $color);
|
| 109 |
+
@if $contrast-ratio > $min-contrast-ratio {
|
| 110 |
+
@return $color;
|
| 111 |
+
} @else if $contrast-ratio > $max-ratio {
|
| 112 |
+
$max-ratio: $contrast-ratio;
|
| 113 |
+
$max-ratio-color: $color;
|
| 114 |
+
}
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
@warn "Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}...";
|
| 118 |
+
|
| 119 |
+
@return $max-ratio-color;
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
@function contrast-ratio($background, $foreground: $color-contrast-light) {
|
| 123 |
+
$l1: luminance($background);
|
| 124 |
+
$l2: luminance(opaque($background, $foreground));
|
| 125 |
+
|
| 126 |
+
@return if($l1 > $l2, ($l1 + .05) / ($l2 + .05), ($l2 + .05) / ($l1 + .05));
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
// Return WCAG2.0 relative luminance
|
| 130 |
+
// See https://www.w3.org/WAI/GL/wiki/Relative_luminance
|
| 131 |
+
// See https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests
|
| 132 |
+
@function luminance($color) {
|
| 133 |
+
$rgb: (
|
| 134 |
+
"r": red($color),
|
| 135 |
+
"g": green($color),
|
| 136 |
+
"b": blue($color)
|
| 137 |
+
);
|
| 138 |
+
|
| 139 |
+
@each $name, $value in $rgb {
|
| 140 |
+
$value: if($value / 255 < .03928, $value / 255 / 12.92, nth($_luminance-list, $value + 1));
|
| 141 |
+
$rgb: map-merge($rgb, ($name: $value));
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
@return (map-get($rgb, "r") * .2126) + (map-get($rgb, "g") * .7152) + (map-get($rgb, "b") * .0722);
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
// Return opaque color
|
| 148 |
+
// opaque(#fff, rgba(0, 0, 0, .5)) => #808080
|
| 149 |
+
@function opaque($background, $foreground) {
|
| 150 |
+
@return mix(rgba($foreground, 1), $background, opacity($foreground) * 100);
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
// scss-docs-start color-functions
|
| 154 |
+
// Tint a color: mix a color with white
|
| 155 |
+
@function tint-color($color, $weight) {
|
| 156 |
+
@return mix(white, $color, $weight);
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
// Shade a color: mix a color with black
|
| 160 |
+
@function shade-color($color, $weight) {
|
| 161 |
+
@return mix(black, $color, $weight);
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
// Shade the color if the weight is positive, else tint it
|
| 165 |
+
@function shift-color($color, $weight) {
|
| 166 |
+
@return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));
|
| 167 |
+
}
|
| 168 |
+
// scss-docs-end color-functions
|
| 169 |
+
|
| 170 |
+
// Return valid calc
|
| 171 |
+
@function add($value1, $value2, $return-calc: true) {
|
| 172 |
+
@if $value1 == null {
|
| 173 |
+
@return $value2;
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
@if $value2 == null {
|
| 177 |
+
@return $value1;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
@if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {
|
| 181 |
+
@return $value1 + $value2;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
@return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2);
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
@function subtract($value1, $value2, $return-calc: true) {
|
| 188 |
+
@if $value1 == null and $value2 == null {
|
| 189 |
+
@return null;
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
@if $value1 == null {
|
| 193 |
+
@return -$value2;
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
@if $value2 == null {
|
| 197 |
+
@return $value1;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
@if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {
|
| 201 |
+
@return $value1 - $value2;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
@return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2);
|
| 205 |
+
}
|
static/scss/bootstrap/scss/_grid.scss
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Row
|
| 2 |
+
//
|
| 3 |
+
// Rows contain your columns.
|
| 4 |
+
|
| 5 |
+
@if $enable-grid-classes {
|
| 6 |
+
.row {
|
| 7 |
+
@include make-row();
|
| 8 |
+
|
| 9 |
+
> * {
|
| 10 |
+
@include make-col-ready();
|
| 11 |
+
}
|
| 12 |
+
}
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
// Columns
|
| 17 |
+
//
|
| 18 |
+
// Common styles for small and large grid columns
|
| 19 |
+
|
| 20 |
+
@if $enable-grid-classes {
|
| 21 |
+
@include make-grid-columns();
|
| 22 |
+
}
|
static/scss/bootstrap/scss/_helpers.scss
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import "helpers/clearfix";
|
| 2 |
+
@import "helpers/colored-links";
|
| 3 |
+
@import "helpers/ratio";
|
| 4 |
+
@import "helpers/position";
|
| 5 |
+
@import "helpers/visually-hidden";
|
| 6 |
+
@import "helpers/stretched-link";
|
| 7 |
+
@import "helpers/text-truncation";
|
static/scss/bootstrap/scss/_images.scss
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Responsive images (ensure images don't scale beyond their parents)
|
| 2 |
+
//
|
| 3 |
+
// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
|
| 4 |
+
// We previously tried the "images are responsive by default" approach in Bootstrap v2,
|
| 5 |
+
// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
|
| 6 |
+
// which weren't expecting the images within themselves to be involuntarily resized.
|
| 7 |
+
// See also https://github.com/twbs/bootstrap/issues/18178
|
| 8 |
+
.img-fluid {
|
| 9 |
+
@include img-fluid();
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
// Image thumbnails
|
| 14 |
+
.img-thumbnail {
|
| 15 |
+
padding: $thumbnail-padding;
|
| 16 |
+
background-color: $thumbnail-bg;
|
| 17 |
+
border: $thumbnail-border-width solid $thumbnail-border-color;
|
| 18 |
+
@include border-radius($thumbnail-border-radius);
|
| 19 |
+
@include box-shadow($thumbnail-box-shadow);
|
| 20 |
+
|
| 21 |
+
// Keep them at most 100% wide
|
| 22 |
+
@include img-fluid();
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
//
|
| 26 |
+
// Figures
|
| 27 |
+
//
|
| 28 |
+
|
| 29 |
+
.figure {
|
| 30 |
+
// Ensures the caption's text aligns with the image.
|
| 31 |
+
display: inline-block;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.figure-img {
|
| 35 |
+
margin-bottom: $spacer / 2;
|
| 36 |
+
line-height: 1;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.figure-caption {
|
| 40 |
+
@include font-size($figure-caption-font-size);
|
| 41 |
+
color: $figure-caption-color;
|
| 42 |
+
}
|
static/scss/bootstrap/scss/_list-group.scss
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Base class
|
| 2 |
+
//
|
| 3 |
+
// Easily usable on <ul>, <ol>, or <div>.
|
| 4 |
+
|
| 5 |
+
.list-group {
|
| 6 |
+
display: flex;
|
| 7 |
+
flex-direction: column;
|
| 8 |
+
|
| 9 |
+
// No need to set list-style: none; since .list-group-item is block level
|
| 10 |
+
padding-left: 0; // reset padding because ul and ol
|
| 11 |
+
margin-bottom: 0;
|
| 12 |
+
@include border-radius($list-group-border-radius);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.list-group-numbered {
|
| 16 |
+
list-style-type: none;
|
| 17 |
+
counter-reset: section;
|
| 18 |
+
|
| 19 |
+
> li::before {
|
| 20 |
+
// Increments only this instance of the section counter
|
| 21 |
+
content: counters(section, ".") ". ";
|
| 22 |
+
counter-increment: section;
|
| 23 |
+
}
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
// Interactive list items
|
| 28 |
+
//
|
| 29 |
+
// Use anchor or button elements instead of `li`s or `div`s to create interactive
|
| 30 |
+
// list items. Includes an extra `.active` modifier class for selected items.
|
| 31 |
+
|
| 32 |
+
.list-group-item-action {
|
| 33 |
+
width: 100%; // For `<button>`s (anchors become 100% by default though)
|
| 34 |
+
color: $list-group-action-color;
|
| 35 |
+
text-align: inherit; // For `<button>`s (anchors inherit)
|
| 36 |
+
|
| 37 |
+
// Hover state
|
| 38 |
+
&:hover,
|
| 39 |
+
&:focus {
|
| 40 |
+
z-index: 1; // Place hover/focus items above their siblings for proper border styling
|
| 41 |
+
color: $list-group-action-hover-color;
|
| 42 |
+
text-decoration: none;
|
| 43 |
+
background-color: $list-group-hover-bg;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
&:active {
|
| 47 |
+
color: $list-group-action-active-color;
|
| 48 |
+
background-color: $list-group-action-active-bg;
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
// Individual list items
|
| 54 |
+
//
|
| 55 |
+
// Use on `li`s or `div`s within the `.list-group` parent.
|
| 56 |
+
|
| 57 |
+
.list-group-item {
|
| 58 |
+
position: relative;
|
| 59 |
+
display: block;
|
| 60 |
+
padding: $list-group-item-padding-y $list-group-item-padding-x;
|
| 61 |
+
color: $list-group-color;
|
| 62 |
+
text-decoration: if($link-decoration == none, null, none);
|
| 63 |
+
background-color: $list-group-bg;
|
| 64 |
+
border: $list-group-border-width solid $list-group-border-color;
|
| 65 |
+
|
| 66 |
+
&:first-child {
|
| 67 |
+
@include border-top-radius(inherit);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
&:last-child {
|
| 71 |
+
@include border-bottom-radius(inherit);
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
&.disabled,
|
| 75 |
+
&:disabled {
|
| 76 |
+
color: $list-group-disabled-color;
|
| 77 |
+
pointer-events: none;
|
| 78 |
+
background-color: $list-group-disabled-bg;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
// Include both here for `<a>`s and `<button>`s
|
| 82 |
+
&.active {
|
| 83 |
+
z-index: 2; // Place active items above their siblings for proper border styling
|
| 84 |
+
color: $list-group-active-color;
|
| 85 |
+
background-color: $list-group-active-bg;
|
| 86 |
+
border-color: $list-group-active-border-color;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
& + & {
|
| 90 |
+
border-top-width: 0;
|
| 91 |
+
|
| 92 |
+
&.active {
|
| 93 |
+
margin-top: -$list-group-border-width;
|
| 94 |
+
border-top-width: $list-group-border-width;
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
// Horizontal
|
| 101 |
+
//
|
| 102 |
+
// Change the layout of list group items from vertical (default) to horizontal.
|
| 103 |
+
|
| 104 |
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
| 105 |
+
@include media-breakpoint-up($breakpoint) {
|
| 106 |
+
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
| 107 |
+
|
| 108 |
+
.list-group-horizontal#{$infix} {
|
| 109 |
+
flex-direction: row;
|
| 110 |
+
|
| 111 |
+
> .list-group-item {
|
| 112 |
+
&:first-child {
|
| 113 |
+
@include border-bottom-start-radius($list-group-border-radius);
|
| 114 |
+
@include border-top-end-radius(0);
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
&:last-child {
|
| 118 |
+
@include border-top-end-radius($list-group-border-radius);
|
| 119 |
+
@include border-bottom-start-radius(0);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
&.active {
|
| 123 |
+
margin-top: 0;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
+ .list-group-item {
|
| 127 |
+
border-top-width: $list-group-border-width;
|
| 128 |
+
border-left-width: 0;
|
| 129 |
+
|
| 130 |
+
&.active {
|
| 131 |
+
margin-left: -$list-group-border-width;
|
| 132 |
+
border-left-width: $list-group-border-width;
|
| 133 |
+
}
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
// Flush list items
|
| 142 |
+
//
|
| 143 |
+
// Remove borders and border-radius to keep list group items edge-to-edge. Most
|
| 144 |
+
// useful within other components (e.g., cards).
|
| 145 |
+
|
| 146 |
+
.list-group-flush {
|
| 147 |
+
@include border-radius(0);
|
| 148 |
+
|
| 149 |
+
> .list-group-item {
|
| 150 |
+
border-width: 0 0 $list-group-border-width;
|
| 151 |
+
|
| 152 |
+
&:last-child {
|
| 153 |
+
border-bottom-width: 0;
|
| 154 |
+
}
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
|
| 159 |
+
// scss-docs-start list-group-modifiers
|
| 160 |
+
// List group contextual variants
|
| 161 |
+
//
|
| 162 |
+
// Add modifier classes to change text and background color on individual items.
|
| 163 |
+
// Organizationally, this must come after the `:hover` states.
|
| 164 |
+
|
| 165 |
+
@each $state, $value in $theme-colors {
|
| 166 |
+
$list-group-background: shift-color($value, $list-group-item-bg-scale);
|
| 167 |
+
$list-group-color: shift-color($value, $list-group-item-color-scale);
|
| 168 |
+
@if (contrast-ratio($list-group-background, $list-group-color) < $min-contrast-ratio) {
|
| 169 |
+
$list-group-color: mix($value, color-contrast($list-group-background), abs($list-group-item-color-scale));
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
@include list-group-item-variant($state, $list-group-background, $list-group-color);
|
| 173 |
+
}
|
| 174 |
+
// scss-docs-end list-group-modifiers
|
static/scss/bootstrap/scss/_mixins.scss
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Toggles
|
| 2 |
+
//
|
| 3 |
+
// Used in conjunction with global variables to enable certain theme features.
|
| 4 |
+
|
| 5 |
+
// Vendor
|
| 6 |
+
@import "vendor/rfs";
|
| 7 |
+
|
| 8 |
+
// Deprecate
|
| 9 |
+
@import "mixins/deprecate";
|
| 10 |
+
|
| 11 |
+
// Helpers
|
| 12 |
+
@import "mixins/breakpoints";
|
| 13 |
+
@import "mixins/color-scheme";
|
| 14 |
+
@import "mixins/image";
|
| 15 |
+
@import "mixins/resize";
|
| 16 |
+
@import "mixins/visually-hidden";
|
| 17 |
+
@import "mixins/reset-text";
|
| 18 |
+
@import "mixins/text-truncate";
|
| 19 |
+
|
| 20 |
+
// Utilities
|
| 21 |
+
@import "mixins/utilities";
|
| 22 |
+
|
| 23 |
+
// Components
|
| 24 |
+
@import "mixins/alert";
|
| 25 |
+
@import "mixins/buttons";
|
| 26 |
+
@import "mixins/caret";
|
| 27 |
+
@import "mixins/pagination";
|
| 28 |
+
@import "mixins/lists";
|
| 29 |
+
@import "mixins/list-group";
|
| 30 |
+
@import "mixins/forms";
|
| 31 |
+
@import "mixins/table-variants";
|
| 32 |
+
|
| 33 |
+
// Skins
|
| 34 |
+
@import "mixins/border-radius";
|
| 35 |
+
@import "mixins/box-shadow";
|
| 36 |
+
@import "mixins/gradients";
|
| 37 |
+
@import "mixins/transition";
|
| 38 |
+
|
| 39 |
+
// Layout
|
| 40 |
+
@import "mixins/clearfix";
|
| 41 |
+
@import "mixins/container";
|
| 42 |
+
@import "mixins/grid";
|
static/scss/bootstrap/scss/_modal.scss
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// .modal-open - body class for killing the scroll
|
| 2 |
+
// .modal - container to scroll within
|
| 3 |
+
// .modal-dialog - positioning shell for the actual modal
|
| 4 |
+
// .modal-content - actual modal w/ bg and corners and stuff
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
.modal-open {
|
| 8 |
+
// Kill the scroll on the body
|
| 9 |
+
overflow: hidden;
|
| 10 |
+
|
| 11 |
+
.modal {
|
| 12 |
+
overflow-x: hidden;
|
| 13 |
+
overflow-y: auto;
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
// Container that the modal scrolls within
|
| 18 |
+
.modal {
|
| 19 |
+
position: fixed;
|
| 20 |
+
top: 0;
|
| 21 |
+
left: 0;
|
| 22 |
+
z-index: $zindex-modal;
|
| 23 |
+
display: none;
|
| 24 |
+
width: 100%;
|
| 25 |
+
height: 100%;
|
| 26 |
+
overflow: hidden;
|
| 27 |
+
// Prevent Chrome on Windows from adding a focus outline. For details, see
|
| 28 |
+
// https://github.com/twbs/bootstrap/pull/10951.
|
| 29 |
+
outline: 0;
|
| 30 |
+
// We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
|
| 31 |
+
// gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
|
| 32 |
+
// See also https://github.com/twbs/bootstrap/issues/17695
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
// Shell div to position the modal with bottom padding
|
| 36 |
+
.modal-dialog {
|
| 37 |
+
position: relative;
|
| 38 |
+
width: auto;
|
| 39 |
+
margin: $modal-dialog-margin;
|
| 40 |
+
// allow clicks to pass through for custom click handling to close modal
|
| 41 |
+
pointer-events: none;
|
| 42 |
+
|
| 43 |
+
// When fading in the modal, animate it to slide down
|
| 44 |
+
.modal.fade & {
|
| 45 |
+
@include transition($modal-transition);
|
| 46 |
+
transform: $modal-fade-transform;
|
| 47 |
+
}
|
| 48 |
+
.modal.show & {
|
| 49 |
+
transform: $modal-show-transform;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
// When trying to close, animate focus to scale
|
| 53 |
+
.modal.modal-static & {
|
| 54 |
+
transform: $modal-scale-transform;
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
.modal-dialog-scrollable {
|
| 59 |
+
height: subtract(100%, $modal-dialog-margin * 2);
|
| 60 |
+
|
| 61 |
+
.modal-content {
|
| 62 |
+
max-height: 100%;
|
| 63 |
+
overflow: hidden;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.modal-body {
|
| 67 |
+
overflow-y: auto;
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
.modal-dialog-centered {
|
| 72 |
+
display: flex;
|
| 73 |
+
align-items: center;
|
| 74 |
+
min-height: subtract(100%, $modal-dialog-margin * 2);
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
// Actual modal
|
| 78 |
+
.modal-content {
|
| 79 |
+
position: relative;
|
| 80 |
+
display: flex;
|
| 81 |
+
flex-direction: column;
|
| 82 |
+
width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
|
| 83 |
+
// counteract the pointer-events: none; in the .modal-dialog
|
| 84 |
+
color: $modal-content-color;
|
| 85 |
+
pointer-events: auto;
|
| 86 |
+
background-color: $modal-content-bg;
|
| 87 |
+
background-clip: padding-box;
|
| 88 |
+
border: $modal-content-border-width solid $modal-content-border-color;
|
| 89 |
+
@include border-radius($modal-content-border-radius);
|
| 90 |
+
@include box-shadow($modal-content-box-shadow-xs);
|
| 91 |
+
// Remove focus outline from opened modal
|
| 92 |
+
outline: 0;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
// Modal background
|
| 96 |
+
.modal-backdrop {
|
| 97 |
+
position: fixed;
|
| 98 |
+
top: 0;
|
| 99 |
+
left: 0;
|
| 100 |
+
z-index: $zindex-modal-backdrop;
|
| 101 |
+
width: 100vw;
|
| 102 |
+
height: 100vh;
|
| 103 |
+
background-color: $modal-backdrop-bg;
|
| 104 |
+
|
| 105 |
+
// Fade for backdrop
|
| 106 |
+
&.fade { opacity: 0; }
|
| 107 |
+
&.show { opacity: $modal-backdrop-opacity; }
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
// Modal header
|
| 111 |
+
// Top section of the modal w/ title and dismiss
|
| 112 |
+
.modal-header {
|
| 113 |
+
display: flex;
|
| 114 |
+
flex-shrink: 0;
|
| 115 |
+
align-items: center;
|
| 116 |
+
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
|
| 117 |
+
padding: $modal-header-padding;
|
| 118 |
+
border-bottom: $modal-header-border-width solid $modal-header-border-color;
|
| 119 |
+
@include border-top-radius($modal-content-inner-border-radius);
|
| 120 |
+
|
| 121 |
+
.btn-close {
|
| 122 |
+
padding: ($modal-header-padding-y / 2) ($modal-header-padding-x / 2);
|
| 123 |
+
margin: ($modal-header-padding-y / -2) ($modal-header-padding-x / -2) ($modal-header-padding-y / -2) auto;
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
// Title text within header
|
| 128 |
+
.modal-title {
|
| 129 |
+
margin-bottom: 0;
|
| 130 |
+
line-height: $modal-title-line-height;
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
// Modal body
|
| 134 |
+
// Where all modal content resides (sibling of .modal-header and .modal-footer)
|
| 135 |
+
.modal-body {
|
| 136 |
+
position: relative;
|
| 137 |
+
// Enable `flex-grow: 1` so that the body take up as much space as possible
|
| 138 |
+
// when there should be a fixed height on `.modal-dialog`.
|
| 139 |
+
flex: 1 1 auto;
|
| 140 |
+
padding: $modal-inner-padding;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
// Footer (for actions)
|
| 144 |
+
.modal-footer {
|
| 145 |
+
display: flex;
|
| 146 |
+
flex-wrap: wrap;
|
| 147 |
+
flex-shrink: 0;
|
| 148 |
+
align-items: center; // vertically center
|
| 149 |
+
justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
|
| 150 |
+
padding: $modal-inner-padding - $modal-footer-margin-between / 2;
|
| 151 |
+
border-top: $modal-footer-border-width solid $modal-footer-border-color;
|
| 152 |
+
@include border-bottom-radius($modal-content-inner-border-radius);
|
| 153 |
+
|
| 154 |
+
// Place margin between footer elements
|
| 155 |
+
// This solution is far from ideal because of the universal selector usage,
|
| 156 |
+
// but is needed to fix https://github.com/twbs/bootstrap/issues/24800
|
| 157 |
+
> * {
|
| 158 |
+
margin: $modal-footer-margin-between / 2;
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
// Scale up the modal
|
| 163 |
+
@include media-breakpoint-up(sm) {
|
| 164 |
+
// Automatically set modal's width for larger viewports
|
| 165 |
+
.modal-dialog {
|
| 166 |
+
max-width: $modal-md;
|
| 167 |
+
margin: $modal-dialog-margin-y-sm-up auto;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
.modal-dialog-scrollable {
|
| 171 |
+
height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
.modal-dialog-centered {
|
| 175 |
+
min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
.modal-content {
|
| 179 |
+
@include box-shadow($modal-content-box-shadow-sm-up);
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
.modal-sm { max-width: $modal-sm; }
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
@include media-breakpoint-up(lg) {
|
| 186 |
+
.modal-lg,
|
| 187 |
+
.modal-xl {
|
| 188 |
+
max-width: $modal-lg;
|
| 189 |
+
}
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
@include media-breakpoint-up(xl) {
|
| 193 |
+
.modal-xl { max-width: $modal-xl; }
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
// scss-docs-start modal-fullscreen-loop
|
| 197 |
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
| 198 |
+
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
| 199 |
+
$postfix: if($infix != "", $infix + "-down", "");
|
| 200 |
+
|
| 201 |
+
@include media-breakpoint-down($breakpoint) {
|
| 202 |
+
.modal-fullscreen#{$postfix} {
|
| 203 |
+
width: 100vw;
|
| 204 |
+
max-width: none;
|
| 205 |
+
height: 100%;
|
| 206 |
+
margin: 0;
|
| 207 |
+
|
| 208 |
+
.modal-content {
|
| 209 |
+
height: 100%;
|
| 210 |
+
border: 0;
|
| 211 |
+
@include border-radius(0);
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
.modal-header {
|
| 215 |
+
@include border-radius(0);
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
.modal-body {
|
| 219 |
+
overflow-y: auto;
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
.modal-footer {
|
| 223 |
+
@include border-radius(0);
|
| 224 |
+
}
|
| 225 |
+
}
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
// scss-docs-end modal-fullscreen-loop
|
static/scss/bootstrap/scss/_nav.scss
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Base class
|
| 2 |
+
//
|
| 3 |
+
// Kickstart any navigation component with a set of style resets. Works with
|
| 4 |
+
// `<nav>`s, `<ul>`s or `<ol>`s.
|
| 5 |
+
|
| 6 |
+
.nav {
|
| 7 |
+
display: flex;
|
| 8 |
+
flex-wrap: wrap;
|
| 9 |
+
padding-left: 0;
|
| 10 |
+
margin-bottom: 0;
|
| 11 |
+
list-style: none;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.nav-link {
|
| 15 |
+
display: block;
|
| 16 |
+
padding: $nav-link-padding-y $nav-link-padding-x;
|
| 17 |
+
@include font-size($nav-link-font-size);
|
| 18 |
+
font-weight: $nav-link-font-weight;
|
| 19 |
+
color: $nav-link-color;
|
| 20 |
+
text-decoration: if($link-decoration == none, null, none);
|
| 21 |
+
@include transition($nav-link-transition);
|
| 22 |
+
|
| 23 |
+
&:hover,
|
| 24 |
+
&:focus {
|
| 25 |
+
color: $nav-link-hover-color;
|
| 26 |
+
text-decoration: if($link-hover-decoration == underline, none, null);
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
// Disabled state lightens text
|
| 30 |
+
&.disabled {
|
| 31 |
+
color: $nav-link-disabled-color;
|
| 32 |
+
pointer-events: none;
|
| 33 |
+
cursor: default;
|
| 34 |
+
}
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
//
|
| 38 |
+
// Tabs
|
| 39 |
+
//
|
| 40 |
+
|
| 41 |
+
.nav-tabs {
|
| 42 |
+
border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
|
| 43 |
+
|
| 44 |
+
.nav-link {
|
| 45 |
+
margin-bottom: -$nav-tabs-border-width;
|
| 46 |
+
background: none;
|
| 47 |
+
border: $nav-tabs-border-width solid transparent;
|
| 48 |
+
@include border-top-radius($nav-tabs-border-radius);
|
| 49 |
+
|
| 50 |
+
&:hover,
|
| 51 |
+
&:focus {
|
| 52 |
+
border-color: $nav-tabs-link-hover-border-color;
|
| 53 |
+
// Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
|
| 54 |
+
isolation: isolate;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
&.disabled {
|
| 58 |
+
color: $nav-link-disabled-color;
|
| 59 |
+
background-color: transparent;
|
| 60 |
+
border-color: transparent;
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
.nav-link.active,
|
| 65 |
+
.nav-item.show .nav-link {
|
| 66 |
+
color: $nav-tabs-link-active-color;
|
| 67 |
+
background-color: $nav-tabs-link-active-bg;
|
| 68 |
+
border-color: $nav-tabs-link-active-border-color;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
.dropdown-menu {
|
| 72 |
+
// Make dropdown border overlap tab border
|
| 73 |
+
margin-top: -$nav-tabs-border-width;
|
| 74 |
+
// Remove the top rounded corners here since there is a hard edge above the menu
|
| 75 |
+
@include border-top-radius(0);
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
//
|
| 81 |
+
// Pills
|
| 82 |
+
//
|
| 83 |
+
|
| 84 |
+
.nav-pills {
|
| 85 |
+
.nav-link {
|
| 86 |
+
background: none;
|
| 87 |
+
border: 0;
|
| 88 |
+
@include border-radius($nav-pills-border-radius);
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.nav-link.active,
|
| 92 |
+
.show > .nav-link {
|
| 93 |
+
color: $nav-pills-link-active-color;
|
| 94 |
+
@include gradient-bg($nav-pills-link-active-bg);
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
//
|
| 100 |
+
// Justified variants
|
| 101 |
+
//
|
| 102 |
+
|
| 103 |
+
.nav-fill {
|
| 104 |
+
> .nav-link,
|
| 105 |
+
.nav-item {
|
| 106 |
+
flex: 1 1 auto;
|
| 107 |
+
text-align: center;
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
.nav-justified {
|
| 112 |
+
> .nav-link,
|
| 113 |
+
.nav-item {
|
| 114 |
+
flex-basis: 0;
|
| 115 |
+
flex-grow: 1;
|
| 116 |
+
text-align: center;
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.nav-fill,
|
| 121 |
+
.nav-justified {
|
| 122 |
+
.nav-item .nav-link {
|
| 123 |
+
width: 100%; // Make sure button will grow
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
// Tabbable tabs
|
| 129 |
+
//
|
| 130 |
+
// Hide tabbable panes to start, show them when `.active`
|
| 131 |
+
|
| 132 |
+
.tab-content {
|
| 133 |
+
> .tab-pane {
|
| 134 |
+
display: none;
|
| 135 |
+
}
|
| 136 |
+
> .active {
|
| 137 |
+
display: block;
|
| 138 |
+
}
|
| 139 |
+
}
|
static/scss/bootstrap/scss/_navbar.scss
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Contents
|
| 2 |
+
//
|
| 3 |
+
// Navbar
|
| 4 |
+
// Navbar brand
|
| 5 |
+
// Navbar nav
|
| 6 |
+
// Navbar text
|
| 7 |
+
// Responsive navbar
|
| 8 |
+
// Navbar position
|
| 9 |
+
// Navbar themes
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
// Navbar
|
| 13 |
+
//
|
| 14 |
+
// Provide a static navbar from which we expand to create full-width, fixed, and
|
| 15 |
+
// other navbar variations.
|
| 16 |
+
|
| 17 |
+
.navbar {
|
| 18 |
+
position: relative;
|
| 19 |
+
display: flex;
|
| 20 |
+
flex-wrap: wrap; // allow us to do the line break for collapsing content
|
| 21 |
+
align-items: center;
|
| 22 |
+
justify-content: space-between; // space out brand from logo
|
| 23 |
+
padding-top: $navbar-padding-y;
|
| 24 |
+
padding-right: $navbar-padding-x; // default: null
|
| 25 |
+
padding-bottom: $navbar-padding-y;
|
| 26 |
+
padding-left: $navbar-padding-x; // default: null
|
| 27 |
+
@include gradient-bg();
|
| 28 |
+
|
| 29 |
+
// Because flex properties aren't inherited, we need to redeclare these first
|
| 30 |
+
// few properties so that content nested within behave properly.
|
| 31 |
+
// The `flex-wrap` property is inherited to simplify the expanded navbars
|
| 32 |
+
%container-flex-properties {
|
| 33 |
+
display: flex;
|
| 34 |
+
flex-wrap: inherit;
|
| 35 |
+
align-items: center;
|
| 36 |
+
justify-content: space-between;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
> .container,
|
| 40 |
+
> .container-fluid {
|
| 41 |
+
@extend %container-flex-properties;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
@each $breakpoint, $container-max-width in $container-max-widths {
|
| 45 |
+
> .container#{breakpoint-infix($breakpoint, $container-max-widths)} {
|
| 46 |
+
@extend %container-flex-properties;
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
// Navbar brand
|
| 53 |
+
//
|
| 54 |
+
// Used for brand, project, or site names.
|
| 55 |
+
|
| 56 |
+
.navbar-brand {
|
| 57 |
+
padding-top: $navbar-brand-padding-y;
|
| 58 |
+
padding-bottom: $navbar-brand-padding-y;
|
| 59 |
+
margin-right: $navbar-brand-margin-end;
|
| 60 |
+
@include font-size($navbar-brand-font-size);
|
| 61 |
+
text-decoration: if($link-decoration == none, null, none);
|
| 62 |
+
white-space: nowrap;
|
| 63 |
+
|
| 64 |
+
&:hover,
|
| 65 |
+
&:focus {
|
| 66 |
+
text-decoration: if($link-hover-decoration == underline, none, null);
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
// Navbar nav
|
| 72 |
+
//
|
| 73 |
+
// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).
|
| 74 |
+
|
| 75 |
+
.navbar-nav {
|
| 76 |
+
display: flex;
|
| 77 |
+
flex-direction: column; // cannot use `inherit` to get the `.navbar`s value
|
| 78 |
+
padding-left: 0;
|
| 79 |
+
margin-bottom: 0;
|
| 80 |
+
list-style: none;
|
| 81 |
+
|
| 82 |
+
.nav-link {
|
| 83 |
+
padding-right: 0;
|
| 84 |
+
padding-left: 0;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
.dropdown-menu {
|
| 88 |
+
position: static;
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
// Navbar text
|
| 94 |
+
//
|
| 95 |
+
//
|
| 96 |
+
|
| 97 |
+
.navbar-text {
|
| 98 |
+
padding-top: $nav-link-padding-y;
|
| 99 |
+
padding-bottom: $nav-link-padding-y;
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
|
| 103 |
+
// Responsive navbar
|
| 104 |
+
//
|
| 105 |
+
// Custom styles for responsive collapsing and toggling of navbar contents.
|
| 106 |
+
// Powered by the collapse Bootstrap JavaScript plugin.
|
| 107 |
+
|
| 108 |
+
// When collapsed, prevent the toggleable navbar contents from appearing in
|
| 109 |
+
// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
|
| 110 |
+
// on the `.navbar` parent.
|
| 111 |
+
.navbar-collapse {
|
| 112 |
+
flex-basis: 100%;
|
| 113 |
+
flex-grow: 1;
|
| 114 |
+
// For always expanded or extra full navbars, ensure content aligns itself
|
| 115 |
+
// properly vertically. Can be easily overridden with flex utilities.
|
| 116 |
+
align-items: center;
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
// Button for toggling the navbar when in its collapsed state
|
| 120 |
+
.navbar-toggler {
|
| 121 |
+
padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;
|
| 122 |
+
@include font-size($navbar-toggler-font-size);
|
| 123 |
+
line-height: 1;
|
| 124 |
+
background-color: transparent; // remove default button style
|
| 125 |
+
border: $border-width solid transparent; // remove default button style
|
| 126 |
+
@include border-radius($navbar-toggler-border-radius);
|
| 127 |
+
@include transition($navbar-toggler-transition);
|
| 128 |
+
|
| 129 |
+
&:hover {
|
| 130 |
+
text-decoration: none;
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
&:focus {
|
| 134 |
+
text-decoration: none;
|
| 135 |
+
outline: 0;
|
| 136 |
+
box-shadow: 0 0 0 $navbar-toggler-focus-width;
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
// Keep as a separate element so folks can easily override it with another icon
|
| 141 |
+
// or image file as needed.
|
| 142 |
+
.navbar-toggler-icon {
|
| 143 |
+
display: inline-block;
|
| 144 |
+
width: 1.5em;
|
| 145 |
+
height: 1.5em;
|
| 146 |
+
vertical-align: middle;
|
| 147 |
+
background-repeat: no-repeat;
|
| 148 |
+
background-position: center;
|
| 149 |
+
background-size: 100%;
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
.navbar-nav-scroll {
|
| 153 |
+
max-height: var(--#{$variable-prefix}scroll-height, 75vh);
|
| 154 |
+
overflow-y: auto;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
// scss-docs-start navbar-expand-loop
|
| 158 |
+
// Generate series of `.navbar-expand-*` responsive classes for configuring
|
| 159 |
+
// where your navbar collapses.
|
| 160 |
+
.navbar-expand {
|
| 161 |
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
| 162 |
+
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
| 163 |
+
$infix: breakpoint-infix($next, $grid-breakpoints);
|
| 164 |
+
|
| 165 |
+
// stylelint-disable-next-line scss/selector-no-union-class-name
|
| 166 |
+
&#{$infix} {
|
| 167 |
+
@include media-breakpoint-up($next) {
|
| 168 |
+
flex-wrap: nowrap;
|
| 169 |
+
justify-content: flex-start;
|
| 170 |
+
|
| 171 |
+
.navbar-nav {
|
| 172 |
+
flex-direction: row;
|
| 173 |
+
|
| 174 |
+
.dropdown-menu {
|
| 175 |
+
position: absolute;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
.nav-link {
|
| 179 |
+
padding-right: $navbar-nav-link-padding-x;
|
| 180 |
+
padding-left: $navbar-nav-link-padding-x;
|
| 181 |
+
}
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
.navbar-nav-scroll {
|
| 185 |
+
overflow: visible;
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
.navbar-collapse {
|
| 189 |
+
display: flex !important; // stylelint-disable-line declaration-no-important
|
| 190 |
+
flex-basis: auto;
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
.navbar-toggler {
|
| 194 |
+
display: none;
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
}
|
| 198 |
+
}
|
| 199 |
+
}
|
| 200 |
+
// scss-docs-end navbar-expand-loop
|
| 201 |
+
|
| 202 |
+
|
| 203 |
+
// Navbar themes
|
| 204 |
+
//
|
| 205 |
+
// Styles for switching between navbars with light or dark background.
|
| 206 |
+
|
| 207 |
+
// Dark links against a light background
|
| 208 |
+
.navbar-light {
|
| 209 |
+
.navbar-brand {
|
| 210 |
+
color: $navbar-light-brand-color;
|
| 211 |
+
|
| 212 |
+
&:hover,
|
| 213 |
+
&:focus {
|
| 214 |
+
color: $navbar-light-brand-hover-color;
|
| 215 |
+
}
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
.navbar-nav {
|
| 219 |
+
.nav-link {
|
| 220 |
+
color: $navbar-light-color;
|
| 221 |
+
|
| 222 |
+
&:hover,
|
| 223 |
+
&:focus {
|
| 224 |
+
color: $navbar-light-hover-color;
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
&.disabled {
|
| 228 |
+
color: $navbar-light-disabled-color;
|
| 229 |
+
}
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
.show > .nav-link,
|
| 233 |
+
.nav-link.active {
|
| 234 |
+
color: $navbar-light-active-color;
|
| 235 |
+
}
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
.navbar-toggler {
|
| 239 |
+
color: $navbar-light-color;
|
| 240 |
+
border-color: $navbar-light-toggler-border-color;
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
.navbar-toggler-icon {
|
| 244 |
+
background-image: escape-svg($navbar-light-toggler-icon-bg);
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
.navbar-text {
|
| 248 |
+
color: $navbar-light-color;
|
| 249 |
+
|
| 250 |
+
a,
|
| 251 |
+
a:hover,
|
| 252 |
+
a:focus {
|
| 253 |
+
color: $navbar-light-active-color;
|
| 254 |
+
}
|
| 255 |
+
}
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
// White links against a dark background
|
| 259 |
+
.navbar-dark {
|
| 260 |
+
.navbar-brand {
|
| 261 |
+
color: $navbar-dark-brand-color;
|
| 262 |
+
|
| 263 |
+
&:hover,
|
| 264 |
+
&:focus {
|
| 265 |
+
color: $navbar-dark-brand-hover-color;
|
| 266 |
+
}
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
.navbar-nav {
|
| 270 |
+
.nav-link {
|
| 271 |
+
color: $navbar-dark-color;
|
| 272 |
+
|
| 273 |
+
&:hover,
|
| 274 |
+
&:focus {
|
| 275 |
+
color: $navbar-dark-hover-color;
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
&.disabled {
|
| 279 |
+
color: $navbar-dark-disabled-color;
|
| 280 |
+
}
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
.show > .nav-link,
|
| 284 |
+
.nav-link.active {
|
| 285 |
+
color: $navbar-dark-active-color;
|
| 286 |
+
}
|
| 287 |
+
}
|
| 288 |
+
|
| 289 |
+
.navbar-toggler {
|
| 290 |
+
color: $navbar-dark-color;
|
| 291 |
+
border-color: $navbar-dark-toggler-border-color;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
.navbar-toggler-icon {
|
| 295 |
+
background-image: escape-svg($navbar-dark-toggler-icon-bg);
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
.navbar-text {
|
| 299 |
+
color: $navbar-dark-color;
|
| 300 |
+
a,
|
| 301 |
+
a:hover,
|
| 302 |
+
a:focus {
|
| 303 |
+
color: $navbar-dark-active-color;
|
| 304 |
+
}
|
| 305 |
+
}
|
| 306 |
+
}
|
static/scss/bootstrap/scss/_offcanvas.scss
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.offcanvas {
|
| 2 |
+
position: fixed;
|
| 3 |
+
bottom: 0;
|
| 4 |
+
z-index: $zindex-offcanvas;
|
| 5 |
+
display: flex;
|
| 6 |
+
flex-direction: column;
|
| 7 |
+
max-width: 100%;
|
| 8 |
+
color: $offcanvas-color;
|
| 9 |
+
visibility: hidden;
|
| 10 |
+
background-color: $offcanvas-bg-color;
|
| 11 |
+
background-clip: padding-box;
|
| 12 |
+
outline: 0;
|
| 13 |
+
@include box-shadow($offcanvas-box-shadow);
|
| 14 |
+
@include transition(transform $offcanvas-transition-duration ease-in-out);
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
.offcanvas-header {
|
| 18 |
+
display: flex;
|
| 19 |
+
align-items: center;
|
| 20 |
+
justify-content: space-between;
|
| 21 |
+
padding: $offcanvas-padding-y $offcanvas-padding-x;
|
| 22 |
+
|
| 23 |
+
.btn-close {
|
| 24 |
+
padding: ($offcanvas-padding-y / 2) ($offcanvas-padding-x / 2);
|
| 25 |
+
margin: ($offcanvas-padding-y / -2) ($offcanvas-padding-x / -2) ($offcanvas-padding-y / -2) auto;
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
.offcanvas-title {
|
| 30 |
+
margin-bottom: 0;
|
| 31 |
+
line-height: $offcanvas-title-line-height;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.offcanvas-body {
|
| 35 |
+
flex-grow: 1;
|
| 36 |
+
padding: $offcanvas-padding-y $offcanvas-padding-x;
|
| 37 |
+
overflow-y: auto;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
.offcanvas-start {
|
| 41 |
+
top: 0;
|
| 42 |
+
left: 0;
|
| 43 |
+
width: $offcanvas-horizontal-width;
|
| 44 |
+
border-right: $offcanvas-border-width solid $offcanvas-border-color;
|
| 45 |
+
transform: translateX(-100%);
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.offcanvas-end {
|
| 49 |
+
top: 0;
|
| 50 |
+
right: 0;
|
| 51 |
+
width: $offcanvas-horizontal-width;
|
| 52 |
+
border-left: $offcanvas-border-width solid $offcanvas-border-color;
|
| 53 |
+
transform: translateX(100%);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
.offcanvas-top {
|
| 57 |
+
top: 0;
|
| 58 |
+
right: 0;
|
| 59 |
+
left: 0;
|
| 60 |
+
height: $offcanvas-vertical-height;
|
| 61 |
+
max-height: 100%;
|
| 62 |
+
border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
|
| 63 |
+
transform: translateY(-100%);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.offcanvas-bottom {
|
| 67 |
+
right: 0;
|
| 68 |
+
left: 0;
|
| 69 |
+
height: $offcanvas-vertical-height;
|
| 70 |
+
max-height: 100%;
|
| 71 |
+
border-top: $offcanvas-border-width solid $offcanvas-border-color;
|
| 72 |
+
transform: translateY(100%);
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
.offcanvas.show {
|
| 76 |
+
transform: none;
|
| 77 |
+
}
|