-
Notifications
You must be signed in to change notification settings - Fork 0
/
fr_en.js
107 lines (94 loc) · 3.29 KB
/
fr_en.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
/* global api */
class deen_Cambridge {
constructor(options) {
this.options = options;
this.maxexample = 2;
this.word = '';
}
async displayName() {
let locale = await api.locale();
if (locale.indexOf('CN') != -1) return '剑桥英法词典';
if (locale.indexOf('TW') != -1) return '剑桥英法词典';
return 'Cambridge DE->EN Dictionary';
}
setOptions(options) {
this.options = options;
this.maxexample = options.maxexample;
}
async findTerm(word) {
this.word = word;
return await this.findCambridge(word);
}
removeTags(elem, name) {
let tags = elem.querySelectorAll(name);
tags.forEach(x => {
x.outerHTML = '';
});
}
removelinks(elem) {
let tags = elem.querySelectorAll('a');
tags.forEach(x => {
x.outerHTML = x.innerText;
});
tags = elem.querySelectorAll('h2');
tags.forEach(x => {
x.outerHTML = `<div class='head2'>${x.innerHTML}</div>`;
});
tags = elem.querySelectorAll('h3');
tags.forEach(x => {
x.outerHTML = `<div class='head3'>${x.innerHTML}</div>`;
});
}
async findCambridge(word) {
if (!word) return null;
let base = 'https://dictionary.cambridge.org/search/german-english/direct/?q=';
let url = base + encodeURIComponent(word);
let doc = '';
try {
let data = await api.fetch(url);
let parser = new DOMParser();
doc = parser.parseFromString(data, 'text/html');
} catch (err) {
return null;
}
let contents = doc.querySelectorAll('.pr .dictionary') || [];
if (contents.length == 0) return null;
let definition = '';
for (const content of contents) {
this.removeTags(content, '.extraexamps');
this.removeTags(content, '.definition-src');
this.removeTags(content, 'h2');
this.removeTags(content, '.d_br');
this.removeTags(content, '.freq.dfreq');
this.removelinks(content);
definition += content.innerHTML;
}
let css = this.renderCSS();
return definition ? css + definition : null;
}
renderCSS() {
let css = `
<style>
.entry-body__el{margin-bottom:10px;}
.head2{font-size: 1.2em;font-weight:bold;}
.pos-header{border-bottom: 1px solid;}
.head3 {display:none;}
.posgram {font-size: 0.8em;background-color: #959595;color: white;padding: 2px 5px;border-radius: 3px;}
.epp-xref::after {content: ")";}
.epp-xref::before {content: "(";}
.def-block, .phrase-block {
/*border: 1px solid;*/
/*border-color: #e5e6e9 #dfe0e4 #d0d1d5;*/
border-radius: 3px;
padding: 5px;
margin: 5px 0;
background-color: #f6f6f6;
}
.phrase-block .def-block{border: initial;padding: initial;}
p.def-head {margin: auto;}
.phrase-head {vertical-align: middle;color: #1683ea;font-weight: bold;}
.trans {color: #5079bb;}
</style>`;
return css;
}
}