/// import ap = require("./activePage"); export class Psalm extends ap.ActivePage { constructor() { super('zalmy'); } // cur_psalm is actually just a virtual property, which is not stored anywhere and its // accessor methods change the value of the cur_section property instead. public get cur_psalm(): number { console.log('this.cur_section = ' + this.cur_section); // If this.cur_section has not been initialized yet, do it if (this.cur_section === null) { var storedStr = localStorage.getItem("curPsalm"); console.log('storedStr = ' + storedStr); var stored = JSON.parse(storedStr); console.log('stored = ' + stored); if ((stored === null) || (stored < 1) || (stored > 150)) { this.cur_section = 1; localStorage.setItem("curPsalm", JSON.stringify(this.cur_section)); } else { this.cur_section = stored; } } return this.cur_section; } public set cur_psalm(value: number) { if (value < 1) { this.cur_section = 150; } else if (value > 150) { this.cur_section = 1; } else { this.cur_section = value; } localStorage.setItem("curPsalm", JSON.stringify(this.cur_section)); // set the parameter directly to avoid call to getter. this.display(); } // Methods /** * Display the current Psalm * * @param number Number of the psalm to be displayed (optional) * * Displays the particular Psalm */ display() { // first scroll then switch to avoid blinking of the page window.scroll(0, 0); var visibleElems = document.getElementsByClassName("visible"); Array.prototype.forEach.call(visibleElems, function(e) { e.classList.remove("visible"); }); console.log("cur_psalm = " + this.cur_psalm); document.getElementById("Ps." + this.cur_psalm).parentElement. classList.add('visible'); } // We have to override activePage’s next() and prev() methods to call // this.cur_psalm setter whcih does actual refresh of the page. next() { console.log("Next!"); this.cur_psalm += 1; } prev() { console.log("Previous!"); this.cur_psalm -= 1; } } var thisPsalm = new Psalm();