From 1e9906c624828819f74628bac4ee42cca3cbe3b6 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sat, 8 Oct 2016 17:39:21 -0700 Subject: Automatically look up Kanji when cannot find definitions. Allow text scanning without holding Shift key (resolves #18). --- ext/bg/import.html | 5 --- ext/bg/js/options-form.js | 85 ++++++++++++++++++++++------------------------- ext/bg/js/options.js | 5 +-- ext/bg/js/translator.js | 2 +- ext/bg/options.html | 37 ++++++++++++++++----- 5 files changed, 71 insertions(+), 63 deletions(-) (limited to 'ext/bg') diff --git a/ext/bg/import.html b/ext/bg/import.html index 34df2126..7f30b491 100644 --- a/ext/bg/import.html +++ b/ext/bg/import.html @@ -46,15 +46,10 @@
  • Left-click on the icon to enable or disable Yomichan for the current browser instance.
  • Right-click on the icon and select Options to open the Yomichan options page.
  • Hold down Shift (or the middle mouse button) as you hover over text to see term definitions.
  • -
  • Hold down Ctrl + Shift (or the middle mouse button) as you hover over text to see Kanji definitions.
  • Resize the definitions window by dragging the bottom-left corner inwards or outwards.
  • Click on Kanji in the definition window to view additional information about that character.
  • - -
    - -

    よろしくね!

    diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 1cd050b4..ed8c7927 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -39,51 +39,43 @@ function modelIdToFieldOptKey(id) { function modelIdToMarkers(id) { return { - 'anki-term-model': [ - 'audio', - 'expression', - 'glossary', - 'glossary-list', - 'reading', - 'sentence', - 'tags', - 'url' - ], - 'anki-kanji-model': [ - 'character', - 'glossary', - 'glossary-list', - 'kunyomi', - 'onyomi', - 'url' - ], + 'anki-term-model': ['audio', 'exholdion', 'glossary', 'glossary-list', 'reading', 'sentence', 'tags', 'url'], + 'anki-kanji-model': ['character', 'glossary', 'glossary-list', 'kunyomi', 'onyomi', 'url'], }[id]; } -function formToOptions(section) { +function getBasicOptions() { return loadOptions().then(optsOld => { const optsNew = $.extend({}, optsOld); - switch (section) { - case 'general': - optsNew.scanLength = parseInt($('#scan-length').val(), 10); - optsNew.activateOnStartup = $('#activate-on-startup').prop('checked'); - optsNew.selectMatchedText = $('#select-matched-text').prop('checked'); - optsNew.showAdvancedOptions = $('#show-advanced-options').prop('checked'); - optsNew.enableAudioPlayback = $('#enable-audio-playback').prop('checked'); - optsNew.enableAnkiConnect = $('#enable-anki-connect').prop('checked'); - break; - case 'anki': - optsNew.ankiCardTags = $('#anki-card-tags').val().split(/[,; ]+/); - optsNew.sentenceExtent = parseInt($('#sentence-extent').val(), 10); - optsNew.ankiTermDeck = $('#anki-term-deck').val(); - optsNew.ankiTermModel = $('#anki-term-model').val(); - optsNew.ankiTermFields = fieldsToDict($('#term .anki-field-value')); - optsNew.ankiKanjiDeck = $('#anki-kanji-deck').val(); - optsNew.ankiKanjiModel = $('#anki-kanji-model').val(); - optsNew.ankiKanjiFields = fieldsToDict($('#kanji .anki-field-value')); - break; - } + optsNew.activateOnStartup = $('#activate-on-startup').prop('checked'); + optsNew.showAdvancedOptions = $('#show-advanced-options').prop('checked'); + optsNew.enableAudioPlayback = $('#enable-audio-playback').prop('checked'); + optsNew.enableAnkiConnect = $('#enable-anki-connect').prop('checked'); + optsNew.holdShiftToScan = $('#hold-shift-to-scan').prop('checked'); + optsNew.selectMatchedText = $('#select-matched-text').prop('checked'); + optsNew.scanDelay = parseInt($('#scan-delay').val(), 10); + optsNew.scanLength = parseInt($('#scan-length').val(), 10); + + return { + optsNew: sanitizeOptions(optsNew), + optsOld: sanitizeOptions(optsOld) + }; + }); +} + +function getAnkiOptions() { + return loadOptions().then(optsOld => { + const optsNew = $.extend({}, optsOld); + + optsNew.ankiCardTags = $('#anki-card-tags').val().split(/[,; ]+/); + optsNew.sentenceExtent = parseInt($('#sentence-extent').val(), 10); + optsNew.ankiTermDeck = $('#anki-term-deck').val(); + optsNew.ankiTermModel = $('#anki-term-model').val(); + optsNew.ankiTermFields = fieldsToDict($('#term .anki-field-value')); + optsNew.ankiKanjiDeck = $('#anki-kanji-deck').val(); + optsNew.ankiKanjiModel = $('#anki-kanji-model').val(); + optsNew.ankiKanjiFields = fieldsToDict($('#kanji .anki-field-value')); return { optsNew: sanitizeOptions(optsNew), @@ -182,12 +174,12 @@ function populateAnkiFields(element, opts) { }}); } -function onOptionsGeneralChanged(e) { +function onOptionsBasicChanged(e) { if (!e.originalEvent && !e.isTrigger) { return; } - formToOptions('general').then(({optsNew, optsOld}) => { + getBasicOptions().then(({optsNew, optsOld}) => { saveOptions(optsNew).then(() => { yomichan().setOptions(optsNew); if (!optsOld.enableAnkiConnect && optsNew.enableAnkiConnect) { @@ -212,14 +204,14 @@ function onOptionsAnkiChanged(e) { return; } - formToOptions('anki').then(({optsNew, optsOld}) => { + getAnkiOptions().then(({optsNew, optsOld}) => { saveOptions(optsNew).then(() => yomichan().setOptions(optsNew)); }); } function onAnkiModelChanged(e) { if (e.originalEvent) { - formToOptions('anki').then(({optsNew, optsOld}) => { + getAnkiOptions().then(({optsNew, optsOld}) => { optsNew[modelIdToFieldOptKey($(this).id)] = {}; populateAnkiFields($(this), optsNew); saveOptions(optsNew).then(() => yomichan().setOptions(optsNew)); @@ -230,16 +222,17 @@ function onAnkiModelChanged(e) { $(document).ready(() => { loadOptions().then(opts => { $('#activate-on-startup').prop('checked', opts.activateOnStartup); - $('#select-matched-text').prop('checked', opts.selectMatchedText); $('#enable-audio-playback').prop('checked', opts.enableAudioPlayback); $('#enable-anki-connect').prop('checked', opts.enableAnkiConnect); $('#show-advanced-options').prop('checked', opts.showAdvancedOptions); + $('#hold-shift-to-scan').prop('checked', opts.holdShiftToScan); + $('#select-matched-text').prop('checked', opts.selectMatchedText); + $('#scan-delay').val(opts.scanDelay); $('#scan-length').val(opts.scanLength); - $('#anki-card-tags').val(opts.ankiCardTags.join(' ')); $('#sentence-extent').val(opts.sentenceExtent); - $('.options-general input').change(onOptionsGeneralChanged); + $('.options-basic input').change(onOptionsBasicChanged); $('.options-anki input').change(onOptionsAnkiChanged); $('.anki-deck').change(onOptionsAnkiChanged); $('.anki-model').change(onAnkiModelChanged); diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 915164c7..e9ad74a3 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -20,12 +20,13 @@ function sanitizeOptions(options) { const defaults = { activateOnStartup: true, - selectMatchedText: true, enableAudioPlayback: true, enableAnkiConnect: false, showAdvancedOptions: false, + selectMatchedText: true, + holdShiftToScan: true, + scanDelay: 15, scanLength: 20, - ankiCardTags: ['yomichan'], sentenceExtent: 200, diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 9711cf8d..8f895800 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -135,7 +135,7 @@ class Translator { } } - return Promise.all(promises).then(sets => this.processKanji(sets.reduce((a, b) => a.concat(b)))); + return Promise.all(promises).then(sets => this.processKanji(sets.reduce((a, b) => a.concat(b), []))); } processTerm(groups, source, tags, rules, root) { diff --git a/ext/bg/options.html b/ext/bg/options.html index 781257a2..f5bad2bd 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -24,7 +24,7 @@
    -
    +

    General Options

    @@ -39,7 +39,7 @@
    - +
    @@ -47,7 +47,7 @@
    - +
    @@ -55,35 +55,55 @@
    - +
    +
    +
    + +
    +

    Scanning Options

    +
    - + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    -

    Anki Options

    - Unable to connect: is the AnkiConnect extension for Anki installed and running? This software is required for Anki-related features. + Unable to Connect
    + Is the AnkiConnect extension for Anki installed and running? This software is required for Anki-related features.
    - Unsupported version: the installed version of the AnkiConnect extension for Anki is not compatible with this release; please update it. + Unsupported Version
    + The installed version of the AnkiConnect extension for Anki is not compatible with this release; please update it.
    @@ -158,7 +178,6 @@
    -
    -- cgit v1.2.3