word/finder: common method to format caption names
[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         setup() {
38                 this.gallery = document.getElementById('gallery');
39                 this.gallery.innerHTML = '';
40                 put(this.gallery, 'p', 'Under construction.');
41                 for (let cat of this.preset.cat ? [this.preset.cat] : this.data[''][3]) {
42                         this.add(put(this.gallery, 'ul.gallery'), [cat]);
43                 }
44         }
45
46         stop() {}
47 };