summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2016-03-23 19:25:32 -0700
committerAlex Yatskov <alex@foosoft.net>2016-03-23 19:25:32 -0700
commit2fe2e993ee1cdc80c91b03809a715f62995a8132 (patch)
tree8c03b81f97c89c166b87ff7561d42d35a7eda86f
parentc30837065889d4fc4d2984b14b365cc276c79214 (diff)
WIP
-rw-r--r--ext/background.html1
-rw-r--r--ext/content.js13
-rw-r--r--ext/jp/init.js40
-rw-r--r--ext/jp/translator.js24
-rw-r--r--ext/manifest.json2
-rw-r--r--ext/util.js22
6 files changed, 73 insertions, 29 deletions
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 @@
<script src="jp/dictionary.js"></script>
<script src="jp/deinflector.js"></script>
<script src="jp/translator.js"></script>
+ <script src="jp/init.js"></script>
</body>
</html>
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 <http://www.gnu.org/licenses/>.
*/
+
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 <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 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 <http://www.gnu.org/licenses/>.
*/
+
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 <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 findTerm(text, callback) {
+ chrome.runtime.sendMessage({action: 'define', text: text}, callback);
+}