refactor(compl): unify/improve datamuse API reqs
This commit is contained in:
parent
2e03df969e
commit
564478ab3e
|
@ -221,39 +221,52 @@ completions.yp.callback = (response) => {
|
||||||
|
|
||||||
// ****** General References, Calculators & Utilities ****** //
|
// ****** General References, Calculators & Utilities ****** //
|
||||||
|
|
||||||
|
const parseDatamuseRes = (res, o = {}) => {
|
||||||
|
const opts = Object.assign({}, {
|
||||||
|
maxDefs: -1,
|
||||||
|
ellipsis: false,
|
||||||
|
}, o)
|
||||||
|
|
||||||
|
return res.map((r) => {
|
||||||
|
const defs = []
|
||||||
|
let defsHtml = ""
|
||||||
|
if ((opts.maxDefs <= -1 || opts.maxDefs > 0) && r.defs && r.defs.length > 0) {
|
||||||
|
for (const d of r.defs.slice(0, opts.maxDefs <= -1 ? undefined : opts.maxDefs)) {
|
||||||
|
const ds = d.split("\t")
|
||||||
|
const partOfSpeech = `(${escape(ds[0])})`
|
||||||
|
const def = escape(ds[1])
|
||||||
|
defs.push(`<span><em>${partOfSpeech}</em> ${def}</span>`)
|
||||||
|
}
|
||||||
|
if (opts.ellipsis && r.defs.length > opts.maxDefs) {
|
||||||
|
defs.push("<span><em>…</em></span>")
|
||||||
|
}
|
||||||
|
defsHtml = `<div>${defs.join("<br />")}</div>`
|
||||||
|
}
|
||||||
|
return createSuggestionItem(`
|
||||||
|
<div>
|
||||||
|
<div class="title"><strong>${escape(r.word)}</strong></div>
|
||||||
|
${defsHtml}
|
||||||
|
</div>
|
||||||
|
`, { url: `${opts.wordBaseURL}${r.word}` })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Dictionary
|
// Dictionary
|
||||||
completions.de = {
|
completions.de = {
|
||||||
alias: "de",
|
alias: "de",
|
||||||
name: "define",
|
name: "define",
|
||||||
search: "http://onelook.com/?w=",
|
search: "http://onelook.com/?w=",
|
||||||
compl: "https://api.datamuse.com/words?md=d&sp=%s*",
|
compl: "https://api.datamuse.com/words?md=d&sp=%s*",
|
||||||
|
opts: {
|
||||||
|
maxDefs: 16,
|
||||||
|
ellipsis: true,
|
||||||
|
wordBaseURL: "http://onelook.com/?w=",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
completions.de.callback = (response) => {
|
completions.de.callback = (response) => {
|
||||||
const res = JSON.parse(response.text)
|
const res = JSON.parse(response.text)
|
||||||
const defs = []
|
return parseDatamuseRes(res, completions.de.opts)
|
||||||
res.forEach((r) => {
|
|
||||||
if (!r.defs || r.defs.length === 0) {
|
|
||||||
defs.push([r.word, "", ""])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
r.defs.forEach((d) => {
|
|
||||||
const ds = d.split("\t")
|
|
||||||
const sp = `(${ds[0]})`
|
|
||||||
const def = ds[1]
|
|
||||||
|
|
||||||
defs.push([r.word, sp, def])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return defs.map((d) => {
|
|
||||||
const word = escape(d[0])
|
|
||||||
const pos = escape(d[1])
|
|
||||||
const def = escape(d[2])
|
|
||||||
return createSuggestionItem(
|
|
||||||
`<div class="title"><strong>${word}</strong> <em>${pos}</em> ${def}</div>`,
|
|
||||||
{ url: `http://onelook.com/?w=${encodeURIComponent(d[0])}` }
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Thesaurus
|
// Thesaurus
|
||||||
|
@ -262,27 +275,16 @@ completions.th = {
|
||||||
name: "thesaurus",
|
name: "thesaurus",
|
||||||
search: "https://www.onelook.com/thesaurus/?s=",
|
search: "https://www.onelook.com/thesaurus/?s=",
|
||||||
compl: "https://api.datamuse.com/words?md=d&ml=%s",
|
compl: "https://api.datamuse.com/words?md=d&ml=%s",
|
||||||
|
opts: {
|
||||||
|
maxDefs: 3,
|
||||||
|
ellipsis: true,
|
||||||
|
wordBaseURL: "http://onelook.com/thesaurus/?s=",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
completions.th.callback = (response) => {
|
completions.th.callback = (response) => {
|
||||||
const res = JSON.parse(response.text)
|
const res = JSON.parse(response.text)
|
||||||
const defs = []
|
return parseDatamuseRes(res, completions.th.opts)
|
||||||
res.forEach((r) => {
|
|
||||||
if (!r.defs || r.defs.length === 0) {
|
|
||||||
defs.push([escape(r.word), "", ""])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
r.defs.forEach((d) => {
|
|
||||||
const ds = d.split("\t")
|
|
||||||
const sp = `(${escape(ds[0])})`
|
|
||||||
const def = escape(ds[1])
|
|
||||||
defs.push([escape(r.word), sp, def])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return defs.map(d => createSuggestionItem(
|
|
||||||
`<div class="title"><strong>${d[0]}</strong> <em>${d[1]}</em> ${d[2]}</div>`,
|
|
||||||
{ url: `http://onelook.com/thesaurus/?s=${d[0]}` }
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wikipedia
|
// Wikipedia
|
||||||
|
|
Loading…
Reference in New Issue