-
-
Notifications
You must be signed in to change notification settings - Fork 490
Register inline query
brookhong edited this page Jun 10, 2018
·
12 revisions
Inline query is a quick approach for you to query word without leaving current page, usually for word translation.
SurfingKeys will not provide default dictionary service from 0.9.33
, though shanbay
(which is only for English-Chinese translation) had been built in before.
You need register your own dictionary service for inline query by API Front.registerInlineQuery
.
Front.registerInlineQuery(url, parseResult)
parameter | explanation |
---|---|
url | string or function, the dictionary service url or a function to return the dictionary service url. |
parseResult | function, a function to parse result from dictionary service and return a HTML string to render explanation. |
headers | object[optional], in case your dictionary service needs authentication. |
Take shanbay
for example,
Front.registerInlineQuery({
url: "https://api.shanbay.com/bdc/search/?word=",
parseResult: function(res) {
try {
res = JSON.parse(res.text);
var exp = res.msg;
if (res.data.definition) {
var pronunciations = [];
for (var reg in res.data.pronunciations) {
pronunciations.push(`<div>[${reg}] ${res.data.pronunciations[reg]}</div>`);
// pronunciations.push(`<div><audio src="${res.data[reg+'_audio']}" controls></audio></div>`);
}
var definition = res.data.definition.split("\n").map(function(d) {
return `<li>${d}</li>`;
}).join("");
exp = `${pronunciations.join("")}<ul>${definition}</ul>`;
}
if (res.data.en_definitions) {
exp += "<hr/>";
for (var lex in res.data.en_definitions) {
var sense = res.data.en_definitions[lex].map(function(s) {
return `<li>${s}</li>`;
}).join("");
exp += `<div>${lex}</div><ul>${sense}</ul>`;
}
}
return exp;
} catch (e) {
return "";
}
}
});