--- /dev/null
+// (() => {
+"use strict";
+const methods = [ "loc", "date", "sub" ];
+let up_dom, photo_dom;
+// pointers to <ul>
+let meth_dom, cat_dom, thumb_dom;
+// pointers to [<li>]
+let meth_list = new Object();
+// pointers to photos
+let photos;
+let state = [];
+
+function loadJson(text) {
+ let json = JSON.parse(text);
+ photos = json.photos;
+ photos.forEach(p => {
+ p.btn = document.createElement("li");
+ p.btn.innerText = p.desc;
+ p.btn.addEventListener("click", () => {
+ event.stopPropagation();
+ loadPhoto(p);
+ });
+
+ p.thm = document.createElement("img");
+ p.thm.alt = p.desc;
+ p.thm.classList.add("thumbnail");
+ p.thm.src = `/home/kous/website-local/pictures/${p.name}.jpg`;
+
+ p.img = document.createElement("img");
+ p.img.alt = p.desc;
+ p.img.classList.add("responsive");
+ p.img.src = `/home/kous/website-local/pictures/${p.name}.jpg`;
+ });
+
+ methods.forEach(m => {
+ let a = [];
+ json[m].forEach(
+ s => {
+ let e = document.createElement("li");
+ e.innerText = s;
+ e.id = s;
+ e.addEventListener("click", () => {
+ event.stopPropagation();
+ loadCategory(m, e);
+ });
+ a.push(e);
+ });
+ meth_list[m] = a;
+ });
+}
+
+function loadPhoto(p) {
+ removeAll(photo_dom);
+ console.log("load picture " + p.name);
+ photo_dom.appendChild(p.img);
+}
+
+function loadCategory(m, node) {
+ let s = node.innerText;
+ console.log(`load category ${s}:${m}`);
+ let a = siblings(node);
+
+ removeAll(thumb_dom);
+ if (peek(state) === s) {
+ ascend(node);
+ } else {
+ state.push(s);
+ photos.filter(p => p[m] === s)
+ .forEach(p => thumb_dom.appendChild(p.btn));
+ node.appendChild(thumb_dom);
+
+ a.forEach(e => {
+ e.classList.add("deselected")
+ e.classList.remove("selected");
+ });
+ node.classList.remove("deselected");
+ node.classList.add("selected");
+ }
+}
+
+function loadMethod(node) {
+ let m = node.id;
+ console.log(`load method ${m}`);
+ let a = siblings(node);
+
+ removeAll(cat_dom);
+ if (peek(state) === m) {
+ ascend(node);
+ } else {
+ state.push(m);
+ meth_list[m].forEach(e => cat_dom.appendChild(e));
+
+ node.appendChild(cat_dom);
+ a.forEach(e => {
+ e.classList.add("deselected")
+ e.classList.remove("selected");
+ });
+ node.classList.remove("deselected");
+ node.classList.add("selected");
+ }
+}
+
+function ascend(node) {
+ state.pop();
+ removeLast(node);
+ siblings(node).forEach(e => {
+ e.classList.remove("deselected")
+ e.classList.remove("selected");
+ });
+}
+
+function removeAll(e) {
+ while(e.lastChild) {
+ e.removeChild(e.lastChild);
+ }
+}
+function siblings(n) { return Array.from(n.parentNode.children); }
+function removeLast(e) { e.removeChild(e.lastChild); }
+function peek(a) { return a[a.length-1]; }
+
+document.addEventListener("DOMContentLoaded",
+ (event) => {
+ let xhttp = new XMLHttpRequest();
+ xhttp.onload = (() => loadJson(xhttp.responseText));
+ xhttp.open("GET", "pictures.json");
+ xhttp.send();
+
+ cat_dom = document.createElement("ul");
+ thumb_dom = document.createElement("ul");
+
+ meth_dom = document.getElementById("methods");
+ up_dom = document.getElementById("up");
+ photo_dom = document.getElementById("photo");
+
+ Array.from(meth_dom.children)
+ .forEach(e => {
+ e.addEventListener("click", () => {
+ event.stopPropagation();
+ loadMethod(e);
+ });
+ });
+ });
+// })();