From 2fe2e993ee1cdc80c91b03809a715f62995a8132 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Wed, 23 Mar 2016 19:25:32 -0700 Subject: WIP --- ext/background.html | 1 + ext/content.js | 13 +++++++------ ext/jp/init.js | 40 ++++++++++++++++++++++++++++++++++++++++ ext/jp/translator.js | 24 ++---------------------- ext/manifest.json | 2 +- ext/util.js | 22 ++++++++++++++++++++++ 6 files changed, 73 insertions(+), 29 deletions(-) create mode 100644 ext/jp/init.js create mode 100644 ext/util.js diff --git a/ext/background.html b/ext/background.html index 1cbeefe2..f0d06216 100644 --- a/ext/background.html +++ b/ext/background.html @@ -5,5 +5,6 @@ + diff --git a/ext/content.js b/ext/content.js index 4938805f..c36b7381 100644 --- a/ext/content.js +++ b/ext/content.js @@ -16,6 +16,7 @@ * along with this program. If not, see . */ + function getRangeAtCursor(e, lookAhead) { const range = document.caretRangeFromPoint(e.clientX, e.clientY); if (range === null) { @@ -36,6 +37,8 @@ function getRangeAtCursor(e, lookAhead) { function onMouseDown(e) { + e.preventDefault(); + const range = getRangeAtCursor(e, 20); if (range === null) { return; @@ -45,11 +48,9 @@ function onMouseDown(e) { selection.removeAllRanges(); selection.addRange(range); - e.preventDefault(); - - console.log(range.toString()); + findTerm(range.toString(), response => { + console.log(response); + }); } - - -// window.addEventListener('mousedown', onMouseDown, false); +window.addEventListener('mousedown', onMouseDown, false); diff --git a/ext/jp/init.js b/ext/jp/init.js new file mode 100644 index 00000000..81c06d3d --- /dev/null +++ b/ext/jp/init.js @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2016 Alex Yatskov + * Author: Alex Yatskov + * + * 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 . + */ + + +function onInit() { + chrome.runtime.onMessage.addListener(onMessage); +} + +const res = { + rules: 'jp/data/rules.json', + edict: 'jp/data/edict.json', + enamdict: 'jp/data/enamdict.json', + kanjidic: 'jp/data/kanjidic.json' +}; + +const trans = new Translator(res, onInit); + +function onMessage(request, sender, callback) { + switch (request.action.toLowerCase()) { + case 'define': + callback(trans.findTerm(request.term)); + break; + } +} + diff --git a/ext/jp/translator.js b/ext/jp/translator.js index 39ef176c..36ed60f3 100644 --- a/ext/jp/translator.js +++ b/ext/jp/translator.js @@ -16,17 +16,11 @@ * along with this program. If not, see . */ + class Translator { - constructor() { + constructor(paths, callback) { this.dictionary = new Dictionary(); this.deinflector = new Deinflector(); - this.initialized = false; - } - - initialize(paths, callback) { - if (this.initialized) { - return; - } const loaders = []; for (const key of ['rules', 'edict', 'enamdict', 'kanjidic']) { @@ -118,7 +112,6 @@ class Translator { resultSorter(v1, v2) { const sl1 = v1.source.length; const sl2 = v2.source.length; - if (sl1 > sl2) { return 1; } else if (sl1 > sl2) { @@ -127,7 +120,6 @@ class Translator { const p1 = v1.tags.indexOf('P') >= 0; const p2 = v2.tags.indexOf('P') >= 0; - if (p1 && !p2) { return 1; } else if (!p1 && p2) { @@ -136,7 +128,6 @@ class Translator { const rl1 = v1.rules.length; const rl2 = v2.rules.length; - if (rl1 < rl2) { return 1; } else if (rl2 > rl1) { @@ -146,14 +137,3 @@ class Translator { return 0; } } - -const trans = new Translator(); - -trans.initialize({ - rules: 'jp/data/rules.json', - edict: 'jp/data/edict.json', - enamdict: 'jp/data/enamdict.json', - kanjidic: 'jp/data/kanjidic.json' -}, function() { - console.log(trans.findTerm('食べました')); -}); diff --git a/ext/manifest.json b/ext/manifest.json index 3685d949..c46e20af 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -9,7 +9,7 @@ "content_scripts": [{ "matches": ["http://*/*", "https://*/*"], - "js": ["content.js"], + "js": ["content.js", "util.js"], "run_at": "document_end" }] } diff --git a/ext/util.js b/ext/util.js new file mode 100644 index 00000000..8523fe22 --- /dev/null +++ b/ext/util.js @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016 Alex Yatskov + * Author: Alex Yatskov + * + * 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 . + */ + + +function findTerm(text, callback) { + chrome.runtime.sendMessage({action: 'define', text: text}, callback); +} -- cgit v1.2.3