Skip to content

Instantly share code, notes, and snippets.

@ninja33
Last active October 14, 2020 06:48
Show Gist options
  • Save ninja33/40f02571d67c2c9f8b74c202cac35af4 to your computer and use it in GitHub Desktop.
Save ninja33/40f02571d67c2c9f8b74c202cac35af4 to your computer and use it in GitHub Desktop.
Cambridge English->Polish dictionary script for ODH
/* global api */
class enpl_Cambridge {
constructor(options) {
this.options = options;
this.maxexample = 2;
this.word = '';
}
async displayName() {
return 'Cambridge EN->PL 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/pl/dictionary/english-polish/';
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('.cdo-dblclick-area .entry-body__el') || [];
if (contents.length == 0) return null;
let definition = '';
for (const content of contents) {
this.removeTags(content, '.extraexamps');
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment