Wanikani: JLPT Percentages

Calculates the percentage of known kanji for each JLPT level

目前為 2019-02-09 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Wanikani: JLPT Percentages
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Calculates the percentage of known kanji for each JLPT level
// @author       Kumirei
// @match        https://www.wanikani.com/
// @match        https://www.wanikani.com/dashboard
// @license      MIT; http://opensource.org/licenses/MIT
// @grant        none
// ==/UserScript==

(function() {
		// Source: http://www.tanos.co.uk/jlpt/skills/kanji/
		var JLPT_kanji = {length:2211,日:5,一:5,国:5,人:5,年:5,大:5,十:5,二:5,本:5,中:5,長:5,出:5,三:5,時:5,行:5,見:5,月:5,後:5,前:5,生:5,五:5,間:5,上:5,東:5,四:5,今:5,金:5,九:5,入:5,学:5,高:5,円:5,子:5,外:5,八:5,六:5,下:5,来:5,気:5,小:5,七:5,山:5,話:5,女:5,北:5,午:5,百:5,書:5,先:5,名:5,川:5,千:5,水:5,半:5,男:5,西:5,電:5,校:5,語:5,土:5,木:5,聞:5,食:5,車:5,何:5,南:5,万:5,毎:5,白:5,天:5,母:5,火:5,右:5,読:5,友:5,左:5,休:5,父:5,雨:5,会:4,同:4,事:4,自:4,社:4,発:4,者:4,地:4,業:4,方:4,新:4,場:4,員:4,立:4,開:4,手:4,力:4,問:4,代:4,明:4,動:4,京:4,目:4,通:4,言:4,理:4,体:4,田:4,主:4,題:4,意:4,不:4,作:4,用:4,度:4,強:4,公:4,持:4,野:4,以:4,思:4,家:4,世:4,多:4,正:4,安:4,院:4,心:4,界:4,教:4,文:4,元:4,重:4,近:4,考:4,画:4,海:4,売:4,知:4,道:4,集:4,別:4,物:4,使:4,品:4,計:4,死:4,特:4,私:4,始:4,朝:4,運:4,終:4,台:4,広:4,住:4,真:4,有:4,口:4,少:4,町:4,料:4,工:4,建:4,空:4,急:4,止:4,送:4,切:4,転:4,研:4,足:4,究:4,楽:4,起:4,着:4,店:4,病:4,質:4,待:4,試:4,族:4,銀:4,早:4,映:4,親:4,験:4,英:4,医:4,仕:4,去:4,味:4,写:4,字:4,答:4,夜:4,音:4,注:4,帰:4,古:4,歌:4,買:4,悪:4,図:4,週:4,室:4,歩:4,風:4,紙:4,黒:4,花:4,春:4,赤:4,青:4,館:4,屋:4,色:4,走:4,秋:4,夏:4,習:4,駅:4,洋:4,旅:4,服:4,夕:4,借:4,曜:4,飲:4,肉:4,貸:4,堂:4,鳥:4,飯:4,勉:4,冬:4,昼:4,茶:4,弟:4,牛:4,魚:4,兄:4,犬:4,妹:4,姉:4,漢:4,政:3,議:3,民:3,連:3,対:3,部:3,合:3,市:3,内:3,相:3,定:3,回:3,選:3,米:3,実:3,関:3,決:3,全:3,表:3,戦:3,経:3,最:3,現:3,調:3,化:3,当:3,約:3,首:3,法:3,性:3,要:3,制:3,治:3,務:3,成:3,期:3,取:3,都:3,和:3,機:3,平:3,加:3,受:3,続:3,進:3,数:3,記:3,初:3,指:3,権:3,支:3,産:3,点:3,報:3,済:3,活:3,原:3,共:3,得:3,解:3,交:3,資:3,予:3,向:3,際:3,勝:3,面:3,告:3,反:3,判:3,認:3,参:3,利:3,組:3,信:3,在:3,件:3,側:3,任:3,引:3,求:3,所:3,次:3,昨:3,論:3,官:3,増:3,係:3,感:3,情:3,投:3,示:3,変:3,打:3,直:3,両:3,式:3,確:3,果:3,容:3,必:3,演:3,歳:3,争:3,談:3,能:3,位:3,置:3,流:3,格:3,疑:3,過:3,局:3,放:3,常:3,状:3,球:3,職:3,与:3,供:3,役:3,構:3,割:3,費:3,付:3,由:3,説:3,難:3,優:3,夫:3,収:3,断:3,石:3,違:3,消:3,神:3,番:3,規:3,術:3,備:3,宅:3,害:3,配:3,警:3,育:3,席:3,訪:3,乗:3,残:3,想:3,声:3,念:3,助:3,労:3,例:3,然:3,限:3,追:3,商:3,葉:3,伝:3,働:3,形:3,景:3,落:3,好:3,退:3,頭:3,負:3,渡:3,失:3,差:3,末:3,守:3,若:3,種:3,美:3,命:3,福:3,望:3,非:3,観:3,察:3,段:3,横:3,深:3,申:3,様:3,財:3,港:3,識:3,呼:3,達:3,良:3,候:3,程:3,満:3,敗:3,値:3,突:3,光:3,路:3,科:3,積:3,他:3,処:3,太:3,客:3,否:3,師:3,登:3,易:3,速:3,存:3,飛:3,殺:3,号:3,単:3,座:3,破:3,除:3,完:3,降:3,責:3,捕:3,危:3,給:3,苦:3,迎:3,園:3,具:3,辞:3,因:3,馬:3,愛:3,富:3,彼:3,未:3,舞:3,亡:3,冷:3,適:3,婦:3,寄:3,込:3,顔:3,類:3,余:3,王:3,返:3,妻:3,背:3,熱:3,宿:3,薬:3,険:3,頼:3,覚:3,船:3,途:3,許:3,抜:3,便:3,留:3,罪:3,努:3,精:3,散:3,静:3,婚:3,喜:3,浮:3,絶:3,幸:3,押:3,倒:3,等:3,老:3,曲:3,払:3,庭:3,徒:3,勤:3,遅:3,居:3,雑:3,招:3,困:3,欠:3,更:3,刻:3,賛:3,抱:3,犯:3,恐:3,息:3,遠:3,戻:3,願:3,絵:3,越:3,欲:3,痛:3,笑:3,互:3,束:3,似:3,列:3,探:3,逃:3,遊:3,迷:3,夢:3,君:3,閉:3,緒:3,折:3,草:3,暮:3,酒:3,悲:3,晴:3,掛:3,到:3,寝:3,暗:3,盗:3,吸:3,陽:3,御:3,歯:3,忘:3,雪:3,吹:3,娘:3,誤:3,洗:3,慣:3,礼:3,窓:3,昔:3,貧:3,怒:3,泳:3,祖:3,杯:3,疲:3,皆:3,鳴:3,腹:3,煙:3,眠:3,怖:3,耳:3,頂:3,箱:3,晩:3,寒:3,髪:3,忙:3,才:3,靴:3,恥:3,偶:3,偉:3,猫:3,幾:3,党:2,協:2,総:2,区:2,領:2,県:2,設:2,改:2,府:2,査:2,委:2,軍:2,団:2,各:2,島:2,革:2,村:2,勢:2,減:2,再:2,税:2,営:2,比:2,防:2,補:2,境:2,導:2,副:2,算:2,輸:2,述:2,線:2,農:2,州:2,武:2,象:2,域:2,額:2,欧:2,担:2,準:2,賞:2,辺:2,造:2,被:2,技:2,低:2,復:2,移:2,個:2,門:2,課:2,脳:2,極:2,含:2,蔵:2,量:2,型:2,況:2,針:2,専:2,谷:2,史:2,階:2,管:2,兵:2,接:2,細:2,効:2,丸:2,湾:2,録:2,省:2,旧:2,橋:2,岸:2,周:2,材:2,戸:2,央:2,券:2,編:2,捜:2,竹:2,超:2,並:2,療:2,採:2,森:2,競:2,介:2,根:2,販:2,歴:2,将:2,幅:2,般:2,貿:2,講:2,林:2,装:2,諸:2,劇:2,河:2,航:2,鉄:2,児:2,禁:2,印:2,逆:2,換:2,久:2,短:2,油:2,暴:2,輪:2,占:2,植:2,清:2,倍:2,均:2,億:2,圧:2,芸:2,署:2,伸:2,停:2,爆:2,陸:2,玉:2,波:2,帯:2,延:2,羽:2,固:2,則:2,乱:2,普:2,測:2,豊:2,厚:2,齢:2,囲:2,卒:2,略:2,承:2,順:2,岩:2,練:2,軽:2,了:2,庁:2,城:2,患:2,層:2,版:2,令:2,角:2,絡:2,損:2,募:2,裏:2,仏:2,績:2,築:2,貨:2,混:2,昇:2,池:2,血:2,温:2,季:2,星:2,永:2,著:2,誌:2,庫:2,刊:2,像:2,香:2,坂:2,底:2,布:2,寺:2,宇:2,巨:2,震:2,希:2,触:2,依:2,籍:2,汚:2,枚:2,複:2,郵:2,仲:2,栄:2,札:2,板:2,骨:2,傾:2,届:2,巻:2,燃:2,跡:2,包:2,駐:2,弱:2,紹:2,雇:2,替:2,預:2,焼:2,簡:2,章:2,臓:2,律:2,贈:2,照:2,薄:2,群:2,秒:2,奥:2,詰:2,双:2,刺:2,純:2,翌:2,快:2,片:2,敬:2,悩:2,泉:2,皮:2,漁:2,荒:2,貯:2,硬:2,埋:2,柱:2,祭:2,袋:2,筆:2,訓:2,浴:2,童:2,宝:2,封:2,胸:2,砂:2,塩:2,賢:2,腕:2,兆:2,床:2,毛:2,緑:2,尊:2,祝:2,柔:2,殿:2,濃:2,液:2,衣:2,肩:2,零:2,幼:2,荷:2,泊:2,黄:2,甘:2,臣:2,浅:2,掃:2,雲:2,掘:2,捨:2,軟:2,沈:2,凍:2,乳:2,恋:2,紅:2,郊:2,腰:2,炭:2,踊:2,冊:2,勇:2,械:2,菜:2,珍:2,卵:2,湖:2,喫:2,干:2,虫:2,刷:2,湯:2,溶:2,鉱:2,涙:2,匹:2,孫:2,鋭:2,枝:2,塗:2,軒:2,毒:2,叫:2,拝:2,氷:2,乾:2,棒:2,祈:2,拾:2,粉:2,糸:2,綿:2,汗:2,銅:2,湿:2,瓶:2,咲:2,召:2,缶:2,隻:2,脂:2,蒸:2,肌:2,耕:2,鈍:2,泥:2,隅:2,灯:2,辛:2,磨:2,麦:2,姓:2,筒:2,鼻:2,粒:2,詞:2,胃:2,畳:2,机:2,膚:2,濯:2,塔:2,沸:2,灰:2,菓:2,帽:2,枯:2,涼:2,舟:2,貝:2,符:2,憎:2,皿:2,肯:2,燥:2,畜:2,挟:2,曇:2,滴:2,伺:2,氏:1,統:1,保:1,第:1,結:1,派:1,案:1,策:1,基:1,価:1,提:1,挙:1,応:1,企:1,検:1,藤:1,沢:1,裁:1,証:1,援:1,施:1,井:1,護:1,展:1,態:1,鮮:1,視:1,条:1,幹:1,独:1,宮:1,率:1,衛:1,張:1,監:1,環:1,審:1,義:1,訴:1,株:1,姿:1,閣:1,衆:1,評:1,影:1,松:1,撃:1,佐:1,核:1,整:1,融:1,製:1,票:1,渉:1,響:1,推:1,請:1,器:1,士:1,討:1,攻:1,崎:1,督:1,授:1,催:1,及:1,憲:1,離:1,激:1,摘:1,系:1,批:1,郎:1,健:1,盟:1,従:1,修:1,隊:1,織:1,拡:1,故:1,振:1,弁:1,就:1,異:1,献:1,厳:1,維:1,浜:1,遺:1,塁:1,邦:1,素:1,遣:1,抗:1,模:1,雄:1,益:1,緊:1,標:1,宣:1,昭:1,廃:1,伊:1,江:1,僚:1,吉:1,盛:1,皇:1,臨:1,踏:1,壊:1,債:1,興:1,源:1,儀:1,創:1,障:1,継:1,筋:1,闘:1,葬:1,避:1,司:1,康:1,善:1,逮:1,迫:1,惑:1,崩:1,紀:1,聴:1,脱:1,級:1,博:1,締:1,救:1,執:1,房:1,撤:1,削:1,密:1,措:1,志:1,載:1,陣:1,我:1,為:1,抑:1,幕:1,染:1,奈:1,傷:1,択:1,秀:1,徴:1,弾:1,償:1,功:1,拠:1,秘:1,拒:1,刑:1,塚:1,致:1,繰:1,尾:1,描:1,鈴:1,盤:1,項:1,喪:1,伴:1,養:1,懸:1,街:1,契:1,掲:1,躍:1,棄:1,邸:1,縮:1,還:1,属:1,慮:1,枠:1,恵:1,露:1,沖:1,緩:1,節:1,需:1,射:1,購:1,揮:1,充:1,貢:1,鹿:1,却:1,端:1,賃:1,獲:1,郡:1,併:1,徹:1,貴:1,衝:1,焦:1,奪:1,災:1,浦:1,析:1,譲:1,称:1,納:1,樹:1,挑:1,誘:1,紛:1,至:1,宗:1,促:1,慎:1,控:1,智:1,握:1,宙:1,俊:1,銭:1,渋:1,銃:1,操:1,携:1,診:1,託:1,撮:1,誕:1,侵:1,括:1,謝:1,駆:1,透:1,津:1,壁:1,稲:1,仮:1,裂:1,敏:1,是:1,排:1,裕:1,堅:1,訳:1,芝:1,綱:1,典:1,賀:1,扱:1,顧:1,弘:1,看:1,訟:1,戒:1,祉:1,誉:1,歓:1,奏:1,勧:1,騒:1,閥:1,甲:1,縄:1,郷:1,揺:1,免:1,既:1,薦:1,隣:1,華:1,範:1,隠:1,徳:1,哲:1,杉:1,釈:1,己:1,妥:1,威:1,豪:1,熊:1,滞:1,微:1,隆:1,症:1,暫:1,忠:1,倉:1,彦:1,肝:1,喚:1,沿:1,妙:1,唱:1,阿:1,索:1,誠:1,襲:1,懇:1,俳:1,柄:1,驚:1,麻:1,李:1,浩:1,剤:1,瀬:1,趣:1,陥:1,斎:1,貫:1,仙:1,慰:1,序:1,旬:1,兼:1,聖:1,旨:1,即:1,柳:1,舎:1,偽:1,較:1,覇:1,詳:1,抵:1,脅:1,茂:1,犠:1,旗:1,距:1,雅:1,飾:1,網:1,竜:1,詩:1,繁:1,翼:1,潟:1,敵:1,魅:1,嫌:1,斉:1,敷:1,擁:1,圏:1,酸:1,罰:1,滅:1,礎:1,腐:1,脚:1,潮:1,梅:1,尽:1,僕:1,桜:1,滑:1,孤:1,炎:1,賠:1,句:1,鋼:1,頑:1,鎖:1,彩:1,摩:1,励:1,縦:1,輝:1,蓄:1,軸:1,巡:1,稼:1,瞬:1,砲:1,噴:1,誇:1,祥:1,牲:1,秩:1,帝:1,宏:1,唆:1,阻:1,泰:1,賄:1,撲:1,堀:1,菊:1,絞:1,縁:1,唯:1,膨:1,矢:1,耐:1,塾:1,漏:1,慶:1,猛:1,芳:1,懲:1,剣:1,彰:1,棋:1,丁:1,恒:1,揚:1,冒:1,之:1,倫:1,陳:1,憶:1,潜:1,梨:1,仁:1,克:1,岳:1,概:1,拘:1,墓:1,黙:1,須:1,偏:1,雰:1,遇:1,諮:1,狭:1,卓:1,亀:1,糧:1,簿:1,炉:1,牧:1,殊:1,殖:1,艦:1,輩:1,穴:1,奇:1,慢:1,鶴:1,謀:1,暖:1,昌:1,拍:1,朗:1,寛:1,覆:1,胞:1,泣:1,隔:1,浄:1,没:1,暇:1,肺:1,貞:1,靖:1,鑑:1,飼:1,陰:1,銘:1,随:1,烈:1,尋:1,稿:1,丹:1,啓:1,也:1,丘:1,棟:1,壌:1,漫:1,玄:1,粘:1,悟:1,舗:1,妊:1,熟:1,旭:1,恩:1,騰:1,往:1,豆:1,遂:1,狂:1,岐:1,陛:1,緯:1,培:1,衰:1,艇:1,屈:1,径:1,淡:1,抽:1,披:1,廷:1,錦:1,准:1,暑:1,磯:1,奨:1,浸:1,剰:1,胆:1,繊:1,駒:1,虚:1,霊:1,帳:1,悔:1,諭:1,惨:1,虐:1,翻:1,墜:1,沼:1,据:1,肥:1,徐:1,糖:1,搭:1,盾:1,脈:1,滝:1,軌:1,俵:1,妨:1,擦:1,鯨:1,荘:1,諾:1,雷:1,漂:1,懐:1,勘:1,栽:1,拐:1,駄:1,添:1,冠:1,斜:1,鏡:1,聡:1,浪:1,亜:1,覧:1,詐:1,壇:1,勲:1,魔:1,酬:1,紫:1,曙:1,紋:1,卸:1,奮:1,欄:1,逸:1,涯:1,拓:1,眼:1,獄:1,尚:1,彫:1,穏:1,顕:1,巧:1,矛:1,垣:1,欺:1,釣:1,萩:1,粛:1,栗:1,愚:1,嘉:1,遭:1,架:1,鬼:1,庶:1,稚:1,滋:1,幻:1,煮:1,姫:1,誓:1,把:1,践:1,呈:1,疎:1,仰:1,剛:1,疾:1,征:1,砕:1,謡:1,嫁:1,謙:1,后:1,嘆:1,菌:1,鎌:1,巣:1,頻:1,琴:1,班:1,棚:1,潔:1,酷:1,宰:1,廊:1,寂:1,辰:1,霞:1,伏:1,碁:1,俗:1,漠:1,邪:1,晶:1,墨:1,鎮:1,洞:1,履:1,劣:1,那:1,殴:1,娠:1,奉:1,憂:1,朴:1,亭:1,淳:1,怪:1,鳩:1,酔:1,惜:1,穫:1,佳:1,潤:1,悼:1,乏:1,該:1,赴:1,桑:1,桂:1,髄:1,虎:1,盆:1,晋:1,穂:1,壮:1,堤:1,飢:1,傍:1,疫:1,累:1,痴:1,搬:1,晃:1,癒:1,桐:1,寸:1,郭:1,尿:1,凶:1,吐:1,宴:1,鷹:1,賓:1,虜:1,陶:1,鐘:1,憾:1,猪:1,紘:1,磁:1,弥:1,昆:1,粗:1,訂:1,芽:1,庄:1,傘:1,敦:1,騎:1,寧:1,循:1,忍:1,怠:1,如:1,寮:1,祐:1,鵬:1,鉛:1,珠:1,凝:1,苗:1,獣:1,哀:1,跳:1,匠:1,垂:1,蛇:1,澄:1,縫:1,僧:1,眺:1,亘:1,呉:1,凡:1,憩:1,媛:1,溝:1,恭:1,刈:1,睡:1,錯:1,伯:1,笹:1,穀:1,陵:1,霧:1,魂:1,弊:1,妃:1,舶:1,餓:1,窮:1,掌:1,麗:1,綾:1,臭:1,悦:1,刃:1,縛:1,暦:1,宜:1,盲:1,粋:1,辱:1,毅:1,轄:1,猿:1,弦:1,稔:1,窒:1,炊:1,洪:1,摂:1,飽:1,冗:1,桃:1,狩:1,朱:1,渦:1,紳:1,枢:1,碑:1,鍛:1,刀:1,鼓:1,裸:1,猶:1,塊:1,旋:1,弓:1,幣:1,膜:1,扇:1,腸:1,槽:1,慈:1,楊:1,伐:1,駿:1,漬:1,糾:1,亮:1,墳:1,坪:1,紺:1,娯:1,椿:1,舌:1,羅:1,峡:1,俸:1,厘:1,峰:1,圭:1,醸:1,蓮:1,弔:1,乙:1,汁:1,尼:1,遍:1,衡:1,薫:1,猟:1,羊:1,款:1,閲:1,偵:1,喝:1,敢:1,胎:1,酵:1,憤:1,豚:1,遮:1,扉:1,硫:1,赦:1,窃:1,泡:1,瑞:1,又:1,慨:1,紡:1,恨:1,肪:1,扶:1,戯:1,伍:1,忌:1,濁:1,奔:1,斗:1,蘭:1,迅:1,肖:1,鉢:1,朽:1,殻:1,享:1,秦:1,茅:1,藩:1,沙:1,輔:1,媒:1,鶏:1,禅:1,嘱:1,胴:1,迭:1,挿:1,嵐:1,椎:1,絹:1,陪:1,剖:1,譜:1,郁:1,悠:1,淑:1,帆:1,暁:1,傑:1,楠:1,笛:1,玲:1,奴:1,錠:1,拳:1,翔:1,遷:1,拙:1,侍:1,尺:1,峠:1,篤:1,肇:1,渇:1,叔:1,雌:1,亨:1,堪:1,叙:1,酢:1,吟:1,逓:1,嶺:1,甚:1,喬:1,崇:1,漆:1,岬:1,癖:1,愉:1,寅:1,礁:1,乃:1,洲:1,屯:1,樺:1,槙:1,姻:1,巌:1,擬:1,塀:1,唇:1,睦:1,閑:1,胡:1,幽:1,峻:1,曹:1,詠:1,卑:1,侮:1,鋳:1,抹:1,尉:1,槻:1,隷:1,禍:1,蝶:1,酪:1,茎:1,帥:1,逝:1,汽:1,琢:1,匿:1,襟:1,蛍:1,蕉:1,寡:1,琉:1,痢:1,庸:1,朋:1,坑:1,藍:1,賊:1,搾:1,畔:1,遼:1,唄:1,孔:1,橘:1,漱:1,呂:1,拷:1,嬢:1,苑:1,巽:1,杜:1,渓:1,翁:1,廉:1,謹:1,瞳:1,湧:1,欣:1,窯:1,褒:1,醜:1,升:1,殉:1,煩:1,巴:1,禎:1,劾:1,堕:1,租:1,稜:1,桟:1,倭:1,婿:1,慕:1,斐:1,罷:1,矯:1,某:1,囚:1,魁:1,虹:1,鴻:1,泌:1,於:1,赳:1,漸:1,蚊:1,葵:1,厄:1,藻:1,禄:1,孟:1,嫡:1,尭:1,嚇:1,巳:1,凸:1,暢:1,韻:1,霜:1,硝:1,勅:1,芹:1,杏:1,棺:1,儒:1,鳳:1,馨:1,慧:1,愁:1,楼:1,彬:1,匡:1,眉:1,欽:1,薪:1,褐:1,賜:1,嵯:1,綜:1,繕:1,栓:1,翠:1,鮎:1,榛:1,凹:1,艶:1,惣:1,蔦:1,錬:1,隼:1,渚:1,衷:1,逐:1,斥:1,稀:1,芙:1,詔:1,皐:1,雛:1,惟:1,佑:1,耀:1,黛:1,渥:1,憧:1,宵:1,妄:1,惇:1,脩:1,甫:1,酌:1,蚕:1,嬉:1,蒼:1,暉:1,頒:1,只:1,肢:1,檀:1,凱:1,彗:1,謄:1,梓:1,丑:1,嗣:1,叶:1,汐:1,絢:1,朔:1,伽:1,畝:1,抄:1,爽:1,黎:1,惰:1,蛮:1,冴:1,旺:1,萌:1,偲:1,壱:1,瑠:1,允:1,侯:1,蒔:1,鯉:1,弧:1,遥:1,舜:1,瑛:1,附:1,彪:1,卯:1,但:1,綺:1,芋:1,茜:1,凌:1,皓:1,洸:1,毬:1,婆:1,緋:1,鯛:1,怜:1,邑:1,倣:1,碧:1,啄:1,穣:1,酉:1,悌:1,倹:1,柚:1,繭:1,亦:1,詢:1,采:1,紗:1,賦:1,眸:1,玖:1,弐:1,錘:1,諄:1,倖:1,痘:1,笙:1,侃:1,裟:1,洵:1,爾:1,耗:1,昴:1,銑:1,莞:1,伶:1,碩:1,宥:1,滉:1,晏:1,伎:1,朕:1,迪:1,綸:1,且:1,竣:1,晨:1,吏:1,燦:1,麿:1,頌:1,箇:1,楓:1,琳:1,梧:1,哉:1,澪:1,匁:1,晟:1,衿:1,凪:1,梢:1,丙:1,颯:1,茄:1,勺:1,恕:1,蕗:1,瑚:1,遵:1,瞭:1,燎:1,虞:1,柊:1,侑:1,謁:1,斤:1,嵩:1,捺:1,蓉:1,茉:1,袈:1,燿:1,誼:1,冶:1,栞:1,墾:1,勁:1,菖:1,旦:1,椋:1,叡:1,紬:1,胤:1,凜:1,亥:1,爵:1,脹:1,麟:1,莉:1,汰:1,瑶:1,瑳:1,耶:1,椰:1,絃:1,丞:1,璃:1,奎:1,塑:1,昂:1,柾:1,熙:1,菫:1,諒:1,鞠:1,崚:1,濫:1,捷:1}

		// Make sure WKOF is installed
		var wkof = window.wkof;
		if (!wkof) {
				var response = confirm('Wanikani: JLPT Percentages requires WaniKani Open Framework.\n Click "OK" to be forwarded to installation instructions.');
				if (response) window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549';
				return;
		}
		else {
				// Fetch progress storage
				var progress = localStorage.JLPTprogress;
				if (progress == null) progress = {1: {learned: 0, total: 1232}, 2: {learned: 0, total: 367}, 3: {learned: 0, total: 367}, 4: {learned: 0, total: 166}, 5: {learned: 0, total: 79}, last_level: 0, unlearned: {}};
				else progress = JSON.parse(progress);

				// Fetch lesson info then process it
				wkof.include('ItemData');
				wkof.include('Apiv2');
				wkof.ready('ItemData').then(function(){return wkof.ready('Apiv2');}).then(update_progress).then(calculate_percentages).then(display_data);
		}

		// Retreives lesson data
		function update_progress() {
				var promise = new Promise(function(resolve, reject){
						// Check on remaining lessons from previous levels
						var ids = [];
						for (var key in progress.unlearned) ids.push(key);
						wkof.Apiv2.fetch_endpoint('assignments', {filters: {subject_ids: ids}}).then((data)=>{
								var unlearned = {}
								for (key in data.data) {
										var id = data.data[key].data.subject_id;
										var JLPT_level = progress.unlearned[id];
										if (data.data[key].data.started_at != null) {
												progress[JLPT_level].learned++;
										}
										else unlearned[id] = JLPT_level;
								}
								progress.unlearned = unlearned;
						}).then(()=>{
								// Fetch new levels
								var current_level = wkof.user.level;
								if (progress.last_level != current_level) {
										var config = {
												wk_items: {
														options: {assignments: true, include_hidden: true},
														filters: {level: (progress.last_level+1)+'..'+current_level, item_type: 'kan'
																 }
												}
										};
										progress.last_level = current_level;
										return wkof.ItemData.get_items(config).then((data)=>{
												var unlearned_ids = {};
												for (var key in data) {
														var id = data[key].id;
														var character = data[key].data.characters;
														var assignment = data[key].assignments;
														var JLPT_level = JLPT_kanji[character];
														if (JLPT_level != undefined) {
																if (assignment != undefined) {
																		progress[JLPT_level].learned++;
																}
																else progress.unlearned[id] = JLPT_level;
														}
												}
												localStorage.JLPTprogress = JSON.stringify(progress)
												resolve();
										});
								}
								else resolve();
						});
				});
				return promise;
		}

		function calculate_percentages() {
				var percentages = {};
				for (var i=5; i>0; i--) {
						var learned = progress[i].learned;
						var total = progress[i].total;
						percentages[i] = Math.round(learned/total*100)+"%";
				}
				return percentages;
		}

		function display_data(percentages) {
				// Add css
				$('head').append('<style id="JLPT_progress">'+
								 '.JLPT_progress {'+
								 '    margin: 15px 0 15px;'+
								 '}'+
								 '.JLPT_progress > div {'+
								 '    border-radius: 3px;'+
								 '    background: #434343;'+
								 '    padding: 5px 0;'+
								 '}'+
								 '.JLPT_level {'+
								 '    display: inline-block;'+
								 '    width: 20%;'+
								 '    text-align: center;'+
								 '    color: rgb(240,240,240);'+
								 '}'+
								 '.JLPT_progress span {'+
								 '    display: inline;'+
								 '    font-size: 16px;'+
								 '    border-radius: 5px;'+
								 '}'+
								 '.JLPT_progress .level {'+
								 '    font-weight: bold;'+
								 '}'+
								 '</style>');
				if (is_dark_theme()) $('head').append('<style id="JLPT_progress_dark">'+
													  '.JLPT_progress {'+
													  '    box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.7), 2px 2px 2px rgba(0, 0, 0, 0.7);'+
													  '}'+
													  '.JLPT_progress > div {'+
													  '    background: #232629;'+
													  '}'+
													  '</style>');
				// Add elements
				var section = document.createElement('section');
				section.className = 'JLPT_progress';
				var list = document.createElement('div');
				for (var level=5; level>0; level--) {
						$(list).append('<div class="JLPT_level" title="'+progress[level].learned+' of '+progress[level].total+' learned"><span class="level">N'+level+' </span><span class="percent">'+percentages[level]+'</span></div>');
				}
				section.appendChild(list);
				$('.progression').before(section);
		}

		// Handy little function that rfindley wrote. Checks whether the theme is dark.
		function is_dark_theme() {
				// Grab the <html> background color, average the RGB.  If less than 50% bright, it's dark theme.
				return $('body').css('background-color').match(/\((.*)\)/)[1].split(',').slice(0,3).map(str => Number(str)).reduce((a, i) => a+i)/(255*3) < 0.5;
		}
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址