diff options
Diffstat (limited to 'ext/mixed/js')
-rw-r--r-- | ext/mixed/js/display-context.js | 7 | ||||
-rw-r--r-- | ext/mixed/js/display.js | 84 |
2 files changed, 51 insertions, 40 deletions
diff --git a/ext/mixed/js/display-context.js b/ext/mixed/js/display-context.js index 5ee78459..2322974a 100644 --- a/ext/mixed/js/display-context.js +++ b/ext/mixed/js/display-context.js @@ -17,8 +17,9 @@ class DisplayContext { - constructor(type, definitions, context) { + constructor(type, source, definitions, context) { this.type = type; + this.source = source; this.definitions = definitions; this.context = context; } @@ -43,8 +44,8 @@ class DisplayContext { return this.context.next; } - static push(self, type, definitions, context) { - const newContext = new DisplayContext(type, definitions, context); + static push(self, type, source, definitions, context) { + const newContext = new DisplayContext(type, source, definitions, context); if (self !== null) { newContext.update({previous: self}); self.update({next: newContext}); diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index f681b671..b2d7d54d 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -202,19 +202,18 @@ class Display { } } - async setContent(type, details) { + async setContent(details) { const token = {}; // Unique identifier token this._setContentToken = token; try { this._mediaLoader.unloadAll(); - const {definitions, context, focus} = details; + const {focus, history, type, source, definitions, context} = details; - if (context.disableHistory) { - delete context.disableHistory; - this._context = new DisplayContext(type, definitions, context); + if (!history) { + this._context = new DisplayContext(type, source, definitions, context); } else { - this._context = DisplayContext.push(this._context, type, definitions, context); + this._context = DisplayContext.push(this._context, type, source, definitions, context); } if (focus !== false) { @@ -226,7 +225,7 @@ class Display { case 'kanji': { const {sentence, url, index=0, scroll=null} = context; - await this._setContentTermsOrKanji(type, definitions, sentence, url, index, scroll, token); + await this._setContentTermsOrKanji((type === 'terms'), definitions, sentence, url, index, scroll, token); } break; } @@ -335,8 +334,8 @@ class Display { this.setOptionsContext(optionsContext); } - _onMessageSetContent({type, details}) { - this.setContent(type, details); + _onMessageSetContent({details}) { + this.setContent(details); } _onMessageClearAutoPlayTimer() { @@ -378,8 +377,16 @@ class Display { url: this._context.get('url') }; - const definitions = await api.kanjiFind(link.textContent, this.getOptionsContext()); - this.setContent('kanji', {definitions, context}); + const source = link.textContent; + const definitions = await api.kanjiFind(source, this.getOptionsContext()); + this.setContent({ + focus: false, + history: true, + type: 'kanji', + source, + definitions, + context + }); } catch (error) { this.onError(error); } @@ -419,13 +426,18 @@ class Display { scroll: this._windowScroll.y }); const context = { - disableHistory: false, sentence, - url: this._context.get('url'), - previous: this._context + url: this._context.get('url') }; - this.setContent('terms', {definitions, context}); + this.setContent({ + focus: false, + history: true, + type: 'terms', + source: textSource.text(), + definitions, + context + }); } catch (error) { this.onError(error); } @@ -581,8 +593,7 @@ class Display { } } - async _setContentTermsOrKanji(type, definitions, sentence, url, index, scroll, token) { - const isTerms = (type === 'terms'); + async _setContentTermsOrKanji(isTerms, definitions, sentence, url, index, scroll, token) { this._setEventListenersActive(false); this._definitions = definitions; @@ -727,33 +738,32 @@ class Display { } _sourceTermView() { - if (!this._context || !this._context.previous) { return; } - this._context.update({ - index: this._index, - scroll: this._windowScroll.y - }); - const previousContext = this._context.previous; - previousContext.set('disableHistory', true); - const details = { - definitions: previousContext.definitions, - context: previousContext.context - }; - this.setContent(previousContext.type, details); + this._relativeTermView(false); } _nextTermView() { - if (!this._context || !this._context.next) { return; } + this._relativeTermView(true); + } + + _relativeTermView(next) { + if (this._context === null) { return false; } + + const relative = next ? this._context.next : this._context.previous; + if (!relative) { return false; } + this._context.update({ index: this._index, scroll: this._windowScroll.y }); - const nextContext = this._context.next; - nextContext.set('disableHistory', true); - const details = { - definitions: nextContext.definitions, - context: nextContext.context - }; - this.setContent(nextContext.type, details); + this.setContent({ + focus: false, + history: false, + type: relative.type, + source: relative.source, + definitions: relative.definitions, + context: relative.context + }); + return true; } _noteTryAdd(mode) { |