diff --git a/reader.html b/reader.html index b55588b..e0a7931 100644 --- a/reader.html +++ b/reader.html @@ -22,6 +22,7 @@ p + diff --git a/reader.js b/reader.js index 1648012..376ed7d 100644 --- a/reader.js +++ b/reader.js @@ -5,12 +5,12 @@ // updated by a timer looping function, based on local storage set by the options page // we only use a tiny number of settings here -let settings = { +let reader_settings = { reader_reverse: false, reader_leeway: 200 }; -async function settings_init() +async function reader_settings_init() { try { @@ -19,14 +19,14 @@ async function settings_init() let temp = (await browser.storage.local.get(name))[name]; if(temp == undefined) temp = defval; - settings[name] = temp; + reader_settings[name] = temp; } getvar("reader_reverse", false); getvar("reader_leeway", 200); } catch(err) {} // options not stored yet } -settings_init(); +reader_settings_init(); browser.storage.onChanged.addListener((updates, storageArea) => { @@ -35,14 +35,14 @@ browser.storage.onChanged.addListener((updates, storageArea) => { let option = setting[0]; let value = setting[1]; - if(Object.keys(settings).includes(option)) - settings[option] = value.newValue; + if(Object.keys(reader_settings).includes(option)) + reader_settings[option] = value.newValue; } }); // actual reder code -function might_have_japanese(text) +function reader_might_have_japanese(text) { for(let char of text) if(char && char.length > 0 && char.codePointAt(0) >= 0x2E80) @@ -50,26 +50,26 @@ function might_have_japanese(text) return false; } -function update(text) +function reader_update(text) { - if(!might_have_japanese(text)) + if(!reader_might_have_japanese(text)) return; let target = document.body; let newnode = document.createElement("p"); newnode.textContent = text; - if(!settings.reader_reverse) + if(!reader_settings.reader_reverse) target.insertBefore(newnode, document.body.firstChild); else { target.appendChild(newnode); - if(settings.reader_leeway != 0) + if(reader_settings.reader_leeway != 0) { let scroll_end_distance = -document.body.scrollHeight + -document.body.clientHeight + 2*document.body.offsetHeight - document.body.scrollTop; - if (scroll_end_distance < settings.reader_leeway) + if (scroll_end_distance < reader_settings.reader_leeway) window.scrollTo(0, document.body.scrollHeight); } } @@ -77,40 +77,36 @@ function update(text) document.getElementById("linecount").innerText = parseInt(document.getElementById("linecount").innerText)+1; } -let text_previous = ""; -function cycle_text(text) +let reader_text_previous = ""; +function reader_cycle_text(text) { - if(text != "" && text != text_previous) - update(text); - text_previous = text; + if(text != "" && text != reader_text_previous) + reader_update(text); + reader_text_previous = text; } -function gimmetext() +function reader_gimmetext() { browser.runtime.sendMessage({type:"gimmetext"}); } let interval = 250; -async function checkpaste() +async function reader_checkpaste() { try { - let text = await gimmetext(); - cycle_text(text); + let text = await reader_gimmetext(); + reader_cycle_text(text); } catch(error){} - setTimeout(checkpaste, interval); + setTimeout(reader_checkpaste, interval); } -setTimeout(checkpaste, interval); +setTimeout(reader_checkpaste, interval); -var executing = browser.tabs.executeScript({ - file: "/texthook.js", - allFrames: true -}); - -browser.runtime.onMessage.addListener((req, sender, sendResponse) => +browser.runtime.onMessage.addListener((req, sender) => { if (req.type == "text") - cycle_text(req.text); + reader_cycle_text(req.text); + return Promise.resolve(undefined); }); diff --git a/texthook.js b/texthook.js index 2aab3c3..2829659 100644 --- a/texthook.js +++ b/texthook.js @@ -1243,9 +1243,6 @@ function grab_more_text(textNode, direction = 1) let inline_like = display.includes("inline") || display == "ruby"; let ruby_interior = tagname == "rt" || tagname == "rp"; - console.log(display); - console.log(inline_like); - console.log(ruby_interior); if(ruby_interior || !inline_like) break; } @@ -1261,8 +1258,6 @@ function grab_more_text(textNode, direction = 1) let parent = current_node.parentNode; if(parent == undefined || parent == current_node) break; let i = Array.prototype.indexOf.call(current_node.parentNode.childNodes, current_node); - console.log(current_node); - console.log(i); if(i < 0) break; i += direction; while(i < current_node.parentNode.childNodes.length && i >= 0 && text.length < settings.contextlength && (!text.includes("\n") || settings.ignore_linebreaks)) @@ -1435,7 +1430,7 @@ function update(event) return false; } // find the text under the mouse event - let nodeIsBad = true; + let nodeIsBad = true; while(nodeIsBad) { nodeIsBad = false; @@ -1488,24 +1483,32 @@ function update(event) console.log(hitrect); } } - if(ele && !ele.contains(textNode) && platform != "android" && (!settings.sticky || get_doc().body.getElementsByClassName("nazeka_mining_ui").length != 0)) // sticky mode and android need to break out on parent detection + // sticky mode and android need to break out on parent detection + if(ele && !ele.contains(textNode) && platform != "android" && (!settings.sticky || get_doc().body.getElementsByClassName("nazeka_mining_ui").length != 0)) { + console.log("not parent"); textNode = undefined; offset = undefined; hitrect = undefined; } - if(hitrect && (x > hitrect.right+5 || x < hitrect.left-5 || y > hitrect.bottom+5 || y < hitrect.top-5)) + // break out if the mouse isn't actually over the hit rectangle + if(hitrect && (x > hitrect.right+5 || x < hitrect.left-5+xoffset || y > hitrect.bottom+5 || y < hitrect.top-5+yoffset)) { + console.log("missed"); + console.log([x, y, x+offset, y+offset, hitrect]); textNode = undefined; offset = undefined; hitrect = undefined; } }; - + console.log("first try"); hitpage(event.clientX, search_x_offset, event.clientY); // try without the offset if (textNode == undefined || (textNode.nodeType != 3 && !acceptable_element(textNode))) + { + console.log("retry"); hitpage(event.clientX, 0, event.clientY); + } if ((platform == "android" || (settings.sticky && get_doc().body.getElementsByClassName("nazeka_mining_ui").length == 0)) && exists_div()) { @@ -1541,9 +1544,13 @@ function update(event) } for(let toreset of nodeResetList) { - let element = toreset[0]; - let z_index = toreset[1]; - element.style.zIndex = z_index; + try + { + let element = toreset[0]; + let z_index = toreset[1]; + element.style.zIndex = z_index; + } + catch (err){} } // if there was text, use it let elemental = acceptable_element(textNode); @@ -1557,7 +1564,7 @@ function update(event) rect = textNode.parentNode.getBoundingClientRect(); // FIXME: Doesn't work to reject in all cases - if(!ischrome) + //if(!ischrome) { let hit = (event.clientX+fud >= rect.left && event.clientX-fud <= rect.right && event.clientY+fud >= rect.top && event.clientY-fud <= rect.bottom); //let hit = (event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom);