Settings, toggle button
No files matched your search
|
After Width: | Height: | Size: 246 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
@@ -3,8 +3,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// We use JMdict converted to JSON. It's like 32MB so we don't want to load it for every tab.
|
// We use JMdict converted to JSON. It's like 32MB so we don't want to load it for every tab.
|
||||||
// So we need to use a backgroudn script and send messages to it from the content script.
|
// So we need to use a background script and send messages to it from the content script.
|
||||||
// Unfortunately webextensions don't have an easy way to load files even from in extension.
|
// Unfortunately webextensions don't have an easy way to load files, even from in the extension.
|
||||||
// We have to send an HTTP request and store the result in a string before parsing it into an object.
|
// We have to send an HTTP request and store the result in a string before parsing it into an object.
|
||||||
// Seriously.
|
// Seriously.
|
||||||
|
|
||||||
@@ -152,17 +152,58 @@ function search(text)
|
|||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
browser.runtime.onMessage.addListener((request, sender, sendResponse) =>
|
||||||
|
{
|
||||||
if (request.type == 'search')
|
if (request.type == 'search')
|
||||||
{
|
{
|
||||||
//console.log("running search");
|
|
||||||
sendResponse(search(request.text));
|
sendResponse(search(request.text));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//console.log("unhandled request");
|
|
||||||
//return;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function update_icon(enabled)
|
||||||
|
{
|
||||||
|
if(enabled)
|
||||||
|
{
|
||||||
|
browser.browserAction.setIcon({path:{
|
||||||
|
"16": "enabled16.png",
|
||||||
|
"32": "enabled32.png",
|
||||||
|
"512": "enabled512.png"
|
||||||
|
}},)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
browser.browserAction.setIcon({path:{
|
||||||
|
"16": "action16.png",
|
||||||
|
"32": "action32.png",
|
||||||
|
"512": "action512.png"
|
||||||
|
}},)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function toggle_enabled()
|
||||||
|
{
|
||||||
|
let enabled = (await browser.storage.local.get("enabled")).enabled;
|
||||||
|
if(enabled == undefined)
|
||||||
|
enabled = false;
|
||||||
|
enabled = !enabled;
|
||||||
|
browser.storage.local.set({enabled: enabled});
|
||||||
|
update_icon(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function init_icon()
|
||||||
|
{
|
||||||
|
browser.browserAction.onClicked.addListener(toggle_enabled);
|
||||||
|
let enabled = (await browser.storage.local.get("enabled")).enabled;
|
||||||
|
if(enabled == undefined)
|
||||||
|
enabled = false;
|
||||||
|
update_icon(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
init_icon();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 252 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -22,5 +22,21 @@
|
|||||||
"js": ["texthook.js"],
|
"js": ["texthook.js"],
|
||||||
"all_frames": true
|
"all_frames": true
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
|
||||||
|
"options_ui": {
|
||||||
|
"browser_style": true,
|
||||||
|
"page": "options.html"
|
||||||
|
},
|
||||||
|
|
||||||
|
"browser_action": {
|
||||||
|
"browser_style": false,
|
||||||
|
"default_icon": {
|
||||||
|
"16": "action16.png",
|
||||||
|
"32": "action32.png",
|
||||||
|
"512": "action512.png"
|
||||||
|
},
|
||||||
|
"default_title": "Nazeka (disabled)",
|
||||||
|
"default_area": "navbar"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>Nazeka: options</title>
|
||||||
|
<script type="text/javascript" src="options.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class=panel>
|
||||||
|
<form name=optform>
|
||||||
|
<div class="panel-section panel-section-formElements browser-style">
|
||||||
|
<!--<div class=panel-section>-->
|
||||||
|
<input id="enabled" type="checkbox" name=enabled class=panel-formElements-item/><label for=enabled class=panel-formElements-item>Enabled</label>
|
||||||
|
<!--</div>-->
|
||||||
|
<!--<div class=panel-section>-->
|
||||||
|
<input id="compact" type="checkbox" name=compact class=panel-formElements-item/><label for=compact class=panel-formElements-item>Compact</label>
|
||||||
|
<!--</div>-->
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
function restoreListeners()
|
||||||
|
{
|
||||||
|
document.querySelector("#enabled").addEventListener("change", setOptions);
|
||||||
|
document.querySelector("#compact").addEventListener("change", setOptions);
|
||||||
|
}
|
||||||
|
function removeListeners()
|
||||||
|
{
|
||||||
|
document.querySelector("#enabled").removeEventListener("change", setOptions);
|
||||||
|
document.querySelector("#compact").removeEventListener("change", setOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function restoreOptions()
|
||||||
|
{
|
||||||
|
restoreListeners();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let enabled = (await browser.storage.local.get("enabled")).enabled;
|
||||||
|
if(enabled == undefined)
|
||||||
|
enabled = false;
|
||||||
|
let compact = (await browser.storage.local.get("compact")).compact;
|
||||||
|
if(compact == undefined)
|
||||||
|
compact = true;
|
||||||
|
removeListeners();
|
||||||
|
document.querySelector("#enabled").checked = enabled?true:false;
|
||||||
|
document.querySelector("#compact").checked = compact?true:false;
|
||||||
|
restoreListeners();
|
||||||
|
}
|
||||||
|
catch (error){}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOptions()
|
||||||
|
{
|
||||||
|
browser.storage.local.set(
|
||||||
|
{
|
||||||
|
enabled: document.querySelector("#enabled").checked,
|
||||||
|
compact: document.querySelector("#compact").checked,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState == "complete")
|
||||||
|
{
|
||||||
|
restoreOptions();
|
||||||
|
//setOptions();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.addEventListener("DOMContentLoaded", restoreOptions);
|
||||||
|
//document.addEventListener("DOMContentLoaded", setOptions);
|
||||||
|
}
|
||||||
@@ -3,12 +3,11 @@
|
|||||||
/*
|
/*
|
||||||
* TODO:
|
* TODO:
|
||||||
*
|
*
|
||||||
* ! Toggle button
|
|
||||||
* ! Fix katakana-hiragana matching (only happens in lookups right now, not display generation)
|
|
||||||
* ! Port all of Spark Reader's deconjugation rules https://github.com/wareya/Spark-Reader/blob/master/preferences/underlay https://github.com/wareya/Spark-Reader/tree/master/src/language/deconjugator
|
* ! Port all of Spark Reader's deconjugation rules https://github.com/wareya/Spark-Reader/blob/master/preferences/underlay https://github.com/wareya/Spark-Reader/tree/master/src/language/deconjugator
|
||||||
* ! Different CSS for different parts of definitions
|
* ! Different CSS for different parts of definitions
|
||||||
|
* - Fix katakana-hiragana matching (only happens in lookups right now, not display generation)
|
||||||
* - Definition priority handling (prefer words with any commonness tags, shorter deconjugations, expressions, non-archaic/non-obscure words, high frequencies)
|
* - Definition priority handling (prefer words with any commonness tags, shorter deconjugations, expressions, non-archaic/non-obscure words, high frequencies)
|
||||||
* - Settings
|
* - More configurability
|
||||||
* - VNstats frequency data
|
* - VNstats frequency data
|
||||||
* - Load deconjugation rules from an advanced setting, with a reset button
|
* - Load deconjugation rules from an advanced setting, with a reset button
|
||||||
* - Work with text input fields
|
* - Work with text input fields
|
||||||
@@ -26,7 +25,10 @@ function print_object(message)
|
|||||||
console.log(message);
|
console.log(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
let compact = true;
|
let settings = {
|
||||||
|
enabled: false,
|
||||||
|
compact: true,
|
||||||
|
};
|
||||||
|
|
||||||
let last_time_display = Date.now();
|
let last_time_display = Date.now();
|
||||||
|
|
||||||
@@ -46,7 +48,7 @@ function delete_div ()
|
|||||||
function display_div (middle, x, y, time)
|
function display_div (middle, x, y, time)
|
||||||
{
|
{
|
||||||
middle.style = "background-color: #111; border-radius: 2.5px; border: 1px solid #111;";
|
middle.style = "background-color: #111; border-radius: 2.5px; border: 1px solid #111;";
|
||||||
middle.firstChild.style = "border: 1px solid white; border-radius: 2px; padding: 2px; background-color: #111; color: #CCC; font-family: Arial, sans-serif; font-size: 13px;";
|
middle.firstChild.style = "border: 1px solid white; border-radius: 2px; padding: 2px; background-color: #111; color: #CCC; font-family: Arial, sans-serif; font-size: 13px; text-align: left;";
|
||||||
|
|
||||||
let other = document.body.getElementsByClassName(div_class);
|
let other = document.body.getElementsByClassName(div_class);
|
||||||
if(other.length > 0)
|
if(other.length > 0)
|
||||||
@@ -318,13 +320,13 @@ function build_div (text, result)
|
|||||||
parts.push(sense.pos[l]);
|
parts.push(sense.pos[l]);
|
||||||
temptag += parts.join(", ");
|
temptag += parts.join(", ");
|
||||||
temptag += ")</span>";
|
temptag += ")</span>";
|
||||||
if(compact)
|
if(settings.compact)
|
||||||
temptag += " ";
|
temptag += " ";
|
||||||
else
|
else
|
||||||
temptag += "<br>";
|
temptag += "<br>";
|
||||||
temp.innerHTML += temptag;
|
temp.innerHTML += temptag;
|
||||||
}
|
}
|
||||||
if(compact)
|
if(settings.compact)
|
||||||
{
|
{
|
||||||
if(goodsenses.length > 1)
|
if(goodsenses.length > 1)
|
||||||
temp.innerHTML += " <span class=nazeka_num>(" + (j+1) + ")</span> ";
|
temp.innerHTML += " <span class=nazeka_num>(" + (j+1) + ")</span> ";
|
||||||
@@ -347,7 +349,7 @@ function build_div (text, result)
|
|||||||
temp.innerHTML += temptag;
|
temp.innerHTML += temptag;
|
||||||
}
|
}
|
||||||
temp.innerHTML += sense.gloss.join("; ");
|
temp.innerHTML += sense.gloss.join("; ");
|
||||||
if(compact)
|
if(settings.compact)
|
||||||
{
|
{
|
||||||
if(sense.gloss.length > 1 || j+1 != goodsenses.length)
|
if(sense.gloss.length > 1 || j+1 != goodsenses.length)
|
||||||
temp.innerHTML += "; ";
|
temp.innerHTML += "; ";
|
||||||
@@ -357,7 +359,7 @@ function build_div (text, result)
|
|||||||
temp.innerHTML += "<br>";
|
temp.innerHTML += "<br>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(compact)
|
if(settings.compact)
|
||||||
temp.innerHTML += "<br>";
|
temp.innerHTML += "<br>";
|
||||||
}
|
}
|
||||||
middle.appendChild(temp);
|
middle.appendChild(temp);
|
||||||
@@ -662,14 +664,43 @@ function lookup_cancel()
|
|||||||
delete_div();
|
delete_div();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let settings_reload_rate = 200;
|
||||||
|
let settings_reloader = undefined;
|
||||||
|
async function settings_reload()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
settings.enabled = (await browser.storage.local.get("enabled")).enabled;
|
||||||
|
if(settings.enabled == undefined)
|
||||||
|
settings.enabled = false;
|
||||||
|
settings.compact = (await browser.storage.local.get("compact")).compact;
|
||||||
|
if(settings.compact == undefined)
|
||||||
|
settings.compact = true;
|
||||||
|
//console.log("set settings");
|
||||||
|
//console.log(settings.enabled);
|
||||||
|
//console.log(settings.compact);
|
||||||
|
}
|
||||||
|
catch(error)
|
||||||
|
{
|
||||||
|
console.log("failed to set settings, maybe not stored yet?");
|
||||||
|
} // not stored yet, probably
|
||||||
|
|
||||||
|
settings_reloader = setTimeout(settings_reload, settings_reload_rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
settings_reloader = setTimeout(settings_reload, settings_reload_rate);
|
||||||
|
|
||||||
|
|
||||||
let max_search_len = 25;
|
let max_search_len = 25;
|
||||||
let time_of_last = Date.now();
|
let time_of_last = Date.now();
|
||||||
let throttle = 8;
|
let throttle = 8;
|
||||||
|
|
||||||
var seach_x_offset = -3;
|
let seach_x_offset = -3;
|
||||||
|
|
||||||
window.addEventListener("mousemove", (event)=>
|
window.addEventListener("mousemove", (event)=>
|
||||||
{
|
{
|
||||||
|
if(!settings.enabled) return;
|
||||||
|
|
||||||
if(Date.now() - time_of_last < throttle)
|
if(Date.now() - time_of_last < throttle)
|
||||||
{
|
{
|
||||||
//console.log("too soon, returning");
|
//console.log("too soon, returning");
|
||||||
@@ -696,7 +727,7 @@ window.addEventListener("mousemove", (event)=>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// try without the offset
|
// try without the offset
|
||||||
if (textNode.nodeType != 3)
|
if (textNode == undefined || textNode.nodeType != 3)
|
||||||
{
|
{
|
||||||
if (document.caretPositionFromPoint)
|
if (document.caretPositionFromPoint)
|
||||||
{
|
{
|
||||||
@@ -712,7 +743,7 @@ window.addEventListener("mousemove", (event)=>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if there was text, use it
|
// if there was text, use it
|
||||||
if (textNode.nodeType == 3)
|
if (textNode && textNode.nodeType == 3)
|
||||||
{
|
{
|
||||||
//print_object(textNode);
|
//print_object(textNode);
|
||||||
//print_object(textNode.parentNode);
|
//print_object(textNode.parentNode);
|
||||||
|
|||||||