diff options
-rw-r--r-- | ext/bg/js/translator.js | 20 | ||||
-rw-r--r-- | ext/fg/js/api.js | 24 | ||||
-rw-r--r-- | ext/fg/js/client.js | 95 | ||||
-rw-r--r-- | ext/fg/js/source-range.js | 2 |
4 files changed, 74 insertions, 67 deletions
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 7b776383..2d15f05b 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -65,7 +65,7 @@ class Translator { const dfs = this.deinflector.deinflect(term, t => { const tags = []; - for (let d of this.dictionary.findTerm(t)) { + for (const d of this.dictionary.findTerm(t)) { tags.push(d.tags); } @@ -76,13 +76,13 @@ class Translator { continue; } - for (let df of dfs) { + for (const df of dfs) { this.processTerm(groups, df.source, df.tags, df.rules, df.root); } } let definitions = []; - for (let key in groups) { + for (const key in groups) { definitions.push(groups[key]); } @@ -115,7 +115,7 @@ class Translator { }); let length = 0; - for (let result of definitions) { + for (const result of definitions) { length = Math.max(length, result.source.length); } @@ -126,7 +126,7 @@ class Translator { let definitions = []; const processed = {}; - for (let c of text) { + for (const c of text) { if (!processed[c]) { definitions = definitions.concat(this.dictionary.findKanji(c)); processed[c] = true; @@ -137,13 +137,13 @@ class Translator { } processTerm(groups, dfSource, dfTags, dfRules=[], dfRoot='') { - for (let entry of this.dictionary.findTerm(dfRoot)) { + for (const entry of this.dictionary.findTerm(dfRoot)) { if (entry.id in groups) { continue; } let matched = dfTags.length === 0; - for (let t of dfTags) { + for (const t of dfTags) { if (entry.tags.indexOf(t) !== -1) { matched = true; break; @@ -157,7 +157,7 @@ class Translator { let popular = false; let tags = []; - for (let t of entry.tags) { + for (const t of entry.tags) { const tag = {class: 'default', order: Number.MAX_SAFE_INTEGER, desc: entry.entities[t] || '', name: t}; this.applyTagMeta(tag); tags.push(tag); @@ -186,9 +186,9 @@ class Translator { processKanji(entries) { const processed = []; - for (let entry of entries) { + for (const entry of entries) { const tags = []; - for (let t of entry.tags) { + for (const t of entry.tags) { const tag = {class: 'default', order: Number.MAX_SAFE_INTEGER, desc: '', name: t}; this.applyTagMeta(tag); tags.push(tag); diff --git a/ext/fg/js/api.js b/ext/fg/js/api.js index 7316c604..643d0360 100644 --- a/ext/fg/js/api.js +++ b/ext/fg/js/api.js @@ -17,26 +17,26 @@ */ -function bgSendMessage(action, params, callback) { - chrome.runtime.sendMessage({action, params}, callback); +function bgSendMessage(action, params) { + return new Promise((resolve, reject) => chrome.runtime.sendMessage({action, params}, resolve)); } -function bgFindTerm(text, callback) { - bgSendMessage('findTerm', {text}, callback); +function bgFindTerm(text) { + return bgSendMessage('findTerm', {text}); } -function bgFindKanji(text, callback) { - bgSendMessage('findKanji', {text}, callback); +function bgFindKanji(text) { + return bgSendMessage('findKanji', {text}); } -function bgRenderText(data, template, callback) { - bgSendMessage('renderText', {data, template}, callback); +function bgRenderText(data, template) { + return bgSendMessage('renderText', {data, template}); } -function bgCanAddDefinitions(definitions, modes, callback) { - bgSendMessage('canAddDefinitions', {definitions, modes}, callback); +function bgCanAddDefinitions(definitions, modes) { + return bgSendMessage('canAddDefinitions', {definitions, modes}); } -function bgAddDefinition(definition, mode, callback) { - bgSendMessage('addDefinition', {definition, mode}, callback); +function bgAddDefinition(definition, mode) { + return bgSendMessage('addDefinition', {definition, mode}); } diff --git a/ext/fg/js/client.js b/ext/fg/js/client.js index 34a1a605..202d6dbd 100644 --- a/ext/fg/js/client.js +++ b/ext/fg/js/client.js @@ -90,10 +90,16 @@ class Client { } textSource.setEndOffset(this.options.scanLength); - bgFindTerm(textSource.text(), ({definitions, length}) => { - if (length === 0) { - this.hidePopup(); - } else { + + let defs = []; + let seq = -1; + + bgFindTerm(textSource.text()) + .then(({definitions, length}) => { + if (length === 0) { + return Promise.reject(); + } + textSource.setEndOffset(length); const sentence = Client.extractSentence(textSource, this.options.sentenceExtent); @@ -102,23 +108,22 @@ class Client { definition.sentence = sentence; }); - const sequence = ++this.sequence; - bgRenderText( - {definitions, root: this.fgRoot, options: this.options, sequence}, - 'term-list.html', - (content) => { - this.definitions = definitions; - this.showPopup(textSource, content); - - bgCanAddDefinitions(definitions, ['vocab_kanji', 'vocab_kana'], (states) => { - if (states !== null) { - states.forEach((state, index) => this.popup.sendMessage('setActionState', {index, state, sequence})); - } - }); - } - ); - } - }); + defs = definitions; + seq = ++this.sequence; + + return bgRenderText({definitions, root: this.fgRoot, options: this.options, sequence: seq}, 'term-list.html'); + }) + .then((content) => { + this.definitions = defs; + this.showPopup(textSource, content); + + return bgCanAddDefinitions(defs, ['vocab_kanji', 'vocab_kana']); + }) + .then((states) => { + if (states !== null) { + states.forEach((state, index) => this.popup.sendMessage('setActionState', {index, state, sequence: seq})); + } + }, () => this.hidePopup()); } showPopup(textSource, content) { @@ -138,7 +143,7 @@ class Client { this.lastTextSource.deselect(); } - this.lastTextSource = null; + this.lastTextSource = null; this.definitions = null; } @@ -156,7 +161,7 @@ class Client { const state = {}; state[mode] = false; - bgAddDefinition(this.definitions[index], mode, (success) => { + bgAddDefinition(this.definitions[index], mode).then((success) => { if (success) { this.popup.sendMessage('setActionState', {index, state, sequence: this.sequence}); } else { @@ -173,7 +178,7 @@ class Client { url += `&kana=${encodeURIComponent(definition.reading)}`; } - for (let key in this.audio) { + for (const key in this.audio) { this.audio[key].pause(); } @@ -185,27 +190,29 @@ class Client { } api_displayKanji(kanji) { - bgFindKanji(kanji, (definitions) => { - definitions.forEach((definition) => { - definition.url = window.location.href; - }); - - const sequence = ++this.sequence; - bgRenderText( - {definitions, root: this.fgRoot, options: this.options, sequence}, - 'kanji-list.html', - (content) => { - this.definitions = definitions; - this.popup.setContent(content, definitions); - - bgCanAddDefinitions(definitions, ['kanji'], (states) => { - if (states !== null) { - states.forEach((state, index) => this.popup.sendMessage('setActionState', {index, state, sequence})); - } - }); + let defs = []; + let seq = -1; + + bgFindKanji(kanji) + .then((definitions) => { + definitions.forEach((definition) => definition.url = window.location.href); + + defs = definitions; + seq = ++this.sequence; + + return bgRenderText({definitions, root: this.fgRoot, options: this.options, sequence: seq}, 'kanji-list.html'); + }) + .then((content) => { + this.definitions = defs; + this.popup.setContent(content, defs); + + return bgCanAddDefinitions(defs, ['kanji']); + }) + .then((states) => { + if (states !== null) { + states.forEach((state, index) => this.popup.sendMessage('setActionState', {index, state, sequence: seq})); } - ); - }); + }); } static textSourceFromPoint(point) { diff --git a/ext/fg/js/source-range.js b/ext/fg/js/source-range.js index 879b949c..a25b3fdc 100644 --- a/ext/fg/js/source-range.js +++ b/ext/fg/js/source-range.js @@ -77,7 +77,7 @@ class TextSourceRange { } equals(other) { - return other.rng && other.rng.compareBoundaryPoints(Range.START_TO_START, this.rng) == 0; + return other.rng && other.rng.compareBoundaryPoints(Range.START_TO_START, this.rng) === 0; } static seekForward(node, length) { |