mirror of
https://github.com/marcogll/soul23_placeholder_site_server.git
synced 2026-01-13 13:25:18 +00:00
feat: Add initial project structure with HTML, CSS, JavaScript libraries, and image assets.
This commit is contained in:
19
README.md
Normal file
19
README.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Soul:23 coming soon page
|
||||||
|
|
||||||
|
A responsive landing page built with Bootstrap 4 that keeps a countdown and lets visitors request updates via the email form. A live preview is available at https://solu23.cloud.
|
||||||
|
|
||||||
|
**Author:** Marco Gallegos
|
||||||
|
|
||||||
|
## Subscription form
|
||||||
|
|
||||||
|
The notification form is purely client-side; fill it out, but no emails are sent or stored until you connect it to your own backend.
|
||||||
|
|
||||||
|
## Changing the countdown target
|
||||||
|
|
||||||
|
The timer reads its target date from the `data-date` attribute on the `#countdown-timer` element in `index.html`. Update that attribute to any valid timestamp, for example:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="countdown-timer" data-date="January 17, 2025 03:24:00">
|
||||||
|
```
|
||||||
|
|
||||||
|
If you prefer keeping the attribute dynamic, reassign the `countDownDate` variable inside `js/countdown.js` before the interval starts.
|
||||||
147
css/addons/datatables.css
Normal file
147
css/addons/datatables.css
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* MDBootstrap integration with Datatables
|
||||||
|
* Learn more: https://mdbootstrap.com/docs/jquery/tables/datatables/
|
||||||
|
* About MDBootstrap: https://mdbootstrap.com/
|
||||||
|
*
|
||||||
|
* This combined file was created by the DataTables downloader builder:
|
||||||
|
* https://datatables.net/download
|
||||||
|
*
|
||||||
|
* To rebuild or modify this file with the latest versions of the included
|
||||||
|
* software please visit:
|
||||||
|
* https://datatables.net/download/#bs4/dt-1.10.18
|
||||||
|
*
|
||||||
|
* Included libraries:
|
||||||
|
* DataTables 1.10.18
|
||||||
|
*/
|
||||||
|
table.dataTable thead {
|
||||||
|
cursor: pointer; }
|
||||||
|
table.dataTable thead > tr > th:active, table.dataTable thead > tr > td:active {
|
||||||
|
outline: none; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label {
|
||||||
|
margin-top: 1.2rem;
|
||||||
|
margin-right: 1rem; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span, div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown {
|
||||||
|
margin-top: 1rem; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_length label {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: normal;
|
||||||
|
padding-top: .5rem;
|
||||||
|
padding-bottom: .5rem; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_filter label {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: normal;
|
||||||
|
padding-top: .5rem;
|
||||||
|
padding-bottom: .5rem; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_length select, div.dataTables_wrapper div.dataTables_length input {
|
||||||
|
width: auto; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_filter {
|
||||||
|
text-align: right; }
|
||||||
|
div.dataTables_wrapper div.dataTables_filter select {
|
||||||
|
width: auto; }
|
||||||
|
div.dataTables_wrapper div.dataTables_filter input {
|
||||||
|
width: auto;
|
||||||
|
margin-left: .5rem;
|
||||||
|
display: inline-block; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_info {
|
||||||
|
font-weight: normal;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem; }
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_paginate {
|
||||||
|
font-weight: normal;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
text-align: right;
|
||||||
|
margin: 0; }
|
||||||
|
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
|
||||||
|
-webkit-box-pack: end;
|
||||||
|
-webkit-justify-content: flex-end;
|
||||||
|
-ms-flex-pack: end;
|
||||||
|
justify-content: flex-end; }
|
||||||
|
div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus {
|
||||||
|
background-color: #4285f4; }
|
||||||
|
div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus {
|
||||||
|
-webkit-box-shadow: none;
|
||||||
|
box-shadow: none; }
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
div.dataTables_wrapper div .dataTables_length, div.dataTables_wrapper div .dataTables_filter, div.dataTables_wrapper div .dataTables_info, div.dataTables_wrapper div .dataTables_paginate ul.pagination {
|
||||||
|
text-align: center;
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-webkit-justify-content: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
justify-content: center; } }
|
||||||
|
|
||||||
|
.bs-select select {
|
||||||
|
display: inline-block !important; }
|
||||||
|
|
||||||
|
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting {
|
||||||
|
padding-right: 30px; }
|
||||||
|
|
||||||
|
table.dataTable thead > tr > td.sorting_asc, table.dataTable thead > tr > td.sorting_desc, table.dataTable thead > tr > td.sorting {
|
||||||
|
padding-right: 30px; }
|
||||||
|
|
||||||
|
table.dataTable thead > tr > th:active, table.dataTable thead > tr > td:active {
|
||||||
|
outline: none; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled {
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.9em;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.3; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_asc:after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.9em;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.3; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_desc:before, table.dataTable thead .sorting_desc:after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.9em;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.3; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_asc_disabled:after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.9em;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.3; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_desc_disabled:before, table.dataTable thead .sorting_desc_disabled:after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.9em;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.3; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting:before, table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_desc:before, table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_desc_disabled:before {
|
||||||
|
right: 1em;
|
||||||
|
content: "\f0de";
|
||||||
|
font-family: 'Font Awesome\ 5 Free';
|
||||||
|
font-weight: 900;
|
||||||
|
font-size: 1rem; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after, table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after {
|
||||||
|
right: 0.5em;
|
||||||
|
content: "\f0dd";
|
||||||
|
font-family: 'Font Awesome\ 5 Free';
|
||||||
|
font-weight: 900;
|
||||||
|
right: 16px;
|
||||||
|
font-size: 1rem; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_desc:after {
|
||||||
|
opacity: 1; }
|
||||||
|
|
||||||
|
table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_desc_disabled:after {
|
||||||
|
opacity: 0; }
|
||||||
1
css/addons/datatables.min.css
vendored
Normal file
1
css/addons/datatables.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
div.dataTables_wrapper div.dataTables_filter select,div.dataTables_wrapper div.dataTables_length input,div.dataTables_wrapper div.dataTables_length select{width:auto}table.dataTable thead{cursor:pointer}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label{margin-top:1.2rem;margin-right:1rem}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown,div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span{margin-top:1rem}div.dataTables_wrapper div.dataTables_filter label,div.dataTables_wrapper div.dataTables_length label{text-align:left;font-weight:400;padding-top:.5rem;padding-bottom:.5rem}div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{font-weight:400;padding-top:1rem;padding-bottom:1rem}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{width:auto;margin-left:.5rem;display:inline-block}div.dataTables_wrapper div.dataTables_paginate{text-align:right;margin:0}div.dataTables_wrapper div.dataTables_paginate ul.pagination{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus{background-color:#4285f4}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus{-webkit-box-shadow:none;box-shadow:none}@media (max-width:767px){div.dataTables_wrapper div .dataTables_filter,div.dataTables_wrapper div .dataTables_info,div.dataTables_wrapper div .dataTables_length,div.dataTables_wrapper div .dataTables_paginate ul.pagination{text-align:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.bs-select select{display:inline-block!important}table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc{padding-right:30px}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:after,table.dataTable thead .sorting_desc_disabled:before{position:absolute;bottom:.9em;display:block;opacity:.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\f0de";font-family:'Font Awesome\ 5 Free';font-weight:900;font-size:1rem}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc_disabled:after{content:"\f0dd";font-family:'Font Awesome\ 5 Free';font-weight:900;right:16px;font-size:1rem}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}
|
||||||
7
css/bootstrap.min.css
vendored
Normal file
7
css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
38
css/mdb.lite.min.css
vendored
Normal file
38
css/mdb.lite.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
44
css/mdb.min.css
vendored
Executable file
44
css/mdb.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
2327
css/modules/animations-extended.css
Normal file
2327
css/modules/animations-extended.css
Normal file
File diff suppressed because it is too large
Load Diff
7
css/modules/animations-extended.min.css
vendored
Normal file
7
css/modules/animations-extended.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
46
css/style.css
Normal file
46
css/style.css
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/* Required height of parents of the Full Page Intro and Intro itself */
|
||||||
|
.timer-box {
|
||||||
|
background: rgba(10, 10, 10, 0.9);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
font-family: "Barlow", sans-serif;
|
||||||
|
align-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timer-box-num {
|
||||||
|
font-size: 30pt;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timer-box-text {
|
||||||
|
font-size: 10pt;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
font-family: "Barlow", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.h4 {
|
||||||
|
font-family: "Barlow", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
a > i.social-icon:hover {
|
||||||
|
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
input:-webkit-autofill,
|
||||||
|
input:-webkit-autofill:hover,
|
||||||
|
input:-webkit-autofill:focus,
|
||||||
|
input:-webkit-autofill:active {
|
||||||
|
-webkit-box-shadow: 0 0 0 30px white inset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifs-forn-input,
|
||||||
|
#notifs-form-input:focus {
|
||||||
|
border: solid 2px #ccc;
|
||||||
|
}
|
||||||
1
img/logo.svg
Normal file
1
img/logo.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="434.363" height="139.64" viewBox="0 0 434.363 139.64"><path d="M13.665 112.856v-13.5h13.909l.295 6.75.296 6.75 16.75.274 16.75.274V87.356h-10v-14h-23v-13h-15v-47h63v23h-15v-12h-33v23.89l4.75.305c4.74.304 4.75.312 4.42 3.67-.18 1.851-.06 4.439.27 5.75.589 2.347.79 2.385 12.531 2.385H62.57l.297 6.18.298 6.179 6.75-.249 6.75-.248v54.138h-63Zm74-43v-56.5h59v113h-59zm45.214 5c.118-21.175.23-41.088.25-44.25l.036-5.75-16.401-.276-16.402-.275.652 9.18c.358 5.048.651 25.084.651 44.525v35.346h31zm25.786-5.036V13.284l9.75.286 9.75.286.245 49.5.245 49.5h21.51l.26-49.75.259-49.75h54.981v100h28v13h-48v-102h-15v102h-62zm136 23.536v-33h31v-12h11v-24h-30v12h-12v-23h53v60h-41v40.075l9.25-.287 9.25-.288.296-6.75.296-6.75h21.908v27h-53zm64 19.5v-13.5h18v14.058l13.25-.279 13.25-.279.271-19.75.271-19.75h-14.042v-12h14.045l-.272-18.25-.273-18.25-13.25-.279-13.25-.28v12.059h-18v-23h62v48h-10v11.626l4.75-.063 4.75-.063.266 26.75.267 26.75h-62.033Zm-88-24v-9.5h13v19h-13zm88-34.5v-6h18v12h-18z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
BIN
img/logo_2.png
Normal file
BIN
img/logo_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
22
img/logo_2.svg
Normal file
22
img/logo_2.svg
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
width="500"
|
||||||
|
height="143.34241"
|
||||||
|
viewBox="0 0 500 143.34241"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
id="g1"
|
||||||
|
transform="translate(0,-175.95109)">
|
||||||
|
<path
|
||||||
|
style="fill:#000000"
|
||||||
|
d="m 46.483663,293.03617 v -13.5 h 6.95431 6.95431 l 0.29569,6.75 0.29569,6.75 16.75,0.27418 16.750004,0.27418 v -13.02418 -13.02418 h -5.000004 -5 v -7 -7 h -11.5 -11.5 v -6.5 -6.5 h -7.5 -7.5 v -23.5 -23.5 h 31.5 31.500007 v 11.5 11.5 h -7.5 -7.500003 v -6 -6 h -16.500004 -16.5 v 11.94521 11.94521 l 4.75,0.30479 c 4.740618,0.30419 4.749349,0.31144 4.420569,3.67024 -0.181187,1.851 -0.06011,4.4385 0.269052,5.75 0.588828,2.34608 0.790996,2.38455 12.531714,2.38455 h 11.933229 l 0.29772,6.17936 0.29772,6.17936 6.750003,-0.24828 6.75,-0.24827 v 27.06891 27.06892 h -31.500007 -31.5 z m 74.000007,-43 v -56.5 h 29.5 29.5 v 56.5 56.5 h -29.5 -29.5 z m 45.21429,5 c 0.11785,-21.175 0.23035,-41.0875 0.25,-44.25 l 0.0357,-5.75 -16.40155,-0.2755 -16.40156,-0.2755 0.65156,9.17913 c 0.35836,5.04851 0.65156,25.08499 0.65156,44.52549 v 35.34638 h 15.5 15.5 z m 25.78571,-5.03621 v -56.53621 l 9.75,0.28621 9.75,0.28621 0.24489,49.5 0.24489,49.5 h 10.75511 10.75511 l 0.25934,-49.75 0.25933,-49.75 h 27.49067 27.49066 v 50 50 h 14 14 v 6.5 6.5 h -24 -24 v -51 -51 h -7.5 -7.5 v 51 51 h -31 -31 z m 136,23.53621 v -33 h 15.5 15.5 v -6 -6 h 5.5 5.5 v -12 -12 h -15 -15 v 6 6 h -6 -6 v -11.5 -11.5 h 26.5 26.5 v 30 30 h -20.5 -20.5 v 20.03753 20.03752 l 9.25,-0.28752 9.25,-0.28753 0.29569,-6.75 0.29569,-6.75 h 10.95431 10.95431 v 13.5 13.5 h -26.5 -26.5 z m 64,19.5 v -13.5 h 9 9 v 7.02903 7.02902 l 13.25,-0.27902 13.25,-0.27903 0.27114,-19.75 0.27114,-19.75 h -7.02114 -7.02114 v -6 -6 h 7.02256 7.02256 l -0.27256,-18.25 -0.27256,-18.25 -13.25,-0.27903 -13.25,-0.27902 v 6.02902 6.02903 h -9 -9 v -11.5 -11.5 h 31 31 v 24 24 h -5 -5 v 5.81284 5.81284 l 4.75,-0.0628 4.75,-0.0628 0.26633,26.75 0.26634,26.75 H 422.5 391.48367 Z m -88,-24 v -9.5 h 6.5 6.5 v 9.5 9.5 h -6.5 -6.5 z m 88,-34.5 v -6 h 9 9 v 6 6 h -9 -9 z"
|
||||||
|
id="path1" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
BIN
img/logo_new.png
Normal file
BIN
img/logo_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
140
index.html
Normal file
140
index.html
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="es">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
|
<title>Soul:23 | Hello there</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
|
||||||
|
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="css/mdb.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Barlow" rel="stylesheet">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<div class="container mt-5">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<center>
|
||||||
|
<img src="img/logo_2.svg" class="mr-3" style="max-width: 250px; height: auto; display: block;">
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container mt-5">
|
||||||
|
<div class="row justify-content-center" id="countdown-timer" data-date="November 11, 2027 11:11:11">
|
||||||
|
<div class="col-md-2 col-lg-1 col-4 mb-2 mb-md-0 timer-box pt-4 pb-4 mr-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-num" name="days">666</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-text">Días</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 col-lg-1 col-4 mb-2 mb-md-0 timer-box pt-4 pb-4 mr-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-num" name="hours">66</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-text">Horas</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 col-lg-1 col-4 timer-box pt-4 pb-4 mr-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-num" name="minutes">66</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-text">Minutos</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 col-lg-1 col-4 timer-box pt-4 pb-4 mr-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-num" name="seconds">66</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="timer-box-text">Segundos</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="container mt-5">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 content">
|
||||||
|
<center>
|
||||||
|
<h4>Próximamente. Suscríbete para recibir notificaciones de actualizaciones futuras.</h4>
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mt-3 text-center">
|
||||||
|
<div class="col-12">
|
||||||
|
<form class="form-inline" style="display: inline" id="notifs-form">
|
||||||
|
<input type="email" class="form-control" id="notifs-form-input" aria-describedby="emailHelp"
|
||||||
|
placeholder="Enter email">
|
||||||
|
<button type="button" class="btn btn-dark mt-2 mt-md-0" id="notifs-form-btn">¡Te avisamos!</button>
|
||||||
|
<label class="notified-label"></label>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<footer class="text-center page-footer">
|
||||||
|
<div class="pb-4 pt-4">
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<i class="fab fa-facebook-f mr-3 social-icon"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<i class="fab fa-twitter mr-3 social-icon"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<i class="fab fa-instagram mr-3 social-icon"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<i class="fab fa-snapchat mr-3 social-icon"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script type="text/javascript" src="js/popper.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/bootstrap.min.js"></script>
|
||||||
|
<script src="js/require.js" type="text/javascript"></script>
|
||||||
|
<script src="js/countdown.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
15500
js/addons/datatables.js
Normal file
15500
js/addons/datatables.js
Normal file
File diff suppressed because it is too large
Load Diff
3
js/addons/datatables.min.js
vendored
Normal file
3
js/addons/datatables.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
3944
js/bootstrap.js
vendored
Executable file
3944
js/bootstrap.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
7
js/bootstrap.min.js
vendored
Executable file
7
js/bootstrap.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
33
js/countdown.js
Normal file
33
js/countdown.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
var dateData = document.getElementById('countdown-timer').getAttribute('data-date');
|
||||||
|
var countDownDate = new Date(dateData).getTime();
|
||||||
|
|
||||||
|
// Update the count down every 1 second
|
||||||
|
var x = setInterval(function () {
|
||||||
|
|
||||||
|
// Get todays date and time
|
||||||
|
var now = new Date().getTime();
|
||||||
|
|
||||||
|
// Find the distance between now an the count down date
|
||||||
|
var distance = countDownDate - now;
|
||||||
|
|
||||||
|
// Time calculations for days, hours, minutes and seconds
|
||||||
|
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
|
||||||
|
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||||
|
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||||
|
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||||
|
|
||||||
|
if (distance > 0) {
|
||||||
|
$("div[name='seconds']").html(seconds);
|
||||||
|
$("div[name='minutes']").html(minutes);
|
||||||
|
$("div[name='hours']").html(hours);
|
||||||
|
$("div[name='days']").html(days);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$("div[name='seconds']").html("-");
|
||||||
|
$("div[name='minutes']").html("-");
|
||||||
|
$("div[name='hours']").html("-");
|
||||||
|
$("div[name='days']").html("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
54
js/firebase_configuration.js
Normal file
54
js/firebase_configuration.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
// Initialize Firebase
|
||||||
|
function validateEmail(email) {
|
||||||
|
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||||
|
return re.test(String(email).toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
apiKey: "<YOUR FIREBASE API KEY>",
|
||||||
|
authDomain: "<FIREBASE AUTH DOMAIN>",
|
||||||
|
databaseURL: "<DB URL>",
|
||||||
|
projectId: "<PROJECT ID>",
|
||||||
|
storageBucket: "<STRORAGE BUKCET>",
|
||||||
|
messagingSenderId: "<MESSAGE SENDER ID>"
|
||||||
|
};
|
||||||
|
firebase.initializeApp(config);
|
||||||
|
var db = firebase.firestore();
|
||||||
|
db.settings({
|
||||||
|
timestampsInSnapshots: true
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
$('#notifs-form-btn').click(function (e) {
|
||||||
|
var is_present = false;
|
||||||
|
email = $('#notifs-form-input').val();
|
||||||
|
if (validateEmail(email)) {
|
||||||
|
db.collection('Emails').get().then(function (qs) {
|
||||||
|
qs.forEach(function (element) {
|
||||||
|
if (element.data()['ID'] == email) {
|
||||||
|
is_present = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (is_present == false) {
|
||||||
|
db.collection("Emails").add({
|
||||||
|
'ID': email,
|
||||||
|
})
|
||||||
|
.then(function (docRef) {
|
||||||
|
console.log("Document written with ID: ", docRef.id);
|
||||||
|
$("#notifs-form-btn").text("Notified!");
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.error("Error adding document: ", error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert('Invalid Email');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
2
js/jquery-3.3.1.min.js
vendored
Normal file
2
js/jquery-3.3.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
js/mdb.min.js
vendored
Normal file
1
js/mdb.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14456
js/modules/chart.js
Executable file
14456
js/modules/chart.js
Executable file
File diff suppressed because it is too large
Load Diff
22
js/modules/default-file-input.js
Normal file
22
js/modules/default-file-input.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
$('.input-default-wrapper').on('change', '.input-default-js', function (e) {
|
||||||
|
|
||||||
|
var $this = $(e.target),
|
||||||
|
$label = $this.next('label'),
|
||||||
|
$files = $this[0].files;
|
||||||
|
var fileName = '';
|
||||||
|
|
||||||
|
if ($files && $files.length > 1) {
|
||||||
|
fileName = ($this.attr('data-multiple-target') || '').replace('{target}', $files.length);
|
||||||
|
} else if (e.target.value) {
|
||||||
|
fileName = e.target.value.split('\\').pop();
|
||||||
|
}
|
||||||
|
if (fileName) {
|
||||||
|
$label.find('.span-choose-file').html(fileName);
|
||||||
|
} else {
|
||||||
|
$label.html($label.html());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(jQuery);
|
||||||
26
js/modules/enhanced-modals.js
Executable file
26
js/modules/enhanced-modals.js
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Enhanced Bootstrap Modals
|
||||||
|
https://mdbootstrap.com
|
||||||
|
office@mdbootstrap.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
$('body').on('shown.bs.modal', '.modal', function() {
|
||||||
|
if($('.modal-backdrop').length) {
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$modal_dialog = $(this).children('.modal-dialog')
|
||||||
|
|
||||||
|
if($modal_dialog.hasClass('modal-side')) {
|
||||||
|
$(this).addClass('modal-scrolling');
|
||||||
|
$('body').addClass('scrollable');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($modal_dialog.hasClass('modal-frame')) {
|
||||||
|
$(this).addClass('modal-content-clickable');
|
||||||
|
$('body').addClass('scrollable');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('body').on('hidden.bs.modal', '.modal', function() {
|
||||||
|
$('body').removeClass('scrollable');
|
||||||
|
});
|
||||||
208
js/modules/forms-free.js
Executable file
208
js/modules/forms-free.js
Executable file
@@ -0,0 +1,208 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
|
||||||
|
var inputSelector = ['text', 'password', 'email', 'url', 'tel', 'number', 'search', 'search-md'].map(function (selector) {
|
||||||
|
return 'input[type=' + selector + ']';
|
||||||
|
}).join(', ') + ', textarea';
|
||||||
|
|
||||||
|
var textAreaSelector = '.materialize-textarea';
|
||||||
|
|
||||||
|
var updateTextFields = function updateTextFields($input) {
|
||||||
|
|
||||||
|
var $labelAndIcon = $input.siblings('label, i');
|
||||||
|
var hasValue = $input.val().length;
|
||||||
|
var hasPlaceholder = $input.attr('placeholder');
|
||||||
|
var addOrRemove = (hasValue || hasPlaceholder ? 'add' : 'remove') + 'Class';
|
||||||
|
|
||||||
|
$labelAndIcon[addOrRemove]('active');
|
||||||
|
};
|
||||||
|
|
||||||
|
var validateField = function validateField($input) {
|
||||||
|
|
||||||
|
if ($input.hasClass('validate')) {
|
||||||
|
|
||||||
|
var value = $input.val();
|
||||||
|
var noValue = !value.length;
|
||||||
|
var isValid = !$input[0].validity.badInput;
|
||||||
|
|
||||||
|
if (noValue && isValid) {
|
||||||
|
|
||||||
|
$input.removeClass('valid').removeClass('invalid');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
var valid = $input.is(':valid');
|
||||||
|
var length = Number($input.attr('length')) || 0;
|
||||||
|
|
||||||
|
if (valid && (!length || length > value.length)) {
|
||||||
|
|
||||||
|
$input.removeClass('invalid').addClass('valid');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$input.removeClass('valid').addClass('invalid');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var textAreaAutoResize = function textAreaAutoResize() {
|
||||||
|
|
||||||
|
var $textarea = $(undefined);
|
||||||
|
if ($textarea.val().length) {
|
||||||
|
|
||||||
|
var $hiddenDiv = $('.hiddendiv');
|
||||||
|
var fontFamily = $textarea.css('font-family');
|
||||||
|
var fontSize = $textarea.css('font-size');
|
||||||
|
|
||||||
|
if (fontSize) {
|
||||||
|
|
||||||
|
$hiddenDiv.css('font-size', fontSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fontFamily) {
|
||||||
|
|
||||||
|
$hiddenDiv.css('font-family', fontFamily);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($textarea.attr('wrap') === 'off') {
|
||||||
|
|
||||||
|
$hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre');
|
||||||
|
}
|
||||||
|
|
||||||
|
$hiddenDiv.text($textarea.val() + '\n');
|
||||||
|
var content = $hiddenDiv.html().replace(/\n/g, '<br>');
|
||||||
|
$hiddenDiv.html(content);
|
||||||
|
|
||||||
|
// When textarea is hidden, width goes crazy.
|
||||||
|
// Approximate with half of window size
|
||||||
|
$hiddenDiv.css('width', $textarea.is(':visible') ? $textarea.width() : $(window).width() / 2);
|
||||||
|
$textarea.css('height', $hiddenDiv.height());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(inputSelector).each(function (index, input) {
|
||||||
|
|
||||||
|
var $this = $(input);
|
||||||
|
var $labelAndIcon = $this.siblings('label, i');
|
||||||
|
updateTextFields($this);
|
||||||
|
var isValid = input.validity.badInput;
|
||||||
|
if (isValid) {
|
||||||
|
|
||||||
|
$labelAndIcon.addClass('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('focus', inputSelector, function (e) {
|
||||||
|
|
||||||
|
$(e.target).siblings('label, i').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('blur', inputSelector, function (e) {
|
||||||
|
|
||||||
|
var $this = $(e.target);
|
||||||
|
var noValue = !$this.val();
|
||||||
|
var invalid = !e.target.validity.badInput;
|
||||||
|
var noPlaceholder = $this.attr('placeholder') === undefined;
|
||||||
|
|
||||||
|
if (noValue && invalid && noPlaceholder) {
|
||||||
|
|
||||||
|
$this.siblings('label, i').removeClass('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
validateField($this);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('change', inputSelector, function (e) {
|
||||||
|
|
||||||
|
var $this = $(e.target);
|
||||||
|
updateTextFields($this);
|
||||||
|
validateField($this);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('input[autofocus]').siblings('label, i').addClass('active');
|
||||||
|
|
||||||
|
$(document).on('reset', function (e) {
|
||||||
|
|
||||||
|
var $formReset = $(e.target);
|
||||||
|
if ($formReset.is('form')) {
|
||||||
|
|
||||||
|
var $formInputs = $formReset.find(inputSelector);
|
||||||
|
$formInputs.removeClass('valid').removeClass('invalid').each(function (index, input) {
|
||||||
|
|
||||||
|
var $this = $(input);
|
||||||
|
var noDefaultValue = !$this.val();
|
||||||
|
var noPlaceholder = !$this.attr('placeholder');
|
||||||
|
if (noDefaultValue && noPlaceholder) {
|
||||||
|
$this.siblings('label, i').removeClass('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$formReset.find('select.initialized').each(function (index, select) {
|
||||||
|
|
||||||
|
var $select = $(select);
|
||||||
|
var $visibleInput = $select.siblings('input.select-dropdown');
|
||||||
|
var defaultValue = $select.children('[selected]').val();
|
||||||
|
|
||||||
|
$select.val(defaultValue);
|
||||||
|
$visibleInput.val(defaultValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
|
||||||
|
var $text = $('.md-textarea-auto');
|
||||||
|
if ($text.length) {
|
||||||
|
|
||||||
|
var observe = void 0;
|
||||||
|
if (window.attachEvent) {
|
||||||
|
|
||||||
|
observe = function observe(element, event, handler) {
|
||||||
|
|
||||||
|
element.attachEvent('on' + event, handler);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
|
||||||
|
observe = function observe(element, event, handler) {
|
||||||
|
|
||||||
|
element.addEventListener(event, handler, false);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
$text.each(function () {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
function resize() {
|
||||||
|
|
||||||
|
self.style.height = 'auto';
|
||||||
|
self.style.height = self.scrollHeight + 'px';
|
||||||
|
}
|
||||||
|
|
||||||
|
function delayedResize() {
|
||||||
|
|
||||||
|
window.setTimeout(resize, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
observe(self, 'change', resize);
|
||||||
|
observe(self, 'cut', delayedResize);
|
||||||
|
observe(self, 'paste', delayedResize);
|
||||||
|
observe(self, 'drop', delayedResize);
|
||||||
|
observe(self, 'keydown', delayedResize);
|
||||||
|
|
||||||
|
resize();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
init();
|
||||||
|
|
||||||
|
var $body = $('body');
|
||||||
|
if (!$('.hiddendiv').first().length) {
|
||||||
|
|
||||||
|
var $hiddenDiv = $('<div class="hiddendiv common"></div>');
|
||||||
|
$body.append($hiddenDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(textAreaSelector).each(textAreaAutoResize);
|
||||||
|
$body.on('keyup keydown', textAreaSelector, textAreaAutoResize);
|
||||||
|
})(jQuery);
|
||||||
205
js/modules/jquery.easing.js
Executable file
205
js/modules/jquery.easing.js
Executable file
@@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||||
|
*
|
||||||
|
* Uses the built in easing capabilities added In jQuery 1.1
|
||||||
|
* to offer multiple easing options
|
||||||
|
*
|
||||||
|
* TERMS OF USE - jQuery Easing
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2008 George McGinley Smith
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||||
|
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
||||||
|
|
||||||
|
jQuery.extend( jQuery.easing,
|
||||||
|
{
|
||||||
|
def: 'easeOutQuad',
|
||||||
|
swing: function (x, t, b, c, d) {
|
||||||
|
//alert(jQuery.easing.default);
|
||||||
|
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
||||||
|
},
|
||||||
|
easeInQuad: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuad: function (x, t, b, c, d) {
|
||||||
|
return -c *(t/=d)*(t-2) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuad: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t + b;
|
||||||
|
return -c/2 * ((--t)*(t-2) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInCubic: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutCubic: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutCubic: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuart: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuart: function (x, t, b, c, d) {
|
||||||
|
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuart: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
|
||||||
|
return -c/2 * ((t-=2)*t*t*t - 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuint: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuint: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuint: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInSine: function (x, t, b, c, d) {
|
||||||
|
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
||||||
|
},
|
||||||
|
easeOutSine: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
||||||
|
},
|
||||||
|
easeInOutSine: function (x, t, b, c, d) {
|
||||||
|
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
||||||
|
},
|
||||||
|
easeOutExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutExpo: function (x, t, b, c, d) {
|
||||||
|
if (t==0) return b;
|
||||||
|
if (t==d) return b+c;
|
||||||
|
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
||||||
|
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInCirc: function (x, t, b, c, d) {
|
||||||
|
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
||||||
|
},
|
||||||
|
easeOutCirc: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
||||||
|
},
|
||||||
|
easeInOutCirc: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
|
||||||
|
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
},
|
||||||
|
easeOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
||||||
|
},
|
||||||
|
easeInOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
|
||||||
|
},
|
||||||
|
easeInBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*(t/=d)*t*((s+1)*t - s) + b;
|
||||||
|
},
|
||||||
|
easeOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
|
||||||
|
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInBounce: function (x, t, b, c, d) {
|
||||||
|
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
||||||
|
},
|
||||||
|
easeOutBounce: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d) < (1/2.75)) {
|
||||||
|
return c*(7.5625*t*t) + b;
|
||||||
|
} else if (t < (2/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
||||||
|
} else if (t < (2.5/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
||||||
|
} else {
|
||||||
|
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
easeInOutBounce: function (x, t, b, c, d) {
|
||||||
|
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
|
||||||
|
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* TERMS OF USE - EASING EQUATIONS
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2001 Robert Penner
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
21
js/modules/scrolling-navbar.js
Executable file
21
js/modules/scrolling-navbar.js
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
|
||||||
|
var SCROLLING_NAVBAR_OFFSET_TOP = 50;
|
||||||
|
|
||||||
|
$(window).on('scroll', function () {
|
||||||
|
|
||||||
|
var $navbar = $('.navbar');
|
||||||
|
if ($navbar.length) {
|
||||||
|
|
||||||
|
if ($navbar.offset().top > SCROLLING_NAVBAR_OFFSET_TOP) {
|
||||||
|
|
||||||
|
$('.scrolling-navbar').addClass('top-nav-collapse');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$('.scrolling-navbar').removeClass('top-nav-collapse');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(jQuery);
|
||||||
5
js/modules/velocity.js
Normal file
5
js/modules/velocity.js
Normal file
File diff suppressed because one or more lines are too long
5
js/modules/velocity.min.js
vendored
Executable file
5
js/modules/velocity.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
603
js/modules/waves.js
Executable file
603
js/modules/waves.js
Executable file
@@ -0,0 +1,603 @@
|
|||||||
|
/*!
|
||||||
|
* Waves v0.7.6
|
||||||
|
* http://fian.my.id/Waves
|
||||||
|
*
|
||||||
|
* Copyright 2014-2018 Alfiana E. Sibuea and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/fians/Waves/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function(window, factory) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// AMD. Register as an anonymous module. Wrap in function so we have access
|
||||||
|
// to root via `this`.
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define([], function() {
|
||||||
|
window.Waves = factory.call(window);
|
||||||
|
return window.Waves;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node. Does not work with strict CommonJS, but only CommonJS-like
|
||||||
|
// environments that support module.exports, like Node.
|
||||||
|
else if (typeof exports === 'object') {
|
||||||
|
module.exports = factory.call(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Browser globals.
|
||||||
|
else {
|
||||||
|
window.Waves = factory.call(window);
|
||||||
|
}
|
||||||
|
})(typeof global === 'object' ? global : this, function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var Waves = Waves || {};
|
||||||
|
var $$ = document.querySelectorAll.bind(document);
|
||||||
|
var toString = Object.prototype.toString;
|
||||||
|
var isTouchAvailable = 'ontouchstart' in window;
|
||||||
|
|
||||||
|
|
||||||
|
// Find exact position of element
|
||||||
|
function isWindow(obj) {
|
||||||
|
return obj !== null && obj === obj.window;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWindow(elem) {
|
||||||
|
return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isObject(value) {
|
||||||
|
var type = typeof value;
|
||||||
|
return type === 'function' || type === 'object' && !!value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDOMNode(obj) {
|
||||||
|
return isObject(obj) && obj.nodeType > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWavesElements(nodes) {
|
||||||
|
var stringRepr = toString.call(nodes);
|
||||||
|
|
||||||
|
if (stringRepr === '[object String]') {
|
||||||
|
return $$(nodes);
|
||||||
|
} else if (isObject(nodes) && /^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) {
|
||||||
|
return nodes;
|
||||||
|
} else if (isDOMNode(nodes)) {
|
||||||
|
return [nodes];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
function offset(elem) {
|
||||||
|
var docElem, win,
|
||||||
|
box = { top: 0, left: 0 },
|
||||||
|
doc = elem && elem.ownerDocument;
|
||||||
|
|
||||||
|
docElem = doc.documentElement;
|
||||||
|
|
||||||
|
if (typeof elem.getBoundingClientRect !== typeof undefined) {
|
||||||
|
box = elem.getBoundingClientRect();
|
||||||
|
}
|
||||||
|
win = getWindow(doc);
|
||||||
|
return {
|
||||||
|
top: box.top + win.pageYOffset - docElem.clientTop,
|
||||||
|
left: box.left + win.pageXOffset - docElem.clientLeft
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertStyle(styleObj) {
|
||||||
|
var style = '';
|
||||||
|
|
||||||
|
for (var prop in styleObj) {
|
||||||
|
if (styleObj.hasOwnProperty(prop)) {
|
||||||
|
style += (prop + ':' + styleObj[prop] + ';');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Effect = {
|
||||||
|
|
||||||
|
// Effect duration
|
||||||
|
duration: 750,
|
||||||
|
|
||||||
|
// Effect delay (check for scroll before showing effect)
|
||||||
|
delay: 200,
|
||||||
|
|
||||||
|
show: function(e, element, velocity) {
|
||||||
|
|
||||||
|
// Disable right click
|
||||||
|
if (e.button === 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
element = element || this;
|
||||||
|
|
||||||
|
// Create ripple
|
||||||
|
var ripple = document.createElement('div');
|
||||||
|
ripple.className = 'waves-ripple waves-rippling';
|
||||||
|
element.appendChild(ripple);
|
||||||
|
|
||||||
|
// Get click coordinate and element width
|
||||||
|
var pos = offset(element);
|
||||||
|
var relativeY = 0;
|
||||||
|
var relativeX = 0;
|
||||||
|
// Support for touch devices
|
||||||
|
if('touches' in e && e.touches.length) {
|
||||||
|
relativeY = (e.touches[0].pageY - pos.top);
|
||||||
|
relativeX = (e.touches[0].pageX - pos.left);
|
||||||
|
}
|
||||||
|
//Normal case
|
||||||
|
else {
|
||||||
|
relativeY = (e.pageY - pos.top);
|
||||||
|
relativeX = (e.pageX - pos.left);
|
||||||
|
}
|
||||||
|
// Support for synthetic events
|
||||||
|
relativeX = relativeX >= 0 ? relativeX : 0;
|
||||||
|
relativeY = relativeY >= 0 ? relativeY : 0;
|
||||||
|
|
||||||
|
var scale = 'scale(' + ((element.clientWidth / 100) * 3) + ')';
|
||||||
|
var translate = 'translate(0,0)';
|
||||||
|
|
||||||
|
if (velocity) {
|
||||||
|
translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attach data to element
|
||||||
|
ripple.setAttribute('data-hold', Date.now());
|
||||||
|
ripple.setAttribute('data-x', relativeX);
|
||||||
|
ripple.setAttribute('data-y', relativeY);
|
||||||
|
ripple.setAttribute('data-scale', scale);
|
||||||
|
ripple.setAttribute('data-translate', translate);
|
||||||
|
|
||||||
|
// Set ripple position
|
||||||
|
var rippleStyle = {
|
||||||
|
top: relativeY + 'px',
|
||||||
|
left: relativeX + 'px'
|
||||||
|
};
|
||||||
|
|
||||||
|
ripple.classList.add('waves-notransition');
|
||||||
|
ripple.setAttribute('style', convertStyle(rippleStyle));
|
||||||
|
ripple.classList.remove('waves-notransition');
|
||||||
|
|
||||||
|
// Scale the ripple
|
||||||
|
rippleStyle['-webkit-transform'] = scale + ' ' + translate;
|
||||||
|
rippleStyle['-moz-transform'] = scale + ' ' + translate;
|
||||||
|
rippleStyle['-ms-transform'] = scale + ' ' + translate;
|
||||||
|
rippleStyle['-o-transform'] = scale + ' ' + translate;
|
||||||
|
rippleStyle.transform = scale + ' ' + translate;
|
||||||
|
rippleStyle.opacity = '1';
|
||||||
|
|
||||||
|
var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
|
||||||
|
rippleStyle['-webkit-transition-duration'] = duration + 'ms';
|
||||||
|
rippleStyle['-moz-transition-duration'] = duration + 'ms';
|
||||||
|
rippleStyle['-o-transition-duration'] = duration + 'ms';
|
||||||
|
rippleStyle['transition-duration'] = duration + 'ms';
|
||||||
|
|
||||||
|
ripple.setAttribute('style', convertStyle(rippleStyle));
|
||||||
|
},
|
||||||
|
|
||||||
|
hide: function(e, element) {
|
||||||
|
element = element || this;
|
||||||
|
|
||||||
|
var ripples = element.getElementsByClassName('waves-rippling');
|
||||||
|
|
||||||
|
for (var i = 0, len = ripples.length; i < len; i++) {
|
||||||
|
removeRipple(e, element, ripples[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isTouchAvailable) {
|
||||||
|
element.removeEventListener('touchend', Effect.hide);
|
||||||
|
element.removeEventListener('touchcancel', Effect.hide);
|
||||||
|
}
|
||||||
|
|
||||||
|
element.removeEventListener('mouseup', Effect.hide);
|
||||||
|
element.removeEventListener('mouseleave', Effect.hide);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collection of wrapper for HTML element that only have single tag
|
||||||
|
* like <input> and <img>
|
||||||
|
*/
|
||||||
|
var TagWrapper = {
|
||||||
|
|
||||||
|
// Wrap <input> tag so it can perform the effect
|
||||||
|
input: function(element) {
|
||||||
|
|
||||||
|
var parent = element.parentNode;
|
||||||
|
|
||||||
|
// If input already have parent just pass through
|
||||||
|
if (parent.tagName.toLowerCase() === 'span' && parent.classList.contains('waves-effect')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put element class and style to the specified parent
|
||||||
|
var wrapper = document.createElement('span');
|
||||||
|
wrapper.className = 'waves-input-wrapper';
|
||||||
|
// element.className = 'waves-button-input';
|
||||||
|
|
||||||
|
// Put element as child
|
||||||
|
parent.replaceChild(wrapper, element);
|
||||||
|
wrapper.appendChild(element);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
// Wrap <img> tag so it can perform the effect
|
||||||
|
img: function(element) {
|
||||||
|
|
||||||
|
var parent = element.parentNode;
|
||||||
|
|
||||||
|
// If input already have parent just pass through
|
||||||
|
if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put element as child
|
||||||
|
var wrapper = document.createElement('i');
|
||||||
|
parent.replaceChild(wrapper, element);
|
||||||
|
wrapper.appendChild(element);
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the effect and remove the ripple. Must be
|
||||||
|
* a separate function to pass the JSLint...
|
||||||
|
*/
|
||||||
|
function removeRipple(e, el, ripple) {
|
||||||
|
|
||||||
|
// Check if the ripple still exist
|
||||||
|
if (!ripple) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ripple.classList.remove('waves-rippling');
|
||||||
|
|
||||||
|
var relativeX = ripple.getAttribute('data-x');
|
||||||
|
var relativeY = ripple.getAttribute('data-y');
|
||||||
|
var scale = ripple.getAttribute('data-scale');
|
||||||
|
var translate = ripple.getAttribute('data-translate');
|
||||||
|
|
||||||
|
// Get delay beetween mousedown and mouse leave
|
||||||
|
var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
|
||||||
|
var delay = 350 - diff;
|
||||||
|
|
||||||
|
if (delay < 0) {
|
||||||
|
delay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.type === 'mousemove') {
|
||||||
|
delay = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade out ripple after delay
|
||||||
|
var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
var style = {
|
||||||
|
top: relativeY + 'px',
|
||||||
|
left: relativeX + 'px',
|
||||||
|
opacity: '0',
|
||||||
|
|
||||||
|
// Duration
|
||||||
|
'-webkit-transition-duration': duration + 'ms',
|
||||||
|
'-moz-transition-duration': duration + 'ms',
|
||||||
|
'-o-transition-duration': duration + 'ms',
|
||||||
|
'transition-duration': duration + 'ms',
|
||||||
|
'-webkit-transform': scale + ' ' + translate,
|
||||||
|
'-moz-transform': scale + ' ' + translate,
|
||||||
|
'-ms-transform': scale + ' ' + translate,
|
||||||
|
'-o-transform': scale + ' ' + translate,
|
||||||
|
'transform': scale + ' ' + translate
|
||||||
|
};
|
||||||
|
|
||||||
|
ripple.setAttribute('style', convertStyle(style));
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
el.removeChild(ripple);
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}, duration);
|
||||||
|
|
||||||
|
}, delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable mousedown event for 500ms during and after touch
|
||||||
|
*/
|
||||||
|
var TouchHandler = {
|
||||||
|
|
||||||
|
/* uses an integer rather than bool so there's no issues with
|
||||||
|
* needing to clear timeouts if another touch event occurred
|
||||||
|
* within the 500ms. Cannot mouseup between touchstart and
|
||||||
|
* touchend, nor in the 500ms after touchend. */
|
||||||
|
touches: 0,
|
||||||
|
|
||||||
|
allowEvent: function(e) {
|
||||||
|
|
||||||
|
var allow = true;
|
||||||
|
|
||||||
|
if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) {
|
||||||
|
allow = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return allow;
|
||||||
|
},
|
||||||
|
registerEvent: function(e) {
|
||||||
|
var eType = e.type;
|
||||||
|
|
||||||
|
if (eType === 'touchstart') {
|
||||||
|
|
||||||
|
TouchHandler.touches += 1; // push
|
||||||
|
|
||||||
|
} else if (/^(touchend|touchcancel)$/.test(eType)) {
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
if (TouchHandler.touches) {
|
||||||
|
TouchHandler.touches -= 1; // pop after 500ms
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delegated click handler for .waves-effect element.
|
||||||
|
* returns null when .waves-effect element not in "click tree"
|
||||||
|
*/
|
||||||
|
function getWavesEffectElement(e) {
|
||||||
|
|
||||||
|
if (TouchHandler.allowEvent(e) === false) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var element = null;
|
||||||
|
var target = e.target || e.srcElement;
|
||||||
|
|
||||||
|
while (target.parentElement) {
|
||||||
|
if ( (!(target instanceof SVGElement)) && target.classList.contains('waves-effect')) {
|
||||||
|
element = target;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
target = target.parentElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bubble the click and show effect if .waves-effect elem was found
|
||||||
|
*/
|
||||||
|
function showEffect(e) {
|
||||||
|
|
||||||
|
// Disable effect if element has "disabled" property on it
|
||||||
|
// In some cases, the event is not triggered by the current element
|
||||||
|
// if (e.target.getAttribute('disabled') !== null) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
var element = getWavesEffectElement(e);
|
||||||
|
|
||||||
|
if (element !== null) {
|
||||||
|
|
||||||
|
// Make it sure the element has either disabled property, disabled attribute or 'disabled' class
|
||||||
|
if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TouchHandler.registerEvent(e);
|
||||||
|
|
||||||
|
if (e.type === 'touchstart' && Effect.delay) {
|
||||||
|
|
||||||
|
var hidden = false;
|
||||||
|
|
||||||
|
var timer = setTimeout(function () {
|
||||||
|
timer = null;
|
||||||
|
Effect.show(e, element);
|
||||||
|
}, Effect.delay);
|
||||||
|
|
||||||
|
var hideEffect = function(hideEvent) {
|
||||||
|
|
||||||
|
// if touch hasn't moved, and effect not yet started: start effect now
|
||||||
|
if (timer) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = null;
|
||||||
|
Effect.show(e, element);
|
||||||
|
}
|
||||||
|
if (!hidden) {
|
||||||
|
hidden = true;
|
||||||
|
Effect.hide(hideEvent, element);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeListeners();
|
||||||
|
};
|
||||||
|
|
||||||
|
var touchMove = function(moveEvent) {
|
||||||
|
if (timer) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = null;
|
||||||
|
}
|
||||||
|
hideEffect(moveEvent);
|
||||||
|
|
||||||
|
removeListeners();
|
||||||
|
};
|
||||||
|
|
||||||
|
element.addEventListener('touchmove', touchMove, false);
|
||||||
|
element.addEventListener('touchend', hideEffect, false);
|
||||||
|
element.addEventListener('touchcancel', hideEffect, false);
|
||||||
|
|
||||||
|
var removeListeners = function() {
|
||||||
|
element.removeEventListener('touchmove', touchMove);
|
||||||
|
element.removeEventListener('touchend', hideEffect);
|
||||||
|
element.removeEventListener('touchcancel', hideEffect);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Effect.show(e, element);
|
||||||
|
|
||||||
|
if (isTouchAvailable) {
|
||||||
|
element.addEventListener('touchend', Effect.hide, false);
|
||||||
|
element.addEventListener('touchcancel', Effect.hide, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
element.addEventListener('mouseup', Effect.hide, false);
|
||||||
|
element.addEventListener('mouseleave', Effect.hide, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Waves.init = function(options) {
|
||||||
|
var body = document.body;
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if ('duration' in options) {
|
||||||
|
Effect.duration = options.duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('delay' in options) {
|
||||||
|
Effect.delay = options.delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isTouchAvailable) {
|
||||||
|
body.addEventListener('touchstart', showEffect, false);
|
||||||
|
body.addEventListener('touchcancel', TouchHandler.registerEvent, false);
|
||||||
|
body.addEventListener('touchend', TouchHandler.registerEvent, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.addEventListener('mousedown', showEffect, false);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attach Waves to dynamically loaded inputs, or add .waves-effect and other
|
||||||
|
* waves classes to a set of elements. Set drag to true if the ripple mouseover
|
||||||
|
* or skimming effect should be applied to the elements.
|
||||||
|
*/
|
||||||
|
Waves.attach = function(elements, classes) {
|
||||||
|
|
||||||
|
elements = getWavesElements(elements);
|
||||||
|
|
||||||
|
if (toString.call(classes) === '[object Array]') {
|
||||||
|
classes = classes.join(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
classes = classes ? ' ' + classes : '';
|
||||||
|
|
||||||
|
var element, tagName;
|
||||||
|
|
||||||
|
for (var i = 0, len = elements.length; i < len; i++) {
|
||||||
|
|
||||||
|
element = elements[i];
|
||||||
|
tagName = element.tagName.toLowerCase();
|
||||||
|
|
||||||
|
if (['input', 'img'].indexOf(tagName) !== -1) {
|
||||||
|
TagWrapper[tagName](element);
|
||||||
|
element = element.parentElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.className.indexOf('waves-effect') === -1) {
|
||||||
|
element.className += ' waves-effect' + classes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cause a ripple to appear in an element via code.
|
||||||
|
*/
|
||||||
|
Waves.ripple = function(elements, options) {
|
||||||
|
elements = getWavesElements(elements);
|
||||||
|
var elementsLen = elements.length;
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
options.wait = options.wait || 0;
|
||||||
|
options.position = options.position || null; // default = centre of element
|
||||||
|
|
||||||
|
|
||||||
|
if (elementsLen) {
|
||||||
|
var element, pos, off, centre = {}, i = 0;
|
||||||
|
var mousedown = {
|
||||||
|
type: 'mousedown',
|
||||||
|
button: 1
|
||||||
|
};
|
||||||
|
var hideRipple = function(mouseup, element) {
|
||||||
|
return function() {
|
||||||
|
Effect.hide(mouseup, element);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
for (; i < elementsLen; i++) {
|
||||||
|
element = elements[i];
|
||||||
|
pos = options.position || {
|
||||||
|
x: element.clientWidth / 2,
|
||||||
|
y: element.clientHeight / 2
|
||||||
|
};
|
||||||
|
|
||||||
|
off = offset(element);
|
||||||
|
centre.x = off.left + pos.x;
|
||||||
|
centre.y = off.top + pos.y;
|
||||||
|
|
||||||
|
mousedown.pageX = centre.x;
|
||||||
|
mousedown.pageY = centre.y;
|
||||||
|
|
||||||
|
Effect.show(mousedown, element);
|
||||||
|
|
||||||
|
if (options.wait >= 0 && options.wait !== null) {
|
||||||
|
var mouseup = {
|
||||||
|
type: 'mouseup',
|
||||||
|
button: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(hideRipple(mouseup, element), options.wait);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all ripples from an element.
|
||||||
|
*/
|
||||||
|
Waves.calm = function(elements) {
|
||||||
|
elements = getWavesElements(elements);
|
||||||
|
var mouseup = {
|
||||||
|
type: 'mouseup',
|
||||||
|
button: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0, len = elements.length; i < len; i++) {
|
||||||
|
Effect.hide(mouseup, elements[i]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deprecated API fallback
|
||||||
|
*/
|
||||||
|
Waves.displayEffect = function(options) {
|
||||||
|
console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect');
|
||||||
|
Waves.init(options);
|
||||||
|
};
|
||||||
|
|
||||||
|
return Waves;
|
||||||
|
});
|
||||||
|
|
||||||
|
//Initialization
|
||||||
|
Waves.attach('.btn:not(.btn-flat), .btn-floating', ['waves-light']);
|
||||||
|
Waves.attach('.btn-flat', ['waves-effect']);
|
||||||
|
Waves.attach('.chip', ['waves-effect']);
|
||||||
|
Waves.attach('.view a .mask', ['waves-light']);
|
||||||
|
Waves.attach('.waves-light', ['waves-light']);
|
||||||
|
Waves.attach('.navbar-nav a:not(.navbar-brand), .nav-icons li a, .nav-tabs .nav-item:not(.dropdown)', ['waves-light']);
|
||||||
|
Waves.attach('.pager li a', ['waves-light']);
|
||||||
|
Waves.attach('.pagination .page-item .page-link', ['waves-effect']);
|
||||||
|
Waves.init();
|
||||||
180
js/modules/wow.js
Executable file
180
js/modules/wow.js
Executable file
@@ -0,0 +1,180 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var WOW;
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
|
||||||
|
WOW = function WOW() {
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
init: function init() {
|
||||||
|
|
||||||
|
var animationName = [];
|
||||||
|
|
||||||
|
var once = 1;
|
||||||
|
|
||||||
|
function mdbWow() {
|
||||||
|
|
||||||
|
var windowHeight = window.innerHeight;
|
||||||
|
var scroll = window.scrollY;
|
||||||
|
|
||||||
|
$('.wow').each(function() {
|
||||||
|
|
||||||
|
if ($(this).css('visibility') == 'visible') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowHeight + scroll - 100 > getOffset(this) && scroll < getOffset(this) || windowHeight + scroll - 100 > getOffset(this) + $(this).height() && scroll < getOffset(this) + $(this).height() || windowHeight + scroll == $(document).height() && getOffset(this) + 100 > $(document).height()) {
|
||||||
|
|
||||||
|
var index = $(this).index('.wow');
|
||||||
|
|
||||||
|
var delay = $(this).attr('data-wow-delay');
|
||||||
|
|
||||||
|
if (delay) {
|
||||||
|
|
||||||
|
delay = $(this).attr('data-wow-delay').slice(0, -1
|
||||||
|
|
||||||
|
);
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var timeout = parseFloat(delay) * 1000;
|
||||||
|
|
||||||
|
$(self).addClass('animated');
|
||||||
|
$(self).css({ 'visibility': 'visible' });
|
||||||
|
$(self).css({ 'animation-delay': delay });
|
||||||
|
$(self).css({ 'animation-name': animationName[index] });
|
||||||
|
|
||||||
|
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
||||||
|
|
||||||
|
if ($(this).attr('data-wow-delay')) {
|
||||||
|
|
||||||
|
removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
$(self).removeClass('animated');
|
||||||
|
}, removeTime);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$(this).addClass('animated');
|
||||||
|
$(this).css({ 'visibility': 'visible' });
|
||||||
|
$(this).css({ 'animation-name': animationName[index] });
|
||||||
|
|
||||||
|
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
$(self).removeClass('animated');
|
||||||
|
}, removeTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function appear() {
|
||||||
|
|
||||||
|
$('.wow').each(function() {
|
||||||
|
|
||||||
|
var index = $(this).index('.wow');
|
||||||
|
|
||||||
|
var delay = $(this).attr('data-wow-delay');
|
||||||
|
|
||||||
|
if (delay) {
|
||||||
|
|
||||||
|
delay = $(this).attr('data-wow-delay').slice(0, -1);
|
||||||
|
|
||||||
|
var timeout = parseFloat(delay) * 1000;
|
||||||
|
|
||||||
|
$(this).addClass('animated');
|
||||||
|
$(this).css({ 'visibility': 'visible' });
|
||||||
|
$(this).css({ 'animation-delay': delay + 's' });
|
||||||
|
$(this).css({ 'animation-name': animationName[index] });
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$(this).addClass('animated');
|
||||||
|
$(this).css({ 'visibility': 'visible' });
|
||||||
|
$(this).css({ 'animation-name': animationName[index] });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide() {
|
||||||
|
|
||||||
|
var windowHeight = window.innerHeight;
|
||||||
|
var scroll = window.scrollY;
|
||||||
|
|
||||||
|
$('.wow.animated').each(function() {
|
||||||
|
|
||||||
|
if (windowHeight + scroll - 100 > getOffset(this) && scroll > getOffset(this) + 100 || windowHeight + scroll - 100 < getOffset(this) && scroll < getOffset(this) + 100 || getOffset(this) + $(this).height > $(document).height() - 100) {
|
||||||
|
|
||||||
|
$(this).removeClass('animated');
|
||||||
|
$(this).css({ 'animation-name': 'none' });
|
||||||
|
$(this).css({ 'visibility': 'hidden' });
|
||||||
|
} else {
|
||||||
|
|
||||||
|
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
||||||
|
|
||||||
|
if ($(this).attr('data-wow-delay')) {
|
||||||
|
|
||||||
|
removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
$(self).removeClass('animated');
|
||||||
|
}, removeTime);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mdbWow();
|
||||||
|
|
||||||
|
once--;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOffset(elem) {
|
||||||
|
|
||||||
|
var box = elem.getBoundingClientRect();
|
||||||
|
|
||||||
|
var body = document.body;
|
||||||
|
var docEl = document.documentElement;
|
||||||
|
|
||||||
|
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
|
||||||
|
|
||||||
|
var clientTop = docEl.clientTop || body.clientTop || 0;
|
||||||
|
|
||||||
|
var top = box.top + scrollTop - clientTop;
|
||||||
|
|
||||||
|
return Math.round(top);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.wow').each(function() {
|
||||||
|
|
||||||
|
$(this).css({ 'visibility': 'hidden' });
|
||||||
|
animationName[$(this).index('.wow')] = $(this).css('animation-name');
|
||||||
|
$(this).css({ 'animation-name': 'none' });
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).scroll(function() {
|
||||||
|
|
||||||
|
if (once) {
|
||||||
|
|
||||||
|
hide();
|
||||||
|
} else {
|
||||||
|
|
||||||
|
mdbWow();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
appear();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})(jQuery);
|
||||||
5
js/popper.min.js
vendored
Executable file
5
js/popper.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
5
js/require.js
Normal file
5
js/require.js
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user