Use an overridable property to control progress indicator visibility (#1041)

This commit is contained in:
toasted-nutbread 2020-11-17 19:40:19 -05:00 committed by GitHub
parent ea7b8621c3
commit a48ac37815
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 24 deletions

View File

@ -21,10 +21,10 @@
*/
class QueryParser extends EventDispatcher {
constructor({getOptionsContext, setSpinnerVisible, documentUtil}) {
constructor({getOptionsContext, progressIndicatorVisible, documentUtil}) {
super();
this._getOptionsContext = getOptionsContext;
this._setSpinnerVisible = setSpinnerVisible;
this._progressIndicatorVisible = progressIndicatorVisible;
this._selectedParser = null;
this._documentUtil = documentUtil;
this._parseResults = [];
@ -63,17 +63,18 @@ class QueryParser extends EventDispatcher {
}
async setText(text) {
this._setSpinnerVisible(true);
const overrideToken = this._progressIndicatorVisible.setOverride(true);
try {
this._setPreview(text);
this._setPreview(text);
this._parseResults = await api.textParse(text, this._getOptionsContext());
this._refreshSelectedParser();
this._parseResults = await api.textParse(text, this._getOptionsContext());
this._refreshSelectedParser();
this._renderParserSelect();
this._renderParseResult();
this._setSpinnerVisible(false);
this._renderParserSelect();
this._renderParseResult();
} finally {
this._progressIndicatorVisible.clearOverride(overrideToken);
}
}
// Private

View File

@ -69,12 +69,13 @@ class Display extends EventDispatcher {
this._defaultTitleMaxLength = 1000;
this._fullQuery = '';
this._documentUtil = new DocumentUtil();
this._progressIndicatorVisible = new DynamicProperty(false);
this._queryParserVisible = false;
this._queryParserVisibleOverride = null;
this._queryParserContainer = document.querySelector('#query-parser-container');
this._queryParser = new QueryParser({
getOptionsContext: this.getOptionsContext.bind(this),
setSpinnerVisible: this.setSpinnerVisible.bind(this),
progressIndicatorVisible: this._progressIndicatorVisible,
documentUtil: this._documentUtil
});
this._mode = null;
@ -182,6 +183,7 @@ class Display extends EventDispatcher {
['popupMessage', {async: 'dynamic', handler: this._onDirectMessage.bind(this)}]
]);
window.addEventListener('focus', this._onWindowFocus.bind(this), false);
this._progressIndicatorVisible.on('change', this._onProgressIndicatorVisibleChanged.bind(this));
}
initializeState() {
@ -337,12 +339,6 @@ class Display extends EventDispatcher {
return document.title;
}
setSpinnerVisible(visible) {
if (this._spinner !== null) {
this._spinner.hidden = !visible;
}
}
registerActions(actions) {
for (const [name, handler] of actions) {
this._actions.set(name, handler);
@ -566,6 +562,11 @@ class Display extends EventDispatcher {
this._nextTermView();
}
_onProgressIndicatorVisibleChanged({value}) {
if (this._spinner === null) { return; }
this._spinner.hidden = !value;
}
_onWindowFocus() {
const target = this._contentScrollFocusElement;
if (target === null) { return; }
@ -1133,9 +1134,8 @@ class Display extends EventDispatcher {
}
async _noteAdd(definition, mode) {
const overrideToken = this._progressIndicatorVisible.setOverride(true);
try {
this.setSpinnerVisible(true);
const noteContext = await this._getNoteContext();
const noteId = await this._addDefinition(definition, mode, noteContext);
if (noteId) {
@ -1151,14 +1151,13 @@ class Display extends EventDispatcher {
} catch (e) {
this.onError(e);
} finally {
this.setSpinnerVisible(false);
this._progressIndicatorVisible.clearOverride(overrideToken);
}
}
async _audioPlay(definition, expressionIndex, entryIndex) {
const overrideToken = this._progressIndicatorVisible.setOverride(true);
try {
this.setSpinnerVisible(true);
const {expression, reading} = expressionIndex === -1 ? definition : definition.expressions[expressionIndex];
this._stopPlayingAudio();
@ -1204,7 +1203,7 @@ class Display extends EventDispatcher {
} catch (e) {
this.onError(e);
} finally {
this.setSpinnerVisible(false);
this._progressIndicatorVisible.clearOverride(overrideToken);
}
}