Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
392f578
✨ niai: sort kanji by wk-level
marciska Jan 13, 2023
a6450f0
🐛 niai: attempt to fix sorting bug
marciska Jan 13, 2023
b438283
✨ change to sort by score
marciska Jan 20, 2023
746ff11
🐛 fix bug: function has not been binded to 'this'
marciska Jan 20, 2023
12de089
🐛 fix bug: kanjis not in WK
marciska Jan 20, 2023
1397025
🐛 fix bug: sort by locked status
marciska Jan 20, 2023
fc2a432
🐛 fix bug: sorted locked status wrong direction
marciska Jan 20, 2023
7917f53
🐛 fix bug: kanji not in WK
marciska Jan 20, 2023
805c305
⚡️ improve sorting methods
marciska Jan 20, 2023
93b5163
Merge commit 'refs/pull/23/head' of https://github.com/mwil/wanikani-…
lupomikti Nov 28, 2023
2dbc118
Niai: cleanup
lupomikti Dec 1, 2023
5c6e970
Fix: Niai: properly include sorting by score after level
lupomikti Dec 3, 2023
28b40b5
Fix: Niai: sorting happens before cache update
lupomikti Dec 3, 2023
95d7441
Niai: update user.js
lupomikti Dec 3, 2023
c1cf36c
Small fix for determining locked status
lupomikti Dec 27, 2023
d9efa94
Niai: update user.js
lupomikti Dec 27, 2023
0a8aedf
Merge remote-tracking branch 'upstream/master' into niai-display-sorting
lupomikti Dec 28, 2023
62a6bbb
Niai: update user.js after merge
lupomikti Dec 28, 2023
ac1287d
Merge branch 'master' of github.com:lupomikti/mwil-wanikani-userscrip…
lupomikti Jun 10, 2024
2c01480
Niai: update sha in user.js to what it is in master
lupomikti Jun 10, 2024
3f17bcb
Niai: update handling of items not in DB but on WK
lupomikti Jun 10, 2024
8b61601
Niai: same as last commit
lupomikti Jun 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 57 additions & 16 deletions wanikani-similar-kanji/wk_niai.db.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ function NiaiDB()
NiaiDB.prototype = {
constructor: NiaiDB,

init: function(override_db)
init: async function(override_db)
{
this.override_db = override_db;

if (typeof wkof === `object`)
this.wkof_items = this.load_wkof_items();
this.wkof_items = await this.load_wkof_items();
},

load_wkof_items: async function()
Expand All @@ -43,8 +43,10 @@ function NiaiDB()
isKanjiInWK: function(kanji)
{
// WK started adding new kanji, treat unknown kanji gracefully
if (!this.isKanjiInDB(kanji))
if (!this.isKanjiInDB(kanji) && !(kanji in this.wkof_items))
return false;
else if (!this.isKanjiInDB(kanji) && (kanji in this.wkof_items))
return true;

return (this.lookup_db[kanji].level !== 99);
},
Expand All @@ -56,22 +58,60 @@ function NiaiDB()

isKanjiLocked: function(kanji, level)
{
if (this.isKanjiInDB(kanji))
return (this.lookup_db[kanji].level > level);
else
return true;
if (kanji in this.wkof_items)
return (this.wkof_items[kanji].data.level > level);
else if (this.isKanjiInDB(kanji))
return (this.lookup_db[kanji].level === 99 || this.wkof_items[kanji].data.level > level);

return true;
},

getInfo: function(kanji)
{
if (!this.isKanjiInDB(kanji))
if (!this.isKanjiInDB(kanji) && !(kanji in this.wkof_items))
return {"meanings": "Not in DB!", "readings": " ", level: "N/A"};
else if (kanji in this.wkof_items) { // if it's in wkof fetch we don't care about local db info
// we need to build the k_info object from the open framework data
let k_data = this.wkof_items[kanji].data;
let k_info = {
kunyomi: [],
onyomi: [],
nanori: [],
important_reading: ''
};

for (const reading_info of k_data.readings) {
switch (reading_info.type) {
case 'kunyomi':
k_info.kunyomi.push(reading_info.reading);
if (reading_info.primary) k_info.important_reading = 'kunyomi';
break;
case 'onyomi':
k_info.onyomi.push(reading_info.reading);
if (reading_info.primary) k_info.important_reading = 'onyomi';
break;
case 'nanori':
k_info.nanori.push(reading_info.reading);
if (reading_info.primary) k_info.important_reading = 'nanori';
break;
default:
break;
}
}

k_info.level = k_data.level;
k_info.meanings = k_data.meanings.map(m => m.meaning);
k_info.readings = k_info[k_info.important_reading];

let k_info = this.lookup_db[kanji];
return k_info;
}
else { // not in wkof fetch, must be in local db
let k_info = this.lookup_db[kanji];

k_info.readings = k_info[k_info.important_reading];
k_info.readings = k_info[k_info.important_reading];

return k_info;
return k_info;
}
},

getSimilar: function(kanji, level, sources, min_score)
Expand All @@ -97,9 +137,9 @@ function NiaiDB()
let score = source.base_score +
(hasScore ? sim_info.score : 0.0);

if (!this.isKanjiInDB(sim_kanji))
if (!this.isKanjiInDB(sim_kanji) && !this.isKanjiInWK(sim_kanji))
{
console.log("Ignoring", sim_kanji, ", not in DB yet!");
console.log("Ignoring", sim_kanji, ", not in DB or WK yet!");
return; // equivalent to continue
}

Expand Down Expand Up @@ -131,7 +171,8 @@ function NiaiDB()

let result = Object.values(similar_kanji);

result.sort((a,b) => 2*Math.sign(b.score - a.score) +
result.sort((a,b) => a.locked - b.locked
|| 2*Math.sign(b.score - a.score) +
a.kan.localeCompare(b.kan))
.splice(19);

Expand All @@ -141,9 +182,9 @@ function NiaiDB()

// Use the WK Open Framework to replace the offine DB of Niai
// #########################################################################
WK_Niai.prototype.update_wk_cache = async function(similar_list)
WK_Niai.prototype.update_wk_cache = function(similar_list)
{
let index = await this.ndb.wkof_items;
let index = this.ndb.wkof_items;
similar_list.forEach((sim_kanji) => {
let item = index[sim_kanji];
if (item) {
Expand Down
2 changes: 1 addition & 1 deletion wanikani-similar-kanji/wk_niai.html.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@
}
);

if (!found && this.ndb.isKanjiInDB(new_kanji))
if (!found && (this.ndb.isKanjiInWK(new_kanji) || this.ndb.isKanjiInDB(new_kanji)))
this.override_db[kanji].push({"kan": new_kanji, "score": 1.0});

GM_setValue(`override_db`, JSON.stringify(this.override_db));
Expand Down
16 changes: 5 additions & 11 deletions wanikani-similar-kanji/wk_niai.main.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,17 +197,12 @@ function initializeCustomIcons()
if (this.settings.use_alt)
use_sources = [...this.settings.alt_sources, ...use_sources];

const similar_list = [kanji,
...this.ndb.getSimilar(kanji,
this.settings.user_level,
use_sources,
this.settings.min_score)];
const similar_list = [kanji,...this.ndb.getSimilar(kanji,this.settings.user_level,use_sources,this.settings.min_score)];
let char_list = [];

similar_list.forEach(
function(sim_kanji, i)
{
if (!this.ndb.isKanjiInDB(sim_kanji))
if (!this.ndb.isKanjiInDB(sim_kanji) && !this.ndb.isKanjiInWK(sim_kanji))
return;

const sim_info = this.ndb.getInfo(sim_kanji);
Expand Down Expand Up @@ -272,7 +267,7 @@ function initializeCustomIcons()
// #########################################################################

// #########################################################################
WK_Niai.prototype.init = function()
WK_Niai.prototype.init = async function()
{
GM_addStyle(GM_getResourceText(`niai_style`)
.replace(/\.wk_namespace/g, `#niai_section`));
Expand Down Expand Up @@ -301,7 +296,7 @@ function initializeCustomIcons()
} :
function() {};

this.ndb.init(this.override_db);
await this.ndb.init(this.override_db);

this.log(`The script element is:`, GM_info);
this.log("The override db is", this.override_db);
Expand Down Expand Up @@ -352,8 +347,7 @@ let promise = typeof wkof !== `undefined` ? (wkof.include(`Jquery, Apiv2`), wkof
promise.then(() => {
const wk_niai = new WK_Niai();

wk_niai.init();
wk_niai.run();
wk_niai.init().then(() => wk_niai.run());
});
// #############################################################################
// #############################################################################