This commit is contained in:
Alex Yatskov 2016-05-04 20:43:29 -07:00
parent bc11e7cbe3
commit e74386faa4
2 changed files with 46 additions and 5 deletions

View File

@ -27,6 +27,7 @@ class Client {
this.enabled = false; this.enabled = false;
this.options = {}; this.options = {};
this.results = null; this.results = null;
this.xhr = null;
this.fgRoot = chrome.extension.getURL('fg'); this.fgRoot = chrome.extension.getURL('fg');
chrome.runtime.onMessage.addListener(this.onBgMessage.bind(this)); chrome.runtime.onMessage.addListener(this.onBgMessage.bind(this));
@ -79,8 +80,12 @@ class Client {
} }
onFrameMessage(e) { onFrameMessage(e) {
const callback = (data) => {
e.source.postMessage(data, e.origin);
};
const {action, data} = e.data, handlers = { const {action, data} = e.data, handlers = {
addNote: this.addNote, addNote: ({mode, index}) => this.addNote(mode, index, callback),
displayKanji: this.displayKanji displayKanji: this.displayKanji
}; };
@ -118,8 +123,9 @@ class Client {
}); });
} }
addNote({mode, index}) { addNote(mode, index, callback) {
console.log(mode, index); callback({action: 'disableAction', data: {mode: mode, index: index}});
// this.callAnkiApi('addNote', {mode: mode, definition: this.results[index]});
} }
displayKanji(kanji) { displayKanji(kanji) {
@ -165,6 +171,29 @@ class Client {
setOptions(opts) { setOptions(opts) {
this.options = opts; this.options = opts;
} }
callAnkiApi(action, data, callback) {
if (!this.options.enableAnkiConnect) {
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, data: data}));
}
} }
window.yomiClient = new Client(); window.yomiClient = new Client();

View File

@ -36,9 +36,21 @@ function registerActionLinks() {
} }
} }
function domContentLoaded() { function onDomContentLoaded() {
registerKanjiLinks(); registerKanjiLinks();
registerActionLinks(); registerActionLinks();
} }
document.addEventListener('DOMContentLoaded', domContentLoaded, false); function onMessage(e) {
const {action, data} = e.data, handlers = {
'disableAction': ({mode, index}) => {
const matches = document.querySelectorAll(`.action-link[data-index="${index}"][data-mode="${mode}"]`);
matches[0].classList.add('disabled');
}
};
handlers[action](data);
}
document.addEventListener('DOMContentLoaded', onDomContentLoaded, false);
window.addEventListener('message', onMessage);