diff options
Diffstat (limited to 'ext/bg/js/yomichan.js')
-rw-r--r-- | ext/bg/js/yomichan.js | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index ac02f882..a412eef7 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -50,17 +50,14 @@ class Yomichan { onMessage(request, sender, callback) { const {action, data} = request, handlers = { - findKanji: ({text}) => this.translator.findKanji(text), - findTerm: ({text}) => this.translator.findTerm(text), - getState: () => this.state, - getOptions: () => this.options, - renderText: ({data, template}) => Handlebars.templates[template](data) + findKanji: ({text}) => this.findKanji(text, callback), + findTerm: ({text}) => this.findTerm(text, callback), + getOptions: () => callback(this.options), + getState: () => callback(this.state), + renderText: ({data, template}) => callback(Handlebars.templates[template](data)) }; - const result = handlers[action].call(this, data); - if (callback !== null) { - callback(result); - } + handlers[action].call(this, data); } onBrowserAction(tab) { @@ -102,6 +99,33 @@ class Yomichan { Yomichan.notifyChange('options', this.options); } + findTerm(text, callback) { + const results = this.translator.findTerm(text); + this.callAnkiApi('canAddNotes', results, (resultsFull) => { + callback(resultsFull || results); + }); + } + + findKanji(text, callback) { + const results = this.translator.findKanji(text); + this.callAnkiApi('cannAddNotes', results, (resultsFull) => { + callback(resultsFull || results); + }); + } + + callAnkiApi(action, data, callback) { + if (this.options.enableAnkiConnect) { + const xhr = new XMLHttpRequest(); + xhr.addEventListener('load', () => callback(JSON.parse(xhr.responseText))); + xhr.open('POST', 'http://127.0.0.1:8888'); + xhr.withCredentials = true; + xhr.setRequestHeader('Content-Type', 'text/json'); + xhr.send(JSON.stringify(data)); + } else { + callback(null); + } + } + static notifyChange(name, value) { chrome.tabs.query({}, (tabs) => { for (const tab of tabs) { |