734e4b086d9556b21603bb7d0233448ac825a360
[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 >= 2) {
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                 });
35         }
36
37         configure(input) {
38                 this.preset.level = 3;
39                 this.preset.images = false;
40                 return super.configure(input);
41         }
42
43         setup() {
44                 this.gallery = document.getElementById('gallery');
45                 this.gallery.innerHTML = '';
46                 put(this.gallery, 'p', 'Under construction.');
47                 for (let cat of this.preset.cat || this.data[''][3]) {
48                         this.add(put(this.gallery, 'ul.gallery'), [cat]);
49                 }
50         }
51
52         stop() {}
53 };