From 981f73b5623249b4c4cead0261eab0e70f620d90 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Mon, 25 Jan 2021 22:05:06 -0500 Subject: [PATCH] Clipboard lookup skip option (#1314) * Add autoSearchClipboardContent option * Hide header if there is any search text * Add setting for autoSearchClipboardContent * Add support for autoSearchClipboardContent --- ext/bg/data/options-schema.json | 7 ++++++- ext/bg/js/options.js | 3 +++ ext/bg/js/search.js | 13 +++++++------ ext/bg/settings2.html | 23 +++++++++++++++++++++++ ext/mixed/js/display.js | 9 +++++---- test/test-options-util.js | 3 ++- 6 files changed, 46 insertions(+), 12 deletions(-) diff --git a/ext/bg/data/options-schema.json b/ext/bg/data/options-schema.json index dfc553ed..b03f0234 100644 --- a/ext/bg/data/options-schema.json +++ b/ext/bg/data/options-schema.json @@ -115,7 +115,8 @@ "maximumClipboardSearchLength", "popupCurrentIndicatorMode", "popupActionBarVisibility", - "popupActionBarLocation" + "popupActionBarLocation", + "autoSearchClipboardContent" ], "properties": { "enable": { @@ -286,6 +287,10 @@ "type": "string", "enum": ["left", "right", "top", "bottom"], "default": "top" + }, + "autoSearchClipboardContent": { + "type": "boolean", + "default": true } } }, diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 10919ae3..1417c975 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -668,6 +668,8 @@ class OptionsUtil { // Added popupWindow. // Updated handlebars templates to include "stroke-count" definition. // Updated global.useSettingsV2 to be true (opt-out). + // Added audio.customSourceType. + // Added general.autoSearchClipboardContent. await this._addFieldTemplatesToOptions(options, '/bg/data/anki-field-templates-upgrade-v8.handlebars'); options.global.useSettingsV2 = true; for (const profile of options.profiles) { @@ -727,6 +729,7 @@ class OptionsUtil { windowState: 'normal' }; profile.options.audio.customSourceType = 'audio'; + profile.options.general.autoSearchClipboardContent = true; } return options; } diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 69edfabd..0fcbcd13 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -130,7 +130,7 @@ class DisplaySearch extends Display { case 'terms': case 'kanji': animate = !!content.animate; - valid = content.definitions.length > 0; + valid = (typeof source === 'string' && source.length > 0); this.blurElement(this._queryInput); break; case 'clear': @@ -159,12 +159,12 @@ class DisplaySearch extends Display { e.preventDefault(); e.stopImmediatePropagation(); this.blurElement(e.currentTarget); - this._search(true, true); + this._search(true, true, true); } _onSearch(e) { e.preventDefault(); - this._search(true, true); + this._search(true, true, true); } _onCopy() { @@ -173,12 +173,12 @@ class DisplaySearch extends Display { } _onExternalSearchUpdate({text, animate=true}) { - const {general: {maximumClipboardSearchLength}} = this.getOptions(); + const {general: {maximumClipboardSearchLength, autoSearchClipboardContent}} = this.getOptions(); if (text.length > maximumClipboardSearchLength) { text = text.substring(0, maximumClipboardSearchLength); } this._queryInput.value = text; - this._search(animate, false); + this._search(animate, false, autoSearchClipboardContent); } _onWanakanaEnableChange(e) { @@ -323,7 +323,7 @@ class DisplaySearch extends Display { }); } - _search(animate, history) { + _search(animate, history, lookup) { const query = this._queryInput.value; const depth = this.depth; const url = window.location.href; @@ -346,6 +346,7 @@ class DisplaySearch extends Display { animate } }; + if (!lookup) { details.params.lookup = 'false'; } this.setContent(details); } diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index 98274277..ba37c860 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -991,6 +991,29 @@ +
+
+
Clipboard text search mode
+
Change how the search page reacts to new text in the clipboard.
+
+
+ +
+
Size
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 6c97cb84..fdb0af39 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -558,7 +558,8 @@ class Display extends EventDispatcher { let queryFull = urlSearchParams.get('full'); queryFull = (queryFull !== null ? this.postProcessQuery(queryFull) : query); const wildcardsEnabled = (urlSearchParams.get('wildcards') !== 'off'); - await this._setContentTermsOrKanji(token, isTerms, query, queryFull, wildcardsEnabled, eventArgs); + const lookup = (urlSearchParams.get('lookup') !== 'false'); + await this._setContentTermsOrKanji(token, isTerms, query, queryFull, lookup, wildcardsEnabled, eventArgs); } break; case 'unloaded': @@ -844,7 +845,7 @@ class Display extends EventDispatcher { } } - async _setContentTermsOrKanji(token, isTerms, query, queryFull, wildcardsEnabled, eventArgs) { + async _setContentTermsOrKanji(token, isTerms, query, queryFull, lookup, wildcardsEnabled, eventArgs) { let {state, content} = this._history; let changeHistory = false; if (!isObject(content)) { @@ -874,7 +875,7 @@ class Display extends EventDispatcher { let {definitions} = content; if (!Array.isArray(definitions)) { - definitions = await this._findDefinitions(isTerms, query, wildcardsEnabled, optionsContext); + definitions = lookup ? await this._findDefinitions(isTerms, query, wildcardsEnabled, optionsContext) : []; if (this._setContentToken !== token) { return; } content.definitions = definitions; changeHistory = true; @@ -899,7 +900,7 @@ class Display extends EventDispatcher { this._definitions = definitions; this._updateNavigation(this._history.hasPrevious(), this._history.hasNext()); - this._setNoContentVisible(definitions.length === 0); + this._setNoContentVisible(definitions.length === 0 && lookup); const container = this._container; container.textContent = ''; diff --git a/test/test-options-util.js b/test/test-options-util.js index 0ec40a9b..1f4e3bfb 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -296,7 +296,8 @@ function createProfileOptionsUpdatedTestData1() { maximumClipboardSearchLength: 1000, popupCurrentIndicatorMode: 'triangle', popupActionBarVisibility: 'auto', - popupActionBarLocation: 'top' + popupActionBarLocation: 'top', + autoSearchClipboardContent: true }, audio: { enabled: true,