Display refactor (#643)

* Remove statics

* Move orphan detection and error handling to Display

* Add clearContent function

* Add/use public get/set functions for optionsContext

* Add public getOptions

* Move interactive assignment

* Mark fields as private

* Mark functions as private

* Change stray getter into a function
This commit is contained in:
toasted-nutbread 2020-07-03 12:02:21 -04:00 committed by GitHub
parent 6ede83f293
commit e36bc8771f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 287 additions and 282 deletions

View File

@ -33,10 +33,10 @@ class DisplaySearch extends Display {
this._isPrepared = false;
this.optionsContext = {
this.setOptionsContext({
depth: 0,
url: window.location.href
};
});
this.queryParser = new QueryParser({
getOptionsContext: this.getOptionsContext.bind(this),
@ -80,12 +80,13 @@ class DisplaySearch extends Display {
await this.updateOptions();
yomichan.on('optionsUpdated', () => this.updateOptions());
await this.queryParser.prepare();
const options = this.getOptions();
const {queryParams: {query='', mode=''}} = parseUrl(window.location.href);
document.documentElement.dataset.searchMode = mode;
if (this.options.general.enableWanakana === true) {
if (options.general.enableWanakana === true) {
this.wanakanaEnable.checked = true;
wanakana.bind(this.query);
} else {
@ -96,7 +97,7 @@ class DisplaySearch extends Display {
this.onSearchQueryUpdated(this.query.value, false);
if (mode !== 'popup') {
if (this.options.general.enableClipboardMonitor === true) {
if (options.general.enableClipboardMonitor === true) {
this.clipboardMonitorEnable.checked = true;
this.clipboardMonitor.start();
} else {
@ -121,10 +122,6 @@ class DisplaySearch extends Display {
this._isPrepared = true;
}
onError(error) {
yomichan.logError(error);
}
onEscape() {
if (this.query === null) {
return;
@ -241,7 +238,7 @@ class DisplaySearch extends Display {
url: window.location.href
}});
} else {
this.container.textContent = '';
this.clearContent();
}
this.setTitleText(query);
window.parent.postMessage('popupClose', '*');
@ -299,7 +296,8 @@ class DisplaySearch extends Display {
async updateOptions() {
await super.updateOptions();
this.queryParser.setOptions(this.options);
const options = this.getOptions();
this.queryParser.setOptions(options);
if (!this._isPrepared) { return; }
const query = this.query.value;
if (query) {

View File

@ -31,7 +31,6 @@ class DisplayFloat extends Display {
this._secret = yomichan.generateId(16);
this._token = null;
this._orphaned = false;
this._nestedPopupsPrepared = false;
this._onKeyDownHandlers = new Map([
@ -59,24 +58,11 @@ class DisplayFloat extends Display {
async prepare() {
await super.prepare();
yomichan.on('orphaned', this.onOrphaned.bind(this));
window.addEventListener('message', this.onMessage.bind(this), false);
api.broadcastTab('popupPrepared', {secret: this._secret});
}
onError(error) {
if (this._orphaned) {
this.setContent('orphaned');
} else {
yomichan.logError(error);
}
}
onOrphaned() {
this._orphaned = true;
}
onEscape() {
window.parent.postMessage('popupClose', '*');
}
@ -126,7 +112,7 @@ class DisplayFloat extends Display {
}
async setOptionsContext(optionsContext) {
this.optionsContext = optionsContext;
super.setOptionsContext(optionsContext);
await this.updateOptions();
}
@ -181,7 +167,7 @@ class DisplayFloat extends Display {
}
async _configure({messageId, frameId, popupId, optionsContext, childrenSupported, scale}) {
this.optionsContext = optionsContext;
this.setOptionsContext(optionsContext);
await this.updateOptions();
@ -208,7 +194,7 @@ class DisplayFloat extends Display {
let complete = false;
const onOptionsUpdated = async () => {
const optionsContext = this.optionsContext;
const optionsContext = this.getOptionsContext();
const options = await api.optionsGet(optionsContext);
const maxPopupDepthExceeded = !(typeof depth === 'number' && depth < options.scanning.popupNestingMaxDepth);
if (maxPopupDepthExceeded || complete) { return; }

File diff suppressed because it is too large Load Diff