/// <reference lib="dom" />
import {ActivePage} from "./activePage.js";
function toISODateString(date) {
function pad(n) {
return n < 10 ? '0' + n : n;
}
return date.getFullYear() + '-' + pad(date.getMonth() + 1) +
'-' + pad(date.getDate());
}
export class Hesla extends ActivePage {
public cur_section = null;
constructor(appName?:string) {
super(appName);
this.cur_section = null;
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 = " + toISODateString(this.cur_watchword));
var disp_watchword = document.getElementById(toISODateString(this.cur_watchword));
disp_watchword.classList.add("visible");
// Complete mobile device identification /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/
if (/Android/i.test(navigator.userAgent)) {
// true for mobile device
var href_attr = "";
Array.prototype.forEach.call(disp_watchword.getElementsByTagName("a"), a_elem => {
href_attr = a_elem.getAttribute("href");
console.log("before replacement: href_attr = " + href_attr);
href_attr = href_attr.replace(/http:\/\/www\.crosswire\.org\/study\/passagestudy\.jsp\?key=([^&]+)&mod=([a-zA-Z]+)/,
"https://www.stepbible.org/?q=version=$2|reference=$1");
console.log("after replacement: href_attr = " + href_attr);
a_elem.setAttribute("href", href_attr);
});
}
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();