From 9c2446868558e6f10926b6bc5832b5f5e28ce213 Mon Sep 17 00:00:00 2001 From: HEILER95 <135557413+HEILER95@users.noreply.github.com> Date: Sun, 4 Jun 2023 18:14:42 -0500 Subject: [PATCH] enes-wordreference-diccionario_1 For english to spanish --- src/dict/enes-wordreference-diccionario | 97 +++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/dict/enes-wordreference-diccionario diff --git a/src/dict/enes-wordreference-diccionario b/src/dict/enes-wordreference-diccionario new file mode 100644 index 00000000..a4dac335 --- /dev/null +++ b/src/dict/enes-wordreference-diccionario @@ -0,0 +1,97 @@ +/* global api */ +class enes_WordReference { + constructor(options) { + this.options = options; + this.maxexample = 2; + this.word = ''; + } + + async displayName() { + let locale = await api.locale(); + if (locale.indexOf('CN') !== -1) return 'WordReference英汉词典'; + if (locale.indexOf('TW') !== -1) return 'WordReference英汉词典'; + return 'wordreference.com EN->ES Dictionary'; + } + + setOptions(options) { + this.options = options; + this.maxexample = options.maxexample; + } + + async findTerm(word) { + this.word = word; + return await this.findWordReference(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 = `
${x.innerHTML}
`; + }); + + tags = elem.querySelectorAll('h3'); + tags.forEach((x) => { + x.outerHTML = `
${x.innerHTML}
`; + }); + } + + async findWordReference(word) { + if (!word) return null; + + let base = 'https://www.wordreference.com/es/translation.asp?tranword='; + 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('.ToWrd') || []; + if (contents.length === 0) return null; + + let definition = ''; + for (const content of contents) { + this.removeTags(content, '.WRD'); + this.removeTags(content, '.FrEx'); + this.removelinks(content); + definition += content.innerHTML; + } + let css = this.renderCSS(); + return definition ? css + definition : null; + } + + renderCSS() { + let css = ` +