From ef86c69bd6a65a7932a07b826918bad320ac0978 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 11 Oct 2016 20:54:54 -0700 Subject: Add ankiweb stub --- ext/bg/background.html | 3 +- ext/bg/js/anki.js | 97 ------------------------------------------------ ext/bg/js/ankiconnect.js | 97 ++++++++++++++++++++++++++++++++++++++++++++++++ ext/bg/js/ankiweb.js | 49 ++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 98 deletions(-) delete mode 100644 ext/bg/js/anki.js create mode 100644 ext/bg/js/ankiconnect.js create mode 100644 ext/bg/js/ankiweb.js (limited to 'ext/bg') diff --git a/ext/bg/background.html b/ext/bg/background.html index a9840e4a..a849fadb 100644 --- a/ext/bg/background.html +++ b/ext/bg/background.html @@ -3,7 +3,8 @@ - + + diff --git a/ext/bg/js/anki.js b/ext/bg/js/anki.js deleted file mode 100644 index 66cea094..00000000 --- a/ext/bg/js/anki.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2016 Alex Yatskov - * Author: Alex Yatskov - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -class AnkiConnect { - constructor() { - this.asyncPools = {}; - this.pluginVersion = null; - this.apiVersion = 1; - } - - addNote(note) { - return this.ankiInvokeSafe('addNote', {note}, null); - } - - canAddNotes(notes) { - return this.ankiInvokeSafe('canAddNotes', {notes}, 'notes'); - } - - getDeckNames() { - return this.ankiInvokeSafe('deckNames', {}, null); - } - - getModelNames() { - return this.ankiInvokeSafe('modelNames', {}, null); - } - - getModelFieldNames(modelName) { - return this.ankiInvokeSafe('modelFieldNames', {modelName}, null); - } - - getStatus() { - return this.getVersion().then(version => { - if (version === null) { - return 'disconnected'; - } else if (version === this.apiVersion) { - return 'ready'; - } else { - return 'mismatch'; - } - }); - } - - getVersion() { - return this.ankiInvoke('version', {}, null); - } - - ankiInvokeSafe(action, params, pool) { - if (this.pluginVersion === this.apiVersion) { - return this.ankiInvoke(action, params, pool); - } - - return this.getVersion().then(version => { - if (version === this.apiVersion) { - this.pluginVersion = version; - return this.ankiInvoke(action, params, pool); - } - - return null; - }); - } - - ankiInvoke(action, params, pool) { - return new Promise((resolve, reject) => { - if (pool !== null && this.asyncPools.hasOwnProperty(pool)) { - this.asyncPools[pool].abort(); - } - - const xhr = new XMLHttpRequest(); - xhr.addEventListener('loadend', () => { - if (pool !== null) { - delete this.asyncPools[pool]; - } - - const resp = xhr.responseText; - resolve(resp ? JSON.parse(resp) : null); - }); - - xhr.open('POST', 'http://127.0.0.1:8765'); - xhr.send(JSON.stringify({action, params})); - }); - } -} diff --git a/ext/bg/js/ankiconnect.js b/ext/bg/js/ankiconnect.js new file mode 100644 index 00000000..66cea094 --- /dev/null +++ b/ext/bg/js/ankiconnect.js @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2016 Alex Yatskov + * Author: Alex Yatskov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +class AnkiConnect { + constructor() { + this.asyncPools = {}; + this.pluginVersion = null; + this.apiVersion = 1; + } + + addNote(note) { + return this.ankiInvokeSafe('addNote', {note}, null); + } + + canAddNotes(notes) { + return this.ankiInvokeSafe('canAddNotes', {notes}, 'notes'); + } + + getDeckNames() { + return this.ankiInvokeSafe('deckNames', {}, null); + } + + getModelNames() { + return this.ankiInvokeSafe('modelNames', {}, null); + } + + getModelFieldNames(modelName) { + return this.ankiInvokeSafe('modelFieldNames', {modelName}, null); + } + + getStatus() { + return this.getVersion().then(version => { + if (version === null) { + return 'disconnected'; + } else if (version === this.apiVersion) { + return 'ready'; + } else { + return 'mismatch'; + } + }); + } + + getVersion() { + return this.ankiInvoke('version', {}, null); + } + + ankiInvokeSafe(action, params, pool) { + if (this.pluginVersion === this.apiVersion) { + return this.ankiInvoke(action, params, pool); + } + + return this.getVersion().then(version => { + if (version === this.apiVersion) { + this.pluginVersion = version; + return this.ankiInvoke(action, params, pool); + } + + return null; + }); + } + + ankiInvoke(action, params, pool) { + return new Promise((resolve, reject) => { + if (pool !== null && this.asyncPools.hasOwnProperty(pool)) { + this.asyncPools[pool].abort(); + } + + const xhr = new XMLHttpRequest(); + xhr.addEventListener('loadend', () => { + if (pool !== null) { + delete this.asyncPools[pool]; + } + + const resp = xhr.responseText; + resolve(resp ? JSON.parse(resp) : null); + }); + + xhr.open('POST', 'http://127.0.0.1:8765'); + xhr.send(JSON.stringify({action, params})); + }); + } +} diff --git a/ext/bg/js/ankiweb.js b/ext/bg/js/ankiweb.js new file mode 100644 index 00000000..aabd3d2a --- /dev/null +++ b/ext/bg/js/ankiweb.js @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2016 Alex Yatskov + * Author: Alex Yatskov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +class AnkiWeb { + constructor() { + } + + addNote(note) { + } + + canAddNotes(notes) { + } + + getDeckNames() { + } + + getModelNames() { + } + + getModelFieldNames(modelName) { + } + + getStatus() { + return this.getVersion().then(version => { + if (version === null) { + return 'disconnected'; + } else if (version === this.apiVersion) { + return 'ready'; + } else { + return 'mismatch'; + } + }); + } +} -- cgit v1.2.3