diff options
Diffstat (limited to 'ext/bg/js/yomichan.js')
-rw-r--r-- | ext/bg/js/yomichan.js | 67 |
1 files changed, 19 insertions, 48 deletions
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 887bab2e..e7e674ac 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -34,8 +34,6 @@ class Yomichan { }); this.translator = new Translator(); - this.xhr = null; - this.setState('disabled'); loadOptions((opts) => { @@ -52,11 +50,12 @@ class Yomichan { onMessage(request, sender, callback) { const {action, params} = request, handlers = { - findKanji: ({text}) => this.actionFindKanji(text, callback), - findTerm: ({text}) => this.actionFindTerm(text, callback), - getOptions: () => callback(this.options), - getState: () => callback(this.state), - renderText: ({data, template}) => callback(Handlebars.templates[template](data)) + canAddNotes: ({definitions}) => this.ankiInvoke('canAddNotes', definitions, callback), + findKanji: ({text}) => callback(this.translator.findKanji(text)), + findTerm: ({text}) => callback(this.translator.findTerm(text)), + getOptions: () => callback(this.options), + getState: () => callback(this.state), + renderText: ({data, template}) => callback(Handlebars.templates[template](data)) }; handlers[action].call(this, params); @@ -102,49 +101,21 @@ class Yomichan { Yomichan.notifyChange('options', this.options); } - actionFindTerm(text, callback) { - const results = this.translator.findTerm(text); - this.callAnkiApi('canAddNotes', results.results, (definitions) => { - if (definitions !== null) { - results.results = definitions; - } - - callback(results); - }); - } - - actionFindKanji(text, callback) { - const results = this.translator.findKanji(text); - this.callAnkiApi('cannAddNotes', results.results, (definitions) => { - if (definitions !== null) { - results.results = definitions; - } - - callback(results); - }); - } - - callAnkiApi(action, params, callback) { - if (!this.options.enableAnkiConnect) { + ankiInvoke(action, params, callback) { + if (this.options.enableAnkiConnect) { + const xhr = new XMLHttpRequest(); + xhr.addEventListener('loadend', () => { + const resp = xhr.responseText; + callback(resp ? JSON.parse(resp) : null); + }); + + xhr.open('POST', 'http://127.0.0.1:8888'); + xhr.withCredentials = true; + xhr.setRequestHeader('Content-Type', 'text/json'); + xhr.send(JSON.stringify({action: action, params: params})); + } else { callback(null); - return; - } - - if (this.xhr !== null) { - this.xhr.abort(); } - - this.xhr = new XMLHttpRequest(); - this.xhr.addEventListener('loadend', () => { - const resp = this.xhr.responseText; - callback(resp ? JSON.parse(resp) : null); - this.xhr = null; - }); - - this.xhr.open('POST', 'http://127.0.0.1:8888'); - this.xhr.withCredentials = true; - this.xhr.setRequestHeader('Content-Type', 'text/json'); - this.xhr.send(JSON.stringify({action: action, params: params})); } static notifyChange(name, value) { |