Organize frontend functions (#513)
This commit is contained in:
parent
caca9869c4
commit
edb86d9ec3
@ -95,6 +95,58 @@ class Frontend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async setPopup(popup) {
|
||||||
|
this._textScanner.clearSelection(true);
|
||||||
|
this._popup = popup;
|
||||||
|
await popup.setOptionsContext(await this.getOptionsContext(), this._id);
|
||||||
|
}
|
||||||
|
|
||||||
|
setDisabledOverride(disabled) {
|
||||||
|
this._disabledOverride = disabled;
|
||||||
|
this._updateTextScannerEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
async setTextSource(textSource) {
|
||||||
|
await this._onSearchSource(textSource, 'script');
|
||||||
|
this._textScanner.setCurrentTextSource(textSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getOptionsContext() {
|
||||||
|
const url = this._getUrl !== null ? await this._getUrl() : window.location.href;
|
||||||
|
const depth = this._popup.depth;
|
||||||
|
const modifierKeys = [...this._activeModifiers];
|
||||||
|
return {depth, url, modifierKeys};
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateOptions() {
|
||||||
|
const optionsContext = await this.getOptionsContext();
|
||||||
|
this._options = await apiOptionsGet(optionsContext);
|
||||||
|
this._textScanner.setOptions(this._options);
|
||||||
|
this._updateTextScannerEnabled();
|
||||||
|
|
||||||
|
const ignoreNodes = ['.scan-disable', '.scan-disable *'];
|
||||||
|
if (!this._options.scanning.enableOnPopupExpressions) {
|
||||||
|
ignoreNodes.push('.source-text', '.source-text *');
|
||||||
|
}
|
||||||
|
this._textScanner.ignoreNodes = ignoreNodes.join(',');
|
||||||
|
|
||||||
|
await this._popup.setOptionsContext(optionsContext, this._id);
|
||||||
|
|
||||||
|
this._updateContentScale();
|
||||||
|
|
||||||
|
const textSourceCurrent = this._textScanner.getCurrentTextSource();
|
||||||
|
const causeCurrent = this._textScanner.causeCurrent;
|
||||||
|
if (textSourceCurrent !== null && causeCurrent !== null) {
|
||||||
|
await this._onSearchSource(textSourceCurrent, causeCurrent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showContentCompleted() {
|
||||||
|
return this._lastShowPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
_onResize() {
|
_onResize() {
|
||||||
this._updatePopupPosition();
|
this._updatePopupPosition();
|
||||||
}
|
}
|
||||||
@ -136,51 +188,21 @@ class Frontend {
|
|||||||
this._updateContentScale();
|
this._updateContentScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
setDisabledOverride(disabled) {
|
_onClearSelection({passive}) {
|
||||||
this._disabledOverride = disabled;
|
this._popup.hide(!passive);
|
||||||
this._updateTextScannerEnabled();
|
this._popup.clearAutoPlayTimer();
|
||||||
|
this._updatePendingOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
async setPopup(popup) {
|
async _onActiveModifiersChanged({modifiers}) {
|
||||||
this._textScanner.clearSelection(true);
|
if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
|
||||||
this._popup = popup;
|
this._activeModifiers = modifiers;
|
||||||
await popup.setOptionsContext(await this.getOptionsContext(), this._id);
|
if (await this._popup.isVisible()) {
|
||||||
|
this._optionsUpdatePending = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateOptions() {
|
|
||||||
const optionsContext = await this.getOptionsContext();
|
|
||||||
this._options = await apiOptionsGet(optionsContext);
|
|
||||||
this._textScanner.setOptions(this._options);
|
|
||||||
this._updateTextScannerEnabled();
|
|
||||||
|
|
||||||
const ignoreNodes = ['.scan-disable', '.scan-disable *'];
|
|
||||||
if (!this._options.scanning.enableOnPopupExpressions) {
|
|
||||||
ignoreNodes.push('.source-text', '.source-text *');
|
|
||||||
}
|
|
||||||
this._textScanner.ignoreNodes = ignoreNodes.join(',');
|
|
||||||
|
|
||||||
await this._popup.setOptionsContext(optionsContext, this._id);
|
|
||||||
|
|
||||||
this._updateContentScale();
|
|
||||||
|
|
||||||
const textSourceCurrent = this._textScanner.getCurrentTextSource();
|
|
||||||
const causeCurrent = this._textScanner.causeCurrent;
|
|
||||||
if (textSourceCurrent !== null && causeCurrent !== null) {
|
|
||||||
await this._onSearchSource(textSourceCurrent, causeCurrent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async _updatePendingOptions() {
|
|
||||||
if (this._optionsUpdatePending) {
|
|
||||||
this._optionsUpdatePending = false;
|
|
||||||
await this.updateOptions();
|
await this.updateOptions();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async setTextSource(textSource) {
|
|
||||||
await this._onSearchSource(textSource, 'script');
|
|
||||||
this._textScanner.setCurrentTextSource(textSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
async _onSearchSource(textSource, cause) {
|
async _onSearchSource(textSource, cause) {
|
||||||
await this._updatePendingOptions();
|
await this._updatePendingOptions();
|
||||||
@ -216,21 +238,6 @@ class Frontend {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
_showContent(textSource, focus, definitions, type, optionsContext) {
|
|
||||||
const {url} = optionsContext;
|
|
||||||
const sentence = docSentenceExtract(textSource, this._options.anki.sentenceExt);
|
|
||||||
this._showPopupContent(
|
|
||||||
textSource,
|
|
||||||
optionsContext,
|
|
||||||
type,
|
|
||||||
{definitions, context: {sentence, url, focus, disableHistory: true}}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
showContentCompleted() {
|
|
||||||
return this._lastShowPromise;
|
|
||||||
}
|
|
||||||
|
|
||||||
async _findTerms(textSource, optionsContext) {
|
async _findTerms(textSource, optionsContext) {
|
||||||
const searchText = this._textScanner.getTextSourceContent(textSource, this._options.scanning.length);
|
const searchText = this._textScanner.getTextSourceContent(textSource, this._options.scanning.length);
|
||||||
if (searchText.length === 0) { return null; }
|
if (searchText.length === 0) { return null; }
|
||||||
@ -255,27 +262,15 @@ class Frontend {
|
|||||||
return {definitions, type: 'kanji'};
|
return {definitions, type: 'kanji'};
|
||||||
}
|
}
|
||||||
|
|
||||||
_onClearSelection({passive}) {
|
_showContent(textSource, focus, definitions, type, optionsContext) {
|
||||||
this._popup.hide(!passive);
|
const {url} = optionsContext;
|
||||||
this._popup.clearAutoPlayTimer();
|
const sentence = docSentenceExtract(textSource, this._options.anki.sentenceExt);
|
||||||
this._updatePendingOptions();
|
this._showPopupContent(
|
||||||
}
|
textSource,
|
||||||
|
optionsContext,
|
||||||
async _onActiveModifiersChanged({modifiers}) {
|
type,
|
||||||
if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
|
{definitions, context: {sentence, url, focus, disableHistory: true}}
|
||||||
this._activeModifiers = modifiers;
|
);
|
||||||
if (await this._popup.isVisible()) {
|
|
||||||
this._optionsUpdatePending = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await this.updateOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
async getOptionsContext() {
|
|
||||||
const url = this._getUrl !== null ? await this._getUrl() : window.location.href;
|
|
||||||
const depth = this._popup.depth;
|
|
||||||
const modifierKeys = [...this._activeModifiers];
|
|
||||||
return {depth, url, modifierKeys};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_showPopupContent(textSource, optionsContext, type=null, details=null) {
|
_showPopupContent(textSource, optionsContext, type=null, details=null) {
|
||||||
@ -290,6 +285,13 @@ class Frontend {
|
|||||||
return this._lastShowPromise;
|
return this._lastShowPromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _updatePendingOptions() {
|
||||||
|
if (this._optionsUpdatePending) {
|
||||||
|
this._optionsUpdatePending = false;
|
||||||
|
await this.updateOptions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_updateTextScannerEnabled() {
|
_updateTextScannerEnabled() {
|
||||||
const enabled = (
|
const enabled = (
|
||||||
this._options.general.enable &&
|
this._options.general.enable &&
|
||||||
@ -321,6 +323,13 @@ class Frontend {
|
|||||||
this._updatePopupPosition();
|
this._updatePopupPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _updatePopupPosition() {
|
||||||
|
const textSource = this._textScanner.getCurrentTextSource();
|
||||||
|
if (textSource !== null && await this._popup.isVisible()) {
|
||||||
|
this._showPopupContent(textSource, await this.getOptionsContext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_broadcastRootPopupInformation() {
|
_broadcastRootPopupInformation() {
|
||||||
if (!this._popup.isProxy() && this._popup.depth === 0 && this._popup.frameId === 0) {
|
if (!this._popup.isProxy() && this._popup.depth === 0 && this._popup.frameId === 0) {
|
||||||
apiBroadcastTab('rootPopupInformation', {popupId: this._popup.id, frameId: this._popup.frameId});
|
apiBroadcastTab('rootPopupInformation', {popupId: this._popup.id, frameId: this._popup.frameId});
|
||||||
@ -334,11 +343,4 @@ class Frontend {
|
|||||||
title: document.title
|
title: document.title
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _updatePopupPosition() {
|
|
||||||
const textSource = this._textScanner.getCurrentTextSource();
|
|
||||||
if (textSource !== null && await this._popup.isVisible()) {
|
|
||||||
this._showPopupContent(textSource, await this.getOptionsContext());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user