not api
<script src="//gnjo.github.io/deth.js"></script>
<input></input>
<output></output>
<script type="text/plain" data-worker="1">
let is={};
is.katakana=(d)=>{return /[\u30a0-\u30ff]/.test(d)}
is.hiragana=(d)=>{return /[\u3040-\u309f]/.test(d)}
is.kanji=(d)=>{return /[\u3005-\u3006\u30e0-\u9fcf]/.test(d)}
is.kannji=is.kanji
is.nihongo=(d)=>{return (is.katakana(d)|is.hiragana(d)|is.kanji(d))}
;
async function calc(data){
let word =data.word
,lang = is.nihongo(word)?'ja':'en'
,url= `https://${lang}.wikipedia.org/wiki/`+encodeURIComponent(word)
,html=await fetch(url).then(d=>d.text())
;
return {html:html,url:url,word:word}
};console.log('worker boot');
onmessage=function(e){calc(e.data).then(postMessage)}
onerror=function(e){console.log(e)}
</script>
var fn={}
fn.worker=(src)=>{
//inner.js or text or element
let is={},f=(d=>URL.createObjectURL(new Blob( [d], {type:"text\/javascript"} )));
is.element=function(o){return !!(o && o.nodeType === 1)};
is.url=(d=>!/\n|;/.test(d));
return new Worker( is.element(src)?f(src.textContent):is.url(src)?src:f(src) );
}
fn.q=(s)=>{return document.querySelector(s)};
fn.jsy=(d)=>{return JSON.stringify(d,null,2)}
;
let w =fn.worker(fn.q('[data-worker="1"]')) //same new Woker...
,sofer =_.debounce((o)=>{ w.postMessage(o) },200)
;
let ob =new Proxy({},{ set:(o,p,v)=>{ o[p]=v; sofer(o) }})
fn.q('input').oninput=function(ev){ ob.word = this.value}
w.onmessage=function(e){ fn.q('output').innerHTML = e.data.html}
;