word/finder: enable stylesheet on #debug option
[sheet.git] / word / finder.js
1 class WordFinder extends WordQuiz {
2         namehtml(name) {
3                 //let wbr = new RegExp('\w{4} [^aoeuiyc\W] [rl]?+ \K (?= [^aoeuiy\W] [rl]? [aoeuiy] \w)', 'g');
4                 let aliases = name.split('/');
5                 let html = aliases.shift();
6                 html = html.replace(/\((.+)\)/, '<small>$1</small>');
7                 for (let alias of aliases) {
8                         html += ` <small>(${alias})</small>`;
9                 }
10                 return html;
11         }
12
13         add(catitem, rows) {
14                 rows.forEach(ref => {
15                         const [title, level, imgid, subs] = this.data[ref];
16                         const worditem = put(catitem, 'li');
17                         const figitem = put(worditem, 'figure');
18                         if (imgid) {
19                                 put(figitem, 'img[src=$]', `/data/word/32/${imgid}.jpg`);
20                         }
21                         if (title) {
22                                 put(figitem, 'figcaption', {
23                                         innerHTML: this.namehtml(title),
24                                 });
25                         }
26                         put(worditem, '.level' + level);
27                         if (level <= 1 && subs.length >= 4) {
28                                 put(worditem, '.large');
29                         }
30                         if (subs.length) {
31                                 // delve into subcategory
32                                 put(worditem, '.parent');
33                                 this.add(put(worditem, 'ul'), subs);
34                         }
35                         if (this.preset.debug) {
36                                 put(figitem, '[title=$]', `id ${ref} level ${level}`);
37                         }
38                 });
39         }
40
41         configure(input) {
42                 this.preset.level = 3;
43                 this.preset.images = false;
44                 return super.configure(input);
45         }
46
47         setup() {
48                 super.setup();
49                 if (this.preset.debug) {
50                         put(document.head, 'link', {rel: 'stylesheet', href: '/word/debug.css'});
51                 }
52                 this.form.innerHTML = '';
53                 put(this.form, 'p', 'Under construction.');
54                 for (let cat of this.preset.cat || this.data[''][3]) {
55                         this.add(put(this.form, 'ul.gallery'), [cat]);
56                 }
57         }
58
59         stop() {}
60 };