From bed16022e08a2877f16ae0971c0e7c4605724258 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 31 Jan 2017 21:10:20 -0800 Subject: fix dictionary priority visibility bug --- ext/bg/js/options-form.js | 2 ++ ext/bg/js/options.js | 16 ---------------- 2 files changed, 2 insertions(+), 16 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 92596773..ed2826b4 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -164,6 +164,8 @@ function populateDictionaries(options) { ++dictCount; }); + updateVisibility(options); + $('.dict-enabled, .dict-priority').change(onOptionsChanged); $('.dict-delete').click(onDictionaryDelete); }).catch(error => { diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index ca2792c0..863e8916 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -98,22 +98,6 @@ function optionsVersion(options) { copy(options.anki.kanji, 'model', options, 'ankiKanjiModel'); copy(options.anki.kanji, 'fields', options, 'ankiKanjiFields'); - const fixupFields = fields => { - const fixups = { - '{expression-furigana}': '{furigana}', - '{glossary-list}': '{glossary}' - }; - - for (const name in fields) { - for (const fixup in fixups) { - fields[name] = fields[name].replace(fixup, fixups[fixup]); - } - } - }; - - fixupFields(options.anki.terms.fields); - fixupFields(options.anki.kanji.fields); - for (const title in options.dictionaries) { const dictionary = options.dictionaries[title]; dictionary.enabled = dictionary.enableTerms || dictionary.enableKanji; -- cgit v1.2.3 From 5076b80f9690a12fda23d06b2c3ddd1df08cff56 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sun, 5 Feb 2017 11:44:59 -0800 Subject: tweaks for ankiconnect --- ext/bg/js/ankiconnect.js | 9 +++++---- ext/bg/js/options-form.js | 4 +++- ext/bg/js/options.js | 11 ++++++----- ext/bg/js/yomichan.js | 2 +- ext/bg/options.html | 5 +++++ ext/manifest.json | 2 +- 6 files changed, 21 insertions(+), 12 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/ankiconnect.js b/ext/bg/js/ankiconnect.js index d17f3268..f6f94329 100644 --- a/ext/bg/js/ankiconnect.js +++ b/ext/bg/js/ankiconnect.js @@ -17,7 +17,8 @@ */ class AnkiConnect { - constructor() { + constructor(server) { + this.server = server; this.asyncPools = {}; this.localVersion = 1; this.remoteVersion = null; @@ -50,8 +51,8 @@ class AnkiConnect { return this.ankiInvoke('version', {}, null).then(version => { this.remoteVersion = version; - if (this.remoteVersion !== this.localVersion) { - return Promise.reject('extension and plugin version mismatch'); + if (this.remoteVersion < this.localVersion) { + return Promise.reject('extension and plugin versions incompatible'); } }); } @@ -75,7 +76,7 @@ class AnkiConnect { } }); - xhr.open('POST', 'http://127.0.0.1:8765'); + xhr.open('POST', this.server); xhr.send(JSON.stringify({action, params})); }); } diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index ed2826b4..00b6a63e 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -44,6 +44,7 @@ function getFormData() { optionsNew.anki.tags = $('#card-tags').val().split(/[,; ]+/); optionsNew.anki.htmlCards = $('#generate-html-cards').prop('checked'); optionsNew.anki.sentenceExt = parseInt($('#sentence-detection-extent').val(), 10); + optionsNew.anki.server = $('#interface-server').val(); if (optionsOld.anki.enable) { optionsNew.anki.terms.deck = $('#anki-terms-deck').val(); optionsNew.anki.terms.model = $('#anki-terms-model').val(); @@ -106,6 +107,7 @@ $(document).ready(() => { $('#card-tags').val(options.anki.tags.join(' ')); $('#generate-html-cards').prop('checked', options.anki.htmlCards); $('#sentence-detection-extent').val(options.anki.sentenceExt); + $('#interface-server').val(options.anki.server); $('input, select').not('.anki-model').change(onOptionsChanged); $('.anki-model').change(onAnkiModelChanged); @@ -399,7 +401,7 @@ function onOptionsChanged(e) { return optionsSave(optionsNew).then(() => { yomichan().setOptions(optionsNew); updateVisibility(optionsNew); - if (optionsNew.anki.enable !== optionsOld.anki.enable) { + if (optionsNew.anki.enable !== optionsOld.anki.enable || optionsNew.anki.server !== optionsOld.anki.server) { showAnkiError(null); showAnkiSpinner(true); return populateAnkiDeckAndModel(optionsNew); diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 863e8916..a4e39e41 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -39,6 +39,7 @@ function optionsSetDefaults(options) { anki: { enable: false, + server: 'http://127.0.0.1:8765', tags: ['yomichan'], htmlCards: true, sentenceExt: 200, @@ -67,14 +68,14 @@ function optionsSetDefaults(options) { function optionsVersion(options) { - const copy = (targetDict, targetKey, sourceDict, sourceKey) => { - targetDict[targetKey] = sourceDict.hasOwnProperty(sourceKey) ? sourceDict[sourceKey] : targetDict[targetKey]; - }; - + optionsSetDefaults(options); options.version = options.version || 0; + const fixups = [ () => { - optionsSetDefaults(options); + const copy = (targetDict, targetKey, sourceDict, sourceKey) => { + targetDict[targetKey] = sourceDict.hasOwnProperty(sourceKey) ? sourceDict[sourceKey] : targetDict[targetKey]; + }; copy(options.general, 'autoStart', options, 'activateOnStartup'); copy(options.general, 'audioPlayback', options, 'enableAudioPlayback'); diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index d97dc586..80a67588 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -71,7 +71,7 @@ class Yomichan { this.options = options; if (options.anki.enable) { - this.anki = new AnkiConnect(); + this.anki = new AnkiConnect(this.options.anki.server); } else { this.anki = new AnkiNull(); } diff --git a/ext/bg/options.html b/ext/bg/options.html index 145f97fd..d9d23c6a 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -161,6 +161,11 @@ +
+ + +
+
+
+ +
+
diff --git a/ext/fg/js/driver.js b/ext/fg/js/driver.js index 97f29f89..7facda0a 100644 --- a/ext/fg/js/driver.js +++ b/ext/fg/js/driver.js @@ -103,7 +103,7 @@ class Driver { return; } - const textSource = textSourceFromPoint(point); + const textSource = textSourceFromPoint(point, this.options.scanning.imposter); if (textSource === null || !textSource.containsPoint(point)) { if (hideNotFound) { this.searchClear(); diff --git a/ext/fg/js/util.js b/ext/fg/js/util.js index a7533846..641b73ac 100644 --- a/ext/fg/js/util.js +++ b/ext/fg/js/util.js @@ -93,12 +93,12 @@ function destroyImposters() { } } -function textSourceFromPoint(point) { +function textSourceFromPoint(point, imposter) { const element = document.elementFromPoint(point.x, point.y); if (element !== null) { if (element.nodeName === 'IMG' || element.nodeName === 'BUTTON') { return new TextSourceElement(element); - } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { + } else if (imposter && (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA')) { createImposter(element); } } diff --git a/ext/manifest.json b/ext/manifest.json index ba7e36e6..83651a62 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "Yomichan", - "version": "1.0.10", + "version": "1.0.11", "description": "Japanese dictionary with Anki integration", "icons": {"16": "img/icon16.png", "48": "img/icon48.png", "128": "img/icon128.png"}, -- cgit v1.2.3 From 2e3aec9ba11b15d7ac2b5d99af2dacac88e9c276 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Wed, 8 Feb 2017 20:13:45 -0800 Subject: fix "url" not being set on kanji cards, add more fields --- ext/bg/js/options-form.js | 2 +- ext/fg/js/driver.js | 6 +++++- ext/fg/js/frame.js | 10 +++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 4470d105..91c6f140 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -351,7 +351,7 @@ function populateAnkiFields(element, options) { const markers = { 'terms': ['audio', 'dictionary', 'expression', 'furigana', 'glossary', 'reading', 'sentence', 'tags', 'url'], - 'kanji': ['character', 'dictionary', 'glossary', 'kunyomi', 'onyomi', 'url'] + 'kanji': ['character', 'dictionary', 'glossary', 'kunyomi', 'onyomi', 'sentence', 'tags', 'url'] }[tabId] || {}; return anki().getModelFieldNames(modelName).then(names => { diff --git a/ext/fg/js/driver.js b/ext/fg/js/driver.js index 7facda0a..cb7f2ea6 100644 --- a/ext/fg/js/driver.js +++ b/ext/fg/js/driver.js @@ -167,7 +167,11 @@ class Driver { if (definitions.length === 0) { return false; } else { - definitions.forEach(definition => definition.url = window.location.href); + const sentence = extractSentence(textSource, this.options.anki.sentenceExt); + definitions.forEach(definition => { + definition.url = window.location.href; + definition.sentence = sentence; + }); this.popup.showNextTo(textSource.getRect()); this.popup.showKanjiDefs(definitions, this.options); diff --git a/ext/fg/js/frame.js b/ext/fg/js/frame.js index dba59000..df8ca894 100644 --- a/ext/fg/js/frame.js +++ b/ext/fg/js/frame.js @@ -49,7 +49,15 @@ class Frame { $('.kanji-link').click(e => { e.preventDefault(); - findKanji($(e.target).text()).then(kdefs => this.api_showKanjiDefs({options, definitions: kdefs})); + const character = $(e.target).text(); + findKanji(character).then(kdefs => { + kdefs.forEach(kdef => { + kdef.url = definitions[0].url; + kdef.sentence = definitions[0].sentence; + }); + + this.api_showKanjiDefs({options, definitions: kdefs}); + }); }); $('.action-play-audio').click(e => { -- cgit v1.2.3 From 64db42d536318cc4b91ed5a7484de302db7979f4 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sun, 19 Feb 2017 10:09:15 -0800 Subject: switch to new ankiconnect interface --- ext/bg/js/ankiconnect.js | 2 +- ext/bg/js/yomichan.js | 27 +++++++++++++++------------ ext/fg/js/frame.js | 34 +++++++++++++--------------------- ext/fg/js/util.js | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 34 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/ankiconnect.js b/ext/bg/js/ankiconnect.js index f6f94329..3a6e3690 100644 --- a/ext/bg/js/ankiconnect.js +++ b/ext/bg/js/ankiconnect.js @@ -20,7 +20,7 @@ class AnkiConnect { constructor(server) { this.server = server; this.asyncPools = {}; - this.localVersion = 1; + this.localVersion = 2; this.remoteVersion = null; } diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 80a67588..4c70bf0f 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -100,20 +100,23 @@ class Yomichan { note.deckName = this.options.anki.terms.deck; note.modelName = this.options.anki.terms.model; - const audio = { - kanji: definition.expression, - kana: definition.reading, - fields: [] - }; - - for (const name in fields) { - if (fields[name].includes('{audio}')) { - audio.fields.push(name); + if (definition.audio) { + const audio = { + url: definition.audio.url, + filename: definition.audio.filename, + skipHash: '7e2c2f954ef6051373ba916f000168dc', + fields: [] + }; + + for (const name in fields) { + if (fields[name].includes('{audio}')) { + audio.fields.push(name); + } } - } - if (audio.fields.length > 0) { - note.audio = audio; + if (audio.fields.length > 0) { + note.audio = audio; + } } } diff --git a/ext/fg/js/frame.js b/ext/fg/js/frame.js index 4f4a6378..1028f0f6 100644 --- a/ext/fg/js/frame.js +++ b/ext/fg/js/frame.js @@ -113,7 +113,16 @@ class Frame { const index = link.data('index'); const mode = link.data('mode'); - addDefinition(this.definitions[index], mode).then(success => { + const definition = this.definitions[index]; + if (mode !== 'kanji') { + const url = buildAudioUrl(definition); + const filename = buildAudioFilename(definition); + if (url && filename) { + definition.audio = {url, filename}; + } + } + + addDefinition(definition, mode).then(success => { if (success) { const button = this.findAddNoteButton(index, mode); button.addClass('disabled'); @@ -171,28 +180,11 @@ class Frame { } } - let kana = definition.reading; - let kanji = definition.expression; - if (!kana) { - if (!kanji) { - return; - } - - if (wanakana.isHiragana(kanji)) { - kana = kanji; - kanji = null; - } - } - - const params = []; - if (kanji) { - params.push(`kanji=${encodeURIComponent(kanji)}`); - } - if (kana) { - params.push(`kana=${encodeURIComponent(kana)}`); + const url = buildAudioUrl(definition); + if (!url) { + return; } - const url = `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?${params.join('&')}`; let audio = this.audioCache[url]; if (audio) { audio.currentTime = 0; diff --git a/ext/fg/js/util.js b/ext/fg/js/util.js index aeda36b5..c9ee4ed7 100644 --- a/ext/fg/js/util.js +++ b/ext/fg/js/util.js @@ -166,3 +166,43 @@ function extractSentence(source, extent) { return content.substring(startPos, endPos).trim(); } + +function buildAudioUrl(definition) { + let kana = definition.reading; + let kanji = definition.expression; + + if (!kana && !kanji) { + return null; + } + + if (!kana && wanakana.isHiragana(kanji)) { + kana = kanji; + kanji = null; + } + + const params = []; + if (kanji) { + params.push(`kanji=${encodeURIComponent(kanji)}`); + } + if (kana) { + params.push(`kana=${encodeURIComponent(kana)}`); + } + + return `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?${params.join('&')}`; +} + +function buildAudioFilename(definition) { + if (!definition.reading && !definition.expression) { + return null; + } + + let filename = 'yomichan'; + if (definition.reading) { + filename += `_${definition.reading}`; + } + if (definition.expression) { + filename += `_${definition.expression}`; + } + + return filename += '.mp3'; +} -- cgit v1.2.3 From 465a8e21c0a9d7b2d1e704ab9a42b5f662fd82d3 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sat, 25 Feb 2017 19:14:44 -0800 Subject: usability improvements --- ext/bg/js/options-form.js | 52 ++++++++++++++++------------------------------- ext/bg/js/options.js | 2 +- ext/bg/js/yomichan.js | 39 ++++++++++++++++------------------- ext/bg/options.html | 2 +- ext/fg/js/driver.js | 27 ++++++++---------------- ext/fg/js/util.js | 4 ---- 6 files changed, 45 insertions(+), 81 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 91c6f140..7824164c 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -28,7 +28,7 @@ function getFormData() { return optionsLoad().then(optionsOld => { const optionsNew = $.extend(true, {}, optionsOld); - optionsNew.general.autoStart = $('#activate-on-startup').prop('checked'); + optionsNew.general.enable = $('#enable-search').prop('checked'); optionsNew.general.audioPlayback = $('#audio-playback-buttons').prop('checked'); optionsNew.general.groupResults = $('#group-terms-results').prop('checked'); optionsNew.general.softKatakana = $('#soft-katakana-search').prop('checked'); @@ -87,7 +87,7 @@ $(document).ready(() => { Handlebars.partials = Handlebars.templates; optionsLoad().then(options => { - $('#activate-on-startup').prop('checked', options.general.autoStart); + $('#enable-search').prop('checked', options.general.enable); $('#audio-playback-buttons').prop('checked', options.general.audioPlayback); $('#group-terms-results').prop('checked', options.general.groupResults); $('#soft-katakana-search').prop('checked', options.general.softKatakana); @@ -172,9 +172,7 @@ function populateDictionaries(options) { $('.dict-enabled, .dict-priority').change(onOptionsChanged); $('.dict-delete').click(onDictionaryDelete); - }).catch(error => { - showDictionaryError(error); - }).then(() => { + }).catch(showDictionaryError).then(() => { showDictionarySpinner(false); if (dictCount === 0) { dictWarning.show(); @@ -191,13 +189,17 @@ function onDictionaryPurge(e) { const dictControls = $('#dict-importer, #dict-groups').hide(); const dictProgress = $('#dict-purge-progress').show(); - return database().purge().catch(error => { - showDictionaryError(error); - }).then(() => { + return database().purge().catch(showDictionaryError).then(() => { showDictionarySpinner(false); dictControls.show(); dictProgress.hide(); - return optionsLoad().then(options => populateDictionaries(options)); + return optionsLoad(); + }).then(options => { + options.dictionaries = {}; + return optionsSave(options).then(() => { + yomichan().setOptions(options); + populateDictionaries(options); + }); }); } @@ -214,13 +216,11 @@ function onDictionaryDelete() { setProgress(0.0); - database().deleteDictionary(dictGroup.data('title'), (total, current) => setProgress(current / total * 100.0)).catch(error => { - showDictionaryError(error); - }).then(() => { + database().deleteDictionary(dictGroup.data('title'), (total, current) => setProgress(current / total * 100.0)).catch(showDictionaryError).then(() => { showDictionarySpinner(false); dictProgress.hide(); dictControls.show(); - return optionsLoad().then(options => populateDictionaries(options)); + return optionsLoad().then(populateDictionaries); }); } @@ -241,11 +241,7 @@ function onDictionaryImport() { database().importDictionary(dictUrl.val(), (total, current) => setProgress(current / total * 100.0)).then(summary => { options.dictionaries[summary.title] = {enabled: true, priority: 0}; return optionsSave(options).then(() => yomichan().setOptions(options)); - }).then(() => { - return populateDictionaries(options); - }).catch(error => { - showDictionaryError(error); - }).then(() => { + }).then(() => populateDictionaries(options)).catch(showDictionaryError).then(() => { showDictionarySpinner(false); dictProgress.hide(); dictImporter.show(); @@ -330,13 +326,7 @@ function populateAnkiDeckAndModel(options) { populateAnkiFields($('#anki-terms-model').val(options.anki.terms.model), options), populateAnkiFields($('#anki-kanji-model').val(options.anki.kanji.model), options) ]); - }).then(() => { - ankiFormat.show(); - }).catch(error => { - showAnkiError(error); - }).then(() => { - showAnkiSpinner(false); - }); + }).then(() => ankiFormat.show()).catch(showAnkiError).then(() => showAnkiSpinner(false)); } function populateAnkiFields(element, options) { @@ -386,11 +376,7 @@ function onAnkiModelChanged(e) { optionsNew.anki[tabId].fields = {}; populateAnkiFields(element, optionsNew).then(() => { optionsSave(optionsNew).then(() => yomichan().setOptions(optionsNew)); - }).catch(error => { - showAnkiError(error); - }).then(() => { - showAnkiSpinner(false); - }); + }).catch(showAnkiError).then(() => showAnkiSpinner(false)); }); } @@ -409,9 +395,5 @@ function onOptionsChanged(e) { return populateAnkiDeckAndModel(optionsNew); } }); - }).catch(error => { - showAnkiError(error); - }).then(() => { - showAnkiSpinner(false); - }); + }).catch(showAnkiError).then(() => showAnkiSpinner(false)); } diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 65712c12..127f0421 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -20,7 +20,7 @@ function optionsSetDefaults(options) { const defaults = { general: { - autoStart: true, + enable: true, audioPlayback: true, groupResults: true, softKatakana: true, diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 4c70bf0f..b1bf710f 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -26,18 +26,12 @@ class Yomichan { this.translator = new Translator(); this.anki = new AnkiNull(); this.options = null; - this.setEnabled(false); chrome.runtime.onMessage.addListener(this.onMessage.bind(this)); - chrome.browserAction.onClicked.addListener(this.onBrowserAction.bind(this)); chrome.runtime.onInstalled.addListener(this.onInstalled.bind(this)); + chrome.browserAction.onClicked.addListener(e => chrome.runtime.openOptionsPage()); - this.translator.prepare().then(optionsLoad).then(options => { - this.setOptions(options); - if (this.options.general.autoStart) { - this.setEnabled(true); - } - }); + this.translator.prepare().then(optionsLoad).then(this.setOptions.bind(this)); } onInstalled(details) { @@ -57,19 +51,26 @@ class Yomichan { return true; } - onBrowserAction() { - this.setEnabled(!this.enabled); - } - - setEnabled(enabled) { - this.enabled = enabled; - this.tabInvokeAll('setEnabled', this.enabled); - chrome.browserAction.setBadgeText({text: enabled ? '' : 'off'}); - } + // setEnabled(enabled) { + // this.enabled = enabled; + // this.tabInvokeAll('setEnabled', this.enabled); + // chrome.browserAction.setBadgeText({text: enabled ? '' : 'off'}); + // } setOptions(options) { this.options = options; + let usable = false; + for (const title in options.dictionaries) { + if (options.dictionaries[title].enabled) { + usable = true; + break; + } + } + + chrome.browserAction.setBadgeBackgroundColor({color: '#f0ad4e'}); + chrome.browserAction.setBadgeText({text: usable ? '' : '!'}); + if (options.anki.enable) { this.anki = new AnkiConnect(this.options.anki.server); } else { @@ -132,10 +133,6 @@ class Yomichan { return note; } - api_getEnabled({callback}) { - callback({result: this.enabled}); - } - api_getOptions({callback}) { promiseCallback(optionsLoad(), callback); } diff --git a/ext/bg/options.html b/ext/bg/options.html index ebb12f15..03e328d2 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -26,7 +26,7 @@

General Options

- +
diff --git a/ext/fg/js/driver.js b/ext/fg/js/driver.js index 421c3591..3b4c0c76 100644 --- a/ext/fg/js/driver.js +++ b/ext/fg/js/driver.js @@ -24,21 +24,16 @@ class Driver { this.lastMousePos = null; this.lastTextSource = null; this.pendingLookup = false; - this.enabled = false; this.options = null; - chrome.runtime.onMessage.addListener(this.onBgMessage.bind(this)); - window.addEventListener('mouseover', this.onMouseOver.bind(this)); - window.addEventListener('mousedown', this.onMouseDown.bind(this)); - window.addEventListener('mousemove', this.onMouseMove.bind(this)); - window.addEventListener('resize', e => this.searchClear()); - - Promise.all([getOptions(), isEnabled()]).then(([options, enabled]) => { + getOptions().then(options => { this.options = options; - this.enabled = enabled; - }).catch(error => { - this.handleError(error); - }); + window.addEventListener('mouseover', this.onMouseOver.bind(this)); + window.addEventListener('mousedown', this.onMouseDown.bind(this)); + window.addEventListener('mousemove', this.onMouseMove.bind(this)); + window.addEventListener('resize', e => this.searchClear()); + chrome.runtime.onMessage.addListener(this.onBgMessage.bind(this)); + }).catch(this.handleError.bind(this)); } popupTimerSet(callback) { @@ -63,7 +58,7 @@ class Driver { this.lastMousePos = {x: e.clientX, y: e.clientY}; this.popupTimerClear(); - if (!this.enabled) { + if (!this.options.general.enable) { return; } @@ -198,12 +193,6 @@ class Driver { api_setOptions(options) { this.options = options; } - - api_setEnabled(enabled) { - if (!(this.enabled = enabled)) { - this.searchClear(); - } - } } window.driver = new Driver(); diff --git a/ext/fg/js/util.js b/ext/fg/js/util.js index c9ee4ed7..99da6381 100644 --- a/ext/fg/js/util.js +++ b/ext/fg/js/util.js @@ -38,10 +38,6 @@ function showError(error) { window.alert(`Error: ${error}`); } -function isEnabled() { - return invokeBgApi('getEnabled', {}); -} - function getOptions() { return invokeBgApi('getOptions', {}); } -- cgit v1.2.3 From 55dd9b1e6b06401e5a5f523fce1f3d6c1db4d9da Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sun, 26 Feb 2017 10:11:23 -0800 Subject: delete unused dictionary deletion code --- ext/bg/js/database.js | 78 +---------------------------------------------- ext/bg/js/options-form.js | 35 +++++---------------- ext/bg/js/templates.js | 8 ++--- ext/bg/options.html | 2 +- tmpl/dictionary.html | 20 ++---------- 5 files changed, 14 insertions(+), 129 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js index 7dc533e3..31573065 100644 --- a/ext/bg/js/database.js +++ b/ext/bg/js/database.js @@ -45,7 +45,7 @@ class Database { terms: '++id,dictionary,expression,reading', kanji: '++,dictionary,character', tagMeta: '++,dictionary', - dictionaries: '++,title,version', + dictionaries: '++,title,version' }); return this.db.open(); @@ -155,82 +155,6 @@ class Database { return this.db.dictionaries.toArray(); } - deleteDictionary(title, callback) { - if (this.db === null) { - return Promise.reject('database not initialized'); - } - - return this.db.dictionaries.where('title').equals(title).first(info => { - if (!info) { - return; - } - - let termCounter = Promise.resolve(0); - if (info.hasTerms) { - termCounter = this.db.terms.where('dictionary').equals(title).count(); - } - - let kanjiCounter = Promise.resolve(0); - if (info.hasKanji) { - kanjiCounter = this.db.kanji.where('dictionary').equals(title).count(); - } - - return Promise.all([termCounter, kanjiCounter]).then(([termCount, kanjiCount]) => { - const rowLimit = 500; - const totalCount = termCount + kanjiCount; - let deletedCount = 0; - - let termDeleter = Promise.resolve(); - if (info.hasTerms) { - const termDeleterFunc = () => { - return this.db.terms.where('dictionary').equals(title).limit(rowLimit).delete().then(count => { - if (count === 0) { - return Promise.resolve(); - } - - deletedCount += count; - if (callback) { - callback(totalCount, deletedCount); - } - - return termDeleterFunc(); - }); - }; - - termDeleter = termDeleterFunc(); - } - - let kanjiDeleter = Promise.resolve(); - if (info.hasKanji) { - const kanjiDeleterFunc = () => { - return this.db.kanji.where('dictionary').equals(title).limit(rowLimit).delete().then(count => { - if (count === 0) { - return Promise.resolve(); - } - - deletedCount += count; - if (callback) { - callback(totalCount, deletedCount); - } - - return kanjiDeleterFunc(); - }); - }; - - kanjiDeleter = kanjiDeleterFunc(); - } - - return Promise.all([termDeleter, kanjiDeleter]); - }); - }).then(() => { - return this.db.tagMeta.where('dictionary').equals(title).delete(); - }).then(() => { - return this.db.dictionaries.where('title').equals(title).delete(); - }).then(() => { - delete this.cacheTagMeta[title]; - }); - } - importDictionary(indexUrl, callback) { if (this.db === null) { return Promise.reject('database not initialized'); diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 7824164c..ae0491a2 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -171,7 +171,6 @@ function populateDictionaries(options) { updateVisibility(options); $('.dict-enabled, .dict-priority').change(onOptionsChanged); - $('.dict-delete').click(onDictionaryDelete); }).catch(showDictionaryError).then(() => { showDictionarySpinner(false); if (dictCount === 0) { @@ -197,33 +196,12 @@ function onDictionaryPurge(e) { }).then(options => { options.dictionaries = {}; return optionsSave(options).then(() => { - yomichan().setOptions(options); populateDictionaries(options); + yomichan().setOptions(options); }); }); } -function onDictionaryDelete() { - showDictionaryError(null); - showDictionarySpinner(true); - - const dictGroup = $(this).closest('.dict-group'); - const dictProgress = dictGroup.find('.dict-delete-progress').show(); - const dictControls = dictGroup.find('.dict-group-controls').hide(); - const setProgress = percent => { - dictProgress.find('.progress-bar').css('width', `${percent}%`); - }; - - setProgress(0.0); - - database().deleteDictionary(dictGroup.data('title'), (total, current) => setProgress(current / total * 100.0)).catch(showDictionaryError).then(() => { - showDictionarySpinner(false); - dictProgress.hide(); - dictControls.show(); - return optionsLoad().then(populateDictionaries); - }); -} - function onDictionaryImport() { showDictionaryError(null); showDictionarySpinner(true); @@ -231,9 +209,7 @@ function onDictionaryImport() { const dictUrl = $('#dict-url'); const dictImporter = $('#dict-importer').hide(); const dictProgress = $('#dict-import-progress').show(); - const setProgress = percent => { - dictProgress.find('.progress-bar').css('width', `${percent}%`); - }; + const setProgress = percent => dictProgress.find('.progress-bar').css('width', `${percent}%`); setProgress(0.0); @@ -389,7 +365,12 @@ function onOptionsChanged(e) { return optionsSave(optionsNew).then(() => { yomichan().setOptions(optionsNew); updateVisibility(optionsNew); - if (optionsNew.anki.enable !== optionsOld.anki.enable || optionsNew.anki.server !== optionsOld.anki.server) { + + const ankiUpdated = + optionsNew.anki.enable !== optionsOld.anki.enable || + optionsNew.anki.server !== optionsOld.anki.server; + + if (ankiUpdated) { showAnkiError(null); showAnkiSpinner(true); return populateAnkiDeckAndModel(optionsNew); diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index ba4d0b86..5fb894c1 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -11,13 +11,9 @@ templates['dictionary.html'] = template({"1":function(container,depth0,helpers,p + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) + " rev." + alias4(((helper = (helper = helpers.revision || (depth0 != null ? depth0.revision : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"revision","hash":{},"data":data}) : helper))) - + "\n\n \n \n \n \n \n \n \n \n\n
\n Dictionary data is being deleted, please be patient...\n
\n
\n
\n
\n\n
\n