minor json dictionary overhaul
This commit is contained in:
1 parent
14892beed9
commit
74d808bc84
4 files changed
+317
-286
No files matched your search
+127
-165
@@ -64,43 +64,31 @@ async function refresh_epwing()
|
|||||||
{
|
{
|
||||||
if(typeof epwing[i] === 'string' || epwing[i] instanceof String)
|
if(typeof epwing[i] === 'string' || epwing[i] instanceof String)
|
||||||
continue;
|
continue;
|
||||||
add_epwing_id(epwing[i]["r"], i);
|
add_epwing_reading(epwing[i]["r"], i);
|
||||||
for(let spelling of epwing[i]["s"])
|
for(let spelling of epwing[i]["s"])
|
||||||
add_epwing_id(spelling, i);
|
add_epwing_spelling(spelling, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
refresh_epwing();
|
refresh_epwing();
|
||||||
|
|
||||||
function string_is_kana(str)
|
function add_epwing_reading(text, id)
|
||||||
{
|
{
|
||||||
for(let i = 0; i < str.length; i++)
|
if(text === "")
|
||||||
{
|
|
||||||
let codepoint = str.codePointAt(i);
|
|
||||||
if(!(codepoint >= 0x3040 && codepoint <= 0x30FF))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_epwing_id(id, i)
|
|
||||||
{
|
|
||||||
if(id === "")
|
|
||||||
return;
|
return;
|
||||||
if(string_is_kana(id))
|
if (!lookup_epwing_kana.has(text))
|
||||||
{
|
lookup_epwing_kana.set(text, [id]);
|
||||||
if (!lookup_epwing_kana.has(id))
|
|
||||||
lookup_epwing_kana.set(id, [i]);
|
|
||||||
else
|
|
||||||
lookup_epwing_kana.get(id).push(i);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
lookup_epwing_kana.get(text).push(id);
|
||||||
if (!lookup_epwing_kan.has(id))
|
}
|
||||||
lookup_epwing_kan.set(id, [i]);
|
function add_epwing_spelling(text, id)
|
||||||
else
|
{
|
||||||
lookup_epwing_kan.get(id).push(i);
|
if(text === "")
|
||||||
}
|
return;
|
||||||
|
if (!lookup_epwing_kan.has(text))
|
||||||
|
lookup_epwing_kan.set(text, [id]);
|
||||||
|
else
|
||||||
|
lookup_epwing_kan.get(text).push(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -670,7 +658,53 @@ function build_lookup_comb(forms)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_epwing_info(lookups)
|
function epwing_lookup_kanji(spelling_list, readings, inexact)
|
||||||
|
{
|
||||||
|
let indexes_set = new Set();
|
||||||
|
let indexes = [];
|
||||||
|
for(let spelling of spelling_list)
|
||||||
|
{
|
||||||
|
let possibilities = lookup_epwing_kan.get(spelling);
|
||||||
|
if(!possibilities)
|
||||||
|
continue;
|
||||||
|
for(let id of lookup_epwing_kan.get(spelling))
|
||||||
|
{
|
||||||
|
if(inexact || readings.includes(epwing[id]["r"]))
|
||||||
|
{
|
||||||
|
if(!indexes_set.has(id))
|
||||||
|
{
|
||||||
|
indexes_set.add(id);
|
||||||
|
indexes.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indexes;
|
||||||
|
}
|
||||||
|
|
||||||
|
function epwing_lookup_kana_exact(kana)
|
||||||
|
{
|
||||||
|
let possibilities = lookup_epwing_kana.get(kana);
|
||||||
|
if(!possibilities)
|
||||||
|
return [];
|
||||||
|
let actual_possibilities = [];
|
||||||
|
for(let wing of possibilities)
|
||||||
|
{
|
||||||
|
let spellings = epwing[wing]["s"]
|
||||||
|
if(spellings.length == 1 && spellings[0] === "")
|
||||||
|
actual_possibilities.push(wing);
|
||||||
|
}
|
||||||
|
return actual_possibilities;
|
||||||
|
}
|
||||||
|
function epwing_lookup_kana_inexact(kana)
|
||||||
|
{
|
||||||
|
let possibilities = copy_gen(lookup_epwing_kana.get(kana));
|
||||||
|
if(!possibilities)
|
||||||
|
return [];
|
||||||
|
return possibilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_epwing_info(lookups, strict_epwing)
|
||||||
{
|
{
|
||||||
for(let lookup of lookups)
|
for(let lookup of lookups)
|
||||||
{
|
{
|
||||||
@@ -684,139 +718,67 @@ function add_epwing_info(lookups)
|
|||||||
else
|
else
|
||||||
foundtext = entry.orig_found.reb;
|
foundtext = entry.orig_found.reb;
|
||||||
|
|
||||||
let exact = 0;
|
|
||||||
// TODO: figure out which of these .includes() calls should be equality tests instead. definitely some of them, definitely not all of them.
|
|
||||||
if(entry.k_ele)
|
if(entry.k_ele)
|
||||||
{
|
{
|
||||||
|
let spellings = [];
|
||||||
for(let spelling of entry.k_ele)
|
for(let spelling of entry.k_ele)
|
||||||
{
|
spellings.push(spelling.keb);
|
||||||
let text = spelling.keb;
|
let readings = [];
|
||||||
if (lookup_epwing_kan.has(text))
|
|
||||||
{
|
|
||||||
let possibilities = copy_gen(lookup_epwing_kan.get(text));
|
|
||||||
|
|
||||||
// FIXME this is disgusting
|
|
||||||
let priority = [];
|
|
||||||
for(let reading of entry.r_ele)
|
|
||||||
{
|
|
||||||
let rtext = reading.reb;
|
|
||||||
for(let wing of possibilities)
|
|
||||||
{
|
|
||||||
if(epwing[wing]["r"] === rtext)
|
|
||||||
priority.push(wing);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(let wing of priority)
|
|
||||||
{
|
|
||||||
var index = possibilities.indexOf(wing);
|
|
||||||
if (index > -1)
|
|
||||||
possibilities.splice(index, 1);
|
|
||||||
}
|
|
||||||
possibilities = priority.concat(possibilities);
|
|
||||||
priority = [];
|
|
||||||
|
|
||||||
for(let wing of possibilities)
|
|
||||||
{
|
|
||||||
let epw = copy(epwing[wing]);
|
|
||||||
if(epw && epw["l"])
|
|
||||||
{
|
|
||||||
if(epwing_data == undefined)
|
|
||||||
{
|
|
||||||
epwing_data = epw;
|
|
||||||
exact = epw["r"].includes(foundtext);
|
|
||||||
for(let spelling of epw["s"])
|
|
||||||
exact |= spelling.includes(foundtext);
|
|
||||||
// FIXME duplicated below
|
|
||||||
if(exact)
|
|
||||||
{
|
|
||||||
for(let reading of entry.r_ele)
|
|
||||||
{
|
|
||||||
let rtext = reading.reb;
|
|
||||||
if(epw["r"].includes(rtext))
|
|
||||||
exact = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(exact == 0)
|
|
||||||
{
|
|
||||||
exact |= epw["r"].includes(foundtext);
|
|
||||||
for(let spelling of epw["s"])
|
|
||||||
exact |= spelling.includes(foundtext);
|
|
||||||
if(exact)
|
|
||||||
{
|
|
||||||
for(let reading of entry.r_ele)
|
|
||||||
{
|
|
||||||
let rtext = reading.reb;
|
|
||||||
if(epw["r"].includes(rtext))
|
|
||||||
exact = 2;
|
|
||||||
}
|
|
||||||
epwing_data = epw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(exact == 1)
|
|
||||||
{
|
|
||||||
let maybe_more_exact = epw["r"].includes(foundtext);
|
|
||||||
for(let spelling of epw["s"])
|
|
||||||
maybe_more_exact |= spelling.includes(foundtext);
|
|
||||||
if(maybe_more_exact)
|
|
||||||
{
|
|
||||||
for(let reading of entry.r_ele)
|
|
||||||
{
|
|
||||||
let text = reading.reb;
|
|
||||||
if(epw["r"].includes(text))
|
|
||||||
{
|
|
||||||
exact = 2;
|
|
||||||
epwing_data = epw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(epwing_data == undefined && entry.r_ele)
|
|
||||||
{
|
|
||||||
for(let reading of entry.r_ele)
|
for(let reading of entry.r_ele)
|
||||||
{
|
readings.push(reading.reb);
|
||||||
let text = reading.reb;
|
|
||||||
|
|
||||||
if (lookup_epwing_kana.has(text))
|
// try exact matches
|
||||||
|
// lookup
|
||||||
|
let possibilities = epwing_lookup_kanji([lookup.text], readings, false);
|
||||||
|
// main spelling
|
||||||
|
if(possibilities.length == 0)
|
||||||
|
possibilities = epwing_lookup_kanji([foundtext], readings, false);
|
||||||
|
// all possible spellings
|
||||||
|
if(possibilities.length == 0)
|
||||||
|
possibilities = epwing_lookup_kanji(spellings, readings, false);
|
||||||
|
// try inexact matches
|
||||||
|
if(!strict_epwing)
|
||||||
|
{
|
||||||
|
if(possibilities.length == 0)
|
||||||
|
possibilities = epwing_lookup_kanji([lookup.text], readings, true);
|
||||||
|
if(possibilities.length == 0)
|
||||||
|
possibilities = epwing_lookup_kanji([foundtext], readings, true);
|
||||||
|
if(possibilities.length == 0)
|
||||||
|
possibilities = epwing_lookup_kanji(spellings, readings, true);
|
||||||
|
}
|
||||||
|
if(possibilities.length > 0)
|
||||||
|
epwing_data = copy(epwing[possibilities[0]]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let possibilities = epwing_lookup_kana_exact(foundtext);
|
||||||
|
if(!strict_epwing)
|
||||||
|
{
|
||||||
|
for(let reading of entry.r_ele)
|
||||||
{
|
{
|
||||||
let possibilities = copy_gen(lookup_epwing_kana.get(text));
|
if(possibilities.length == 0)
|
||||||
for(let wing of possibilities)
|
possibilities = epwing_lookup_kana_exact(reading);
|
||||||
{
|
}
|
||||||
let epw = copy(epwing[wing]);
|
if(possibilities.length == 0)
|
||||||
if(epw && epw["l"])
|
possibilities = epwing_lookup_kana_inexact(foundtext);
|
||||||
{
|
for(let reading of entry.r_ele)
|
||||||
if(epwing_data == undefined)
|
{
|
||||||
{
|
if(possibilities.length == 0)
|
||||||
epwing_data = epw;
|
possibilities = epwing_lookup_kana_inexact(reading);
|
||||||
exact = epw["r"].includes(foundtext);
|
|
||||||
}
|
|
||||||
else if(exact == 0)
|
|
||||||
{
|
|
||||||
exact |= epw["r"].includes(foundtext);
|
|
||||||
if(exact)
|
|
||||||
epwing_data = epw;
|
|
||||||
}
|
|
||||||
else if(exact == 1)
|
|
||||||
{
|
|
||||||
if(epw["s"].length == 1 && epw["s"][0] === "" && epw["r"].includes(foundtext))
|
|
||||||
{
|
|
||||||
exact = 2;
|
|
||||||
epwing_data = epw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(possibilities.length > 0)
|
||||||
|
epwing_data = copy(epwing[possibilities[0]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(epwing_data)
|
||||||
|
{
|
||||||
|
// add dictionary title
|
||||||
|
if(epwing_data && (typeof epwing[0] === 'string' || epwing[0] instanceof String))
|
||||||
|
epwing_data["z"] = epwing[0];
|
||||||
|
// add to lookup
|
||||||
|
entry.epwing = epwing_data;
|
||||||
}
|
}
|
||||||
entry.epwing = epwing_data;
|
|
||||||
if(entry.epwing && (typeof epwing[0] === 'string' || epwing[0] instanceof String))
|
|
||||||
entry.epwing["z"] = epwing[0];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lookups;
|
return lookups;
|
||||||
@@ -1158,7 +1120,7 @@ function restrict_by_text(entry, text)
|
|||||||
return term;
|
return term;
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_extra_info(results)
|
function add_extra_info(results, strict_epwing)
|
||||||
{
|
{
|
||||||
for(let lookup of results)
|
for(let lookup of results)
|
||||||
{
|
{
|
||||||
@@ -1191,11 +1153,11 @@ function add_extra_info(results)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return add_epwing_info(results);
|
return add_epwing_info(results, strict_epwing);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip JMdict entries reappearing in alternative lookups (so only the first one is shown)
|
// Skip JMdict entries reappearing in alternative lookups (so only the first one is shown)
|
||||||
function skip_rereferenced_entries(results)
|
function skip_rereferenced_entries(results, strict_epwing)
|
||||||
{
|
{
|
||||||
let newresults = [];
|
let newresults = [];
|
||||||
let seenseq = new Set();
|
let seenseq = new Set();
|
||||||
@@ -1213,12 +1175,12 @@ function skip_rereferenced_entries(results)
|
|||||||
if(newlookup.length > 0)
|
if(newlookup.length > 0)
|
||||||
newresults.push({text:lookup.text, result:newlookup});
|
newresults.push({text:lookup.text, result:newlookup});
|
||||||
}
|
}
|
||||||
return add_extra_info(newresults); // add extra information like epwing results and audio data now
|
return add_extra_info(newresults, strict_epwing); // add extra information like epwing results and audio data now
|
||||||
}
|
}
|
||||||
|
|
||||||
let last_lookup = "";
|
let last_lookup = "";
|
||||||
let last_time_lookup = Date.now();
|
let last_time_lookup = Date.now();
|
||||||
function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alternatives)
|
function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alternatives, strict_epwing)
|
||||||
{
|
{
|
||||||
if(text == "")
|
if(text == "")
|
||||||
return;
|
return;
|
||||||
@@ -1247,7 +1209,7 @@ function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alter
|
|||||||
{
|
{
|
||||||
result = sort_results(text, result);
|
result = sort_results(text, result);
|
||||||
if(alternatives_mode == 0 || text.length <= 1)
|
if(alternatives_mode == 0 || text.length <= 1)
|
||||||
return skip_rereferenced_entries([{text:text, result:result}]);
|
return skip_rereferenced_entries([{text:text, result:result}], strict_epwing);
|
||||||
else if(alternatives_mode == 1) // second longest too
|
else if(alternatives_mode == 1) // second longest too
|
||||||
{
|
{
|
||||||
let len = text.length-1;
|
let len = text.length-1;
|
||||||
@@ -1267,10 +1229,10 @@ function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alter
|
|||||||
if(short_result !== undefined && short_result.length > 0)
|
if(short_result !== undefined && short_result.length > 0)
|
||||||
{
|
{
|
||||||
short_result = sort_results(short_text, short_result);
|
short_result = sort_results(short_text, short_result);
|
||||||
return skip_rereferenced_entries([{text:text, result:result}, {text:short_text, result:short_result}]);
|
return skip_rereferenced_entries([{text:text, result:result}, {text:short_text, result:short_result}], strict_epwing);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return skip_rereferenced_entries([{text:text, result:result}]);
|
return skip_rereferenced_entries([{text:text, result:result}], strict_epwing);
|
||||||
}
|
}
|
||||||
else if(alternatives_mode == 2) // shortest too
|
else if(alternatives_mode == 2) // shortest too
|
||||||
{
|
{
|
||||||
@@ -1291,10 +1253,10 @@ function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alter
|
|||||||
if(short_result !== undefined && short_result.length > 0)
|
if(short_result !== undefined && short_result.length > 0)
|
||||||
{
|
{
|
||||||
short_result = sort_results(short_text, short_result);
|
short_result = sort_results(short_text, short_result);
|
||||||
return skip_rereferenced_entries([{text:text, result:result}, {text:short_text, result:short_result}]);
|
return skip_rereferenced_entries([{text:text, result:result}, {text:short_text, result:short_result}], strict_epwing);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return skip_rereferenced_entries([{text:text, result:result}]);
|
return skip_rereferenced_entries([{text:text, result:result}], strict_epwing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1320,7 +1282,7 @@ function lookup_indirect(text, time, divexisted, alternatives_mode, strict_alter
|
|||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
if(results.length > 0)
|
if(results.length > 0)
|
||||||
return skip_rereferenced_entries(results);
|
return skip_rereferenced_entries(results, strict_epwing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1460,7 +1422,7 @@ browser.runtime.onMessage.addListener((req, sender) =>
|
|||||||
{
|
{
|
||||||
if (req.type == "search")
|
if (req.type == "search")
|
||||||
{
|
{
|
||||||
let asdf = lookup_indirect(req.text, req.time, req.divexisted, req.alternatives_mode, req.strict_alternatives);
|
let asdf = lookup_indirect(req.text, req.time, req.divexisted, req.alternatives_mode, req.strict_alternatives, req.strict_epwing);
|
||||||
return Promise.resolve({"response" : asdf});
|
return Promise.resolve({"response" : asdf});
|
||||||
}
|
}
|
||||||
else if (req.type == "platform")
|
else if (req.type == "platform")
|
||||||
|
|||||||
+15
-2
@@ -67,6 +67,19 @@ function defaults()
|
|||||||
default: true,
|
default: true,
|
||||||
label: "Strict matching for alternative matches"
|
label: "Strict matching for alternative matches"
|
||||||
});
|
});
|
||||||
|
settings.push({
|
||||||
|
id: "definitions_mode",
|
||||||
|
kind: "combobox",
|
||||||
|
options: ["From jmdict then json", "From json then jmdict", "From json; otherwise jmdict", "From json dictionary only", "None"],
|
||||||
|
default: 0,
|
||||||
|
label: "Where to look for definitions (does not affect jmdict readings)"
|
||||||
|
});
|
||||||
|
settings.push({
|
||||||
|
id: "strict_epwing",
|
||||||
|
kind: "checkbox",
|
||||||
|
default: true,
|
||||||
|
label: "Strict matching for json dictionary matches"
|
||||||
|
});
|
||||||
settings.push({
|
settings.push({
|
||||||
id: "popup_requires_key",
|
id: "popup_requires_key",
|
||||||
kind: "combobox",
|
kind: "combobox",
|
||||||
@@ -494,7 +507,7 @@ function buildpage()
|
|||||||
browser.storage.local.set({"deconjugator_rules_json":""});
|
browser.storage.local.set({"deconjugator_rules_json":""});
|
||||||
else
|
else
|
||||||
browser.storage.local.set({"deconjugator_rules_json":JSON.stringify(JSON.parse())});
|
browser.storage.local.set({"deconjugator_rules_json":JSON.stringify(JSON.parse())});
|
||||||
document.querySelector("decon_label").textContent = "Imported. Might take a few seconds to apply.";
|
document.querySelector("#decon_label").textContent = "Imported. Might take a few seconds to apply.";
|
||||||
}
|
}
|
||||||
catch(except)
|
catch(except)
|
||||||
{
|
{
|
||||||
@@ -505,7 +518,7 @@ function buildpage()
|
|||||||
});
|
});
|
||||||
let decon_label = document.createElement("label");
|
let decon_label = document.createElement("label");
|
||||||
decon_label.for = decon_file.id;
|
decon_label.for = decon_file.id;
|
||||||
decon_label.id = "import_label";
|
decon_label.id = "decon_label";
|
||||||
decon_label.textContent = "Import deconjugation ruleset. Overrides default deconjugation ruleset. Importing a blank file will restore the default ruleset.";
|
decon_label.textContent = "Import deconjugation ruleset. Overrides default deconjugation ruleset. Importing a blank file will restore the default ruleset.";
|
||||||
decon_label.style.display = "block";
|
decon_label.style.display = "block";
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
Nazeka is a rikai replacement.
|
Nazeka is a rikai replacement.
|
||||||
|
|
||||||
***Nazeka is not ready for general use yet; it does not yet have all the necessary behaviors that rikai variants have.***
|
Nazeka was the first nontrivial thing I wrote in Javascript. The code is terrible and a lot of it is bundled into a small number of files. I need help splitting it up into multiple files, or being told how to split it up into multiple first without requiring any build tools.
|
||||||
|
|
||||||
My code here is terrible, but at least we can all agree that Javascript is a terrible language.
|
***Nazeka is not ready for general use yet; it does not yet have all the necessary behaviors that rikai variants have.***
|
||||||
|
|
||||||
# Options
|
# Options
|
||||||
|
|
||||||
|
|||||||
+173
-117
@@ -24,6 +24,8 @@ superborder: false,
|
|||||||
showoriginal: true,
|
showoriginal: true,
|
||||||
alternatives_mode: 0, // 0: longest only; 1: longest and shortest; 2: longest and second longest; 3: all matches
|
alternatives_mode: 0, // 0: longest only; 1: longest and shortest; 2: longest and second longest; 3: all matches
|
||||||
strict_alternatives: true, // if true, alternatives looked up in all kana can not return results with kanji glosses that don't have any usually/exclusively kana info
|
strict_alternatives: true, // if true, alternatives looked up in all kana can not return results with kanji glosses that don't have any usually/exclusively kana info
|
||||||
|
definitions_mode: 0,
|
||||||
|
strict_epwing: true,
|
||||||
scale: 1,
|
scale: 1,
|
||||||
width: 600,
|
width: 600,
|
||||||
lookuprate: 8,
|
lookuprate: 8,
|
||||||
@@ -400,6 +402,139 @@ function clip(str)
|
|||||||
return str.substring(1, str.length-1);
|
return str.substring(1, str.length-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function elementize_jmdict_defs(goodsenses)
|
||||||
|
{
|
||||||
|
let lastpos = [];
|
||||||
|
let jmdict_defs = document.createElement("div");
|
||||||
|
jmdict_defs.className = "jmdict_definitions";
|
||||||
|
for(let j = 0; j < goodsenses.length; j++)
|
||||||
|
{
|
||||||
|
let sense = goodsenses[j];
|
||||||
|
|
||||||
|
if(sense.pos == lastpos)
|
||||||
|
sense.pos = undefined;
|
||||||
|
else
|
||||||
|
lastpos = sense.pos;
|
||||||
|
|
||||||
|
if(sense.pos)
|
||||||
|
{
|
||||||
|
let part = document.createElement("span");
|
||||||
|
part.className = "nazeka_pos";
|
||||||
|
let temptext = "(";
|
||||||
|
let parts = [];
|
||||||
|
for(let l = 0; l < sense.pos.length; l++)
|
||||||
|
parts.push(sense.pos[l]);
|
||||||
|
temptext += parts.join(", ");
|
||||||
|
temptext += ")";
|
||||||
|
part.textContent = temptext;
|
||||||
|
jmdict_defs.appendChild(part);
|
||||||
|
if(settings.compact)
|
||||||
|
jmdict_defs.appendChild(document.createTextNode(" "));
|
||||||
|
else
|
||||||
|
jmdict_defs.appendChild(document.createElement("br"));
|
||||||
|
|
||||||
|
}
|
||||||
|
if(settings.compact)
|
||||||
|
{
|
||||||
|
if(goodsenses.length > 1)
|
||||||
|
{
|
||||||
|
let number = document.createElement("span");
|
||||||
|
number.className = "nazeka_num";
|
||||||
|
number.textContent = "("+(j+1)+")";
|
||||||
|
jmdict_defs.appendChild(number);
|
||||||
|
jmdict_defs.appendChild(document.createTextNode(" "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let temptag = document.createElement("span");
|
||||||
|
temptag.className = "nazeka_num";
|
||||||
|
temptag.textContent = ""+(j+1)+".";
|
||||||
|
jmdict_defs.appendChild(temptag);
|
||||||
|
jmdict_defs.appendChild(document.createTextNode(" "));
|
||||||
|
}
|
||||||
|
if(sense.inf)
|
||||||
|
{
|
||||||
|
let info = document.createElement("i");
|
||||||
|
info.textContent = "("+sense.inf+") ";
|
||||||
|
jmdict_defs.appendChild(info);
|
||||||
|
}
|
||||||
|
if(sense.misc)
|
||||||
|
{
|
||||||
|
let temptag = document.createElement("span");
|
||||||
|
temptag.className = "nazeka_misc";
|
||||||
|
let temptext = "(";
|
||||||
|
let parts = [];
|
||||||
|
for(let l = 0; l < sense.misc.length; l++)
|
||||||
|
parts.push(sense.misc[l].substring(1, sense.misc[l].length-1));
|
||||||
|
temptext += parts.join(", ");
|
||||||
|
temptext += ")";
|
||||||
|
temptag.textContent = temptext;
|
||||||
|
jmdict_defs.appendChild(temptag);
|
||||||
|
jmdict_defs.appendChild(document.createTextNode(" "));
|
||||||
|
}
|
||||||
|
jmdict_defs.appendChild(document.createTextNode(sense.gloss.join("; ")));
|
||||||
|
if(settings.compact)
|
||||||
|
{
|
||||||
|
if(sense.gloss.length > 1 || j+1 != goodsenses.length)
|
||||||
|
jmdict_defs.appendChild(document.createTextNode("; "));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jmdict_defs.appendChild(document.createElement("br"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jmdict_defs;
|
||||||
|
}
|
||||||
|
function elementize_epwing_defs(epwing)
|
||||||
|
{
|
||||||
|
if(epwing)
|
||||||
|
{
|
||||||
|
let epwing_defs = document.createElement("div");
|
||||||
|
epwing_defs.className = "epwing_definitions";
|
||||||
|
|
||||||
|
let epwing_head = document.createElement("div");
|
||||||
|
epwing_head.appendChild(document.createTextNode("―"+epwing["z"]+"―"));
|
||||||
|
epwing_head.appendChild(document.createElement("br"));
|
||||||
|
let epwing_head_text = epwing["r"];
|
||||||
|
if(epwing["s"] && epwing["s"][0] != "")
|
||||||
|
{
|
||||||
|
let isfirst = true;
|
||||||
|
epwing_head_text += "【";
|
||||||
|
for(let spelling of epwing["s"])
|
||||||
|
{
|
||||||
|
if(!isfirst)
|
||||||
|
epwing_head_text += "・";
|
||||||
|
epwing_head_text += spelling;
|
||||||
|
isfirst = false;
|
||||||
|
}
|
||||||
|
epwing_head_text += "】";
|
||||||
|
}
|
||||||
|
epwing_head.appendChild(document.createTextNode(epwing_head_text));
|
||||||
|
let epwing_definition = document.createElement("div");
|
||||||
|
let isfirst = true;
|
||||||
|
for(let line of epwing["l"])
|
||||||
|
{
|
||||||
|
if(!isfirst)
|
||||||
|
epwing_definition.appendChild(document.createElement("br"));
|
||||||
|
let def_line = document.createElement("span");
|
||||||
|
def_line.textContent = line;
|
||||||
|
epwing_definition.appendChild(def_line);
|
||||||
|
isfirst = false;
|
||||||
|
}
|
||||||
|
epwing_head.className = "epwing_head";
|
||||||
|
epwing_definition.className = "epwing_definition";
|
||||||
|
epwing_defs.appendChild(epwing_head);
|
||||||
|
epwing_defs.appendChild(epwing_definition);
|
||||||
|
|
||||||
|
return epwing_defs;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Here we actually build the content of the lookup popup, based on the text we looked up and the list of lookups from the background script
|
// Here we actually build the content of the lookup popup, based on the text we looked up and the list of lookups from the background script
|
||||||
// note that we can get multiple lookups and this function only handles a single lookup
|
// note that we can get multiple lookups and this function only handles a single lookup
|
||||||
function build_div_inner(text, result, moreText, index, first_of_many = false)
|
function build_div_inner(text, result, moreText, index, first_of_many = false)
|
||||||
@@ -514,8 +649,9 @@ function build_div_inner(text, result, moreText, index, first_of_many = false)
|
|||||||
.nazeka_sub_keb{font-size:${settings.reading_fontsize}px;white-space:nowrap;font-family: ${font}IPAGothic,TakaoGothic,Noto Sans CJK JP Regular,Meiryo,sans-serif}
|
.nazeka_sub_keb{font-size:${settings.reading_fontsize}px;white-space:nowrap;font-family: ${font}IPAGothic,TakaoGothic,Noto Sans CJK JP Regular,Meiryo,sans-serif}
|
||||||
.nazeka_sub_reb{font-size:${settings.reading_fontsize}px;white-space:nowrap;color:${settings.hlcolor2}}
|
.nazeka_sub_reb{font-size:${settings.reading_fontsize}px;white-space:nowrap;color:${settings.hlcolor2}}
|
||||||
.nazeka_original{float: right; margin-right: 2px; margin-left:4px; opacity:0.7;}
|
.nazeka_original{float: right; margin-right: 2px; margin-left:4px; opacity:0.7;}
|
||||||
.epwing_head{margin: 6px 8px 4px;}
|
.epwing_head{margin: 0 4px 6px;}
|
||||||
.epwing_definition{margin: 0 8px;}
|
.jmdict_definitions{margin: 0 4px 6px;}
|
||||||
|
.epwing_definition{margin: 0 4px 6px;}
|
||||||
`;
|
`;
|
||||||
temp.appendChild(style);
|
temp.appendChild(style);
|
||||||
|
|
||||||
@@ -684,8 +820,6 @@ function build_div_inner(text, result, moreText, index, first_of_many = false)
|
|||||||
|
|
||||||
if(term.deconj)
|
if(term.deconj)
|
||||||
{
|
{
|
||||||
console.log(term.deconj);
|
|
||||||
|
|
||||||
let deconj = "";
|
let deconj = "";
|
||||||
let first = true;
|
let first = true;
|
||||||
for(let form of term.deconj)
|
for(let form of term.deconj)
|
||||||
@@ -733,7 +867,6 @@ function build_div_inner(text, result, moreText, index, first_of_many = false)
|
|||||||
temptag.appendChild(main_reb);
|
temptag.appendChild(main_reb);
|
||||||
if(term.deconj)
|
if(term.deconj)
|
||||||
{
|
{
|
||||||
console.log(term.deconj);
|
|
||||||
let deconj = "";
|
let deconj = "";
|
||||||
let first = true;
|
let first = true;
|
||||||
for(let form of term.deconj)
|
for(let form of term.deconj)
|
||||||
@@ -815,125 +948,45 @@ function build_div_inner(text, result, moreText, index, first_of_many = false)
|
|||||||
container.appendChild(temptag);
|
container.appendChild(temptag);
|
||||||
container.appendChild(document.createElement("br"));
|
container.appendChild(document.createElement("br"));
|
||||||
|
|
||||||
let goodsenses = term.sense;
|
|
||||||
|
|
||||||
let lastpos = [];
|
|
||||||
let definition = document.createElement("div");
|
let definition = document.createElement("div");
|
||||||
definition.className = "nazeka_definitions";
|
definition.className = "nazeka_definitions";
|
||||||
for(let j = 0; j < goodsenses.length; j++)
|
|
||||||
|
let jmdict_div = elementize_jmdict_defs(term.sense);
|
||||||
|
let epwing_div = elementize_epwing_defs(term.epwing);
|
||||||
|
|
||||||
|
if (settings.definitions_mode == 0) // normal
|
||||||
{
|
{
|
||||||
let sense = goodsenses[j];
|
if(jmdict_div) definition.appendChild(jmdict_div);
|
||||||
|
if(epwing_div) definition.appendChild(epwing_div);
|
||||||
if(sense.pos == lastpos)
|
}
|
||||||
sense.pos = undefined;
|
else if (settings.definitions_mode == 1) // epwing first
|
||||||
else
|
{
|
||||||
lastpos = sense.pos;
|
if(epwing_div) definition.appendChild(epwing_div);
|
||||||
|
if(jmdict_div)
|
||||||
if(sense.pos)
|
|
||||||
{
|
{
|
||||||
let part = document.createElement("span");
|
jmdict_div.insertBefore(document.createTextNode("jmdict: "), jmdict_div.firstChild);
|
||||||
part.className = "nazeka_pos";
|
definition.appendChild(jmdict_div);
|
||||||
let temptext = "(";
|
|
||||||
let parts = [];
|
|
||||||
for(let l = 0; l < sense.pos.length; l++)
|
|
||||||
parts.push(sense.pos[l]);
|
|
||||||
temptext += parts.join(", ");
|
|
||||||
temptext += ")";
|
|
||||||
part.textContent = temptext;
|
|
||||||
definition.appendChild(part);
|
|
||||||
if(settings.compact)
|
|
||||||
definition.appendChild(document.createTextNode(" "));
|
|
||||||
else
|
|
||||||
definition.appendChild(document.createElement("br"));
|
|
||||||
|
|
||||||
}
|
|
||||||
if(settings.compact)
|
|
||||||
{
|
|
||||||
if(goodsenses.length > 1)
|
|
||||||
{
|
|
||||||
let number = document.createElement("span");
|
|
||||||
number.className = "nazeka_num";
|
|
||||||
number.textContent = "("+(j+1)+")";
|
|
||||||
definition.appendChild(number);
|
|
||||||
definition.appendChild(document.createTextNode(" "));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
let temptag = document.createElement("span");
|
|
||||||
temptag.className = "nazeka_num";
|
|
||||||
temptag.textContent = ""+(j+1)+".";
|
|
||||||
definition.appendChild(temptag);
|
|
||||||
definition.appendChild(document.createTextNode(" "));
|
|
||||||
}
|
|
||||||
if(sense.inf)
|
|
||||||
{
|
|
||||||
let info = document.createElement("i");
|
|
||||||
info.textContent = "("+sense.inf+") ";
|
|
||||||
definition.appendChild(info);
|
|
||||||
}
|
|
||||||
if(sense.misc)
|
|
||||||
{
|
|
||||||
let temptag = document.createElement("span");
|
|
||||||
temptag.className = "nazeka_misc";
|
|
||||||
let temptext = "(";
|
|
||||||
let parts = [];
|
|
||||||
for(let l = 0; l < sense.misc.length; l++)
|
|
||||||
parts.push(sense.misc[l].substring(1, sense.misc[l].length-1));
|
|
||||||
temptext += parts.join(", ");
|
|
||||||
temptext += ")";
|
|
||||||
temptag.textContent = temptext;
|
|
||||||
definition.appendChild(temptag);
|
|
||||||
definition.appendChild(document.createTextNode(" "));
|
|
||||||
}
|
|
||||||
definition.appendChild(document.createTextNode(sense.gloss.join("; ")));
|
|
||||||
if(settings.compact)
|
|
||||||
{
|
|
||||||
if(sense.gloss.length > 1 || j+1 != goodsenses.length)
|
|
||||||
definition.appendChild(document.createTextNode("; "));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
definition.appendChild(document.createElement("br"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(term.epwing)
|
else if (settings.definitions_mode == 2) // epwing or else jmdict
|
||||||
{
|
{
|
||||||
definition.appendChild(document.createElement("br"));
|
if(epwing_div) definition.appendChild(epwing_div);
|
||||||
let epwing_head = document.createElement("div");
|
else definition.appendChild(jmdict_div);
|
||||||
epwing_head.appendChild(document.createTextNode("―"+term.epwing["z"]+"―"));
|
|
||||||
epwing_head.appendChild(document.createElement("br"));
|
|
||||||
let epwing_head_text = term.epwing["r"];
|
|
||||||
if(term.epwing["s"] && term.epwing["s"][0] != "")
|
|
||||||
{
|
|
||||||
let isfirst = true;
|
|
||||||
epwing_head_text += "【";
|
|
||||||
for(let spelling of term.epwing["s"])
|
|
||||||
{
|
|
||||||
if(!isfirst)
|
|
||||||
epwing_head_text += "・";
|
|
||||||
epwing_head_text += spelling;
|
|
||||||
isfirst = false;
|
|
||||||
}
|
|
||||||
epwing_head_text += "】";
|
|
||||||
}
|
|
||||||
epwing_head.appendChild(document.createTextNode(epwing_head_text));
|
|
||||||
let epwing_definition = document.createElement("div");
|
|
||||||
let isfirst = true;
|
|
||||||
for(let line of term.epwing["l"])
|
|
||||||
{
|
|
||||||
if(!isfirst)
|
|
||||||
epwing_definition.appendChild(document.createElement("br"));
|
|
||||||
let def_line = document.createElement("span");
|
|
||||||
def_line.textContent = line;
|
|
||||||
epwing_definition.appendChild(def_line);
|
|
||||||
isfirst = false;
|
|
||||||
}
|
|
||||||
epwing_head.className = "epwing_head";
|
|
||||||
epwing_definition.className = "epwing_definition";
|
|
||||||
definition.appendChild(epwing_head);
|
|
||||||
definition.appendChild(epwing_definition);
|
|
||||||
}
|
}
|
||||||
|
else if (settings.definitions_mode == 3) // epwing only
|
||||||
|
{
|
||||||
|
if(epwing_div) definition.appendChild(epwing_div);
|
||||||
|
}
|
||||||
|
else if (settings.definitions_mode == 4) // none
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else // normal (fallback)
|
||||||
|
{
|
||||||
|
if(jmdict_div) definition.appendChild(jmdict_div);
|
||||||
|
if(epwing_div) definition.appendChild(epwing_div);
|
||||||
|
}
|
||||||
|
|
||||||
container.appendChild(definition);
|
container.appendChild(definition);
|
||||||
if(settings.corner == 2 || settings.corner == 3)
|
if(settings.corner == 2 || settings.corner == 3)
|
||||||
{
|
{
|
||||||
@@ -1017,6 +1070,8 @@ async function settings_init()
|
|||||||
|
|
||||||
getvar("alternatives_mode", 0);
|
getvar("alternatives_mode", 0);
|
||||||
getvar("strict_alternatives", true);
|
getvar("strict_alternatives", true);
|
||||||
|
getvar("definitions_mode", 0);
|
||||||
|
getvar("strict_epwing", true);
|
||||||
|
|
||||||
getvar("corner", 0);
|
getvar("corner", 0);
|
||||||
getvar("xoffset", 5);
|
getvar("xoffset", 5);
|
||||||
@@ -1086,7 +1141,8 @@ async function send_lookup(lookup)
|
|||||||
time:Date.now(),
|
time:Date.now(),
|
||||||
divexisted:exists_div(),
|
divexisted:exists_div(),
|
||||||
alternatives_mode:settings.alternatives_mode,
|
alternatives_mode:settings.alternatives_mode,
|
||||||
strict_alternatives:settings.strict_alternatives
|
strict_alternatives:settings.strict_alternatives,
|
||||||
|
strict_epwing:settings.strict_epwing
|
||||||
});
|
});
|
||||||
if(response)
|
if(response)
|
||||||
response = response["response"];
|
response = response["response"];
|
||||||
|
|||||||
Reference in new issue
Block a user