diff options
-rw-r--r-- | ext/bg/js/options.js | 2 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 13 | ||||
-rw-r--r-- | ext/bg/js/util.js | 22 | ||||
-rw-r--r-- | ext/bg/js/yomichan.js | 2 | ||||
-rw-r--r-- | ext/bg/options.html | 8 | ||||
-rw-r--r-- | ext/manifest.json | 2 |
6 files changed, 36 insertions, 13 deletions
diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 49544840..1ea6ed68 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -40,6 +40,7 @@ function formRead() { optionsNew.scanning.middleMouse = $('#middle-mouse-button-scan').prop('checked'); optionsNew.scanning.selectText = $('#select-matched-text').prop('checked'); optionsNew.scanning.imposter = $('#search-form-text-fields').prop('checked'); + optionsNew.scanning.alphanumeric = $('#search-alphanumeric').prop('checked'); optionsNew.scanning.delay = parseInt($('#scan-delay').val(), 10); optionsNew.scanning.length = parseInt($('#scan-length').val(), 10); @@ -127,6 +128,7 @@ $(document).ready(() => { $('#middle-mouse-button-scan').prop('checked', options.scanning.middleMouse); $('#select-matched-text').prop('checked', options.scanning.selectText); $('#search-form-text-fields').prop('checked', options.scanning.imposter); + $('#search-alphanumeric').prop('checked', options.scanning.alphanumeric); $('#scan-delay').val(options.scanning.delay); $('#scan-length').val(options.scanning.length); diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 67430aef..b3b90641 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -41,10 +41,17 @@ class Translator { }); } - findTerms(text, dictionaries, softKatakana) { + findTerms(text, dictionaries, softKatakana, alphanumeric) { const titles = Object.keys(dictionaries); const cache = {}; + if (!alphanumeric && text.length > 0) { + const c = text[0]; + if (!jpIsKana(c) && !jpIsKanji(c)) { + return Promise.resolve({length: 0, definitions: []}); + } + } + return this.findTermsDeinflected(text, titles, cache).then(deinfLiteral => { const textHiragana = wanakana._katakanaToHiragana(text); if (text !== textHiragana && softKatakana) { @@ -84,8 +91,8 @@ class Translator { }); } - findTermsGrouped(text, dictionaries, softKatakana) { - return this.findTerms(text, dictionaries, softKatakana).then(({length, definitions}) => { + findTermsGrouped(text, dictionaries, softKatakana, alphanumeric) { + return this.findTerms(text, dictionaries, softKatakana, alphanumeric).then(({length, definitions}) => { return {length, definitions: dictTermsGroup(definitions, dictionaries)}; }); } diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index 64143ffe..09337c63 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -31,6 +31,20 @@ function promiseCallback(promise, callback) { /* + * Japanese + */ + +function jpIsKanji(c) { + const code = c.charCodeAt(0); + return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; +} + +function jpIsKana(c) { + return wanakana.isKana(c); +} + + +/* * Commands */ @@ -98,6 +112,7 @@ function optionsSetDefaults(options) { middleMouse: true, selectText: true, imposter: true, + alphanumeric: true, delay: 15, length: 10 }, @@ -489,14 +504,9 @@ function jsonLoadDb(indexUrl, indexLoaded, termsLoaded, kanjiLoaded) { */ function handlebarsKanjiLinks(options) { - const isKanji = c => { - const code = c.charCodeAt(0); - return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; - }; - let result = ''; for (const c of options.fn(this)) { - if (isKanji(c)) { + if (jpIsKanji(c)) { result += `<a href="#" class="kanji-link">${c}</a>`; } else { result += c; diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 51e05c80..172bb1d3 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -107,7 +107,7 @@ window.yomichan = new class { this.translator.findTermsGrouped.bind(this.translator) : this.translator.findTerms.bind(this.translator); - return searcher(text, dictEnabledSet(this.options), this.options.general.softKatakana).then(({definitions, length}) => { + return searcher(text, dictEnabledSet(this.options), this.options.general.softKatakana, this.options.scanning.alphanumeric).then(({definitions, length}) => { return {length, definitions: definitions.slice(0, this.options.general.maxResults)}; }); } diff --git a/ext/bg/options.html b/ext/bg/options.html index e3168ca1..c3799b61 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -93,6 +93,10 @@ <label><input type="checkbox" id="search-form-text-fields"> Search form text fields</label> </div> + <div class="checkbox"> + <label><input type="checkbox" id="search-alphanumeric"> Search alphanumeric text</label> + </div> + <div class="form-group options-advanced"> <label for="scan-delay">Scan delay</label> <input type="number" min="1" id="scan-delay" class="form-control"> @@ -200,9 +204,9 @@ <div id="anki-format"> <p class="help-block"> Specify the information you would like included in your flashcards in the field editor below. - Please be aware that Anki requires the first field in the model to be unique. It is highly recommended + As Anki requires the first field in the model to be unique, it is recommended that you set it to <code>{expression}</code> for term flashcards and <code>{character}</code> for - Kanji flashcards. + Kanji flashcards. You can use multiple markers per field by typing them in directly. </p> <ul class="nav nav-tabs"> diff --git a/ext/manifest.json b/ext/manifest.json index a7175bcd..5882f684 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "Yomichan", - "version": "1.1.13", + "version": "1.1.14", "description": "Japanese dictionary with Anki integration", "icons": {"16": "mixed/img/icon16.png", "48": "mixed/img/icon48.png", "128": "mixed/img/icon128.png"}, |