/* ./template.js ****************************************************************************** * HuSvEDVF-Template von Hilfe und Service von EDV-Fachleuten. (Template) * * ========================================================================== * * Copyright by Hilfe & Service von EDV-Fachleuten * * Reilstr. 6, D-06114 Halle (Saale) * * Tel. (0345) 521 13 40 * * Edit v2.000 from 2021-04-14 to 2021-05-06 by TSc * * -------------------------------------------------------------------------- * * Zugehoerige Javascript-Funktionen fuer das Template. * ******************************************************************************/ /******* Registriere Template-Objekt ******************************************/ 'use strict'; if (typeof window.template === 'undefined') window.template = (function() { // Definiere "selbst" var self = {}; // Debugging-Schalter self.debug = false; // #region Private // #region Gotop // Funktion: Gotop einstellen var gotopSetup_ = function() { if (self.debug) console.log('window.template', 'call', 'gotopSetup_'); var e = document.querySelector('body>a#gotop'); if (e) { e.style.display = 'block'; e.addEventListener('click', () => { window.scrollTo(0, 0); window.location.hash = '#'; }); } }; // #endregion Gotop // #region Menu // Menue-Container var menuContainer_; // Verzoegerung zum Menue ausblenden (ms) var menuDelay_ = 3000; // Ab welcher Y-Position wird das Menue ausgeblendet var menuOffset_ = 150; // Aktuelle Scroll-Position var menuScrollPosY_ = 0; // Menue-Scroll-Ticking-Status var menuScrollTicking_ = false; // Menue-Timeout-Handle var menuTimeout_; // Funktion: Menue-Scrolling-Ereignis var menuScroll_ = function(position) { // Menue ist statisch, nichts zu tun if (window.getComputedStyle(menuContainer_).getPropertyValue('position') === 'static') return; // Show menue menuContainer_.style.visibility = 'visible'; // Timeout loeschen clearTimeout(menuTimeout_); // Aktuelle Position ist innerhalb des Offsets if (position < menuOffset_) return; // Erzeuge Timeout um das Menue auszublenden menuTimeout_ = setTimeout ( function() { menuContainer_.style.visibility = 'hidden'; }, menuDelay_ ); }; // Funktion: Menue einstellen var menuSetup_ = function() { if (self.debug) console.log('window.template', 'call', 'menuSetup_'); var menu = document.querySelector('html>body>nav>ul'); if (menu) { menu.addEventListener('touchcancel', function() {}, {passive: true}); menu.addEventListener('touchend', function() {}, {passive: true}); menu.addEventListener('touchmove', function() {}, {passive: true}); menu.addEventListener('touchstart', function() {}, {passive: true}); } // TSc: Experimentell /* var nav = document.querySelector('html>body>nav'); if (nav) { menuContainer_ = nav; document.addEventListener ( 'scroll', function() { menuScrollPosY_ = window.scrollY; window.requestAnimationFrame ( function() { menuScroll_(menuScrollPosY_); menuScrollTicking_ = false; } ); menuScrollTicking_ = true; } ); } */ }; // #endregion Menu // #region Print var printSetup_ = function() { if (window.matchMedia('only print').matches) { // Open all details var l = document.querySelectorAll('details'); if (l) { for (var i in l) l[i].setAttribute("open", "open"); } } }; // #endregion Print // #region Scaling // Merke aktuelle (standard) Skalierung var scalingDefault_ = ''; // Merken, ob Setup-Funktion schon aufgerufen wurde var scalingIsSetup_ = false; // Funktion: Skalierung holen var scalingGet_ = function() { if (self.debug) console.log('window.template', 'call', 'scalingGet_'); var s; if (window.getComputedStyle) s = window.getComputedStyle(document.querySelector('html')); else s = document.querySelector('html').currentStyle; return s['fontSize']; } // Funktion: Skalierung mit relativer Angabe aendern var scalingRelative_ = function(c) { if (self.debug) console.log('window.template', 'call', 'scalingRelative_'); var o = scalingGet_(); var r = new RegExp('([0-9\.]+)(ch|cm|em|ex|mm|in|px|pt|pc|rem|vh|vmax|vmin|vw|%)', 'i'); var m = r.exec(o); if (m === null) return; var v = parseInt(m[1], 10); // Value var u = m[2]; // Unit v += c; scalingSet_(v.toString(10) + u); } // Funktion: Skalierung setzen var scalingSet_ = function(v) { if (self.debug) console.log('window.template', 'call', 'scalingSet_'); document.querySelector('html').style.fontSize = v; } // Funktion: Skalierung einstellen var scalingSetup_ = function() { // Debug call if (self.debug) console.log('window.template', 'call', 'scalingSetup_'); // Verhindere erneuten Aufruf if (scalingIsSetup_) return; scalingIsSetup_ = true; // Merke (standard) Skalierung scalingDefault_ = scalingGet_(); // Exclude mobile firefox because of stupid bug var isMobileFirefox = /Android.+Firefox\//.test(navigator.userAgent); // Temporaere Variable var e; // Anbinden des Vergroeszerungsschalters e = document.querySelector('li#templateScalingBigger'); if (e && !isMobileFirefox) { e.style.display = 'inline-block'; e.addEventListener('click', () => scalingRelative_(+1)); } // Anbinden des Verkleinerungsschalters e = document.querySelector('li#templateScalingSmaller'); if (e && !isMobileFirefox) { e.style.display = 'inline-block'; e.addEventListener('click', () => scalingRelative_(-1)); } } // #endregion Scaling // #endregion Private // #region Public // Funktion: Setup self.setup = function() { if (self.debug) console.log('window.template', 'call', 'setup'); gotopSetup_(); menuSetup_(); printSetup_(); scalingSetup_(); }; // #endregion Public // Exportiere "selbst" return self; }()); /******* Wenn die Seite und der Inhalt geladen wurde... ***********************/ window.addEventListener('DOMContentLoaded', function() { if (window.template) window.template.setup(); }); // window.addEventListener('DOMContentLoaded', function() /******* EOF ******************************************************************/