diff options
| -rw-r--r-- | ext/bg/js/dictionary.js | 39 | ||||
| -rw-r--r-- | ext/bg/js/templates.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 14 | ||||
| -rw-r--r-- | ext/bg/js/yomichan.js | 4 | ||||
| -rw-r--r-- | ext/fg/js/api.js | 4 | ||||
| -rw-r--r-- | ext/fg/js/client.js | 38 | ||||
| -rw-r--r-- | ext/fg/js/popup.js | 22 | ||||
| -rw-r--r-- | util/tmpl/defs.html | 2 | 
8 files changed, 68 insertions, 57 deletions
| diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index 6870601e..b91e53bf 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -31,35 +31,24 @@ class Dictionary {          this.kanjiDicts[name] = dict;      } -    findTerm(term) { -        let results = []; - -        for (const name in this.termDicts) { -            const dict    = this.termDicts[name]; -            const indices = dict.indices[term] || []; - -            results = results.concat( -                indices.map(index => { -                    const [e, r, t, ...g] = dict.defs[index]; -                    return {id: index, expression: e, reading: r, glossary: g, tags: t.split(' ')}; -                }) -            ); -        } - -        return results; +    findTerm(term, dict) { +        const db      = this.termDicts[dict]; +        const indices = db.indices[term] || []; + +        return indices.map(index => { +            const [e, r, t, ...g] = db.defs[index]; +            return {id: index, expression: e, reading: r, glossary: g, tags: t.split(' ')}; +        });      } -    findKanji(kanji) { -        const results = []; +    findKanji(kanji, dict) { +        const def = this.termDicts[dict][kanji]; -        for (const name in this.termDicts) { -            const def = this.termDicts[name][kanji]; -            if (def) { -                const [c, k, o, g] = def; -                results.push({id: index, character: c, kunyomi: k, onyomi: o, glossary: g}); -            } +        if (def) { +            const [c, k, o, g] = def; +            return {id: index, character: c, kunyomi: k, onyomi: o, glossary: g};          } -        return results; +        return null;      }  } diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index 3388ec9b..46a4001f 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -11,7 +11,7 @@ templates['defs.html'] = template({"1":function(container,depth0,helpers,partial    return "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <title></title>\n        <link rel=\"stylesheet\" href=\""      + alias4(((helper = (helper = helpers.root || (depth0 != null ? depth0.root : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"root","hash":{},"data":data}) : helper))) -    + "/css/popup.css\">\n    </head>\n    <body>\n        <div class=\"dictionary\">\n            <a href=\"javascript:selectDict('edict');\">単</a><a href=\"javascript:selectDict('enamdict')\">名</a><a href=\"javascript:selectDict('kanjidic');\">漢</a>\n        </div>\n\n" +    + "/css/popup.css\">\n    </head>\n    <body>\n        <div class=\"dictionary\">\n            <a href=\"javascript:setActiveDict('edict');\">単</a><a href=\"javascript:setActiveDict('enamdict')\">名</a><a href=\"javascript:setActiveDict('kanjidic');\">漢</a>\n        </div>\n\n"      + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.defs : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")      + "\n    <script src=\""      + alias4(((helper = (helper = helpers.root || (depth0 != null ? depth0.root : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"root","hash":{},"data":data}) : helper))) diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 46d63ed0..454d5079 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -63,14 +63,14 @@ class Translator {          }      } -    findTerm(text) { +    findTerm(text, dict) {          const groups = {};          for (let i = text.length; i > 0; --i) {              const term = text.slice(0, i);              const dfs = this.deinflector.deinflect(term, t => {                  const tags = []; -                for (const d of this.dictionary.findTerm(t)) { +                for (const d of this.dictionary.findTerm(t, dict)) {                      tags.push(d.tags);                  } @@ -79,7 +79,7 @@ class Translator {              if (dfs !== null) {                  for (const df of dfs) { -                    this.processTerm(groups, df.source, df.tags, df.rules, df.root); +                    this.processTerm(dict, groups, df.source, df.tags, df.rules, df.root);                  }              }          } @@ -125,13 +125,13 @@ class Translator {          return {results: results, length: length};      } -    findKanji(text) { +    findKanji(text, dict) {          let results = [];          const processed = {};          for (const c of text) {              if (!processed.has(c)) { -                results = results.concat(this.dictionary.findKanji(c)); +                results = results.concat(this.dictionary.findKanji(c, dict));                  processed[c] = true;              }          } @@ -139,8 +139,8 @@ class Translator {          return results;      } -    processTerm(groups, source, tags, rules=[], root='') { -        for (const entry of this.dictionary.findTerm(root)) { +    processTerm(dict, groups, source, tags, rules=[], root='') { +        for (const entry of this.dictionary.findTerm(root, dict)) {              if (entry.id in groups) {                  continue;              } diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index a66c1244..719aaed8 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -39,8 +39,8 @@ class Yomichan {      onMessage(request, sender, callback) {          const {action, data} = request;          const handlers = { -            findKanji:  ({text}) => this.translator.onFindKanji(text), -            findTerm:   ({text}) => this.translator.findTerm(text), +            findKanji:  ({text, dict}) => this.translator.onFindKanji(text, dict), +            findTerm:   ({text, dict}) => this.translator.findTerm(text, dict),              getState:   () => this.state,              getOptions: () => this.options,              renderText: ({data, template}) => Handlebars.templates[template](data) diff --git a/ext/fg/js/api.js b/ext/fg/js/api.js index c65b1702..7997a73f 100644 --- a/ext/fg/js/api.js +++ b/ext/fg/js/api.js @@ -21,8 +21,8 @@ function sendMessage(action, data, callback) {      chrome.runtime.sendMessage({action: action, data: data}, callback);  } -function findTerm(text, callback) { -    sendMessage('findTerm', {text: text}, callback); +function findTerm(text, dict, callback) { +    sendMessage('findTerm', {text: text, dict: dict}, callback);  }  function findKanji(text, callback) { diff --git a/ext/fg/js/client.js b/ext/fg/js/client.js index b757123c..4df19594 100644 --- a/ext/fg/js/client.js +++ b/ext/fg/js/client.js @@ -19,11 +19,12 @@  class Client {      constructor() { -        this.lastMosePos = null; -        this.popupQuery  = ''; -        this.popupOffset = 10; -        this.enabled     = false; -        this.options     = null; +        this.popupMousePos = null; +        this.popupQuery    = ''; +        this.popupOffset   = 10; +        this.enabled       = false; +        this.options       = {}; +        this.activeDict    = '';          this.popup = document.createElement('iframe');          this.popup.classList.add('yomichan-popup'); @@ -40,29 +41,29 @@ class Client {          window.addEventListener('resize', (e) => this.hidePopup());          getOptions((opts) => { -            this.setDict('edict'); +            this.setActiveDict('edict');              this.setOptions(opts);              getState((state) => this.setEnabled(state === 'enabled'));          });      }      onKeyDown(e) { -        if (this.enabled && this.lastMousePos !== null && (e.keyCode === 16 || e.charCode === 16)) { -            this.searchAtPoint(this.lastMousePos); +        if (this.enabled && this.popupMousePos !== null && (e.keyCode === 16 || e.charCode === 16)) { +            this.searchAtPoint(this.popupMousePos);          }      }      onMouseMove(e) { -        this.lastMousePos = {x: e.clientX, y: e.clientY}; +        this.popupMousePos = {x: e.clientX, y: e.clientY};          if (this.enabled && (e.shiftKey || e.which === 2)) { -            this.searchAtPoint(this.lastMousePos); +            this.searchAtPoint(this.popupMousePos);          }      }      onMouseDown(e) { -        this.lastMousePos = {x: e.clientX, y: e.clientY}; +        this.popupMousePos = {x: e.clientX, y: e.clientY};          if (this.enabled && (e.shiftKey || e.which === 2)) { -            this.searchAtPoint(this.lastMousePos); +            this.searchAtPoint(this.popupMousePos);          } else {              this.hidePopup();          } @@ -84,8 +85,8 @@ class Client {      onFrameMessage(e) {          const {action, data} = e.data;          switch (action) { -            case 'selectDict': -                this.setDict(data); +            case 'setActiveDict': +                this.setActiveDict(data);                  break;          }      } @@ -113,11 +114,11 @@ class Client {              return;          } -        findTerm(popupQuery, ({results, length}) => { +        findTerm(popupQuery, this.activeDict, ({results, length}) => {              if (length === 0) {                  this.hidePopup();              } else { -                const params = {defs: results, root: chrome.extension.getURL('fg')}; +                const params = {defs: results, root: chrome.extension.getURL('fg'), activeDict: this.activeDict};                  renderText(params, 'defs.html', (html) => this.showPopup(range, html, popupQuery, length));              }          }); @@ -168,9 +169,8 @@ class Client {          this.options = opts;      } -    setDict(dict) { -        this.dict = dict; -        alert(dict); +    setActiveDict(activeDict) { +        this.activeDict = activeDict;      }  } diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js new file mode 100644 index 00000000..2753a863 --- /dev/null +++ b/ext/fg/js/popup.js @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016  Alex Yatskov <alex@foosoft.net> + * Author: Alex Yatskov <alex@foosoft.net> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ + + +function setActiveDict(dict) { +    parent.postMessage({action: 'setActiveDict', data: dict}, '*'); +} diff --git a/util/tmpl/defs.html b/util/tmpl/defs.html index 6f241d08..3f37d8bd 100644 --- a/util/tmpl/defs.html +++ b/util/tmpl/defs.html @@ -7,7 +7,7 @@      </head>      <body>          <div class="dictionary"> -            <a href="javascript:selectDict('edict');">単</a><a href="javascript:selectDict('enamdict')">名</a><a href="javascript:selectDict('kanjidic');">漢</a> +            <a href="javascript:setActiveDict('edict');">単</a><a href="javascript:setActiveDict('enamdict')">名</a><a href="javascript:setActiveDict('kanjidic');">漢</a>          </div>          {{#each defs}} |