-
Notifications
You must be signed in to change notification settings - Fork 0
/
colins_builtin.js
113 lines (99 loc) · 3.84 KB
/
colins_builtin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* global api */
class builtin_encn_Collins {
constructor(options) {
this.options = options;
this.maxexample = 2;
this.word = '';
}
async displayName() {
let locale = await api.locale();
if (locale.indexOf('CN') != -1) return '柯林斯英汉双解(mod)';
if (locale.indexOf('TW') != -1) return '柯林斯英漢雙解(mod)';
return 'Collins EN->CN Dictionary((builtin))';
}
setOptions(options) {
this.options = options;
this.maxexample = options.maxexample;
}
async findTerm(word) {
this.word = word;
let list = [];
let word_stem = await api.deinflect(word) || [];
if (word.toLowerCase() != word) {
let lowercase = word.toLowerCase();
let lowercase_stem = await api.deinflect(lowercase) || [];
list = [word, word_stem, lowercase, lowercase_stem];
} else {
list = [word, word_stem];
}
let promises = list.map((item) => this.findCollins(item));
let results = await Promise.all(promises);
return [].concat(...results).filter(x => x);
}
async findCollins(word) {
const maxexample = this.maxexample;
let notes = [];
if (!word) return notes;
let result = {};
try {
result = JSON.parse(await api.getBuiltin('collins', word));
} catch (err) {
return [];
}
//get Collins Data
if (!result) return notes;
let expression = word;
let reading = '';
if (result.readings && result.readings.length > 0) {
reading = `/${result.readings[0]}/`;
//let lable = ['UK','US'];
//for (const [idx,rd] of result.readings.entries()){
// if (idx > 1) break;
// reading = reading + `${lable[idx]}[${rd}]`;
//}
}
let extrainfo = result.star;
let defs = result.defs;
extrainfo = extrainfo ? `<span class="star">${extrainfo}</span>` : '';
let audios = [];
audios[0] = `https://dict.youdao.com/dictvoice?audio=${encodeURIComponent(expression)}&type=1`;
audios[1] = `https://dict.youdao.com/dictvoice?audio=${encodeURIComponent(expression)}&type=2`;
let definitions = [];
for (const def of defs) {
let definition = '';
let pos = def.pos_en;
let chn_tran = def.def_cn;
let eng_tran = def.def_en;
pos = pos ? `<span class="pos">${pos}</span>` : '';
chn_tran = chn_tran ? `<span class="chn_tran">${chn_tran}</span>` : '';
eng_tran = eng_tran ? `<span class="eng_tran">${eng_tran.replace(RegExp(expression, 'gi'),`<b>${expression}</b>`)}</span>` : '';
definition = `${pos}<span class="tran">${eng_tran}${chn_tran}</span>`;
// make exmaple sentence segement
if (def.ext && def.ext.length > 0 && maxexample > 0) {
definition += '<ul class="sents">';
for (const [idx, ex] of def.ext.entries()) {
if (idx > maxexample - 1) break; // to control only n example sentences defined in option.
let chn_sent = ex.ext_cn;
let eng_sent = ex.ext_en.replace(RegExp(expression, 'gi'),`<b>${expression}</b>`);
definition += `<li class='sent'><span class='eng_sent'>${eng_sent}</span><span class='chn_sent'>${chn_sent}</span></li>`;
}
definition += '</ul>';
}
definitions.push(definition);
}
let css = this.renderCSS();
notes.push({
css,
expression,
reading,
extrainfo,
definitions,
audios
});
return notes;
}
renderCSS() {
let css = ``;
return css;
}
}