Search refactoring (#725)

* Rename node fields to disambiguate

* Change order
This commit is contained in:
toasted-nutbread 2020-08-09 21:03:11 -04:00 committed by GitHub
parent 7b1838a282
commit f502dd4f21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -26,18 +26,18 @@
class DisplaySearch extends Display {
constructor() {
super(document.querySelector('#spinner'), document.querySelector('#content'));
this._searchButton = document.querySelector('#search');
this._queryInput = document.querySelector('#query');
this._introElement = document.querySelector('#intro');
this._clipboardMonitorEnableCheckbox = document.querySelector('#clipboard-monitor-enable');
this._wanakanaEnableCheckbox = document.querySelector('#wanakana-enable');
this._isPrepared = false;
this._search = document.querySelector('#search');
this._query = document.querySelector('#query');
this._intro = document.querySelector('#intro');
this._clipboardMonitorEnable = document.querySelector('#clipboard-monitor-enable');
this._wanakanaEnable = document.querySelector('#wanakana-enable');
this._introVisible = true;
this._introAnimationTimer = null;
this._clipboardMonitorEnabled = false;
this._clipboardMonitor = new ClipboardMonitor({
getClipboard: api.clipboardGet.bind(api)
});
this._clipboardMonitorEnabled = false;
this._onKeyDownIgnoreKeys = new Map([
['ANY_MOD', new Set([
'Tab', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'PageDown', 'PageUp', 'Home', 'End',
@ -71,18 +71,18 @@ class DisplaySearch extends Display {
const options = this.getOptions();
if (options.general.enableWanakana === true) {
this._wanakanaEnable.checked = true;
wanakana.bind(this._query);
this._wanakanaEnableCheckbox.checked = true;
wanakana.bind(this._queryInput);
} else {
this._wanakanaEnable.checked = false;
this._wanakanaEnableCheckbox.checked = false;
}
this._search.addEventListener('click', this._onSearch.bind(this), false);
this._query.addEventListener('input', this._onSearchInput.bind(this), false);
this._wanakanaEnable.addEventListener('change', this._onWanakanaEnableChange.bind(this));
this._searchButton.addEventListener('click', this._onSearch.bind(this), false);
this._queryInput.addEventListener('input', this._onSearchInput.bind(this), false);
this._wanakanaEnableCheckbox.addEventListener('change', this._onWanakanaEnableChange.bind(this));
window.addEventListener('copy', this._onCopy.bind(this));
this._clipboardMonitor.on('change', this._onExternalSearchUpdate.bind(this));
this._clipboardMonitorEnable.addEventListener('change', this._onClipboardMonitorEnableChange.bind(this));
this._clipboardMonitorEnableCheckbox.addEventListener('change', this._onClipboardMonitorEnableChange.bind(this));
this._updateSearchButton();
this._onModeChange();
@ -95,12 +95,12 @@ class DisplaySearch extends Display {
}
onEscape() {
if (this._query === null) {
if (this._queryInput === null) {
return;
}
this._query.focus();
this._query.select();
this._queryInput.focus();
this._queryInput.select();
}
onKeyDown(e) {
@ -124,15 +124,15 @@ class DisplaySearch extends Display {
}
}
if (!super.onKeyDown(e) && !preventFocus && document.activeElement !== this._query) {
this._query.focus({preventScroll: true});
if (!super.onKeyDown(e) && !preventFocus && document.activeElement !== this._queryInput) {
this._queryInput.focus({preventScroll: true});
}
}
async updateOptions() {
await super.updateOptions();
if (!this._isPrepared) { return; }
const query = this._query.value;
const query = this._queryInput.value;
if (query) {
this._onSearchQueryUpdated(query, false);
}
@ -159,7 +159,7 @@ class DisplaySearch extends Display {
case 'kanji':
animate = content.animate;
valid = content.definitions.length > 0;
this._query.blur();
this._queryInput.blur();
break;
case 'clear':
valid = false;
@ -170,7 +170,7 @@ class DisplaySearch extends Display {
if (typeof source !== 'string') { source = ''; }
this._query.value = source;
this._queryInput.value = source;
this._setIntroVisible(!valid, animate);
this._updateSearchButton();
}
@ -178,20 +178,20 @@ class DisplaySearch extends Display {
_onSearchInput() {
this._updateSearchButton();
const queryElementRect = this._query.getBoundingClientRect();
const queryElementRect = this._queryInput.getBoundingClientRect();
if (queryElementRect.top < 0 || queryElementRect.bottom > window.innerHeight) {
this._query.scrollIntoView();
this._queryInput.scrollIntoView();
}
}
_onSearch(e) {
if (this._query === null) {
if (this._queryInput === null) {
return;
}
e.preventDefault();
const query = this._query.value;
const query = this._queryInput.value;
this._onSearchQueryUpdated(query, true);
}
@ -227,9 +227,9 @@ class DisplaySearch extends Display {
_onWanakanaEnableChange(e) {
const value = e.target.checked;
if (value) {
wanakana.bind(this._query);
wanakana.bind(this._queryInput);
} else {
wanakana.unbind(this._query);
wanakana.unbind(this._queryInput);
}
api.modifySettings([{
action: 'set',
@ -253,7 +253,7 @@ class DisplaySearch extends Display {
}
_isWanakanaEnabled() {
return this._wanakanaEnable !== null && this._wanakanaEnable.checked;
return this._wanakanaEnableCheckbox !== null && this._wanakanaEnableCheckbox.checked;
}
_setIntroVisible(visible, animate) {
@ -263,7 +263,7 @@ class DisplaySearch extends Display {
this._introVisible = visible;
if (this._intro === null) {
if (this._introElement === null) {
return;
}
@ -282,38 +282,38 @@ class DisplaySearch extends Display {
_showIntro(animate) {
if (animate) {
const duration = 0.4;
this._intro.style.transition = '';
this._intro.style.height = '';
const size = this._intro.getBoundingClientRect();
this._intro.style.height = '0px';
this._intro.style.transition = `height ${duration}s ease-in-out 0s`;
window.getComputedStyle(this._intro).getPropertyValue('height'); // Commits height so next line can start animation
this._intro.style.height = `${size.height}px`;
this._introElement.style.transition = '';
this._introElement.style.height = '';
const size = this._introElement.getBoundingClientRect();
this._introElement.style.height = '0px';
this._introElement.style.transition = `height ${duration}s ease-in-out 0s`;
window.getComputedStyle(this._introElement).getPropertyValue('height'); // Commits height so next line can start animation
this._introElement.style.height = `${size.height}px`;
this._introAnimationTimer = setTimeout(() => {
this._intro.style.height = '';
this._introElement.style.height = '';
this._introAnimationTimer = null;
}, duration * 1000);
} else {
this._intro.style.transition = '';
this._intro.style.height = '';
this._introElement.style.transition = '';
this._introElement.style.height = '';
}
}
_hideIntro(animate) {
if (animate) {
const duration = 0.4;
const size = this._intro.getBoundingClientRect();
this._intro.style.height = `${size.height}px`;
this._intro.style.transition = `height ${duration}s ease-in-out 0s`;
window.getComputedStyle(this._intro).getPropertyValue('height'); // Commits height so next line can start animation
const size = this._introElement.getBoundingClientRect();
this._introElement.style.height = `${size.height}px`;
this._introElement.style.transition = `height ${duration}s ease-in-out 0s`;
window.getComputedStyle(this._introElement).getPropertyValue('height'); // Commits height so next line can start animation
} else {
this._intro.style.transition = '';
this._introElement.style.transition = '';
}
this._intro.style.height = '0';
this._introElement.style.height = '0';
}
_updateSearchButton() {
this._search.disabled = this._introVisible && (this._query === null || this._query.value.length === 0);
this._searchButton.disabled = this._introVisible && (this._queryInput === null || this._queryInput.value.length === 0);
}
async _prepareNestedPopups() {
@ -367,7 +367,7 @@ class DisplaySearch extends Display {
_updateClipboardMonitorEnabled() {
const mode = this.mode;
const enabled = this._clipboardMonitorEnabled;
this._clipboardMonitorEnable.checked = enabled;
this._clipboardMonitorEnableCheckbox.checked = enabled;
if (enabled && mode !== 'popup') {
this._clipboardMonitor.start();
} else {