249 lines
6.2 KiB
JavaScript
249 lines
6.2 KiB
JavaScript
//use strict;
|
|
localStorage.setItem('online', true);
|
|
|
|
/**
|
|
* Export constants!!
|
|
* @todo titles, vimeoVids
|
|
*/
|
|
export const titles = [
|
|
|
|
]
|
|
|
|
export const vimeoVids = {
|
|
'thumb_prologo' : '478632535',
|
|
'thumb_viaggiatore' : '562518107',
|
|
'thumb_faresi' : '562529310',
|
|
'thumb_piazza' : '443587380',
|
|
'thumb_antonio' : '606341398',
|
|
'thumb_francesco' : '471773781',
|
|
'thumb_nobili' : '562534835',
|
|
'thumb_rocco' : '606346781',
|
|
'thumb_alberto' : '606372910',
|
|
'thumb_disputa' : '471537982',
|
|
'thumb_duomo' : '606343917',
|
|
'thumb_loredana' : '513080769',
|
|
'thumb_pietro' : '455576197',
|
|
'thumb_castello' : '562536148',
|
|
'thumb_sabini' : '542321131',
|
|
'thumb_monumento' : '606362546',
|
|
'thumb_eva' : '606352547',
|
|
'thumb_toto' : '606348670',
|
|
'thumb_fuori' : '606358668',
|
|
'thumb_carro' : '562262086',
|
|
};
|
|
/**
|
|
* 'Slide' background images
|
|
* in landing page
|
|
* @todo Preload iamges?? https://stackoverflow.com/questions/3646036/preloading-images-with-javascript
|
|
*/
|
|
export function sliderBg()
|
|
{
|
|
let nextimage = 0;
|
|
let header = document.querySelector('header');
|
|
slider();
|
|
|
|
function slider() {
|
|
/*** Fade in??*/
|
|
//opacity = 1;
|
|
|
|
let images = [
|
|
'img/lp-bg/fara_bg_1.jpg',
|
|
'img/lp-bg/fara_bg_2.jpg',
|
|
'img/lp-bg/fara_bg_3.jpg',
|
|
'img/lp-bg/fara_bg_4.jpg',
|
|
'img/lp-bg/fara_bg_5.jpg',
|
|
];
|
|
|
|
if (nextimage >= images.length) {
|
|
nextimage = 0;
|
|
}
|
|
|
|
header.setAttribute('style', 'background-image : url("' + images[nextimage++] + '");');
|
|
setTimeout(slider, 2000);
|
|
}
|
|
}
|
|
/**
|
|
* @todo
|
|
* Simple slideshow (Credits page)
|
|
*/
|
|
export function slideshow()
|
|
{
|
|
let slideIndex = 0;
|
|
carousel();
|
|
|
|
function carousel() {
|
|
let i;
|
|
let slides = document.querySelectorAll(".slide");
|
|
|
|
for (i = 0; i < slides.length; i++) {
|
|
slides[i].classList.add("hide");
|
|
slides[i].classList.remove("show");
|
|
}
|
|
slideIndex++;
|
|
|
|
if (slideIndex > slides.length) {
|
|
slideIndex = 1;
|
|
}
|
|
|
|
slides[slideIndex-1].classList.remove("hide");
|
|
slides[slideIndex-1].classList.add("show");
|
|
|
|
setTimeout(carousel, 2000); // Change image every 2 seconds
|
|
}
|
|
}
|
|
/**
|
|
* @todo Interactive SVG?
|
|
* The canvas should be drawn into an overlay
|
|
* container (always fullscreen)
|
|
*/
|
|
export function interactiveMap()
|
|
{
|
|
let canvas = document.createElement('canvas');
|
|
|
|
let ctx = canvas.getContext('2d');
|
|
|
|
const img = new Image;
|
|
img.src = 'img/mappa.png';
|
|
|
|
img.onload = () => {
|
|
ctx.drawImage(img, 0, 0);
|
|
}
|
|
}
|
|
/**
|
|
* Menu keys for accessibility
|
|
*/
|
|
export function menuKeys()
|
|
{
|
|
document.addEventListener('keypress', e => {
|
|
let keyCode = e.code;
|
|
|
|
if (keyCode.includes('Digit')) {
|
|
let numCode = keyCode.replace('Digit', '');
|
|
|
|
let menuK = {
|
|
'1' : 'itinerario.html',
|
|
'2' : 'progetto.html',
|
|
|
|
'4': 'credits.html',
|
|
};
|
|
|
|
for (let k in menuK) {
|
|
if (k === numCode)
|
|
window.location.href = menuK[k];
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Apply active class to nav links
|
|
* @todo Inefficient?
|
|
*/
|
|
export function activeNav()
|
|
{
|
|
let navlinks = Array.from(document.querySelectorAll('#links a'));
|
|
|
|
navlinks.forEach(element => {
|
|
let ref = element.href.substr(element.href.lastIndexOf('/'), element.href.length);
|
|
|
|
if (window.location.href.includes(ref)) {
|
|
element.setAttribute('class', 'active');
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Show vertical nav on mobile
|
|
*/
|
|
export function mobileNav()
|
|
{
|
|
let menu = document.querySelector('i');
|
|
|
|
if (menu) {
|
|
menu.addEventListener('click', () => {
|
|
document.querySelector('.side-nav').classList.remove('d-hide');
|
|
document.querySelector('.side-nav').classList.remove('slide-out');
|
|
document.querySelector('body').classList.add('opaque');
|
|
});
|
|
|
|
let close = document.querySelector('#close-nav');
|
|
|
|
close.addEventListener('click', () => {
|
|
document.querySelector('.side-nav').classList.add('d-hide');
|
|
document.querySelector('body').classList.remove('opaque');
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* Get video source for given
|
|
* link and open video page
|
|
*/
|
|
export function openVideo(a)
|
|
{
|
|
let aNodes = a.childNodes;
|
|
// Hacky??
|
|
let title = a.parentElement
|
|
.nextElementSibling
|
|
.firstElementChild
|
|
.innerHTML
|
|
.trim();
|
|
|
|
let vStr = '';
|
|
|
|
aNodes.forEach(n => {
|
|
if (n.src) {
|
|
vStr = n.src;
|
|
vStr = vStr.substr(vStr.lastIndexOf('/')+1, vStr.length)
|
|
.replace(/thumb_(.*)\.\w+$/, 'vid_$1.mp4');
|
|
}
|
|
});
|
|
|
|
localStorage.setItem('vidURI', vStr);
|
|
localStorage.setItem('vidTitle', title);
|
|
/**
|
|
* Go to video page
|
|
*/
|
|
window.location.href = 'video.html';
|
|
}
|
|
/**
|
|
* Activate background on scroll for nav only
|
|
* if not small screen
|
|
*/
|
|
export function navOnScroll()
|
|
{
|
|
let nav = document.querySelector('#nav');
|
|
let links = document.querySelector('#links');
|
|
|
|
if (window.pageYOffset !== 0) {
|
|
nav.classList.add('bg-white', 'border');
|
|
nav.classList.remove('text-gray');
|
|
links.classList.add('nav-dark');
|
|
links.classList.remove('nav-light');
|
|
}
|
|
else {
|
|
if (!document.querySelector('header').classList.contains('itin')) {
|
|
nav.classList.add('text-gray');
|
|
links.classList.remove('nav-dark');
|
|
links.classList.add('nav-light');
|
|
}
|
|
nav.classList.remove('bg-white', 'border');
|
|
}
|
|
}
|
|
/**
|
|
* Generate anchors in 'itinerario' to
|
|
* track click position to go back to
|
|
* when closing video page...
|
|
*/
|
|
export function genAnchors()
|
|
{
|
|
let sections = document.querySelectorAll('.poi');
|
|
let count = 0;
|
|
|
|
sections.forEach(s => {
|
|
let a = document.createElement('a');
|
|
count++;
|
|
|
|
a.id = 's' + new String(count);
|
|
|
|
s.prepend(a);
|
|
});
|
|
}
|