From e536777da6ff2793947178d605bf57fb370d3661 Mon Sep 17 00:00:00 2001 From: wareya Date: Fri, 15 Dec 2017 23:38:08 -0500 Subject: [PATCH] firefox android compatibility changes --- background-script.js | 54 +++++++++++++++++++++++--------------- options.html | 2 ++ options.js | 16 ++++++++++++ texthook.js | 62 ++++++++++++++++++++++++++++++-------------- 4 files changed, 94 insertions(+), 40 deletions(-) diff --git a/background-script.js b/background-script.js index 16b15ef..f96bf15 100644 --- a/background-script.js +++ b/background-script.js @@ -81,8 +81,8 @@ function buildlookups() } console.log("built lookup tables"); console.log("size:"); - console.log(Object.keys(lookup_kan).length); - console.log(Object.keys(lookup_kana).length); + console.log(lookup_kan.size); + console.log(lookup_kana.size); console.log("dict size:"); console.log(dict.length); } @@ -771,13 +771,13 @@ function lookup_indirect(text, time, divexisted) } if(result !== undefined) { - //console.log("found lookup"); - //console.log(text) + console.log("found lookup"); + console.log(text) return {text:text, result:result}; } else { - //console.log("did not find lookup"); + console.log("did not find lookup"); //console.log(text); } } @@ -787,20 +787,26 @@ async function update_icon(enabled) if(enabled) { browser.browserAction.setTitle({title:"Nazeka (enabled)"}); - browser.browserAction.setIcon({path:{ - "16": "img/enabled16.png", - "32": "img/enabled32.png", - "512": "img/enabled512.png" - }},); + try + { + browser.browserAction.setIcon({path:{ + "16": "img/enabled16.png", + "32": "img/enabled32.png", + "512": "img/enabled512.png" + }},); + } catch (err) {} } else { browser.browserAction.setTitle({title:"Nazeka (disabled)"}); - browser.browserAction.setIcon({path:{ - "16": "img/action16.png", - "32": "img/action32.png", - "512": "img/action512.png" - }},); + try + { + browser.browserAction.setIcon({path:{ + "16": "img/action16.png", + "32": "img/action32.png", + "512": "img/action512.png" + }},); + } catch (err) {} } } @@ -846,12 +852,15 @@ function tryopenwindow(info, tab) } } -browser.contextMenus.create({ - id: "nazeka-reopen", - title: "Open Reader", - contexts: ["browser_action"], - onclick: tryopenwindow -}); +if(browser.contextMenus) +{ + browser.contextMenus.create({ + id: "nazeka-reopen", + title: "Open Reader", + contexts: ["browser_action"], + onclick: tryopenwindow + }); +} let origin_tab = undefined; @@ -882,8 +891,10 @@ function clipboard_hook(tab) document.execCommand("paste"); } +console.log("setting message listener"); browser.runtime.onMessage.addListener((req, sender, sendResponse) => { + console.log("received message to background script"); if (req.type == "search") { sendResponse(lookup_indirect(req.text, req.time, req.divexisted)); @@ -901,6 +912,7 @@ browser.runtime.onMessage.addListener((req, sender, sendResponse) => return; } }); +console.log("set message listener"); browser.contextMenus.create({ id: "nazeka-toggle", diff --git a/options.html b/options.html index 21aa869..1459c45 100644 --- a/options.html +++ b/options.html @@ -18,6 +18,8 @@


+
+

This extension uses JMdict, which is Copyright © 2017 The Electronic Dictionary Research and Development Group and licensed under the CC BY-SA 3.0 license.

This extension is otherwise licensed under the Apache License, version 2.0.

Meanings of abbreviations follow. From JMdict.

diff --git a/options.js b/options.js index 3b8fe8e..3400fa8 100644 --- a/options.js +++ b/options.js @@ -4,6 +4,8 @@ function restoreListeners() document.querySelector("#compact").addEventListener("change", setOptions); document.querySelector("#length").addEventListener("change", setOptions); document.querySelector("#scale").addEventListener("change", setOptions); + document.querySelector("#width").addEventListener("change", setOptions); + document.querySelector("#lookuprate").addEventListener("change", setOptions); document.querySelector("#fixedwidth").addEventListener("change", setOptions); document.querySelector("#fixedwidthpositioning").addEventListener("change", setOptions); document.querySelector("#superborder").addEventListener("change", setOptions); @@ -15,6 +17,8 @@ function removeListeners() document.querySelector("#compact").removeEventListener("change", setOptions); document.querySelector("#length").removeEventListener("change", setOptions); document.querySelector("#scale").addEventListener("change", setOptions); + document.querySelector("#width").addEventListener("change", setOptions); + document.querySelector("#lookuprate").addEventListener("change", setOptions); document.querySelector("#fixedwidth").removeEventListener("change", setOptions); document.querySelector("#fixedwidthpositioning").removeEventListener("change", setOptions); document.querySelector("#superborder").addEventListener("change", setOptions); @@ -36,6 +40,8 @@ async function restoreOptions() let compact = await getvar("compact", true); let length = await getvar("length", 25); let scale = await getvar("scale", 1); + let width = await getvar("width", 600); + let lookuprate = await getvar("lookuprate", 8); let fixedwidth = await getvar("fixedwidth", false); let fixedwidthpositioning = await getvar("fixedwidthpositioning", false); let superborder = await getvar("superborder", false); @@ -45,6 +51,8 @@ async function restoreOptions() document.querySelector("#compact").checked = compact?true:false; document.querySelector("#length").value = length?length:25; document.querySelector("#scale").value = scale?scale:1; + document.querySelector("#width").value = width?width:600; + document.querySelector("#lookuprate").value = lookuprate?lookuprate:8; document.querySelector("#fixedwidth").checked = fixedwidth?true:false; document.querySelector("#fixedwidthpositioning").checked = fixedwidthpositioning?true:false; document.querySelector("#superborder").checked = superborder?true:false; @@ -68,12 +76,20 @@ function setOptions() let scale = Number(document.querySelector("#scale").value); if(!scale) // NaN is falsy scale = 1; + let width = Number(document.querySelector("#width").value); + if(!width) // NaN is falsy + width = 600; + let lookuprate = Number(document.querySelector("#lookuprate").value); + if(!lookuprate) // NaN is falsy + lookuprate = 8; browser.storage.local.set( { enabled: document.querySelector("#enabled").checked, compact: document.querySelector("#compact").checked, length: length, scale: scale, + width: width, + lookuprate: lookuprate, fixedwidth: document.querySelector("#fixedwidth").checked, fixedwidthpositioning: document.querySelector("#fixedwidthpositioning").checked, superborder: document.querySelector("#superborder").checked, diff --git a/texthook.js b/texthook.js index ab043fc..9e94f4a 100644 --- a/texthook.js +++ b/texthook.js @@ -31,6 +31,8 @@ fixedwidthpositioning: false, superborder: false, showoriginal: true, scale: 1, +width: 600, +lookuprate: 8, }; let last_time_display = Date.now(); @@ -75,9 +77,9 @@ function display_div (middle, x, y, time) let styletext = ""; if(settings.fixedwidth) - styletext += "width: 600px; " + styletext += "width: " + Math.round(Number(settings.width)) + "px; " else - styletext += "max-width: 600px; " + styletext += "max-width: " + Math.round(Number(settings.width)) + "px; " styletext += "position: absolute; top: 0; left: 0; "; if(settings.superborder) @@ -106,7 +108,7 @@ function display_div (middle, x, y, time) outer.style = styletext; - let mywidth = 600; + let mywidth = settings.width; if(!settings.fixedwidthpositioning) mywidth = outer.offsetWidth; @@ -553,6 +555,9 @@ async function settings_init() getvar("enabled", false); getvar("compact", true); getvar("length", 25); + getvar("scale", 1); + getvar("width", 600); + getvar("lookuprate", 8); getvar("fixedwidth", false); getvar("fixedwidthpositioning", false); getvar("superborder", false); @@ -572,7 +577,7 @@ browser.storage.onChanged.addListener((updates, storageArea) => { let option = setting[0]; let value = setting[1]; - if(["enabled","compact","length","fixedwidth","fixedwidthpositioning","superborder","showoriginal","scale"].includes(option)) + if(Object.keys(settings).includes(option)) settings[option] = value.newValue; } if(!settings.enabled && exists_div()) @@ -583,13 +588,14 @@ browser.storage.onChanged.addListener((updates, storageArea) => let lookup_timer = undefined; let lookup_queue = []; -let lookup_rate = 8; +//let lookup_rate = 8; let lookup_loop_cancel = false; let lookup_last_time = Date.now(); async function lookup_loop() { + //console.log("running lookup queue"); lookup_last_time = Date.now(); let t_start = Date.now(); if(lookup_queue.length > 0) @@ -597,7 +603,9 @@ async function lookup_loop() //console.log("queue not empty"); let lookup = lookup_queue.pop(); lookup_queue = []; + console.log("asking background to search the dictionary"); let response = await browser.runtime.sendMessage({type:"search", text:lookup[0], time:Date.now(), divexisted:exists_div()}); + console.log("got response"); if(response) { let mydiv = build_div(response.text, response.result); @@ -606,12 +614,13 @@ async function lookup_loop() } } let t_end = Date.now(); - let t_to_wait = lookup_rate - (t_end - t_start); + let t_to_wait = settings.lookuprate - (t_end - t_start); if(t_to_wait < 0) t_to_wait = 0; - if(t_to_wait > lookup_rate) t_to_wait = lookup_rate; + if(t_to_wait > settings.lookuprate) t_to_wait = settings.lookuprate; if(lookup_loop_cancel) { + console.log("queue setup"); lookup_loop_cancel = false; lookup_timer = undefined; return; @@ -620,27 +629,29 @@ async function lookup_loop() lookup_timer = setTimeout(lookup_loop, t_to_wait); } -lookup_timer = setTimeout(lookup_loop, lookup_rate); +lookup_timer = setTimeout(lookup_loop, settings.lookuprate); function lookup_enqueue(text, x, y, x2, y2) { + console.log("trying to enqueue lookup"); lookup_queue = [[text, x, y, x2, y2]]; - if(!lookup_timer || lookup_last_time+lookup_rate*100 < Date.now()) + console.log("enqueued lookup"); + if(!lookup_timer || lookup_last_time+settings.lookuprate*100 < Date.now()) { if(lookup_timer) clearTimeout(lookup_timer); - lookup_timer = setTimeout(lookup_loop, lookup_rate); + lookup_timer = setTimeout(lookup_loop, settings.lookuprate); } } function lookup_cancel() { + console.log("cancelling lookup"); lookup_queue = []; delete_div(); } let time_of_last = Date.now(); -let throttle = 8; let seach_x_offset = -3; @@ -648,15 +659,15 @@ function update(event) { if(!settings.enabled) return; - if(Date.now() - time_of_last < throttle) + if(Date.now() - time_of_last < settings.lookuprate) { //console.log("too soon, returning"); //console.log(Date.now() + " vs " + time_of_last); return; } - //console.log("---- mousemove entry at " + Date.now()); + console.log("---- entry to word lookup at " + Date.now()); time_of_last = Date.now(); - //console.log("searching for text"); + console.log("searching for text"); let textNode; let offset; @@ -718,8 +729,8 @@ function update(event) // if there was text, use it if (textNode && textNode.nodeType == 3) { - //print_object(textNode); - //print_object(textNode.parentNode); + print_object(textNode); + print_object(textNode.parentNode); let rect = textNode.parentNode.getBoundingClientRect(); let fud = 5; // FIXME: Doesn't work to reject in all cases @@ -730,7 +741,7 @@ function update(event) lookup_cancel(); return; } - //console.log("found text"); + console.log("found text"); let text = textNode.textContent.substring(offset, textNode.textContent.length); // grab text from later and surrounding DOM nodes @@ -778,13 +789,16 @@ function update(event) } text = text.trim(); - //print_object(text); + print_object(text); text = text.substring(0, Math.min(text.length, settings.length)); //if(text != "") //lookup_indirect(text, event.clientX, event.clientY, time_of_last); if(text != "") + { + console.log("calling lookup_enqueue"); lookup_enqueue(text, event.clientX, event.clientY, event.pageX, event.pageY); + } else { // console.log("no text"); @@ -802,7 +816,17 @@ function update(event) } } +function update_touch(event) +{ + console.log("touch event triggered"); + if(event.touches) + { + console.log("receiving touch event"); + update(event.touches[0]); + } +} + window.addEventListener("mousemove", update); -window.addEventListener("touchmove", update); +document.addEventListener("touchmove", update_touch);