86442c922082394352c1c6b2b2957929641a9a5a
[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                         if (level <= 1 && subs.length >= 4) {
27                                 put(worditem, '.large');
28                         }
29                         if (subs.length) {
30                                 // delve into subcategory
31                                 put(worditem, '.parent');
32                                 this.add(put(worditem, 'ul'), subs);
33                         }
34                         if (this.preset.debug) {
35                                 put(figitem, '[title=$]', `id ${ref} level ${level}`);
36                         }
37                 });
38         }
39
40         configure(input) {
41                 this.preset.level = 3;
42                 this.preset.images = false;
43                 return super.configure(input);
44         }
45
46         setup() {
47                 super.setup();
48                 this.form.innerHTML = '';
49                 put(this.form, 'p', 'Under construction.');
50                 for (let cat of this.preset.cat || this.data[''][3]) {
51                         this.add(put(this.form, 'ul.gallery'), [cat]);
52                 }
53         }
54
55         stop() {}
56 };