word/finder: collapse categories until clicked
[sheet.git] / word / finder.js
index e720bfdf47dc52cfdad840a6609042c6854907cd..ed8905462a098fb43e4029dddb0d468baacd8284 100644 (file)
@@ -1,6 +1,5 @@
 class WordFinder extends WordQuiz {
        namehtml(name) {
-               //let wbr = new RegExp('\w{4} [^aoeuiyc\W] [rl]?+ \K (?= [^aoeuiy\W] [rl]? [aoeuiy] \w)', 'g');
                let aliases = name.split('/');
                let html = aliases.shift();
                html = html.replace(/\((.+)\)/, '<small>$1</small>');
@@ -11,30 +10,49 @@ class WordFinder extends WordQuiz {
        }
 
        add(catitem, rows) {
-               rows.forEach(ref => {
-                       const [title, level, imgid, subs] = this.data[ref];
+               rows.forEach(word => {
+                       if (!word) return;
                        const worditem = put(catitem, 'li');
                        const figitem = put(worditem, 'figure');
-                       if (imgid) {
-                               put(figitem, 'img[src=$]', `/data/word/32/${imgid}.jpg`);
+                       if (word.imgid) {
+                               put(figitem, 'img[src=$]', word.thumb());
                        }
-                       if (title) {
+                       if (word.title) {
                                put(figitem, 'figcaption', {
-                                       innerHTML: this.namehtml(title),
+                                       innerHTML: this.namehtml(word.title),
                                });
                        }
-                       put(worditem, '.level' + level);
-                       if (level <= 1 && subs.length >= 4) {
-                               put(worditem, '.large');
+                       if (this.preset.debug) {
+                               put(figitem, '[title=$]', `id ${word.id} level ${word.level}`);
                        }
-                       if (subs.length) {
-                               // delve into subcategory
-                               put(worditem, '.parent');
-                               this.add(put(worditem, 'ul'), subs);
+                       put(worditem, '.level' + word.level);
+                       if (!word.subs.length) {
+                               return;
                        }
-                       if (this.preset.debug) {
-                               put(figitem, '[title=$]', `id ${ref} level ${level}`);
+                       if (word.level <= 1 && word.subs.length >= 4) {
+                               put(worditem, '.large');
                        }
+                       put(worditem, '.parent.expand');
+
+                       put(figitem, '[data-sup=$]', word.subs.length);
+                       figitem.onclick = () => {
+                               let expansion;
+                               if (expansion = worditem.querySelector('ul')) {
+                                       put(expansion, '!');
+                                       put(worditem, '.expand');
+                                       return;
+                               }
+                               expansion = put(worditem, 'ul');
+                               this.add(expansion, word.subs);
+                               put(worditem, '!expand');
+                       };
+                       return;
+
+                       // delve into subcategory
+                       const expansion = put(worditem, 'ul');
+                       //expansion.style.display = 'none';
+                       this.add(expansion, word.subs);
+                       //worditem.onclick = () => expansion.style.display = '';
                });
        }
 
@@ -51,7 +69,7 @@ class WordFinder extends WordQuiz {
                }
                this.form.innerHTML = '';
                put(this.form, 'p', 'Under construction.');
-               for (let cat of this.preset.cat || this.data[''][3]) {
+               for (let cat of this.data.root()) {
                        this.add(put(this.form, 'ul.gallery'), [cat]);
                }
        }