511 lines
13 KiB
JavaScript
511 lines
13 KiB
JavaScript
;(function () {
|
|
|
|
'use strict';
|
|
|
|
var mobileMenuOutsideClick = function() {
|
|
|
|
$(document).click(function (e) {
|
|
var container = $("#fh5co-offcanvas, .js-fh5co-nav-toggle");
|
|
if (!container.is(e.target) && container.has(e.target).length === 0) {
|
|
|
|
if ( $('body').hasClass('offcanvas') ) {
|
|
|
|
$('body').removeClass('offcanvas');
|
|
$('.js-fh5co-nav-toggle').removeClass('active');
|
|
}
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
|
|
var offcanvasMenu = function() {
|
|
|
|
$('#page').prepend('<div id="fh5co-offcanvas" />');
|
|
$('#page').prepend('<a href="#" class="js-fh5co-nav-toggle fh5co-nav-toggle fh5co-nav-white"><i></i></a>');
|
|
var clone1 = $('.menu-1 > ul').clone();
|
|
$('#fh5co-offcanvas').append(clone1);
|
|
var clone2 = $('.menu-2 > ul').clone();
|
|
$('#fh5co-offcanvas').append(clone2);
|
|
|
|
$('#fh5co-offcanvas .has-dropdown').addClass('offcanvas-has-dropdown');
|
|
$('#fh5co-offcanvas')
|
|
.find('li')
|
|
.removeClass('has-dropdown');
|
|
|
|
// Hover dropdown menu on mobile
|
|
$('.offcanvas-has-dropdown').mouseenter(function(){
|
|
var $this = $(this);
|
|
|
|
$this
|
|
.addClass('active')
|
|
.find('ul')
|
|
.slideDown(500, 'easeOutExpo');
|
|
}).mouseleave(function(){
|
|
|
|
var $this = $(this);
|
|
$this
|
|
.removeClass('active')
|
|
.find('ul')
|
|
.slideUp(500, 'easeOutExpo');
|
|
});
|
|
|
|
|
|
$(window).resize(function(){
|
|
|
|
if ( $('body').hasClass('offcanvas') ) {
|
|
|
|
$('body').removeClass('offcanvas');
|
|
$('.js-fh5co-nav-toggle').removeClass('active');
|
|
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
var burgerMenu = function() {
|
|
|
|
$('body').on('click', '.js-fh5co-nav-toggle', function(event){
|
|
var $this = $(this);
|
|
|
|
|
|
if ( $('body').hasClass('overflow offcanvas') ) {
|
|
$('body').removeClass('overflow offcanvas');
|
|
} else {
|
|
$('body').addClass('overflow offcanvas');
|
|
}
|
|
$this.toggleClass('active');
|
|
event.preventDefault();
|
|
|
|
});
|
|
};
|
|
|
|
|
|
|
|
var contentWayPoint = function() {
|
|
var i = 0;
|
|
$('.animate-box').waypoint( function( direction ) {
|
|
|
|
if( direction === 'down' && !$(this.element).hasClass('animated-fast') ) {
|
|
|
|
i++;
|
|
|
|
$(this.element).addClass('item-animate');
|
|
setTimeout(function(){
|
|
|
|
$('body .animate-box.item-animate').each(function(k){
|
|
var el = $(this);
|
|
setTimeout( function () {
|
|
var effect = el.data('animate-effect');
|
|
if ( effect === 'fadeIn') {
|
|
el.addClass('fadeIn animated-fast');
|
|
} else if ( effect === 'fadeInLeft') {
|
|
el.addClass('fadeInLeft animated-fast');
|
|
} else if ( effect === 'fadeInRight') {
|
|
el.addClass('fadeInRight animated-fast');
|
|
} else {
|
|
el.addClass('fadeInUp animated-fast');
|
|
}
|
|
|
|
el.removeClass('item-animate');
|
|
}, k * 200, 'easeInOutExpo' );
|
|
});
|
|
|
|
}, 100);
|
|
|
|
}
|
|
|
|
} , { offset: '85%' } );
|
|
};
|
|
|
|
|
|
var dropdown = function() {
|
|
|
|
$('.has-dropdown').mouseenter(function(){
|
|
|
|
var $this = $(this);
|
|
$this
|
|
.find('.dropdown')
|
|
.css('display', 'block')
|
|
.addClass('animated-fast fadeInUpMenu');
|
|
|
|
}).mouseleave(function(){
|
|
var $this = $(this);
|
|
|
|
$this
|
|
.find('.dropdown')
|
|
.css('display', 'none')
|
|
.removeClass('animated-fast fadeInUpMenu');
|
|
});
|
|
|
|
};
|
|
|
|
|
|
var testimonialCarousel = function(){
|
|
var owl = $('.owl-carousel-fullwidth');
|
|
owl.owlCarousel({
|
|
items: 1,
|
|
loop: true,
|
|
margin: 0,
|
|
responsiveClass: true,
|
|
nav: false,
|
|
dots: true,
|
|
smartSpeed: 800,
|
|
autoHeight: true,
|
|
});
|
|
};
|
|
|
|
|
|
var goToTop = function() {
|
|
|
|
$('.js-gotop').on('click', function(event){
|
|
|
|
event.preventDefault();
|
|
|
|
$('html, body').animate({
|
|
scrollTop: $('html').offset().top
|
|
}, 500, 'easeInOutExpo');
|
|
|
|
return false;
|
|
});
|
|
|
|
$(window).scroll(function(){
|
|
|
|
var $win = $(window);
|
|
if ($win.scrollTop() > 200) {
|
|
$('.js-top').addClass('active');
|
|
} else {
|
|
$('.js-top').removeClass('active');
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
var addField = async function() {
|
|
$('.js-addField').on('click', async function(event){
|
|
|
|
event.preventDefault();
|
|
|
|
// Container <div> where dynamic content will be placed
|
|
var container = document.getElementById("js-attentants");
|
|
// Clear previous contents of the container
|
|
// while (container.hasChildNodes()) {
|
|
// container.removeChild(container.lastChild);
|
|
// }
|
|
//container.appendChild()
|
|
|
|
// Append a node with a random text
|
|
//container.appendChild(document.createTextNode("Member"));
|
|
var outerDiv = document.createElement("div");
|
|
outerDiv.style="padding-top: 20px;";
|
|
|
|
var firstNameDiv = document.createElement("div");
|
|
firstNameDiv.classList.add('col-md-6');
|
|
firstNameDiv.classList.add('col-sm-6');
|
|
var formGroupDiv = document.createElement("div");
|
|
formGroupDiv.classList.add('form-group');
|
|
firstNameDiv.appendChild(formGroupDiv);
|
|
|
|
//Label
|
|
var labelElement = document.createElement("label");
|
|
labelElement.setAttribute("for","firstname");
|
|
labelElement.classList.add('sr-only');
|
|
labelElement.innerHTML = "Vorname";
|
|
formGroupDiv.appendChild(labelElement);
|
|
|
|
//Input
|
|
var inputElement = document.createElement("input");
|
|
inputElement.setAttribute("type","firstname");
|
|
inputElement.classList.add('form-control');
|
|
inputElement.setAttribute("id","firstname");
|
|
let firstname_placeholder = await translator.getTranslationByKey(document.documentElement.lang,"firstname");
|
|
inputElement.setAttribute("placeholder", firstname_placeholder);
|
|
formGroupDiv.appendChild(inputElement);
|
|
|
|
outerDiv.appendChild(firstNameDiv);
|
|
|
|
|
|
var lastNameDiv = document.createElement("div");
|
|
lastNameDiv.classList.add('col-md-6');
|
|
lastNameDiv.classList.add('col-sm-6');
|
|
var lastnameFormGroupDiv = document.createElement("div");
|
|
lastnameFormGroupDiv.classList.add('form-group');
|
|
lastNameDiv.appendChild(lastnameFormGroupDiv);
|
|
|
|
//Label
|
|
var lastNamelabelElement = document.createElement("label");
|
|
lastNamelabelElement.setAttribute("for","lastname");
|
|
lastNamelabelElement.classList.add('sr-only');
|
|
lastNamelabelElement.innerHTML = "Nachname";
|
|
lastnameFormGroupDiv.appendChild(lastNamelabelElement);
|
|
|
|
//Input
|
|
var firstNameInputElement = document.createElement("input");
|
|
firstNameInputElement.setAttribute("type","lastname");
|
|
firstNameInputElement.classList.add('form-control');
|
|
firstNameInputElement.setAttribute("id","lastname");
|
|
let lastname_placeholder = await translator.getTranslationByKey(document.documentElement.lang,"lastname");
|
|
firstNameInputElement.setAttribute("placeholder", lastname_placeholder);
|
|
lastnameFormGroupDiv.appendChild(firstNameInputElement);
|
|
|
|
outerDiv.appendChild(lastNameDiv);
|
|
|
|
container.appendChild(outerDiv);
|
|
|
|
return false;
|
|
});
|
|
}
|
|
|
|
// Loading page
|
|
var loaderPage = function() {
|
|
$(".fh5co-loader").fadeOut("slow");
|
|
};
|
|
|
|
var counter = function() {
|
|
$('.js-counter').countTo({
|
|
formatter: function (value, options) {
|
|
return value.toFixed(options.decimals);
|
|
},
|
|
});
|
|
};
|
|
|
|
var counterWayPoint = function() {
|
|
if ($('#fh5co-counter').length > 0 ) {
|
|
$('#fh5co-counter').waypoint( function( direction ) {
|
|
|
|
if( direction === 'down' && !$(this.element).hasClass('animated') ) {
|
|
setTimeout( counter , 400);
|
|
$(this.element).addClass('animated');
|
|
}
|
|
} , { offset: '90%' } );
|
|
}
|
|
};
|
|
|
|
// Parallax
|
|
var parallax = function() {
|
|
$(window).stellar({ horizontalScrolling: false });
|
|
};
|
|
|
|
|
|
$(function(){
|
|
mobileMenuOutsideClick();
|
|
parallax();
|
|
offcanvasMenu();
|
|
burgerMenu();
|
|
contentWayPoint();
|
|
dropdown();
|
|
testimonialCarousel();
|
|
goToTop();
|
|
loaderPage();
|
|
counter();
|
|
counterWayPoint();
|
|
addField();
|
|
});
|
|
|
|
|
|
}());
|
|
|
|
document.getElementById("js-submitbtn").addEventListener("click", async function () {
|
|
//form.submit();
|
|
//console.log("Hello world!");
|
|
|
|
//document.getElementById("js-attentants").elements["foo"]
|
|
var inputs = document.querySelectorAll('input');
|
|
console.log(inputs);
|
|
console.log("Vorname:" + inputs[0].value);
|
|
console.log("Nachname:" + inputs[1].value);
|
|
console.log("Telefon:" + inputs[2].value);
|
|
console.log("E-Mail:" + inputs[3].value);
|
|
for (let i = 4; i < inputs.length; i+=2) {
|
|
|
|
console.log("Mitbringsel:" + inputs[i].value, inputs[i+1].value);
|
|
}
|
|
|
|
//Swal.fire("Our First Alert", "With some body text and success icon!", "success");
|
|
|
|
|
|
document.getElementById("attentant-container").remove();
|
|
document.getElementById("js-submitbtn").disabled = 'true';
|
|
document.getElementById("js-submitbtn").textContent = await translator.getTranslationByKey(document.documentElement.lang,"already_participating");
|
|
|
|
let title = 'Teilgenommen';
|
|
let text = "Wir freuen uns auf euch!";
|
|
title = await translator.getTranslationByKey(document.documentElement.lang,"success_title");
|
|
text = await translator.getTranslationByKey(document.documentElement.lang,"success_text");
|
|
console.log(document.documentElement.lang);
|
|
|
|
swal({
|
|
title: title,
|
|
text: text,
|
|
type: 'success',
|
|
showConfirmButton: false,
|
|
timer: 2000
|
|
}).then(function () {
|
|
// swal( 'Ready?!', 'Your form is going to be submitted.' 'success');
|
|
//document.querySelector('#myfrm').submit(); // manully submit
|
|
}).catch(function(timeout) { });
|
|
|
|
|
|
//TODO: Refresh attentats count
|
|
});
|
|
|
|
|
|
class Translator {
|
|
constructor(options = {}) {
|
|
this._options = Object.assign({}, this.defaultConfig, options);
|
|
this._elements = document.querySelectorAll("[data-i18n]");
|
|
this._cache = new Map();
|
|
|
|
if (this._options.detectLanguage) {
|
|
this._options.defaultLanguage = this._detectLanguage();
|
|
}
|
|
|
|
if (
|
|
this._options.defaultLanguage &&
|
|
typeof this._options.defaultLanguage == "string"
|
|
) {
|
|
this._getResource(this._options.defaultLanguage);
|
|
}
|
|
}
|
|
|
|
_detectLanguage() {
|
|
var stored = localStorage.getItem("language");
|
|
|
|
if (this._options.persist && stored) {
|
|
return stored;
|
|
}
|
|
|
|
var lang = navigator.languages
|
|
? navigator.languages[0]
|
|
: navigator.language;
|
|
|
|
return lang.substr(0, 2);
|
|
}
|
|
|
|
_fetch(path) {
|
|
return fetch(path)
|
|
.then(response => response.json())
|
|
.catch(() => {
|
|
console.error(
|
|
`Could not load ${path}. Please make sure that the file exists.`
|
|
);
|
|
});
|
|
}
|
|
|
|
async _getResource(lang) {
|
|
if (this._cache.has(lang)) {
|
|
return JSON.parse(this._cache.get(lang));
|
|
}
|
|
|
|
var translation = await this._fetch(
|
|
`${this._options.filesLocation}/${lang}.json`
|
|
);
|
|
|
|
if (!this._cache.has(lang)) {
|
|
this._cache.set(lang, JSON.stringify(translation));
|
|
}
|
|
|
|
return translation;
|
|
}
|
|
|
|
async load(lang) {
|
|
if (!this._options.languages.includes(lang)) {
|
|
return;
|
|
}
|
|
|
|
this._translate(await this._getResource(lang));
|
|
|
|
document.documentElement.lang = lang;
|
|
|
|
if (this._options.persist) {
|
|
localStorage.setItem("language", lang);
|
|
}
|
|
}
|
|
|
|
async getTranslationByKey(lang, key) {
|
|
if (!key) throw new Error("Expected a key to translate, got nothing.");
|
|
|
|
if (typeof key != "string")
|
|
throw new Error(
|
|
`Expected a string for the key parameter, got ${typeof key} instead.`
|
|
);
|
|
|
|
var translation = await this._getResource(lang);
|
|
|
|
return this._getValueFromJSON(key, translation, true);
|
|
}
|
|
|
|
_getValueFromJSON(key, json, fallback) {
|
|
var text = key.split(".").reduce((obj, i) => obj[i], json);
|
|
|
|
if (!text && this._options.defaultLanguage && fallback) {
|
|
let fallbackTranslation = JSON.parse(
|
|
this._cache.get(this._options.defaultLanguage)
|
|
);
|
|
|
|
text = this._getValueFromJSON(key, fallbackTranslation, false);
|
|
} else if (!text) {
|
|
text = key;
|
|
console.warn(`Could not find text for attribute "${key}".`);
|
|
}
|
|
|
|
return text;
|
|
}
|
|
|
|
_translate(translation) {
|
|
var zip = (keys, values) => keys.map((key, i) => [key, values[i]]);
|
|
var nullSafeSplit = (str, separator) => (str ? str.split(separator) : null);
|
|
|
|
var replace = element => {
|
|
var keys = nullSafeSplit(element.getAttribute("data-i18n"), " ") || [];
|
|
var properties = nullSafeSplit(
|
|
element.getAttribute("data-i18n-attr"),
|
|
" "
|
|
) || ["innerHTML"];
|
|
|
|
if (keys.length > 0 && keys.length !== properties.length) {
|
|
console.error(
|
|
"data-i18n and data-i18n-attr must contain the same number of items"
|
|
);
|
|
} else {
|
|
var pairs = zip(keys, properties);
|
|
pairs.forEach(pair => {
|
|
const [key, property] = pair;
|
|
var text = this._getValueFromJSON(key, translation, true);
|
|
|
|
if (text) {
|
|
element[property] = text;
|
|
element.setAttribute(property, text);
|
|
} else {
|
|
console.error(`Could not find text for attribute "${key}".`);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
this._elements.forEach(replace);
|
|
}
|
|
|
|
get defaultConfig() {
|
|
return {
|
|
persist: false,
|
|
languages: ["de"],
|
|
defaultLanguage: "",
|
|
detectLanguage: true,
|
|
filesLocation: "/i18n"
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
var translator = new Translator({
|
|
persist: false,
|
|
languages: ["hr", "de"],
|
|
defaultLanguage: "hr",
|
|
detectLanguage: true,
|
|
filesLocation: "/i18n"
|
|
});
|
|
translator.load("hr");
|
|
|
|
|