the website
10
README.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Running
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm i
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
for production enter `gulp`
|
||||||
|
|
||||||
|
website files for production are in the generated `dist` folder
|
29705
css/style.css
Normal file
BIN
fonts/FontAwesome.otf
Normal file
BIN
fonts/fontawesome-webfont.eot
Normal file
2671
fonts/fontawesome-webfont.svg
Normal file
After Width: | Height: | Size: 434 KiB |
BIN
fonts/fontawesome-webfont.ttf
Normal file
BIN
fonts/fontawesome-webfont.woff
Normal file
BIN
fonts/fontawesome-webfont.woff2
Normal file
BIN
fonts/lg.eot
Normal file
47
fonts/lg.svg
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
<json>
|
||||||
|
<![CDATA[
|
||||||
|
{
|
||||||
|
"fontFamily": "lg",
|
||||||
|
"majorVersion": 1,
|
||||||
|
"minorVersion": 0,
|
||||||
|
"fontURL": "https://github.com/sachinchoolur/lightGallery",
|
||||||
|
"copyright": "sachin",
|
||||||
|
"license": "MLT",
|
||||||
|
"licenseURL": "http://opensource.org/licenses/MIT",
|
||||||
|
"version": "Version 1.0",
|
||||||
|
"fontId": "lg",
|
||||||
|
"psName": "lg",
|
||||||
|
"subFamily": "Regular",
|
||||||
|
"fullName": "lg",
|
||||||
|
"description": "Font generated by IcoMoon."
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</json>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="lg" horiz-adv-x="1024">
|
||||||
|
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||||
|
<missing-glyph horiz-adv-x="1024" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||||
|
<glyph unicode="" glyph-name="pause_circle_outline" data-tags="pause_circle_outline" d="M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z" />
|
||||||
|
<glyph unicode="" glyph-name="play_circle_outline" data-tags="play_circle_outline" d="M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z" />
|
||||||
|
<glyph unicode="" glyph-name="stack-2" data-tags="stack-2" d="M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z" />
|
||||||
|
<glyph unicode="" glyph-name="clear" data-tags="clear" d="M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z" />
|
||||||
|
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z" />
|
||||||
|
<glyph unicode="" glyph-name="arrow-right" data-tags="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
|
||||||
|
<glyph unicode="" glyph-name="vertical_align_bottom" data-tags="vertical_align_bottom" d="M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z" />
|
||||||
|
<glyph unicode="" glyph-name="apps" data-tags="apps" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z" />
|
||||||
|
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z" />
|
||||||
|
<glyph unicode="" glyph-name="fullscreen_exit" data-tags="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z" />
|
||||||
|
<glyph unicode="" glyph-name="zoom_in" data-tags="zoom_in" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
|
||||||
|
<glyph unicode="" glyph-name="zoom_out" data-tags="zoom_out" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
|
||||||
|
<glyph unicode="" glyph-name="share" data-tags="share" d="M768 252.667c68 0 124-56 124-124s-56-126-124-126-124 58-124 126c0 10 0 20 2 28l-302 176c-24-22-54-34-88-34-70 0-128 58-128 128s58 128 128 128c34 0 64-12 88-34l300 174c-2 10-4 20-4 30 0 70 58 128 128 128s128-58 128-128-58-128-128-128c-34 0-64 14-88 36l-300-176c2-10 4-20 4-30s-2-20-4-30l304-176c22 20 52 32 84 32z" />
|
||||||
|
<glyph unicode="" glyph-name="facebook-with-circle" data-tags="facebook-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z" />
|
||||||
|
<glyph unicode="" glyph-name="google-with-circle" data-tags="google+-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM483.686 249.805c-30.874-15.002-64.102-16.589-76.954-16.589-2.458 0-3.84 0-3.84 0s-1.178 0-2.765 0c-20.070 0-119.962 4.608-119.962 95.59 0 89.395 108.8 96.41 142.131 96.41h0.87c-19.251 25.702-15.258 51.61-15.258 51.61-1.69-0.102-4.147-0.205-7.168-0.205-12.544 0-36.762 1.997-57.549 15.411-25.498 16.384-38.4 44.288-38.4 82.893 0 109.107 119.142 113.51 120.32 113.613h118.989v-2.611c0-13.312-23.91-15.923-40.192-18.125-5.53-0.819-16.64-1.894-19.763-3.482 30.157-16.128 35.021-41.421 35.021-79.104 0-42.906-16.794-65.587-34.611-81.51-11.059-9.882-19.712-17.613-19.712-28.006 0-10.189 11.878-20.582 25.702-32.717 22.579-19.917 53.555-47.002 53.555-92.723 0-47.258-20.326-81.050-60.416-100.454zM742.4 460.8h-76.8v-76.8h-51.2v76.8h-76.8v51.2h76.8v76.8h51.2v-76.8h76.8v-51.2zM421.018 401.92c-2.662 0-5.325-0.102-8.038-0.307-22.733-1.69-43.725-10.189-58.88-24.013-15.053-13.619-22.733-30.822-21.658-48.179 2.304-36.403 41.37-57.702 88.832-54.323 46.694 3.379 77.824 30.31 75.571 66.714-2.15 34.202-31.898 60.109-75.827 60.109zM465.766 599.808c-12.39 43.52-32.358 56.422-63.386 56.422-3.328 0-6.707-0.512-9.933-1.382-13.466-3.84-24.166-15.053-30.106-31.744-6.093-16.896-6.451-34.509-1.229-54.579 9.472-35.891 34.97-61.901 60.672-61.901 3.379 0 6.758 0.41 9.933 1.382 28.109 7.885 45.722 50.79 34.048 91.802z" />
|
||||||
|
<glyph unicode="" glyph-name="pinterest-with-circle" data-tags="pinterest-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z" />
|
||||||
|
<glyph unicode="" glyph-name="twitter-with-circle" data-tags="twitter-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM711.936 549.683c0.205-4.198 0.256-8.397 0.256-12.493 0-128-97.331-275.507-275.405-275.507-54.682 0-105.574 15.974-148.378 43.52 7.526-0.922 15.258-1.28 23.091-1.28 45.363 0 87.091 15.411 120.218 41.421-42.342 0.819-78.080 28.774-90.419 67.174 5.888-1.075 11.93-1.69 18.176-1.69 8.806 0 17.408 1.178 25.498 3.379-44.288 8.909-77.67 48.026-77.67 94.925v1.178c13.056-7.219 28.006-11.622 43.878-12.134-26.010 17.408-43.059 47.002-43.059 80.64 0 17.715 4.762 34.406 13.107 48.691 47.77-58.573 119.040-97.075 199.526-101.222-1.69 7.117-2.509 14.49-2.509 22.118 0 53.402 43.315 96.819 96.819 96.819 27.802 0 52.992-11.776 70.656-30.618 22.067 4.403 42.752 12.39 61.44 23.501-7.219-22.579-22.528-41.574-42.547-53.606 19.61 2.406 38.246 7.578 55.603 15.309-12.954-19.405-29.389-36.506-48.282-50.125z" />
|
||||||
|
</font></defs></svg>
|
After Width: | Height: | Size: 8.6 KiB |
BIN
fonts/lg.ttf
Normal file
BIN
fonts/lg.woff
Normal file
BIN
fonts/materialdesignicons-webfont.eot
Normal file
4383
fonts/materialdesignicons-webfont.svg
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
fonts/materialdesignicons-webfont.ttf
Normal file
BIN
fonts/materialdesignicons-webfont.woff
Normal file
BIN
fonts/materialdesignicons-webfont.woff2
Normal file
101
gulpfile.js
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
// based on https://gist.github.com/torgeir/8507130
|
||||||
|
|
||||||
|
// Load plugins
|
||||||
|
let gulp = require("gulp"),
|
||||||
|
autoprefixer = require("gulp-autoprefixer"),
|
||||||
|
csso = require("gulp-csso"),
|
||||||
|
uglify = require("gulp-uglify"),
|
||||||
|
htmlmin = require("gulp-html-minimizer"),
|
||||||
|
clean = require("gulp-clean"),
|
||||||
|
purgecss = require("gulp-purgecss"),
|
||||||
|
connect = require("gulp-connect");
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
gulp.task("styles", function () {
|
||||||
|
return gulp
|
||||||
|
.src("./css/*.css")
|
||||||
|
.pipe(
|
||||||
|
purgecss({
|
||||||
|
content: ["index.html", "js/*.js"],
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.pipe(autoprefixer())
|
||||||
|
.pipe(csso())
|
||||||
|
.pipe(gulp.dest("./dist/css"))
|
||||||
|
.pipe(connect.reload());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Scripts
|
||||||
|
gulp.task("scripts", function () {
|
||||||
|
return gulp
|
||||||
|
.src("./js/*.js")
|
||||||
|
.pipe(uglify())
|
||||||
|
.pipe(gulp.dest("./dist/js"))
|
||||||
|
.pipe(connect.reload());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Images
|
||||||
|
gulp.task("images", function () {
|
||||||
|
return gulp
|
||||||
|
.src(["./images/**"], { removeBOM: false })
|
||||||
|
.pipe(gulp.dest("./dist/images"))
|
||||||
|
.pipe(connect.reload());
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("html", function () {
|
||||||
|
return gulp
|
||||||
|
.src("./index.html")
|
||||||
|
.pipe(
|
||||||
|
htmlmin({
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeComments: true,
|
||||||
|
minifyCSS: true,
|
||||||
|
minifyJS: true,
|
||||||
|
removeAttributeQuotes: true,
|
||||||
|
removeRedundantAttributes: true,
|
||||||
|
removeOptionalTags: true,
|
||||||
|
removeStyleLinkTypeAttributes: true,
|
||||||
|
removeScriptTypeAttributes: true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.pipe(gulp.dest("./dist"))
|
||||||
|
.pipe(connect.reload());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Clean
|
||||||
|
gulp.task("clean", function () {
|
||||||
|
return gulp
|
||||||
|
.src(["dist/css", "dist/js", "dist/images", "dist/index.html"], {
|
||||||
|
read: false,
|
||||||
|
allowEmpty: true,
|
||||||
|
})
|
||||||
|
.pipe(clean());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Default task
|
||||||
|
gulp.task(
|
||||||
|
"default",
|
||||||
|
gulp.series("clean", async function minifyAll() {
|
||||||
|
return gulp.parallel("styles", "scripts", "images", "html")();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Connect server
|
||||||
|
gulp.task("connect", function () {
|
||||||
|
// Listen on port 8080
|
||||||
|
connect.server({
|
||||||
|
root: "dist",
|
||||||
|
port: 8080,
|
||||||
|
livereload: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Watch
|
||||||
|
gulp.task("watch", function () {
|
||||||
|
gulp.watch("./css/*.css", gulp.series("styles"));
|
||||||
|
gulp.watch("./js/*.js", gulp.series("scripts"));
|
||||||
|
gulp.watch("./images/**/*", gulp.series("images"));
|
||||||
|
gulp.watch("./index.html", gulp.series("html"));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("dev", gulp.series("default", gulp.parallel("connect", "watch")));
|
BIN
images/_blank.png
Normal file
After Width: | Height: | Size: 68 B |
BIN
images/ajax-loader.gif
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
images/bg-wave-dark.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
images/bg-wave-light.png
Normal file
After Width: | Height: | Size: 93 KiB |
1
images/codeabodelogo.svg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
images/ie8-panel/warning_bar_0000_us.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
images/loading.gif
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
images/preloader.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
images/teaching-coding.png
Normal file
After Width: | Height: | Size: 977 KiB |
BIN
images/video-play.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
images/vimeo-play.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
images/youtube-play.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
1908
index.html
Normal file
207
js/core.min.js
vendored
Normal file
830
js/script.js
Normal file
@ -0,0 +1,830 @@
|
|||||||
|
"use strict";
|
||||||
|
(function () {
|
||||||
|
// Global variables
|
||||||
|
var userAgent = navigator.userAgent.toLowerCase(),
|
||||||
|
initialDate = new Date(),
|
||||||
|
$document = $(document),
|
||||||
|
$window = $(window),
|
||||||
|
$html = $("html"),
|
||||||
|
$body = $("body"),
|
||||||
|
isDesktop = $html.hasClass("desktop"),
|
||||||
|
isIE =
|
||||||
|
userAgent.indexOf("msie") !== -1
|
||||||
|
? parseInt(userAgent.split("msie")[1], 10)
|
||||||
|
: userAgent.indexOf("trident") !== -1
|
||||||
|
? 11
|
||||||
|
: userAgent.indexOf("edge") !== -1
|
||||||
|
? 12
|
||||||
|
: false,
|
||||||
|
isMobile =
|
||||||
|
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
||||||
|
navigator.userAgent
|
||||||
|
),
|
||||||
|
windowReady = false,
|
||||||
|
isNoviBuilder = false,
|
||||||
|
livedemo = true,
|
||||||
|
plugins = {
|
||||||
|
captcha: $(".recaptcha "),
|
||||||
|
copyrightYear: $(".copyright-year "),
|
||||||
|
owl: $(".owl-carousel "),
|
||||||
|
preloader: $(".preloader "),
|
||||||
|
rdNavbar: $(".rd-navbar "),
|
||||||
|
rdMailForm: $(".rd-mailform "),
|
||||||
|
rdInputLabel: $(".form-label "),
|
||||||
|
regula: $("[data-constraints] "),
|
||||||
|
wow: $(".wow "),
|
||||||
|
counter: document.querySelectorAll(".counter "),
|
||||||
|
buttonNuka: $(".button-nuka "),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize scripts that require a loaded window
|
||||||
|
$window.on("load", function () {
|
||||||
|
// Page loader & Page transition
|
||||||
|
if (plugins.preloader.length && !isNoviBuilder) {
|
||||||
|
pageTransition({
|
||||||
|
target: document.querySelector(".page"),
|
||||||
|
delay: 0,
|
||||||
|
duration: 500,
|
||||||
|
classIn: "fadeIn",
|
||||||
|
classOut: "fadeOut",
|
||||||
|
classActive: "animated",
|
||||||
|
conditions: function (event, link) {
|
||||||
|
return (
|
||||||
|
link &&
|
||||||
|
!/(\#|javascript:void\(0\)|callto:|tel:|mailto:|:\/\/)/.test(
|
||||||
|
link
|
||||||
|
) &&
|
||||||
|
!event.currentTarget.hasAttribute("data-lightgallery")
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onTransitionStart: function (options) {
|
||||||
|
setTimeout(function () {
|
||||||
|
plugins.preloader.removeClass("loaded");
|
||||||
|
}, options.duration * 0.75);
|
||||||
|
},
|
||||||
|
onReady: function () {
|
||||||
|
plugins.preloader.addClass("loaded");
|
||||||
|
windowReady = true;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Counter
|
||||||
|
if (plugins.counter) {
|
||||||
|
for (let i = 0; i < plugins.counter.length; i++) {
|
||||||
|
let node = plugins.counter[i],
|
||||||
|
counter = aCounter({
|
||||||
|
node: node,
|
||||||
|
duration: node.getAttribute("data-duration") || 1000,
|
||||||
|
formatter: node.hasAttribute("data-formatter")
|
||||||
|
? function (value) {
|
||||||
|
return Number(value.toFixed()).toLocaleString(
|
||||||
|
node.getAttribute("data-formatter")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
}),
|
||||||
|
scrollHandler = function () {
|
||||||
|
if (
|
||||||
|
Util.inViewport(this) &&
|
||||||
|
!this.classList.contains("animated-first")
|
||||||
|
) {
|
||||||
|
this.counter.run();
|
||||||
|
this.classList.add("animated-first");
|
||||||
|
}
|
||||||
|
}.bind(node),
|
||||||
|
blurHandler = function () {
|
||||||
|
this.counter.params.to = parseInt(this.textContent, 10);
|
||||||
|
this.counter.run();
|
||||||
|
}.bind(node);
|
||||||
|
|
||||||
|
if (isNoviBuilder) {
|
||||||
|
node.counter.run();
|
||||||
|
node.addEventListener("blur", blurHandler);
|
||||||
|
} else {
|
||||||
|
scrollHandler();
|
||||||
|
window.addEventListener("scroll", scrollHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initialize scripts that require a finished document
|
||||||
|
$(function () {
|
||||||
|
isNoviBuilder = window.xMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Initialize owl carousel plugin
|
||||||
|
* @param {object} carousel - carousel jQuery object
|
||||||
|
*/
|
||||||
|
function initOwlCarousel(carousel) {
|
||||||
|
var aliaces = ["-", "-sm-", "-md-", "-lg-", "-xl-", "-xxl-"],
|
||||||
|
values = [0, 576, 768, 992, 1200, 1600],
|
||||||
|
responsive = {};
|
||||||
|
|
||||||
|
for (var j = 0; j < values.length; j++) {
|
||||||
|
responsive[values[j]] = {};
|
||||||
|
for (var k = j; k >= -1; k--) {
|
||||||
|
if (
|
||||||
|
!responsive[values[j]]["items"] &&
|
||||||
|
carousel.attr("data" + aliaces[k] + "items")
|
||||||
|
) {
|
||||||
|
responsive[values[j]]["items"] =
|
||||||
|
k < 0
|
||||||
|
? 1
|
||||||
|
: parseInt(carousel.attr("data" + aliaces[k] + "items"), 10);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
!responsive[values[j]]["stagePadding"] &&
|
||||||
|
responsive[values[j]]["stagePadding"] !== 0 &&
|
||||||
|
carousel.attr("data" + aliaces[k] + "stage-padding")
|
||||||
|
) {
|
||||||
|
responsive[values[j]]["stagePadding"] =
|
||||||
|
k < 0
|
||||||
|
? 0
|
||||||
|
: parseInt(
|
||||||
|
carousel.attr("data" + aliaces[k] + "stage-padding"),
|
||||||
|
10
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
!responsive[values[j]]["margin"] &&
|
||||||
|
responsive[values[j]]["margin"] !== 0 &&
|
||||||
|
carousel.attr("data" + aliaces[k] + "margin")
|
||||||
|
) {
|
||||||
|
responsive[values[j]]["margin"] =
|
||||||
|
k < 0
|
||||||
|
? 30
|
||||||
|
: parseInt(carousel.attr("data" + aliaces[k] + "margin"), 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize lightgallery items in cloned owl items
|
||||||
|
carousel.on("initialized.owl.carousel", function () {
|
||||||
|
initLightGalleryItem(
|
||||||
|
carousel.find('[data-lightgallery="item"]'),
|
||||||
|
"lightGallery-in-carousel"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
carousel.owlCarousel({
|
||||||
|
autoplay: isNoviBuilder
|
||||||
|
? false
|
||||||
|
: carousel.attr("data-autoplay") !== "false",
|
||||||
|
autoplayTimeout: carousel.attr("data-autoplay-time-out")
|
||||||
|
? Number(carousel.attr("data-autoplay-time-out"))
|
||||||
|
: 3000,
|
||||||
|
smartSpeed: carousel.attr("data-smart-speed")
|
||||||
|
? Number(carousel.attr("data-smart-speed"))
|
||||||
|
: 250,
|
||||||
|
autoplayHoverPause:
|
||||||
|
carousel.attr("data-autoplay-hover-pause") === "true",
|
||||||
|
URLhashListener:
|
||||||
|
carousel.attr("data-hash-navigation") === "true" || false,
|
||||||
|
startPosition: "URLHash",
|
||||||
|
slideTransition: carousel.attr("data-slide-transition")
|
||||||
|
? carousel.attr("data-slide-transition")
|
||||||
|
: "",
|
||||||
|
loop: isNoviBuilder ? false : carousel.attr("data-loop") !== "false",
|
||||||
|
items: 1,
|
||||||
|
autoHeight: carousel.attr("data-auto-height") === "true",
|
||||||
|
center: carousel.attr("data-center") === "true",
|
||||||
|
dotsContainer: carousel.attr("data-pagination-class") || false,
|
||||||
|
navContainer: carousel.attr("data-navigation-class") || false,
|
||||||
|
mouseDrag: isNoviBuilder
|
||||||
|
? false
|
||||||
|
: carousel.attr("data-mouse-drag") !== "false",
|
||||||
|
nav: carousel.attr("data-nav") === "true",
|
||||||
|
dots: carousel.attr("data-dots") === "true",
|
||||||
|
dotsEach: carousel.attr("data-dots-each")
|
||||||
|
? parseInt(carousel.attr("data-dots-each"), 10)
|
||||||
|
: false,
|
||||||
|
animateIn: carousel.attr("data-animation-in")
|
||||||
|
? carousel.attr("data-animation-in")
|
||||||
|
: false,
|
||||||
|
animateOut: carousel.attr("data-animation-out")
|
||||||
|
? carousel.attr("data-animation-out")
|
||||||
|
: false,
|
||||||
|
responsive: responsive,
|
||||||
|
navText: carousel.attr("data-nav-text")
|
||||||
|
? $.parseJSON(carousel.attr("data-nav-text"))
|
||||||
|
: [],
|
||||||
|
navClass: carousel.attr("data-nav-class")
|
||||||
|
? $.parseJSON(carousel.attr("data-nav-class"))
|
||||||
|
: ["owl-prev", "owl-next"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Attach form validation to elements
|
||||||
|
* @param {object} elements - jQuery object
|
||||||
|
*/
|
||||||
|
function attachFormValidator(elements) {
|
||||||
|
// Custom validator - phone number
|
||||||
|
regula.custom({
|
||||||
|
name: "PhoneNumber",
|
||||||
|
defaultMessage: "Invalid phone number format",
|
||||||
|
validator: function () {
|
||||||
|
if (this.value === "") return true;
|
||||||
|
else return /^(\+\d)?[0-9\-\(\) ]{5,}$/i.test(this.value);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var i = 0; i < elements.length; i++) {
|
||||||
|
var o = $(elements[i]),
|
||||||
|
v;
|
||||||
|
o.addClass("form-control-has-validation").after(
|
||||||
|
"<span class='form-validation'></span>"
|
||||||
|
);
|
||||||
|
v = o.parent().find(".form-validation");
|
||||||
|
if (v.is(":last-child")) o.addClass("form-control-last-child");
|
||||||
|
}
|
||||||
|
|
||||||
|
elements
|
||||||
|
.on("input change propertychange blur", function (e) {
|
||||||
|
var $this = $(this),
|
||||||
|
results;
|
||||||
|
|
||||||
|
if (e.type !== "blur")
|
||||||
|
if (!$this.parent().hasClass("has-error")) return;
|
||||||
|
if ($this.parents(".rd-mailform").hasClass("success")) return;
|
||||||
|
|
||||||
|
if ((results = $this.regula("validate")).length) {
|
||||||
|
for (i = 0; i < results.length; i++) {
|
||||||
|
$this
|
||||||
|
.siblings(".form-validation")
|
||||||
|
.text(results[i].message)
|
||||||
|
.parent()
|
||||||
|
.addClass("has-error");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this
|
||||||
|
.siblings(".form-validation")
|
||||||
|
.text("")
|
||||||
|
.parent()
|
||||||
|
.removeClass("has-error");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.regula("bind");
|
||||||
|
|
||||||
|
var regularConstraintsMessages = [
|
||||||
|
{
|
||||||
|
type: regula.Constraint.Required,
|
||||||
|
newMessage: "The text field is required.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: regula.Constraint.Email,
|
||||||
|
newMessage: "The email is not a valid email.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: regula.Constraint.Numeric,
|
||||||
|
newMessage: "Only numbers are required",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: regula.Constraint.Selected,
|
||||||
|
newMessage: "Please choose an option.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
for (var i = 0; i < regularConstraintsMessages.length; i++) {
|
||||||
|
var regularConstraint = regularConstraintsMessages[i];
|
||||||
|
|
||||||
|
regula.override({
|
||||||
|
constraintType: regularConstraint.type,
|
||||||
|
defaultMessage: regularConstraint.newMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Check if all elements pass validation
|
||||||
|
* @param {object} elements - object of items for validation
|
||||||
|
* @param {object} captcha - captcha object for validation
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
function isValidated(elements, captcha) {
|
||||||
|
var results,
|
||||||
|
errors = 0;
|
||||||
|
|
||||||
|
if (elements.length) {
|
||||||
|
for (var j = 0; j < elements.length; j++) {
|
||||||
|
var $input = $(elements[j]);
|
||||||
|
if ((results = $input.regula("validate")).length) {
|
||||||
|
for (k = 0; k < results.length; k++) {
|
||||||
|
errors++;
|
||||||
|
$input
|
||||||
|
.siblings(".form-validation")
|
||||||
|
.text(results[k].message)
|
||||||
|
.parent()
|
||||||
|
.addClass("has-error");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$input
|
||||||
|
.siblings(".form-validation")
|
||||||
|
.text("")
|
||||||
|
.parent()
|
||||||
|
.removeClass("has-error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (captcha) {
|
||||||
|
if (captcha.length) {
|
||||||
|
return validateReCaptcha(captcha) && errors === 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors === 0;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Validate google reCaptcha
|
||||||
|
* @param {object} captcha - captcha object for validation
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
function validateReCaptcha(captcha) {
|
||||||
|
var captchaToken = captcha.find(".g-recaptcha-response").val();
|
||||||
|
|
||||||
|
if (captchaToken.length === 0) {
|
||||||
|
captcha
|
||||||
|
.siblings(".form-validation")
|
||||||
|
.html("Please, prove that you are not robot.")
|
||||||
|
.addClass("active");
|
||||||
|
captcha.closest(".form-wrap").addClass("has-error");
|
||||||
|
|
||||||
|
captcha.on("propertychange", function () {
|
||||||
|
var $this = $(this),
|
||||||
|
captchaToken = $this.find(".g-recaptcha-response").val();
|
||||||
|
|
||||||
|
if (captchaToken.length > 0) {
|
||||||
|
$this.closest(".form-wrap").removeClass("has-error");
|
||||||
|
$this.siblings(".form-validation").removeClass("active").html("");
|
||||||
|
$this.off("propertychange");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Initialize Google reCaptcha
|
||||||
|
*/
|
||||||
|
window.onloadCaptchaCallback = function () {
|
||||||
|
for (var i = 0; i < plugins.captcha.length; i++) {
|
||||||
|
var $captcha = $(plugins.captcha[i]),
|
||||||
|
resizeHandler = function () {
|
||||||
|
var frame = this.querySelector("iframe"),
|
||||||
|
inner = this.firstElementChild,
|
||||||
|
inner2 = inner.firstElementChild,
|
||||||
|
containerRect = null,
|
||||||
|
frameRect = null,
|
||||||
|
scale = null;
|
||||||
|
|
||||||
|
inner2.style.transform = "";
|
||||||
|
inner.style.height = "auto";
|
||||||
|
inner.style.width = "auto";
|
||||||
|
|
||||||
|
containerRect = this.getBoundingClientRect();
|
||||||
|
frameRect = frame.getBoundingClientRect();
|
||||||
|
scale = containerRect.width / frameRect.width;
|
||||||
|
|
||||||
|
if (scale < 1) {
|
||||||
|
inner2.style.transform = "scale(" + scale + ")";
|
||||||
|
inner.style.height = frameRect.height * scale + "px";
|
||||||
|
inner.style.width = frameRect.width * scale + "px";
|
||||||
|
}
|
||||||
|
}.bind(plugins.captcha[i]);
|
||||||
|
|
||||||
|
grecaptcha.render($captcha.attr("id"), {
|
||||||
|
sitekey: $captcha.attr("data-sitekey"),
|
||||||
|
size: $captcha.attr("data-size")
|
||||||
|
? $captcha.attr("data-size")
|
||||||
|
: "normal",
|
||||||
|
theme: $captcha.attr("data-theme")
|
||||||
|
? $captcha.attr("data-theme")
|
||||||
|
: "light",
|
||||||
|
callback: function () {
|
||||||
|
$(".recaptcha").trigger("propertychange");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
$captcha.after("<span class='form-validation'></span>");
|
||||||
|
|
||||||
|
if (plugins.captcha[i].hasAttribute("data-auto-size")) {
|
||||||
|
resizeHandler();
|
||||||
|
window.addEventListener("resize", resizeHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Initialize the gallery with set of images
|
||||||
|
* @param {object} itemsToInit - jQuery object
|
||||||
|
* @param {string} [addClass] - additional gallery class
|
||||||
|
*/
|
||||||
|
function initLightGallery(itemsToInit, addClass) {
|
||||||
|
if (!isNoviBuilder) {
|
||||||
|
$(itemsToInit).lightGallery({
|
||||||
|
thumbnail: $(itemsToInit).attr("data-lg-thumbnail") !== "false",
|
||||||
|
selector: "[data-lightgallery='item']",
|
||||||
|
autoplay: $(itemsToInit).attr("data-lg-autoplay") === "true",
|
||||||
|
pause:
|
||||||
|
parseInt($(itemsToInit).attr("data-lg-autoplay-delay")) || 5000,
|
||||||
|
addClass: addClass,
|
||||||
|
mode: $(itemsToInit).attr("data-lg-animation") || "lg-slide",
|
||||||
|
loop: $(itemsToInit).attr("data-lg-loop") !== "false",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Initialize the gallery with dynamic addition of images
|
||||||
|
* @param {object} itemsToInit - jQuery object
|
||||||
|
* @param {string} [addClass] - additional gallery class
|
||||||
|
*/
|
||||||
|
function initDynamicLightGallery(itemsToInit, addClass) {
|
||||||
|
if (!isNoviBuilder) {
|
||||||
|
$(itemsToInit).on("click", function () {
|
||||||
|
$(itemsToInit).lightGallery({
|
||||||
|
thumbnail: $(itemsToInit).attr("data-lg-thumbnail") !== "false",
|
||||||
|
selector: "[data-lightgallery='item']",
|
||||||
|
autoplay: $(itemsToInit).attr("data-lg-autoplay") === "true",
|
||||||
|
pause:
|
||||||
|
parseInt($(itemsToInit).attr("data-lg-autoplay-delay")) || 5000,
|
||||||
|
addClass: addClass,
|
||||||
|
mode: $(itemsToInit).attr("data-lg-animation") || "lg-slide",
|
||||||
|
loop: $(itemsToInit).attr("data-lg-loop") !== "false",
|
||||||
|
dynamic: true,
|
||||||
|
dynamicEl:
|
||||||
|
JSON.parse($(itemsToInit).attr("data-lg-dynamic-elements")) || [],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc Initialize the gallery with one image
|
||||||
|
* @param {object} itemToInit - jQuery object
|
||||||
|
* @param {string} [addClass] - additional gallery class
|
||||||
|
*/
|
||||||
|
function initLightGalleryItem(itemToInit, addClass) {
|
||||||
|
if (!isNoviBuilder) {
|
||||||
|
$(itemToInit).lightGallery({
|
||||||
|
selector: "this",
|
||||||
|
addClass: addClass,
|
||||||
|
counter: false,
|
||||||
|
youtubePlayerParams: {
|
||||||
|
modestbranding: 1,
|
||||||
|
showinfo: 0,
|
||||||
|
rel: 0,
|
||||||
|
controls: 0,
|
||||||
|
},
|
||||||
|
vimeoPlayerParams: {
|
||||||
|
byline: 0,
|
||||||
|
portrait: 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Google ReCaptcha
|
||||||
|
if (plugins.captcha.length) {
|
||||||
|
$.getScript(
|
||||||
|
"//www.google.com/recaptcha/api.js?onload=onloadCaptchaCallback&render=explicit&hl=en"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additional class on html if mac os.
|
||||||
|
if (navigator.platform.match(/(Mac)/i)) {
|
||||||
|
$html.addClass("mac-os");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adds some loosing functionality to IE browsers (IE Polyfills)
|
||||||
|
if (isIE) {
|
||||||
|
if (isIE === 12) $html.addClass("ie-edge");
|
||||||
|
if (isIE === 11) $html.addClass("ie-11");
|
||||||
|
if (isIE < 10) $html.addClass("lt-ie-10");
|
||||||
|
if (isIE < 11) $html.addClass("ie-10");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copyright Year (Evaluates correct copyright year)
|
||||||
|
if (plugins.copyrightYear.length) {
|
||||||
|
plugins.copyrightYear.text(initialDate.getFullYear());
|
||||||
|
}
|
||||||
|
|
||||||
|
// UI To Top
|
||||||
|
if (isDesktop && !isNoviBuilder) {
|
||||||
|
$().UItoTop({
|
||||||
|
easingType: "easeOutQuad",
|
||||||
|
containerClass: "ui-to-top fa fa-angle-up",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// RD Navbar
|
||||||
|
if (plugins.rdNavbar.length) {
|
||||||
|
var navbar = plugins.rdNavbar,
|
||||||
|
aliases = {
|
||||||
|
"-": 0,
|
||||||
|
"-sm-": 576,
|
||||||
|
"-md-": 768,
|
||||||
|
"-lg-": 992,
|
||||||
|
"-xl-": 1200,
|
||||||
|
"-xxl-": 1600,
|
||||||
|
},
|
||||||
|
responsive = {};
|
||||||
|
|
||||||
|
for (var alias in aliases) {
|
||||||
|
var link = (responsive[aliases[alias]] = {});
|
||||||
|
if (navbar.attr("data" + alias + "layout"))
|
||||||
|
link.layout = navbar.attr("data" + alias + "layout");
|
||||||
|
if (navbar.attr("data" + alias + "device-layout"))
|
||||||
|
link.deviceLayout = navbar.attr("data" + alias + "device-layout");
|
||||||
|
if (navbar.attr("data" + alias + "hover-on"))
|
||||||
|
link.focusOnHover =
|
||||||
|
navbar.attr("data" + alias + "hover-on") === "true";
|
||||||
|
if (navbar.attr("data" + alias + "auto-height"))
|
||||||
|
link.autoHeight =
|
||||||
|
navbar.attr("data" + alias + "auto-height") === "true";
|
||||||
|
if (navbar.attr("data" + alias + "stick-up-offset"))
|
||||||
|
link.stickUpOffset = navbar.attr("data" + alias + "stick-up-offset");
|
||||||
|
if (navbar.attr("data" + alias + "stick-up"))
|
||||||
|
link.stickUp = navbar.attr("data" + alias + "stick-up") === "true";
|
||||||
|
if (isNoviBuilder) link.stickUp = false;
|
||||||
|
else if (navbar.attr("data" + alias + "stick-up"))
|
||||||
|
link.stickUp = navbar.attr("data" + alias + "stick-up") === "true";
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins.rdNavbar.RDNavbar({
|
||||||
|
anchorNav: !isNoviBuilder,
|
||||||
|
stickUpClone:
|
||||||
|
plugins.rdNavbar.attr("data-stick-up-clone") && !isNoviBuilder
|
||||||
|
? plugins.rdNavbar.attr("data-stick-up-clone") === "true"
|
||||||
|
: false,
|
||||||
|
responsive: responsive,
|
||||||
|
callbacks: {
|
||||||
|
onStuck: function () {
|
||||||
|
var navbarSearch = this.$element.find(".rd-search input");
|
||||||
|
|
||||||
|
if (navbarSearch) {
|
||||||
|
navbarSearch.val("").trigger("propertychange");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onDropdownOver: function () {
|
||||||
|
return !isNoviBuilder;
|
||||||
|
},
|
||||||
|
onUnstuck: function () {
|
||||||
|
if (this.$clone === null) return;
|
||||||
|
|
||||||
|
var navbarSearch = this.$clone.find(".rd-search input");
|
||||||
|
|
||||||
|
if (navbarSearch) {
|
||||||
|
navbarSearch.val("").trigger("propertychange");
|
||||||
|
navbarSearch.trigger("blur");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Owl carousel
|
||||||
|
if (plugins.owl.length) {
|
||||||
|
for (var i = 0; i < plugins.owl.length; i++) {
|
||||||
|
var carousel = $(plugins.owl[i]);
|
||||||
|
plugins.owl[i].owl = carousel;
|
||||||
|
initOwlCarousel(carousel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WOW
|
||||||
|
if (
|
||||||
|
$html.hasClass("wow-animation") &&
|
||||||
|
plugins.wow.length &&
|
||||||
|
!isNoviBuilder &&
|
||||||
|
isDesktop
|
||||||
|
) {
|
||||||
|
new WOW().init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// RD Input Label
|
||||||
|
if (plugins.rdInputLabel.length) {
|
||||||
|
plugins.rdInputLabel.RDInputLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regula
|
||||||
|
if (plugins.regula.length) {
|
||||||
|
attachFormValidator(plugins.regula);
|
||||||
|
}
|
||||||
|
|
||||||
|
// RD Mailform
|
||||||
|
if (plugins.rdMailForm.length) {
|
||||||
|
var i,
|
||||||
|
j,
|
||||||
|
k,
|
||||||
|
msg = {
|
||||||
|
MF000: "Successfully sent!",
|
||||||
|
MF001: "Recipients are not set!",
|
||||||
|
MF002: "Form will not work locally!",
|
||||||
|
MF003: "Please, define email field in your form!",
|
||||||
|
MF004: "Please, define type of your form!",
|
||||||
|
MF254: "Something went wrong with PHPMailer!",
|
||||||
|
MF255: "Aw, snap! Something went wrong.",
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i = 0; i < plugins.rdMailForm.length; i++) {
|
||||||
|
var $form = $(plugins.rdMailForm[i]),
|
||||||
|
formHasCaptcha = false;
|
||||||
|
|
||||||
|
$form.attr("novalidate", "novalidate").ajaxForm({
|
||||||
|
data: {
|
||||||
|
"form-type": $form.attr("data-form-type") || "contact",
|
||||||
|
counter: i,
|
||||||
|
},
|
||||||
|
beforeSubmit: function (arr, $form, options) {
|
||||||
|
if (isNoviBuilder) return;
|
||||||
|
|
||||||
|
var form = $(plugins.rdMailForm[this.extraData.counter]),
|
||||||
|
inputs = form.find("[data-constraints]"),
|
||||||
|
output = $("#" + form.attr("data-form-output")),
|
||||||
|
captcha = form.find(".recaptcha"),
|
||||||
|
captchaFlag = true;
|
||||||
|
|
||||||
|
output.removeClass("active error success");
|
||||||
|
|
||||||
|
if (isValidated(inputs, captcha)) {
|
||||||
|
// veify reCaptcha
|
||||||
|
if (captcha.length) {
|
||||||
|
var captchaToken = captcha.find(".g-recaptcha-response").val(),
|
||||||
|
captchaMsg = {
|
||||||
|
CPT001:
|
||||||
|
'Please, setup you "site key" and "secret key" of reCaptcha',
|
||||||
|
CPT002: "Something wrong with google reCaptcha",
|
||||||
|
};
|
||||||
|
|
||||||
|
formHasCaptcha = true;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: "bat/reCaptcha.php",
|
||||||
|
data: {
|
||||||
|
"g-recaptcha-response": captchaToken,
|
||||||
|
},
|
||||||
|
async: false,
|
||||||
|
}).done(function (responceCode) {
|
||||||
|
if (responceCode !== "CPT000") {
|
||||||
|
if (output.hasClass("snackbars")) {
|
||||||
|
output.html(
|
||||||
|
'<p><span class="icon text-middle mdi mdi-check icon-xxs"></span><span>' +
|
||||||
|
captchaMsg[responceCode] +
|
||||||
|
"</span></p>"
|
||||||
|
);
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
output.removeClass("active");
|
||||||
|
}, 3500);
|
||||||
|
|
||||||
|
captchaFlag = false;
|
||||||
|
} else {
|
||||||
|
output.html(captchaMsg[responceCode]);
|
||||||
|
}
|
||||||
|
|
||||||
|
output.addClass("active");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!captchaFlag) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.addClass("form-in-process");
|
||||||
|
|
||||||
|
if (output.hasClass("snackbars")) {
|
||||||
|
output.html(
|
||||||
|
'<p><span class="icon text-middle fa fa-circle-o-notch fa-spin icon-xxs"></span><span>Sending</span></p>'
|
||||||
|
);
|
||||||
|
output.addClass("active");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (result) {
|
||||||
|
if (isNoviBuilder) return;
|
||||||
|
|
||||||
|
var output = $(
|
||||||
|
"#" +
|
||||||
|
$(plugins.rdMailForm[this.extraData.counter]).attr(
|
||||||
|
"data-form-output"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
form = $(plugins.rdMailForm[this.extraData.counter]);
|
||||||
|
|
||||||
|
output.text(msg[result]);
|
||||||
|
form.removeClass("form-in-process");
|
||||||
|
|
||||||
|
if (formHasCaptcha) {
|
||||||
|
grecaptcha.reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
success: function (result) {
|
||||||
|
if (isNoviBuilder) return;
|
||||||
|
|
||||||
|
var form = $(plugins.rdMailForm[this.extraData.counter]),
|
||||||
|
output = $("#" + form.attr("data-form-output")),
|
||||||
|
select = form.find("select");
|
||||||
|
|
||||||
|
form.addClass("success").removeClass("form-in-process");
|
||||||
|
|
||||||
|
if (formHasCaptcha) {
|
||||||
|
grecaptcha.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
result = result.length === 5 ? result : "MF255";
|
||||||
|
output.text(msg[result]);
|
||||||
|
|
||||||
|
if (result === "MF000") {
|
||||||
|
if (output.hasClass("snackbars")) {
|
||||||
|
output.html(
|
||||||
|
'<p><span class="icon text-middle mdi mdi-check icon-xxs"></span><span>' +
|
||||||
|
msg[result] +
|
||||||
|
"</span></p>"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
output.addClass("active success");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (output.hasClass("snackbars")) {
|
||||||
|
output.html(
|
||||||
|
' <p class="snackbars-left"><span class="icon icon-xxs mdi mdi-alert-outline text-middle"></span><span>' +
|
||||||
|
msg[result] +
|
||||||
|
"</span></p>"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
output.addClass("active error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
form.clearForm();
|
||||||
|
|
||||||
|
if (select.length) {
|
||||||
|
select.select2("val", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
form.find("input, textarea").trigger("blur");
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
output.removeClass("active error success");
|
||||||
|
form.removeClass("success");
|
||||||
|
}, 3500);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// lightGallery
|
||||||
|
plugins.lightGallery = $('[data-lightgallery="group"]');
|
||||||
|
if (plugins.lightGallery.length) {
|
||||||
|
for (var i = 0; i < plugins.lightGallery.length; i++) {
|
||||||
|
initLightGallery(plugins.lightGallery[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// lightGallery item
|
||||||
|
plugins.lightGalleryItem = $('[data-lightgallery="item"]');
|
||||||
|
if (plugins.lightGalleryItem.length) {
|
||||||
|
for (var i = 0; i < plugins.lightGalleryItem.length; i++) {
|
||||||
|
initLightGalleryItem(plugins.lightGalleryItem[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dynamic lightGallery
|
||||||
|
plugins.lightDynamicGalleryItem = $('[data-lightgallery="dynamic"]');
|
||||||
|
if (plugins.lightDynamicGalleryItem.length) {
|
||||||
|
for (var i = 0; i < plugins.lightDynamicGalleryItem.length; i++) {
|
||||||
|
initDynamicLightGallery(plugins.lightDynamicGalleryItem[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button Nuka
|
||||||
|
if (plugins.buttonNuka.length) {
|
||||||
|
plugins.buttonNuka
|
||||||
|
.on("mouseenter", function (e) {
|
||||||
|
var parentOffset = $(this).offset(),
|
||||||
|
relX = e.pageX - parentOffset.left,
|
||||||
|
relY = e.pageY - parentOffset.top;
|
||||||
|
$(this).find(".button-overlay").css({ top: relY, left: relX });
|
||||||
|
})
|
||||||
|
.on("mouseout", function (e) {
|
||||||
|
var parentOffset = $(this).offset(),
|
||||||
|
relX = e.pageX - parentOffset.left,
|
||||||
|
relY = e.pageY - parentOffset.top;
|
||||||
|
$(this).find(".button-overlay").css({ top: relY, left: relX });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
4636
package-lock.json
generated
Normal file
23
package.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"gulp": "^5.0.0",
|
||||||
|
"gulp-autoprefixer": "8.0.0",
|
||||||
|
"gulp-clean": "^0.4.0",
|
||||||
|
"gulp-connect": "^5.7.0",
|
||||||
|
"gulp-csso": "^4.0.1",
|
||||||
|
"gulp-html-minimizer": "^2.0.1",
|
||||||
|
"gulp-livereload": "^4.0.2",
|
||||||
|
"gulp-purgecss": "^6.0.0",
|
||||||
|
"gulp-uglify": "^3.0.2",
|
||||||
|
"gulp-minify-css-names": "2.0.0"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"last 2 versions",
|
||||||
|
"> 5%",
|
||||||
|
"IE 10"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"dev": "gulp dev",
|
||||||
|
"build": "gulp"
|
||||||
|
}
|
||||||
|
}
|