diff options
Diffstat (limited to 'hesla.es')
-rw-r--r-- | hesla.es | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/hesla.es b/hesla.es new file mode 100644 index 0000000..30e5ba3 --- /dev/null +++ b/hesla.es @@ -0,0 +1,159 @@ +import {ActivePage} from "activePage"; + +if (!Date.prototype.toISODateString) { + Date.prototype.toISODateString = function() { + function pad(n) { + return n < 10 ? '0' + n : n; + } + + return this.getFullYear() + '-' + pad(this.getMonth() + 1) + + '-' + pad(this.getDate()); + }; +} + +export class Hesla extends ActivePage { + constructor() { + super(); + document.getElementById("czech_nav").addEventListener("click", + (evt) => { + localStorage.setItem("language", "cs"); + this.lang_reload(); + }, false); + + document.getElementById("german_nav").addEventListener("click", + (evt) => { + localStorage.setItem("language", "de"); + this.lang_reload(); + }, false); + + // requires IE 10, Opera 12.10, Safari 7, + // FIXME Android browser requires 4.4 and has only + // webkitHidden and the event is webkitvisibilitychange + if (typeof document.hidden !== "undefined") { + document.addEventListener("visibilitychange", + (evt) => { + if (! document.hidden) { + this.today(); + } + }, false); + } + } + + /** + * react to the discovered distance of swipe + * + * @param distX Number distance in points in direction X + * @param distY Number distance in points in direction Y + * + * There is a preference for the horizontal swipe; if that doesn't + * happen (i.e., the distance travelled horizontally is less than + * negligible), then the vertical swipe (in either direction) means + * jump to today. + */ + handle_move(distX, distY) { + var negligible = 100; + console.log('distX = ' + distX); + console.log('distY = ' + distY); + + if (distX < -negligible) { + console.log("swipe left"); + this.next(); + } + else if (distX > negligible) { + console.log("swipe right"); + this.prev(); + } + } + + // cur_watchword is actually just a virtual property, which is not stored anywhere and its + // accessor methods change the value of the cur_section property instead. + get cur_watchword() { + console.log(`this.cur_section = ${this.cur_section}`); + if (!this.cur_section) { + this.cur_section = new Date(); + } + + return this.cur_section; + } + + set cur_watchword(value) { + // Remove 'visible' style from the currently displayed psalm, if + // there is any + + this.cur_section = value; + + // set the parameter directly to avoid call to getter. + console.log('Displaying ' + this.cur_section); + this.display(); + } + + /** + * Display losungen for given day + * + * Displays the Losungen for the given date (or today if not defined) + */ + display() { + super.display(); + + console.log("cur_watchword = " + this.cur_watchword.toISODateString()); + document.getElementById(this.cur_watchword.toISODateString()). + classList.add("visible"); + + window.scroll(0, 0); + } + + today() { + console.log("jump to today!"); + this.cur_watchword = new Date(); + this.display(); + } + + shiftDate(shift) { + var cur_date = this.cur_watchword; + cur_date.setDate(cur_date.getDate() + shift); + this.cur_watchword = cur_date; + } + + next() { + console.log("Next day!"); + this.shiftDate(+1); + } + + prev() { + console.log("Previous day!"); + this.shiftDate(-1); + } + + // Switch langauge + /** + * Handler for the switch language event + * + * Switches the displayed langauge page according to the state stored + * in the localStorage.langauge variable which contains ISO code for + * the chosen language ('de' and 'cs' currently). + */ + lang_reload() { + var new_basename = "index.html", new_url = window.location.href, + old_basename = window.location.pathname.split("/").slice(-1)[0]; + console.log('old_basename = ' + old_basename); + + if (localStorage.getItem("language") && + (localStorage.getItem("language") === "de")) { + new_basename = "index_de.html"; + } + + console.log('new_basename = ' + new_basename); + if ((old_basename !== new_basename) || (window.location.pathname.length === 0)) { + new_url = window.location.href.replace(/(index[-\w]*\.html)?$/, + new_basename); + } + + if (window.location.href !== new_url) { + window.location.assign(new_url); + } + } +} + +var thisHesla = new Hesla(); +thisHesla.lang_reload(); +thisHesla.display(); |