[Userscript] WaniKani Vocab Beyond

WaniKani Vocab Beyond

tl;dr: Click here to see an example of just how many more Japanese words Vocab Beyond can teach you!

Description

This WaniKani script lets you study much more vocabulary for each kanji than is included in WaniKani, by showing hiragana pronunciation, definitions, part of speech, and commonality indicators for vocabulary retrieved from Jim Breen’s WWWJDIC API.

It also lets you listen to native speaker pronunciations from Forvo for each vocabulary word (if you pay $24/year for a Forvo API key), and allows you to filter audio by Forvo username (and thus filter by regional dialects).

The Vocab Beyond section is rendered on kanji lessons, kanji reviews, and kanji pages.

Clicking on a kanji character in a word will open a new tab with the WaniKani page for that kanji.

Vocab Beyond will still show WWWJDIC vocab, even if you don’t configure it with a valid Forvo API key.

Requirements

Installation

  1. Install @rfindley 's WaniKani Open Framework according to these instructions.

  2. Install this script from Greasyfork at https://greasyfork.org/en/scripts/372737-wanikani-vocab-beyond

  3. (Optional) Configure Vocab Beyond with your Forvo API key.

    1. Sign up for a Forvo account at https://forvo.com/signup/
    2. Purchase a Fovo API key at https://api.forvo.com/plans-and-pricing/
    3. Copy your Forvo API key from https://api.forvo.com/account/
    4. Open the Vocab Beyond settings from the menu at the top right of your WaniKani dashboard:

    settings-accessed-from-dashboard
    5. Paste your API key into the field under the Audio settings tab:

    forvo-api-key-field

Settings

This section explains any settings options that aren’t entirely self-explanatory.

Audio Settings

Vocab Settings

Each non-profit tier Forvo API key is limited to 500 API requests per day. To avoid hitting your quota, you can limit the maximum number of WWWJDIC vocabulary words to query the Forvo API with, using vocab settings in this tab:

settings-2-vocab

Appearance Settings

settings-3-appearance

Show Vocab Beyond first

By default, Vocab Beyond is rendered in:

By checking Show Vocab Beyond first, the Vocab Beyond section will be rendered first, so you can see it as soon as possible:

Hide uncommon icon

If you have enabled the “Show uncommon vocab” checkbox in the Vocab settings tab, you’ll see orange circular icons beside uncommon vocabulary.

  • With the uncommon vocab indicator icon visible

    uncommon-vocab-indicator-shown

  • With the uncommon vocab indicator icon hidden

    uncommon-vocab-indicator-hidden

Support

Post a comment below or open a GitHub Issue at https://github.com/normful/wanikani-vocab-beyond

Credits

Thanks rfindley and axetroy for the following projects that this script heavily relies on:

13 Likes

Hey! looks amazing thank you for doing this

1 Like

Hey Normful, I wanted to thank you for this script, it looks exactly like what I was looking for.

Unfortunately it doesn’t seem to work during reviews though, only on kanji pages.
I can access the settings from the dashboard and even from the little icon on the top left corner during reviews, but no matter what settings I choose I never see any word examples showing up.
Is this a common bug (if it is)? Any idea on how to fix it? If it helps I’m on Chrome and this is the list of installed scripts (not all enabled as you can see):

Thanks in advance!

Hey @niu! Thanks for reporting this bug. I was able to reproduce this bug and have published an update with a fix (version 0.6.0). Let me know if that fixes things for you.

Bug details: In the scenario where a user does not specify a Forvo API key, Vocab Beyond was not being rendered on (at least) kanji review pages.

Aside: For reviews, Vocab Beyond was designed to only be shown on a review page for a kanji, and not when reviewing radicals nor vocabulary.

Hi @normful, thanks for the help.
Unfortunately it still doesn’t work for me. I can see the vocabulary on kanji pages, but not during kanji reviews. I have version 0.6.0 installed and I’ve even reinstalled it to double check.
I tried to check/uncheck the “Show Vocab Beyond first” and “Hide uncommon icon” options in the “Appearance” tab, but there was no difference.
I wonder if I’m doing something wrong

Can you tell me what browser you’re using and what version of that browser you’re using?

Also, can you paste your browser console logs that are shown when you are doing a kanji review? If you’re using the Chrome browser, you can open the console by pressing Ctrl + Shift + J on Windows or by pressing Cmd + Option + J on a Mac.

I’m on Chrome, Version 74.0.3729.108 (Official Build) (64-bit)

This is the part that seems to cause problems:

Here’s the rest of the log:

content.js:53 BODY START Wed Apr 24 2019 14:19:19 GMT+0200 (Central European Summer Time) 19 745
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:19:19 GMT+0200 (Central European Summer Time) 19 745
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:19:19 GMT+0200 (Central European Summer Time) 19 745
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:19:19 GMT+0200 (Central European Summer Time) 19 745
userscript.html?id=8351aa20-6e16-4dfc-a02b-c09224f354f3:41 WaniKani Review Wrong Info Click: script load end
userscript.html?id=3b49ec08-5386-4b69-8bcd-b89501d55430:18 /// start of WK Review SRS Indicator
userscript.html?id=3b49ec08-5386-4b69-8bcd-b89501d55430:198 positioninlist is: 2
userscript.html?id=bd7c9d48-51d3-40d4-a6b9-ec08ea3e0bd9:75 WaniKani Review Item Delay: script load end
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:22 init() start
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (401) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 38 Voc 373
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:39 init() end
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:152 script load end
userscript.html?id=fa5670f1-d3a5-4d32-8555-e5ee241b08f5:37 WKO: loaded
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=d4267827-988a-4dcf-a8b4-bad05998c3a9:143 prepend
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:61 reorder() start
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:74 current item: [object Object]
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:81 Object
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:88 Items removed from ActiveQueue: 9
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:111 Ordered ReviewQueue:
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc ç¾½
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 船体
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 必死
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 付ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 両者
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 海王星
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一代
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 四
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 六月
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 半
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 田
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 年上
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 首になる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 本当に
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 里
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 号
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 家
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 支店
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 中々
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc お礼
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大切
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 友人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 平気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 小学生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 点数
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 生活
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 方向
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 全米
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 中古
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 末
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 戸
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 社会
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 東口
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 平日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 未だ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 会話
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 黄色
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大役
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 見る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 見当たる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 四月
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 前回
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 不正
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 古い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 二月
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 毎朝
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 王子
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 名
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 生む
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一本気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 当てる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 五
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 弟
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 外交
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 十台
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 止まる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三角形
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 広い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 出る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 直す
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 先週
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 入社
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 名字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 用いる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 出所
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 手首
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一打
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 見方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 本来
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 車
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 生地
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 毛虫
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 人形
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜年来
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜札
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 四十
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 間もなく
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 力
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 死体
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 日記
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 金玉
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 近々
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 夏
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 電話
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 直行
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 未来
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 自由
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 九つ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 戸口
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 東方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 牛肉
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 西
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc この辺
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 国民
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 仕草
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 下手
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 心理学
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 回る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 年下
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 年中
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 時代
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 十
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 回す
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 考古学
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 文化
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 数年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 同日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 小皿
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一回
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 全力
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 次々
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 下
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 助ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 近日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 欠点
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 毎年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 下げる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 丸い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 思う
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 平安
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 近年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc お前
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 仕方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大学生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 公社
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大学
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一つ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 安い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 長い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 金魚
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 音
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 会う
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 投げる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 人間
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 草
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 入れる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜氏
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 組
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 化ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大いに
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 休止
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 男の子
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 向く
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 活用
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 毛
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 申し申し
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 茶色
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 町民
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 必ず
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 高校
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 長さ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 社長
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 明るい
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 角
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 来月
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 東京
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 二人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 明日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 火
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 点ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 外来
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三つ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 白
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 仕方がない
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 早い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 写る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 学者
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 助力
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 声
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 引き分け
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc お姉さん
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 空間
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 出来上がる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 左右
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 役に立つ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 作家
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 口
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜号室
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大きい
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 目玉
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 交通
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 有る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 行き
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc フランス人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 玉
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 万人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 水色
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 本社
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 生える
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 元気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 年次
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 代える
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 絵文字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大作
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 活用形
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 外れ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 正直
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 辺り
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 数える
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 氏名
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一万
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜室
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 少し
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 二十日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 主人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 後で
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 半分
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大体
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 九
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 作者
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 人気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 会社
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 地中海
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 出口
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 安心
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 近く
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 言い方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 休み
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 両手
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 太字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 中
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 色
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 七日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 不明
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 図
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 対外
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜道
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 多い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 元
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 太る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三世
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 本当
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 教える
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 二百
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 以上
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 空
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 失う
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 学ぶ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 電子
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 体内
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 有名
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc å½¢
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 少年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 中東
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 両方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 決める
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 天気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 先回り
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 見分ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 紙
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 国王
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 高い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 切る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 強い
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 三人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 船
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc çµµ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 二時半
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 考え方
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 丸ごと
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 車内
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 歩く
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 他人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 右手
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 男
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 地上
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 医大
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 王女
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 南米
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 曲
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 虫
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc この前
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 年末
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 間
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 目次
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜円
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 今すぐ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 曲がる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 交じる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 皮肉
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 魚
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 天国
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 〜君
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 全て
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 小さい
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何千
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc å±±
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 思い出
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 知る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 代わる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 入る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 夕べ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 思い出す
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 妹
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 下さい
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 州
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 店
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 作文
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 会
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 先日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 北
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 活気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何時
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一気
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 行う
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 工作
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 教室
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 後ろ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 早く
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc é³¥
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 出血
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 毛糸
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 通る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 人口
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 一文字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 交わる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 住人
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 心身
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 今日
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 光
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 文字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 全く
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 小文字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 週末
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 兄弟
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大きく
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 電車
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 入学
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 自分
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc お父さん
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 何回
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 女の子
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 道
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 名曲
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 午前
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 月光
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc ç±³
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 助言
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 子牛
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 竹の子
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 工学者
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 本州
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 風
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 近づく
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 全国
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 同じ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 走り回る
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 下がる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 場所
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 失礼
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 向ける
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 羊毛
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大文字
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 弱点
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 言う
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 早々
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 学生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc お茶
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 決
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 午後
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 大空
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 外れる
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 足首
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 他
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 向こう
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 地図
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 来年
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 研究
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 以前
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 以外
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc 見直す
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:119 voc シアトル市
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 君
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 男
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 町
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 間
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 前
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 南
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 長
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 代
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 末
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 食
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 話
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 思
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 東
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan çµµ
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 所
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 里
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 生
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan å ´
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 半
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 知
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 写
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 時
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 去
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 耳
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 助
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 森
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 由
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 医
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 組
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:117 kan 画
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:126 reorder() end
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:132 ReviewQueue (412) ActiveQueue (10)
userscript.html?id=5b1911f2-a8ba-4593-a5f5-a104469d61b8:142 Rad 0 Kan 39 Voc 383
userscript.html?id=d4267827-988a-4dcf-a8b4-bad05998c3a9:143 prepend
session:1 Mixed Content: The page at 'https://www.wanikani.com/review/session' was loaded over HTTPS, but requested an insecure image 'http://classic.jisho.org/static/images/stroke_diagrams/26354_frames.png'. This content should also be served over HTTPS.
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
content.js:53 BODY START Wed Apr 24 2019 14:20:55 GMT+0200 (Central European Summer Time) 55 398
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:20:55 GMT+0200 (Central European Summer Time) 55 398
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:20:55 GMT+0200 (Central European Summer Time) 55 415
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:20:55 GMT+0200 (Central European Summer Time) 55 416
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
ConfettiMachine.resize @ userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164
(anonymous) @ userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194
dispatch @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2
g.handle @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2
T.e.___hb.e.___hb @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164 Uncaught ReferenceError: ConfettiRibbon is not defined
    at ConfettiMachine.resize (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164)
    at eval (userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194)
    at dispatch (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at g.handle (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2)
    at T.e.___hb.e.___hb (application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6)
ConfettiMachine.resize @ userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:164
(anonymous) @ userscript.html?id=e56a0d04-b1f2-4056-862e-a4865b3b1d67:194
dispatch @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2
g.handle @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:2
T.e.___hb.e.___hb @ application-d216dfa2bb9217503287f2fb18c38ae53bb058624c78c84c820c7485bf9bd733.js:6
content.js:53 BODY START Wed Apr 24 2019 14:22:29 GMT+0200 (Central European Summer Time) 29 24
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:22:29 GMT+0200 (Central European Summer Time) 29 25
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:22:29 GMT+0200 (Central European Summer Time) 29 44
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:22:29 GMT+0200 (Central European Summer Time) 29 45
content.js:53 BODY START Wed Apr 24 2019 14:25:11 GMT+0200 (Central European Summer Time) 11 832
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:25:11 GMT+0200 (Central European Summer Time) 11 833
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:25:11 GMT+0200 (Central European Summer Time) 11 848
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:25:11 GMT+0200 (Central European Summer Time) 11 848
content.js:53 BODY START Wed Apr 24 2019 14:25:22 GMT+0200 (Central European Summer Time) 22 108
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:25:22 GMT+0200 (Central European Summer Time) 22 109
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:25:22 GMT+0200 (Central European Summer Time) 22 129
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:25:22 GMT+0200 (Central European Summer Time) 22 129
content.js:53 BODY START Wed Apr 24 2019 14:28:27 GMT+0200 (Central European Summer Time) 27 688
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:28:27 GMT+0200 (Central European Summer Time) 27 689
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:28:27 GMT+0200 (Central European Summer Time) 27 706
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:28:27 GMT+0200 (Central European Summer Time) 27 706
content.js:53 BODY START Wed Apr 24 2019 14:29:16 GMT+0200 (Central European Summer Time) 16 739
content.js:55 BODY clearReplaceDivs END Wed Apr 24 2019 14:29:16 GMT+0200 (Central European Summer Time) 16 740
content.js:57 BODY markToReplace_childNodes END Wed Apr 24 2019 14:29:16 GMT+0200 (Central European Summer Time) 16 758
content.js:59 BODY createReplaceDivs END Wed Apr 24 2019 14:29:16 GMT+0200 (Central European Summer Time) 16 758

I just realized that had nothing to do with the Vocab Beyond script, that was the Super Burn Happy script. But even deactivating it didn’t help.
I managed to get to the specific tab of the Vocab Beyond script. It might just be the code though, not the log. Sorry I’m not a programmer, this is the first time I do this stuff.

(function anonymous(
) {
(function(context, fapply, console) {with (context) {(function(module) {"use strict";try {
fapply(module, context, [,,context.CDATA,context.uneval,context.define,context.module,context.exports,context,context.unsafeWindow,context.console,context.cloneInto,context.exportFunction,context.createObjectIn,context.GM,context.GM_info,context.GM_xmlhttpRequest]);} catch (e) {if (e.message && e.stack) {console.error("ERROR: Execution of script 'WaniKani Vocab Beyond' failed! " + e.message);console.log(e.stack.replace(/(\\(eval at )?<anonymous>[: ]?)|([\s.]*at Object.tms_[\s\S.]*)/g, ""));} else {console.error(e);}}
})(function tms_88f9fdf8_6445_4a7a_8215_1df31109edb2(context,fapply,CDATA,uneval,define,module,exports,window,unsafeWindow,console,cloneInto,exportFunction,createObjectIn,GM,GM_info,GM_xmlhttpRequest) {

// ==UserScript==
// @name              WaniKani Vocab Beyond
// @author            Norman Sue
// @description       Shows WWWJDIC vocab with Forvo audio for each kanji in lessons, reviews, and kanji pages. A paid Forvo API key is required for audio.
// @version           0.6.0
// @update            4/20/2019, 11:41:55 PM
// @grant             GM_xmlhttpRequest
// @include           https://www.wanikani.com/*
// @run-at            document-start
// @namespace         https://greasyfork.org/en/users/56591-normful
// @connect           nihongo.monash.edu
// @connect           apifree.forvo.com
// @license           The MIT License (MIT); http://opensource.org/licenses/MIT
// ==/UserScript==


/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var gm_http_1 = __webpack_require__(1);
var app_1 = __webpack_require__(2);
// Set `debug: true` to enable GM.xmlHttpRequest logging
gm_http_1.default.setConfig({ debug: false });
var app = new app_1.App();
app.init();


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else {}
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/**
 * Created by axetroy on 17-6-23.
 */
/// <reference path="./index.d.ts" />
var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
function isFunction(func) {
    return typeof func === 'function';
}
var Http = (function () {
    function Http(config) {
        if (config === void 0) { config = {}; }
        this.config = config;
    }
    Http.prototype.setConfig = function (config) {
        if (config === void 0) { config = {}; }
        this.config = __assign({}, this.config, config);
    };
    Http.prototype.create = function (config) {
        return new Http(config);
    };
    Http.prototype.request = function (method, url, data, header, config) {
        var _this = this;
        if (data === void 0) { data = ''; }
        if (header === void 0) { header = {}; }
        if (config === void 0) { config = {}; }
        return new Promise(function (resolve, reject) {
            var commonRequestConfig = {
                method: method,
                url: url,
                data: data,
                header: header
            };
            var GM_xmlhttpRequestConfig = __assign({}, commonRequestConfig, config, _this.config);
            var onreadystatechange = GM_xmlhttpRequestConfig.onreadystatechange, onerror = GM_xmlhttpRequestConfig.onerror, onabort = GM_xmlhttpRequestConfig.onabort, ontimeout = GM_xmlhttpRequestConfig.ontimeout;
            GM_xmlhttpRequestConfig.synchronous = true; // async
            GM_xmlhttpRequestConfig.onreadystatechange = function (response) {
                try {
                    isFunction(onreadystatechange) &&
                        onreadystatechange.call(this, response);
                }
                catch (err) {
                    reject(err);
                }
                if (response.readyState !== 4)
                    return;
                response.status >= 200 && response.status < 400
                    ? resolve(response)
                    : reject(response);
            };
            GM_xmlhttpRequestConfig.onerror = function (response) {
                try {
                    isFunction(onerror) && onerror.call(this, response);
                    reject(response);
                }
                catch (err) {
                    reject(err);
                }
            };
            GM_xmlhttpRequestConfig.onabort = function (response) {
                try {
                    isFunction(onabort) && onabort.call(this, response);
                    reject(response);
                }
                catch (err) {
                    reject(err);
                }
            };
            GM_xmlhttpRequestConfig.ontimeout = function (response) {
                try {
                    isFunction(ontimeout) && ontimeout.call(this, response);
                    reject(response);
                }
                catch (err) {
                    reject(err);
                }
            };
            if (_this.config.debug) {
                console.log("%c[" + commonRequestConfig.method.toUpperCase() + "]%c: " + commonRequestConfig.url, 'color: green', 'color: #000;text-style: under-line');
            }
            GM_xmlhttpRequest(__assign({}, GM_xmlhttpRequestConfig));
        });
    };
    Http.prototype.get = function (url, data, header, config) {
        return this.request('GET', url, data, header, config);
    };
    Http.prototype.post = function (url, data, header, config) {
        return this.request('POST', url, data, header, config);
    };
    Http.prototype.put = function (url, data, header, config) {
        return this.request('PUT', url, data, header, config);
    };
    Http.prototype['delete'] = function (url, data, header, config) {
        return this.request('DELETE', url, data, header, config);
    };
    Http.prototype.head = function (url, data, header, config) {
        return this.request('HEAD', url, data, header, config);
    };
    return Http;
}());
exports.Http = Http;
var timeout = 5000;
exports.timeout = timeout;
var http = new Http({ timeout: timeout });
exports.http = http;
exports.default = http;


/***/ })
/******/ ]);
});

/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var runAllWkofDependentCode_1 = __webpack_require__(3);
var App = /** @class */ (function () {
    function App() {
    }
    App.prototype.init = function () {
        addEventListener("DOMContentLoaded", this.onDomContentLoaded.bind(this));
    };
    App.prototype.onDomContentLoaded = function () {
        runAllWkofDependentCode_1.runAllWkofDependentCode();
    };
    return App;
}());
exports.App = App;


/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = __webpack_require__(4);
var appConstants_1 = __webpack_require__(5);
var insertInitialDOMElements_1 = __webpack_require__(6);
var waitForWkof_1 = __webpack_require__(21);
var wkofConstants_1 = __webpack_require__(24);
var Log = new logger_1.Logger();
function runAllWkofDependentCode() {
    waitForWkof_1.waitForWkof(appConstants_1.prettyScriptName, function (wkof) {
        wkof.include("Menu,Settings");
        wkof.ready("Menu,Settings").then(function () {
            wkof.Menu.insert_script_link({
                name: wkofConstants_1.MenuScriptLinkId,
                submenu: "Settings",
                title: "Vocab Beyond",
                on_click: onSettingsMenuLinkClick.bind(null, wkof)
            });
            wkof.Settings.load(wkofConstants_1.SettingsScriptId).then(function (settings) {
                insertInitialDOMElements_1.insertInitialDOMElements(settings);
            });
        });
    });
}
exports.runAllWkofDependentCode = runAllWkofDependentCode;
function onSettingsMenuLinkClick(wkof) {
    var dialog = new wkof.Settings(__assign({}, wkofConstants_1.WkofSettingsMenuConfig, { on_save: onSettingsSave.bind(null, wkof) }));
    dialog.open();
}
function onSettingsSave(wkof) {
    window.location.reload(false);
}


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* tslint:disable:no-console */
Object.defineProperty(exports, "__esModule", { value: true });
var logPrefix = "[WKVB] ";
var Logger = /** @class */ (function () {
    function Logger() {
        this.prefix = logPrefix;
        this.disableLogging = true; // Set to false for development
    }
    Logger.prototype.debug = function (msg) {
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        if (this.disableLogging) {
            return;
        }
        console.debug.apply(console, [this.prefix + msg].concat(args));
    };
    Logger.prototype.info = function (msg) {
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        if (this.disableLogging) {
            return;
        }
        console.log.apply(console, [this.prefix + msg].concat(args));
    };
    Logger.prototype.warn = function (msg) {
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        if (this.disableLogging) {
            return;
        }
        console.warn.apply(console, [this.prefix + msg].concat(args));
    };
    Logger.prototype.error = function (msg) {
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        if (this.disableLogging) {
            return;
        }
        console.error.apply(console, [this.prefix + msg].concat(args));
    };
    return Logger;
}());
exports.Logger = Logger;


/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.prettyScriptName = "WaniKani Vocab Beyond";


/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = __webpack_require__(4);
var determinePageType_1 = __webpack_require__(7);
var domConstants_1 = __webpack_require__(8);
var queryWwwjdicThenInsertParsedResults_1 = __webpack_require__(9);
var Log = new logger_1.Logger();
function insertInitialDOMElements(settings) {
    Log.debug("insertInitialDOMElements called");
    var pageType = determinePageType_1.determinePageType(document.URL);
    if (pageType === determinePageType_1.PageType.kanji && !settings.show_vocab_beyond_first) {
        insertPageListHeaderLink();
    }
    maybeLoadVocabDependingOnPage(pageType, settings);
}
exports.insertInitialDOMElements = insertInitialDOMElements;
var insertedPageListHeaderLink = false;
function insertPageListHeaderLink() {
    Log.debug("insertPageListHeaderLink called");
    if (insertedPageListHeaderLink) {
        return;
    }
    var header = $(".page-list-header");
    var listItem = $("<li>");
    var link = $("<a href='#" + domConstants_1.sectionHeaderID + "''>Vocab Beyond</a>");
    listItem.append(link);
    // Other scripts may have altered this list, so just insert this link at the end
    listItem.insertAfter(header.siblings().last());
    insertedPageListHeaderLink = true;
}
function maybeLoadVocabDependingOnPage(pageType, settings) {
    Log.debug("maybeLoadVocabDependingOnPage called");
    if (pageType === determinePageType_1.PageType.other) {
        Log.debug("maybeLoadVocabDependingOnPage returning early. PageType.other");
        return;
    }
    var optAttrs = { attributes: true };
    var optChildList = { childList: true };
    if (pageType === determinePageType_1.PageType.kanji) {
        Log.debug("maybeLoadVocabDependingOnPage PageType.kanji");
        createSectionAndRunQuery(settings);
    }
    else if (pageType === determinePageType_1.PageType.reviews) {
        Log.debug("maybeLoadVocabDependingOnPage PageType.reviews");
        var ob = new MutationObserver(function (mutationRecords) {
            mutationRecords.forEach(checkReviewMut.bind(null, settings));
        });
        // Observe the element that is mutated after clicking the
        // Item Info icon with the eye on it
        ob.observe(document.getElementById("item-info-col2"), optChildList);
    }
    else if (pageType === determinePageType_1.PageType.lessons) {
        Log.debug("maybeLoadVocabDependingOnPage PageType.lessons");
        var obs = new MutationObserver(function (mutationRecords) {
            if (isKanjiLesson()) {
                createSectionAndRunQuery(settings);
            }
            else {
                Log.debug("not doing anything because not kanji lesson");
            }
        });
        // Observe the 3 elements for the 3 lesson types, that are modified
        // when switching to each new lesson item
        obs.observe(document.getElementById("supplement-rad"), optAttrs);
        obs.observe(document.getElementById("supplement-kan"), optAttrs);
        obs.observe(document.getElementById("supplement-voc"), optAttrs);
    }
}
function createSectionAndRunQuery(settings) {
    var emptySection = maybeInsertEmptyVocabSectionOnce(settings);
    queryWwwjdicThenInsertParsedResults_1.queryWwwjdicThenInsertParsedResults(settings, emptySection);
}
function isKanjiLesson() {
    var mainInfo = document.getElementById("main-info");
    return mainInfo && mainInfo.className === "kanji";
}
var createdSectionForKanjiReview = false;
function checkReviewMut(settings, mutationRecord) {
    var isKanjiReview = $("#question-type")
        .text()
        .toLowerCase()
        .includes("kanji");
    if (mutationRecord.target.id.includes("item-info") &&
        isKanjiReview &&
        !createdSectionForKanjiReview) {
        createdSectionForKanjiReview = true;
        createSectionAndRunQuery(settings);
    }
}
function maybeInsertEmptyVocabSectionOnce(settings) {
    var pageType = determinePageType_1.determinePageType(document.URL);
    Log.debug("maybeInsertEmptyVocabSectionOnce pageType", pageType);
    if ($("#" + domConstants_1.sectionID).length === 0) {
        var sectionHTML = "<section>" +
            '<h2 id="' +
            domConstants_1.sectionHeaderID +
            '">Vocab Beyond</h2>' +
            '<div id="' +
            domConstants_1.sectionID +
            '"></div>' +
            "</section>";
        if (pageType === determinePageType_1.PageType.kanji) {
            Log.debug("maybeInsertEmptyVocabSectionOnce inserting for kanji page");
            var informationSection = $("#information");
            if (settings.show_vocab_beyond_first) {
                $(sectionHTML).insertAfter(informationSection);
            }
            else {
                var lastSection = informationSection.siblings().last();
                $(sectionHTML).insertAfter(lastSection);
            }
        }
        else if (pageType === determinePageType_1.PageType.reviews) {
            Log.debug("maybeInsertEmptyVocabSectionOnce inserting for reviews page");
            if (settings.show_vocab_beyond_first) {
                $("#item-info-col2").prepend(sectionHTML);
            }
            else {
                $("#item-info-col2").append(sectionHTML);
            }
        }
        else if (pageType === determinePageType_1.PageType.lessons) {
            Log.debug("maybeInsertEmptyVocabSectionOnce inserting for lessons page");
            if (settings.show_vocab_beyond_first) {
                $("#supplement-kan-breakdown .col1").append(sectionHTML);
            }
            else {
                $("#supplement-kan-related-vocabulary .col1").append(sectionHTML);
            }
        }
        else {
            Log.debug("maybeInsertEmptyVocabSectionOnce not inserting because page type does not match");
        }
    }
    return $("#" + domConstants_1.sectionID);
}


/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var PageType;
(function (PageType) {
    PageType[PageType["other"] = 0] = "other";
    PageType[PageType["radicals"] = 1] = "radicals";
    PageType[PageType["kanji"] = 2] = "kanji";
    PageType[PageType["vocabulary"] = 3] = "vocabulary";
    PageType[PageType["reviews"] = 4] = "reviews";
    PageType[PageType["reviewsSummary"] = 5] = "reviewsSummary";
    PageType[PageType["lessons"] = 6] = "lessons";
    PageType[PageType["lessonsReviews"] = 7] = "lessonsReviews";
})(PageType = exports.PageType || (exports.PageType = {}));
function determinePageType(url) {
    if (/\/radicals\/./.test(url)) {
        return PageType.radicals;
    }
    else if (/com\/kanji\/./.test(url)) {
        return PageType.kanji;
    }
    else if (/com\/vocabulary\/./.test(url)) {
        return PageType.vocabulary;
    }
    else if (/com\/review\/session/.test(url)) {
        return PageType.reviews;
    }
    else if (/com\/review/.test(url)) {
        return PageType.reviewsSummary;
    }
    else if (/com\/lesson\/./.test(url)) {
        return PageType.lessons;
    }
    // TODO: Figure out what URL lessonsReviews is for
    return PageType.other;
}
exports.determinePageType = determinePageType;


/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.sectionHeaderID = "wanikani_vocab_beyond_section_header";
exports.sectionID = "wanikani_vocab_beyond_section";


/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var gm_http_1 = __webpack_require__(1);
var logger_1 = __webpack_require__(4);
var determinePageType_1 = __webpack_require__(7);
var getKanji_1 = __webpack_require__(10);
var makeWwwjdicUrl_1 = __webpack_require__(11);
var parsing_1 = __webpack_require__(12);
var insertForvoAudioForWord_1 = __webpack_require__(19);
var Log = new logger_1.Logger();
var cachedSections = {};
var DISABLE_FORVO_DEFAULT = false;
function shouldDisableForvo(settings) {
    var retVal = DISABLE_FORVO_DEFAULT;
    if (!settings.forvo_api_key || settings.forvo_api_key === "") {
        retVal = true;
    }
    Log.debug("shouldDisableForvo", retVal);
    return retVal;
}
function queryWwwjdicThenInsertParsedResults(settings, emptySection) {
    Log.debug("queryWwwjdic");
    if (!emptySection.length) {
        Log.debug("queryWwwjdicThenInsertParsedResults returning early because emptySection has no elements");
        return;
    }
    var pageType = determinePageType_1.determinePageType(document.URL);
    var kanji = getKanji_1.getKanji(pageType);
    if (!kanji) {
        Log.error("queryWwwjdicThenInsertParsedResults could not get kanji");
        return;
    }
    if (cachedSections[kanji]) {
        Log.debug("queryWwwjdicThenInsertParsedResults reusing cachedSection and returning early");
        emptySection.replaceWith(cachedSections[kanji]);
        return;
    }
    var showMessage = function (message) {
        emptySection.html(message);
    };
    showMessage("Loading...");
    Log.debug("Querying WWWJDIC for ", kanji);
    var wwwJdicUrl = makeWwwjdicUrl_1.makeWwwjdicUrl(kanji, settings);
    gm_http_1.default
        .get(wwwJdicUrl)
        .then(function (res) {
        onWwwJdicResponse(res.responseText, emptySection, showMessage, settings, kanji);
    })
        .catch(function (err) {
        Log.error("WWWJDIC error: ", err);
        showMessage("Error contacting WWWJDIC server");
    });
}
exports.queryWwwjdicThenInsertParsedResults = queryWwwjdicThenInsertParsedResults;
var appendedForvoAttribution = false;
function onWwwJdicResponse(res, section, showMessage, settings, kanji) {
    Log.debug("onWwwJdicResponse raw res", res);
    var lines = parsing_1.extractLines(res);
    if (lines.length === 0) {
        showMessage(settings.show_all_wwwjdic_vocab
            ? "No vocabulary found."
            : "No common vocabulary found.");
        return;
    }
    // Clear loading text
    showMessage("");
    var renderables = parsing_1.parseLines(lines);
    var maybeOnlyCommonRenderables = renderables.filter(function (renderable) {
        if (settings.show_all_wwwjdic_vocab) {
            return true;
        }
        var isCommon = renderable.cm;
        return isCommon;
    });
    Log.debug("WWWJDIC maybeOnlyCommonRenderables.length", maybeOnlyCommonRenderables.length);
    var sliceEnd = maybeOnlyCommonRenderables.length;
    var limit = settings.max_wwwjdic_vocab_shown;
    if (limit > 0) {
        sliceEnd = limit;
    }
    var renderablesWithinLimit = maybeOnlyCommonRenderables.slice(0, sliceEnd);
    Log.debug("WWWJDIC renderablesWithinLimit.length", renderablesWithinLimit.length);
    Log.debug("WWWJDIC renderablesWithinLimit", renderablesWithinLimit);
    var disableForvo = shouldDisableForvo(settings);
    if (!disableForvo) {
        insertForvoAudioForWord_1.populateForvoUserWhitelist(settings);
    }
    var promises = renderablesWithinLimit.map(function (renderable) {
        var jpText = renderable.jp;
        var enPOSText = renderable.pos;
        var isCommon = renderable.cm;
        var definitions = renderable.en;
        var vocabForQueryingForvo = renderable.q;
        var listItem = $("<div>");
        listItem.css({ marginBottom: "35px" });
        var jpEl = $("<h3>");
        var _loop_1 = function (codePoint) {
            var span = $("<span>");
            span.text(codePoint);
            var codePointInt = codePoint.codePointAt(0);
            span.css("font-size", shouldRenderBig(codePointInt) ? "45px" : "11px");
            // Clicking on kanji opens page for it
            if (isKanjiCodePoint(codePointInt)) {
                span.on("click", function () {
                    window.open("https://www.wanikani.com/kanji/" + encodeURIComponent(codePoint), "_blank");
                });
                span.hover(function () {
                    $(this).css("cursor", "pointer");
                });
            }
            span.css({
                fontWeight: "normal",
                lineHeight: "45px"
            });
            jpEl.append(span);
        };
        // for...of iterates over Unicode code points
        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/@@iterator
        for (var _i = 0, jpText_1 = jpText; _i < jpText_1.length; _i++) {
            var codePoint = jpText_1[_i];
            _loop_1(codePoint);
        }
        if (!isCommon && !settings.hide_uncommon_indicator) {
            // uncommon vocab indicator
            var uc = $("<span>");
            uc.text("稀");
            uc.css({
                position: "absolute",
                display: "block",
                fontSize: "12px",
                height: "22px",
                width: "22px",
                top: "0",
                left: "-25px",
                margin: "0",
                padding: "0",
                boxSizing: "border-box",
                borderRadius: "50%",
                textAlign: "center",
                lineHeight: "22px",
                textShadow: "0.7px 0.2px 4.1px #FFF9DE",
                backgroundColor: "#E38B32",
                boxShadow: "0 -3px 0 rgba(0,0,0,0.2) inset, 0 0 10px rgba(255,255,255,0.5)",
                color: "#F41300",
                zIndex: "999"
            });
            jpEl.append(uc);
        }
        jpEl.css({
            position: "relative",
            marginTop: "20px",
            marginRight: "0",
            marginBottom: "15px",
            marginLeft: "0",
            padding: "0"
        });
        listItem.append(jpEl);
        var enPOSEl = $("<h3>");
        enPOSEl.text(enPOSText);
        enPOSEl.css({
            fontSize: "20px",
            fontWeight: "normal",
            lineHeight: "20px",
            padding: "0"
        });
        listItem.append(enPOSEl);
        definitions.forEach(function (definition) {
            var enDefnEl = $("<p>");
            enDefnEl.text(definition);
            enDefnEl.css({
                margin: "0",
                padding: "0"
            });
            listItem.append(enDefnEl);
        });
        section.append(listItem);
        if (!disableForvo) {
            return insertForvoAudioForWord_1.insertForvoAudioForWord(vocabForQueryingForvo, settings, listItem);
        }
        return Promise.resolve();
    });
    Promise.all(promises).then(function () {
        if (!disableForvo && !appendedForvoAttribution) {
            var forvoAttribution = $('<p><a href="https://forvo.com/" target="_blank">Pronunciations by Forvo</a></p>');
            section.append(forvoAttribution);
            appendedForvoAttribution = true;
        }
        var sectionDeepClone = section.clone(true, true);
        cachedSections[kanji] = sectionDeepClone;
    });
}
function isKanjiCodePoint(codePointInt) {
    return codePointInt >= 19968 && codePointInt <= 40879;
}
function shouldRenderBig(codePointInt) {
    // Determined from "\u3040".codePointAt(0)
    // All other hiragana, katakana, kanji have higher code points
    var firstHiraganaCodePointInt = 12352;
    if (codePointInt > firstHiraganaCodePointInt) {
        return true;
    }
    var punctuationToRenderBig = [
        11816,
        11817,
        12289,
        12293 // repeater
    ];
    if (punctuationToRenderBig.includes(codePointInt)) {
        return true;
    }
    return false;
}
exports.shouldRenderBig = shouldRenderBig;


/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var determinePageType_1 = __webpack_require__(7);
function getKanji(pageType) {
    switch (pageType) {
        case determinePageType_1.PageType.kanji:
            return document.title[document.title.length - 1];
        case determinePageType_1.PageType.reviews:
            var curItem = $.jStorage.get("currentItem");
            if ("kan" in curItem) {
                return curItem.kan.trim();
            }
            else {
                return null;
            }
        case determinePageType_1.PageType.lessons:
            var kanjiNode = $("#character");
            if (kanjiNode === undefined || kanjiNode === null) {
                return null;
            }
            return kanjiNode.text().trim();
    }
    return null;
}
exports.getKanji = getKanji;


/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
// API Docs: http://www.edrdg.org/wwwjdic/wwwjdicinf.html#backdoor_tag
function makeWwwjdicUrl(kanji, settings) {
    var encodedKanji = encodeURIComponent(kanji);
    var useEDICT = "1";
    var useBackdoorEntryRawOutput = "Z";
    var searchType;
    var dictionaryLookupWithUTF8LookupText = "U";
    searchType = dictionaryLookupWithUTF8LookupText;
    var keyType;
    var lookupKanjiInAnyPosition = "L";
    keyType = lookupKanjiInAnyPosition;
    var queryCode = useEDICT + useBackdoorEntryRawOutput + searchType + keyType;
    return ("http://nihongo.monash.edu/cgi-bin/wwwjdic?" + queryCode + encodedKanji);
}
exports.makeWwwjdicUrl = makeWwwjdicUrl;


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var vocab_header_1 = __webpack_require__(13);
var part_of_speech_1 = __webpack_require__(17);
var definition_line_1 = __webpack_require__(18);
function extractLines(rawResponseText) {
    if (rawResponseText.indexOf("No matches were found for this key") > -1) {
        return [];
    }
    var noHeader = rawResponseText.slice(rawResponseText.indexOf("<pre>") + 6);
    var preBody = noHeader.slice(0, noHeader.indexOf("</pre>") - 1);
    return preBody.split(/\r?\n/);
}
exports.extractLines = extractLines;
var commonP = /(.*)\/\(P\)$/;
function parseLines(lines) {
    return lines.map(function (untrimmed) {
        var line = untrimmed.trim();
        // Extract vocab header
        var sepIdx = line.indexOf(" /");
        var vocabHeader = line.substring(0, sepIdx);
        var rest = line.substring(sepIdx + 2);
        // Extract part of speech
        var firstRightParen = rest.indexOf(")");
        var partOfSpeech = rest.substring(1, firstRightParen);
        var englishAndMaybeCommonP = rest.substring(firstRightParen + 2, rest.length - 1);
        // Extract common indicator from end of line
        var commonMatches = englishAndMaybeCommonP.match(commonP);
        var isCommon;
        var english;
        if (commonMatches) {
            isCommon = true;
            english = commonMatches[1].replace(/\//g, "; ");
        }
        else {
            isCommon = false;
            english = englishAndMaybeCommonP.replace(/\//g, "; ");
        }
        var definitions = [];
        var thisDefn;
        if (english.indexOf("(1) ") === 0) {
            var nextDefNum = 2;
            var cur = 0; // index of start of current definition text
            var next = 0; // index of start of next definition text
            while (true) {
                next = english.indexOf("(" + nextDefNum + ")", cur);
                if (next > -1) {
                    thisDefn = english.substring(cur, next - 1);
                    definitions.push(definition_line_1.formatDefinitionLine(dottedListItem(thisDefn)));
                    nextDefNum++;
                    cur = next;
                }
                else {
                    thisDefn = english.substring(cur);
                    definitions.push(definition_line_1.formatDefinitionLine(dottedListItem(thisDefn)));
                    break;
                }
            }
        }
        else {
            definitions.push(definition_line_1.formatDefinitionLine(english));
        }
        return {
            jp: vocab_header_1.formatVocabHeader(vocabHeader),
            pos: part_of_speech_1.formatPartOfSpeech(partOfSpeech),
            cm: isCommon,
            en: definitions,
            q: extractVocab(vocabHeader)
        };
    });
}
exports.parseLines = parseLines;
var parenListItemRegExp = /\((\d+)\)(.*)/;
function dottedListItem(text) {
    var matches = text.match(parenListItemRegExp);
    if (!matches) {
        return text;
    }
    return matches[1] + "." + matches[2].replace(/;$/, "");
}
// 3040-309F: hiragana
// 30A0-30FF: katakana
// 4E00-9FAF: common and uncommon kanji
var jpRegex = /([\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF])+/;
function extractVocab(jpText) {
    var matches = jpText.match(jpRegex);
    return matches ? matches[0] : jpText;
}


/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var vocab_1 = __webpack_require__(14);
var pronunciation_1 = __webpack_require__(16);
var pronunciationSplitter = /(.*)\[(.+)\]$/;
function formatVocabHeader(text) {
    var m = text.match(pronunciationSplitter);
    if (!m) {
        return text;
    }
    return vocab_1.formatVocab(m[1].trim()) + pronunciation_1.formatPronunciation(m[2]);
}
exports.formatVocabHeader = formatVocabHeader;


/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var dict_codes_1 = __webpack_require__(15);
var dictCodeSplitter = /(.*)\(([a-z,A-Z-,0-9]+)\)$/;
function formatVocab(words) {
    return words
        .replace(/\(P\)/g, "(common)")
        .split(";")
        .map(function (word) {
        var trimmed = word.trim();
        var m = trimmed.trim().match(dictCodeSplitter);
        if (!m) {
            return trimmed;
        }
        return m[1] + "(" + (dict_codes_1.DICT_CODES[m[2]] || m[2]) + ")";
    })
        .join("、");
}
exports.formatVocab = formatVocab;


/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.DICT_CODES = {
    abbr: "abbreviation",
    "adj-f": "noun or verb acting prenominally",
    "adj-i": "i-adjective",
    "adj-kari": "'kari' adjective (archaic)",
    "adj-ku": "'ku' adjective (archaic)",
    "adj-na": "na-adjective",
    "adj-nari": "archaic/formal form of na-adjective",
    "adj-no": "no-adjective",
    "adj-pn": "pre-noun adjectival (rentaishi)",
    "adj-s": "special adjective",
    "adj-shiku": "'shiku' adjective (archaic)",
    "adj-t": "'taru' adjective",
    adv: "adverb",
    "adv-n": "adverbial noun",
    "adv-to": "adverb taking the と particle",
    an: "adjectival noun (keiyoudoushi)",
    anat: "anatomical term",
    arch: "archaism",
    archit: "architecture term",
    astron: "astronomy term",
    ateji: "ateji reading",
    aux: "auxiliary",
    "aux-adj": "auxiliary adjective",
    "aux-v": "auxiliary verb",
    baseb: "baseball term",
    biol: "biology term",
    bot: "botany term",
    Buddh: "Buddhist term",
    bus: "business term",
    c: "company name",
    chem: "chemistry term",
    chn: "children's language",
    col: "colloquialism",
    comp: "computer terminology",
    conj: "conjunction",
    ctr: "counter",
    derog: "derogatory word or expression",
    econ: "economics term",
    eK: "exclusively written in kanji",
    engr: "engineering term",
    exp: "expression",
    f: "female given name",
    fam: "familiar language",
    fem: "female term or language",
    finc: "finance term",
    food: "food term",
    g: "given name, as-yet not classified by sex",
    geol: "geology term",
    geom: "geometry term",
    gikun: "gikun (meaning) reading",
    gram: "grammatical term",
    h: "full (family plus given) name of a person",
    hob: "Hokkaido-ben",
    hon: "honorific language (sonkeigo)",
    hum: "humble language (kenjougo)",
    id: "idiomatic expression",
    ik: "irregular kana",
    iK: "irregular kanji",
    int: "interjection",
    io: "irregular okurigana",
    iv: "irregular verb",
    joc: "jocular, humorous term",
    ksb: "Kansai-ben",
    ktb: "Kantou-ben",
    kyb: "Kyoto-ben",
    kyu: "Kyuushuu-ben",
    law: "law term",
    ling: "linguistics terminology",
    m: "male given name",
    "m-sl": "manga slang",
    MA: "martial arts term",
    male: "male term or language",
    "male-sl": "male slang",
    math: "mathematics",
    med: "medical term",
    mil: "military",
    music: "music term",
    n: "noun",
    "n-adv": "adverbial noun",
    "n-pr": "proper noun",
    "n-pref": "prefix noun",
    "n-suf": "suffix noun",
    "n-t": "temporal noun",
    nab: "Nagano-ben",
    neg: "negative (in a negative sentence, or with negative verb)",
    "neg-v": "negative verb (when used with)",
    num: "numeral",
    o: "organization name",
    obs: "obsolete term",
    obsc: "obscure term",
    ok: "outdated kana",
    oK: "outdated kanji",
    "on-mim": "onomatopoeic or mimetic word",
    osb: "Osaka-ben",
    p: "place-name",
    physics: "physics terminology",
    pn: "pronoun",
    poet: "poetical term",
    pol: "polite language",
    pr: "product name",
    pref: "prefix",
    proverb: "proverb",
    prt: "particle",
    qv: "quod vide (see another entry)",
    rare: "rare",
    rkb: "Ryukyuan language",
    s: "surname",
    sens: "sensitive",
    Shinto: "Shinto term",
    sl: "slang",
    sports: "sports term",
    st: "station name",
    suf: "suffix",
    sumo: "sumo term",
    thb: "Touhoku-ben",
    tsb: "Tosa-ben",
    tsug: "Tsugaru-ben",
    u: "unclassified name",
    uk: "usually written using kana alone",
    uK: "usually written using kanji alone",
    "v-unspec": "verb unspecified",
    v1: "ichidan verb",
    "v2a-s": "nidan verb (archaic)",
    "v2b-k": "nidan verb (archaic)",
    "v2b-s": "nidan verb (archaic)",
    "v2d-k": "nidan verb (archaic)",
    "v2d-s": "nidan verb (archaic)",
    "v2g-k": "nidan verb (archaic)",
    "v2g-s": "nidan verb (archaic)",
    "v2h-k": "nidan verb (archaic)",
    "v2h-s": "nidan verb (archaic)",
    "v2k-k": "nidan verb (archaic)",
    "v2k-s": "nidan verb (archaic)",
    "v2m-k": "nidan verb (archaic)",
    "v2m-s": "nidan verb (archaic)",
    "v2n-s": "nidan verb (archaic)",
    "v2r-k": "nidan verb (archaic)",
    "v2r-s": "nidan verb (archaic)",
    "v2s-s": "nidan verb (archaic)",
    "v2t-k": "nidan verb (archaic)",
    "v2t-s": "nidan verb (archaic)",
    "v2w-s": "nidan verb (archaic)",
    "v2y-k": "nidan verb (archaic)",
    "v2y-s": "nidan verb (archaic)",
    "v2z-s": "nidan verb (archaic)",
    v4b: "yodan verb (archaic)",
    v4g: "yodan verb (archaic)",
    v4h: "yondan verb (archaic)",
    v4k: "yodan verb (archaic)",
    v4m: "yodan verb (archaic)",
    v4n: "yodan verb (archaic)",
    v4r: "yondan verb (archaic)",
    v4s: "yodan verb (archaic)",
    v4t: "yodan verb (archaic)",
    v5aru: "godan verb",
    v5b: "godan verb",
    v5g: "godan verb",
    v5k: "godan verb",
    "v5k-s": "godan verb",
    v5m: "godan verb",
    v5n: "godan verb",
    v5r: "godan verb",
    "v5r-i": "godan verb",
    v5s: "godan verb",
    v5t: "godan verb",
    v5u: "godan verb",
    "v5u-s": "godan verb",
    v5uru: "godan verb",
    v5z: "godan verb",
    vi: "intransitive verb",
    vk: "kuru verb",
    vn: "irregular nu verb",
    vr: "irregular ru verb, plain form ends with -ri",
    vs: "suru verb",
    "vs-c": "su verb - precursor to the modern suru",
    "vs-i": "suru verb - irregular",
    "vs-s": "suru verb - special class",
    vt: "transitive verb",
    vulg: "vulgar expression or word",
    vz: "ichidan verb - -zuru special class (alternative form of -jiru verbs)",
    X: "rude or X-rated term",
    zool: "zoology term"
};


/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* tslint:disable:no-console */
Object.defineProperty(exports, "__esModule", { value: true });
var dict_codes_1 = __webpack_require__(15);
// 3040-309F: hiragana
// 30A0-30FF: katakana
// 4E00-9FAF: common and uncommon kanji
var kanjiAndCodeSplitter = /^(.*)\(([\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]+)\)\(([a-zA-Z0-9,]+)\)$/;
var codeSplitter = /^(.*)\(([a-zA-Z0-9,]+)\)$/;
var kanjiSplitter = /^(.*)\(([\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]+)\)$/;
var kanjiAndParenthesizedCsvSplitter = /^([\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]+)\(([\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF,]+)\)/;
function formatPronunciation(pronunciation) {
    var parts = pronunciation.split(";");
    var mapped = parts
        .map(function (part) {
        var kcm = part.match(kanjiAndCodeSplitter);
        if (kcm) {
            return (kcm[1] +
                "⸨" +
                kcm[2] +
                "⸩" +
                "(" +
                (dict_codes_1.DICT_CODES[kcm[3]] || kcm[3]) +
                ")");
        }
        var kp = part.match(kanjiAndParenthesizedCsvSplitter);
        if (kp) {
            return kp[1] + "⸨" + kp[2].replace(",", "、") + "⸩";
        }
        var cm = part.match(codeSplitter);
        if (cm) {
            var code = cm[2];
            var expandedCode = code;
            if (code === "P") {
                expandedCode = "common";
            }
            else if (dict_codes_1.DICT_CODES[code]) {
                expandedCode = dict_codes_1.DICT_CODES[code];
            }
            return cm[1] + "(" + expandedCode + ")";
        }
        var km = part.match(kanjiSplitter);
        if (km) {
            return km[1] + "⸨" + km[2] + "⸩";
        }
        return part;
    })
        .join("、");
    return "(" + mapped + ")";
}
exports.formatPronunciation = formatPronunciation;


/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var dict_codes_1 = __webpack_require__(15);
function capitalize(text) {
    return text.charAt(0).toUpperCase() + text.slice(1);
}
function formatPartOfSpeech(commaDelimitedPos) {
    if (!commaDelimitedPos) {
        return "";
    }
    return (commaDelimitedPos.split(",") || [])
        .map(function (part) {
        var expandedPos = dict_codes_1.DICT_CODES[part];
        return expandedPos ? capitalize(expandedPos) : capitalize(part);
    })
        .join(", ");
}
exports.formatPartOfSpeech = formatPartOfSpeech;


/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var dict_codes_1 = __webpack_require__(15);
function formatDefinitionLine(line) {
    return replaceAbbreviations(replaceDictCodesAtEnd(replaceDictCodesAtStart(line)));
}
exports.formatDefinitionLine = formatDefinitionLine;
function replaceDictCodesAtStart(text) {
    // Both regexes account for an optional numbered list prefix (e.g. "1. ")
    var dictCodeInParens = /^([0-9]\.\s)?\(([a-z,A-Z,-,0-9]+)\)(.*)/;
    var dictCodeInBraces = /^([0-9]\.\s)?\{([a-z,A-Z,-,0-9]+)\}(.*)/;
    var parenMatches = text.match(dictCodeInParens);
    var braceMatches = text.match(dictCodeInBraces);
    if (parenMatches) {
        var listPrefix = parenMatches[1] ? parenMatches[1] : "";
        return listPrefix + replaceDictCode(parenMatches[2]) + parenMatches[3];
    }
    if (braceMatches) {
        var listPrefix = braceMatches[1] ? braceMatches[1] : "";
        return listPrefix + replaceDictCode(braceMatches[2]) + braceMatches[3];
    }
    return text;
}
function replaceDictCode(maybeDictCode) {
    var longForm = dict_codes_1.DICT_CODES[maybeDictCode];
    if (!longForm) {
        return "(" + maybeDictCode + ")";
    }
    return "[" + longForm + "]";
}
function replaceDictCodesAtEnd(text) {
    var dictCodesInParens = /(.*)\(([a-z,A-Z,0-9\,\-]+)\)$/;
    var m = text.match(dictCodesInParens);
    if (!m) {
        return text;
    }
    var longFormCodes = m[2]
        .split(",")
        .map(function (maybeDictCode) {
        var longForm = dict_codes_1.DICT_CODES[maybeDictCode];
        return longForm ? longForm : maybeDictCode;
    })
        .join(", ");
    return m[1] + "(" + longFormCodes + ")";
}
function replaceAbbreviations(text) {
    return text.replace(/usu\./g, "usually").replace(/esp\./g, "especially");
}


/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = __webpack_require__(4);
var getWordPronunciations_1 = __webpack_require__(20);
var Log = new logger_1.Logger();
var forvoUserWhitelist = [""];
var EMPTY_FORVO_USER_WHITELIST = JSON.stringify(forvoUserWhitelist);
function populateForvoUserWhitelist(settings) {
    if (typeof settings.forvo_username_whitelist_csv === "string") {
        forvoUserWhitelist = settings.forvo_username_whitelist_csv
            .trim()
            .replace(/ /g, "")
            .split(",");
    }
}
exports.populateForvoUserWhitelist = populateForvoUserWhitelist;
function insertForvoAudioForWord(jpVocabText, settings, destAppendee) {
    if (!destAppendee) {
        Log.error("destAppendee missing");
        return Promise.reject(new Error());
    }
    Log.debug("Querying Forvo for ", jpVocabText);
    return getWordPronunciations_1.getWordPronunciations(jpVocabText, settings)
        .then(function (responseText) {
        if (!responseText) {
            Log.warn("no Forvo responseText");
            return Promise.resolve();
        }
        return handleForvoSuccess(responseText, settings, destAppendee);
    })
        .catch(function (res) {
        Log.error("Forvo API error: ", res.statusText);
    });
}
exports.insertForvoAudioForWord = insertForvoAudioForWord;
function handleForvoSuccess(responseText, settings, destAppendee) {
    var parsedForvoJson;
    try {
        parsedForvoJson = JSON.parse(responseText);
    }
    catch (parseErr) {
        Log.error("JSON parseErr", parseErr);
    }
    var forvoItems = parsedForvoJson.items;
    if (!forvoItems || forvoItems.length === 0) {
        Log.warn("no forvoItems");
        return Promise.resolve();
    }
    var audioSection = $("<div>");
    audioSection.css("margin-top", "10px");
    forvoItems.forEach(function (forvoItem) {
        if (!forvoItem.pathmp3) {
            Log.error("!forvoItem.pathmp3");
            return;
        }
        if (!forvoItem.username) {
            Log.error("!forvoItem.username");
            return;
        }
        if (JSON.stringify(forvoUserWhitelist) !== EMPTY_FORVO_USER_WHITELIST &&
            !forvoUserWhitelist.includes(forvoItem.username)) {
            Log.debug("skipping pronunciation from " + forvoItem.username);
            return;
        }
        var audioContainer = $("<div>");
        audioContainer.css({
            fontSize: "12px",
            display: "inline-block",
            boxSizing: "border-box",
            width: "250px",
            marginTop: "0",
            marginRight: "5px",
            marginBottom: "5px",
            marginLeft: "0",
            padding: "0"
        });
        var audioEl = document.createElement("audio");
        audioEl.src = forvoItem.pathmp3;
        audioEl.controls = true;
        audioEl.preload = "none";
        audioEl.style.width = "250px";
        if (settings.show_forvo_usernames) {
            var usernameEl = $("<span>");
            usernameEl.text(forvoItem.username);
            usernameEl.css({
                fontSize: "12px",
                color: "#888888",
                margin: "0",
                padding: "0"
            });
            audioContainer.prepend(usernameEl);
        }
        audioContainer.append(audioEl);
        audioSection.append(audioContainer);
    });
    destAppendee.append(audioSection);
    return Promise.resolve();
}


/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var gm_http_1 = __webpack_require__(1);
var logger_1 = __webpack_require__(4);
var Log = new logger_1.Logger();
function getWordPronunciations(jpWord, settings) {
    if (!jpWord) {
        return Promise.reject(new Error("jpWord missing"));
    }
    var forvoApiKey = settings ? settings.forvo_api_key : null;
    if (!forvoApiKey) {
        return Promise.reject(new Error("Forvo api key missing"));
    }
    var forvoUrl = "https://apifree.forvo.com/key/" +
        forvoApiKey +
        "/format/json" +
        "/action/word-pronunciations" +
        "/word/" +
        encodeURIComponent(jpWord) +
        "/language/ja" +
        "/rate/" +
        String(settings.forvo_min_rating || 0) +
        "/country/JPN" +
        "/order/rate-desc";
    return gm_http_1.default
        .get(forvoUrl)
        .then(function (res) {
        return Promise.resolve(res.responseText);
    })
        .catch(function (err) {
        Log.error("Forvo error: ", err);
    });
}
exports.getWordPronunciations = getWordPronunciations;


/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var windowHelpers_1 = __webpack_require__(22);
var WKOF_POLL_INTERVAL_MS = 10;
var WKOF_WAIT_TIMEOUT_MS = 10000;
var WKOF_INSTALL_PAGE = "https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549";
var prompted = false;
function promptInstall(scriptName, overridingGetWindowFunc) {
    if (prompted) {
        return;
    }
    var win = (overridingGetWindowFunc || windowHelpers_1.getWindow)();
    prompted = true;
    if (win.confirm(scriptName +
        " requires the Wanikani Open Framework.\nDo you want to be forwarded to the installation instructions?")) {
        win.location.href = WKOF_INSTALL_PAGE;
    }
}
// waitForWkof calls onLoad with the global wkof object after wkof is loaded
function waitForWkof(scriptName, onLoad) {
    windowHelpers_1.waitUntilWindowPropLoads(windowHelpers_1.getWindow, "wkof", WKOF_POLL_INTERVAL_MS, WKOF_WAIT_TIMEOUT_MS, onLoad, promptInstall.bind(null, scriptName));
}
exports.waitForWkof = waitForWkof;


/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {
Object.defineProperty(exports, "__esModule", { value: true });
function getWindow() {
    return global;
}
exports.getWindow = getWindow;
function waitUntilWindowPropLoads(getWindowFunc, windowProp, pollingIntervalMs, maxWaitMs, onLoad, onTimeout) {
    var startMs = new Date().getTime();
    var intervalID = setInterval(function () {
        if (getWindowFunc()[windowProp]) {
            clearInterval(intervalID);
            onLoad(getWindowFunc()[windowProp]);
            return;
        }
        if (new Date().getTime() - startMs > maxWaitMs) {
            clearInterval(intervalID);
            onTimeout();
        }
    }, pollingIntervalMs);
}
exports.waitUntilWindowPropLoads = waitUntilWindowPropLoads;

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(23)))

/***/ }),
/* 23 */
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || Function("return this")() || (1, eval)("this");
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.SettingsScriptId = "wanikani_vocab_beyond_settings";
exports.MenuScriptLinkId = "wanikani_vocab_beyond_settings_link";
exports.WkofSettingsMenuConfig = {
    script_id: exports.SettingsScriptId,
    title: "WaniKani Vocab Beyond",
    autosave: true,
    background: false,
    content: {
        forvo_page_id: {
            type: "page",
            label: "Audio",
            hover_tip: "Settings for Forvo.com audio pronunciations",
            content: {
                forvo_instructions: {
                    type: "html",
                    html: "<p><a href='https://forvo.com' target='_blank'>Forvo.com</a> has an audio collection of words pronounced by native Japanese speakers.</p>" +
                        "<p>To enable Forvo pronunciations of vocabulary words:</p>" +
                        "<p>1. <a href='https://forvo.com/signup/' target='_blank'>Sign up for a Forvo.com account</a></p>" +
                        "<p>2. <a href='https://api.forvo.com/plans-and-pricing' target='_blank'>Purchase an API key here</a></p>" +
                        "<p>3. Enter your key below</p>"
                },
                forvo_api_key: {
                    type: "text",
                    default: "",
                    label: "Forvo API key",
                    full_width: true,
                    hover_tip: "Your API key from https://api.forvo.com/"
                },
                forvo_caveat: {
                    type: "html",
                    html: "<p>(WaniKani Vocab Beyond will work without a Forvo API key, but audio for vocabulary won't be shown.)</p>"
                },
                forvo_divider_id: {
                    type: "divider"
                },
                forvo_rating_instructions: {
                    type: "html",
                    html: "<p>Forvo pronunciations are voted on by users. Limit displayed audio to at least this overall rating. Zero is the default and recommended value.</p>"
                },
                forvo_min_rating: {
                    type: "number",
                    label: "Minimum Forvo rating",
                    hover_tip: "Only show Forvo pronunciations with at least this rating",
                    placeholder: "0",
                    default: 0,
                    full_width: false
                },
                forvo_divider_id_2: {
                    type: "divider"
                },
                forvo_whitelist_instructions: {
                    type: "html",
                    html: "<p>Comma-separated list of Forvo users whose pronunciations should be shown. If blank, pronunciations from all users are shown.</p>"
                },
                forvo_username_whitelist_csv: {
                    type: "text",
                    label: "Favorite Forvo users",
                    full_width: true,
                    placeholder: "Example: skent, usako_usagiclub, strawberrybrown",
                    default: "",
                    hover_tip: "A comma-separated list of Forvo usernames whose pronunciations should be shown"
                }
            }
        },
        vocab_page_id: {
            type: "page",
            label: "Vocab",
            hover_tip: "Settings for WWWJDIC vocabulary words",
            content: {
                vocab_instructions_1: {
                    type: "html",
                    html: "<p>By default, only common words are retrieved and displayed from <a href='http://nihongo.monash.edu/cgi-bin/wwwjdic' target='_blank'>WWWJDIC</a>. You can also retrieve uncommon words and phrases by checking the box below.</p>"
                },
                show_all_wwwjdic_vocab: {
                    type: "checkbox",
                    label: "Show uncommon vocab",
                    hover_tip: "Show both common and uncommon WWWJDIC vocab",
                    default: false,
                    full_width: false
                },
                vocab_instructions_2: {
                    type: "html",
                    html: "<p>Set the maximum number of WWWJDIC vocab to display per kanji below. 0 means unlimited. (Warning: showing WWWJDIC unlimited results may quickly exhaust your Forvo API key's daily request limits.)</p>"
                },
                max_wwwjdic_vocab_shown: {
                    type: "number",
                    label: "Maximum number of WWWJDIC vocab to display per kanji",
                    hover_tip: "Maximum number of WWWJDIC vocabulary to display per kanji",
                    full_width: true,
                    placeholder: "15",
                    default: 15,
                    min: 0
                }
            }
        },
        appearance_page_id: {
            type: "page",
            label: "Appearance",
            hover_tip: "Appearance settings",
            content: {
                appearance_instructions_1: {
                    type: "html",
                    html: "<p>Check to show Vocab Beyond at top of kanji pages and in the first tab of kanji reviews and lessons.</p>"
                },
                show_vocab_beyond_first: {
                    type: "checkbox",
                    label: "Show Vocab Beyond first",
                    hover_tip: "Show the Vocab Beyond section at the top of kanji pages and in the first tab of kanji reviews and kanji lessons",
                    default: false,
                    full_width: false
                },
                appearance_instructions_2: {
                    type: "html",
                    html: "<p>Check to show Forvo usernames above audio clips.</p>"
                },
                show_forvo_usernames: {
                    type: "checkbox",
                    label: "Show Forvo usernames",
                    hover_tip: "Show Forvo usernames above each audio clip",
                    default: false,
                    full_width: false
                },
                appearance_instructions_3: {
                    type: "html",
                    html: "<p>Check below to hide icon beside uncommon vocab.</p>"
                },
                hide_uncommon_indicator: {
                    type: "checkbox",
                    label: "Hide uncommon icon",
                    hover_tip: "Hide uncommon vocabulary icon",
                    default: false,
                    full_width: false
                }
            }
        }
    }
};


/***/ })
/******/ ]);
})}})(this.context, this.fapply, this.console);

})

Thanks for sending that info. Knowing your Chrome version is helpful, and I upgraded my Chrome to the same version as yours and will try and reproduce your problem when I have a kanji review again in a few days.

The other stuff unfortunately didn’t point to any obvious problem.

But there are a few more things we can try to fix the problem:

  1. Can you download and install this alternative version of this script I have at this link (the only difference is that this version just prints out more log lines for debugging) and then paste your Chrome’s console logs again when you are doing a kanji review ? After installing that version of the script, you can also type in [WKVB] into Filter field of Chrome’s Console tab, like so:
    05%20PM

  2. Can you tell me if Vocab Beyond loads for you on kanji lesson pages?

  1. I reinstalled the script from your link, but when I put [WKVB] in the filter field nothing comes out, either during reviews or kanji pages in the dashboard:

40

  1. The script does work during kanji lessons, but again nothing shows up in the console:

I tried both [WKVB] and WKVB. I also tried to uninstall the previous version and install the script again from scratch. No results.

Hello! I know it’s been a while, but I’m also running into the same issue that @niu was. I’m also not using a Forvo API key, and the vocab shows up in Kanji pages, but not in reviews (I haven’t checked lessons yet).

I see the following console output:

[WKVB] insertInitialDOMElements called
WaniKani Vocab Beyond.user.js:408 [WKVB] maybeLoadVocabDependingOnPage called
WaniKani Vocab Beyond.user.js:408 [WKVB] maybeLoadVocabDependingOnPage PageType.reviews
WaniKani Vocab Beyond.user.js:408 [WKVB] maybeInsertEmptyVocabSectionOnce pageType 4
WaniKani Vocab Beyond.user.js:408 [WKVB] maybeInsertEmptyVocabSectionOnce inserting for reviews page
WaniKani Vocab Beyond.user.js:408 [WKVB] queryWwwjdic
WaniKani Vocab Beyond.user.js:408 [WKVB] Querying WWWJDIC for  楽
WaniKani Vocab Beyond.user.js:283 [GET]: http://nihongo.monash.edu/cgi-bin/wwwjdic?1ZUL%E6%A5%BD
WaniKani Stroke Order.user.js:138 prepend
WaniKani Vocab Beyond.user.js:408 [WKVB] onWwwJdicResponse raw res <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><TITLE>WWWJDIC: Word Display</TITLE>
</HEAD><BODY>
<br>&nbsp;<br>
<pre>
楽 [がく] /(n) (1) (See 音楽) music/(2) (See 雅楽・ががく) old Japanese court music/gagaku/
楽 [らく] /(n,adj-na) (1) comfort/ease/relief/(at) peace/relaxation/(adj-na,n) (2) easy/simple/without trouble/without hardships/(3) (economically) comfortable/(n) (4) (abbr) (See 楽焼き) raku pottery/(P)/
愛楽 [あいぎょう] /(n,vs) (1) {Buddh} seeking after (Buddhist teachings, etc.)/wanting/desiring/(2) (arch) loving/
哀楽 [あいらく] /(n) grief and pleasure/
安楽 [あんらく] /(adj-na,n) ease/comfort/carefree/cosy/cozy/
衣装道楽 [いしょうどうらく] /(n) (yoji) love of fine clothing/weakness for fine clothes/being extravagant in clothing/
一楽 [いちらく] /(exp) (col) one of one's hobbies/
逸楽;佚楽 [いつらく] /(n,vs) pleasure/
芋田楽 [いもでんがく] /(n) (1) {food} taros flavoured with miso and grilled on skewers/(2) (col) parent-child incest/
印象主義音楽 [いんしょうしゅぎおんがく] /(n) musical impressionism/
鶯神楽 [うぐいすかぐら;ウグイスカグラ] /(n) (uk) Lonicera gracilipes (species of honeysuckle)/
右方高麗楽 [うほうこまがく] /(n) (See 高麗楽) old Japanese court music from the Nara period/
映画音楽 [えいがおんがく] /(n) film music/
悦楽 [えつらく] /(n,vs) enjoyment/pleasure/
越天楽 [えてんらく] /(n) Etenraku (Japanese court music composition)/
燕楽;宴楽 [えんがく] /(n) Ancient Chinese banquet music/
宴楽;燕楽 [えんらく] /(n) merrymaking/partying/
音楽 [おんがく] /(n) music/(P)/
女楽 [おんながく;じょがく] /(n) (1) music performed by women/(2) (じょがく only) women who performed court Bugaku music and dance/
女道楽 [おんなどうらく] /(n) womanizing/debauchery/philandering/
快楽 [かいらく(P);けらく] /(n,adj-no) pleasure/(P)/
偕楽 [かいらく] /(n) enjoying oneself with others/
神楽 [かぐら] /(n) ancient Shinto music and dancing/(P)/
管楽 [かんがく] /(n) (See 吹奏楽) wind music/
管弦楽(P);管絃楽 [かんげんがく] /(n) orchestral music/(P)/
歓楽 [かんらく] /(n) pleasure/merriment/
雅楽 [ががく] /(n) old Japanese court music/gagaku/(P)/
器楽 [きがく] /(n) instrumental music/(P)/
気が楽 [きがらく] /(exp) feeling good/feeling at ease/feeling easy/
喜怒哀楽 [きどあいらく] /(n) (yoji) human emotions (joy, anger, grief and pleasure)/(P)/
着道楽 [きどうらく] /(n) having a weakness for fine clothes/
宮廷音楽 [きゅうていおんがく] /(n) court music/
教会音楽 [きょうかいおんがく] /(n) church music/
享楽 [きょうらく] /(n,vs) enjoyment/pleasure/
曲独楽 [きょくごま] /(n) top/spinning tricks/
気楽 [きらく] /(adj-na,n) (1) carefree/comfortable/at ease/(2) easygoing/happy-go-lucky/(P)/
近代音楽 [きんだいおんがく] /(n) modern music/contemporary music/
伎楽 [ぎがく] /(n) ancient music/
百済楽 [くだらがく] /(n) music in the Korean court/
苦楽 [くらく] /(n) pleasure and pain/joys and sorrows/
クラシック音楽(P);クラッシック音楽 [クラシックおんがく(クラシック音楽)(P);クラッシックおんがく(クラッシック音楽)] /(n) classical music/(P)/
黒実鶯神楽 [くろみのうぐいすかぐら;クロミノウグイスカズラ] /(n) (uk) (See ハスカップ) blue honeysuckle (Lonicera caerulea var. emphyllocalyx)/
軍楽 [ぐんがく] /(n) military music/
軽音楽 [けいおんがく] /(n) light music/(P)/
下座音楽 [げざおんがく] /(n) musical accompaniment and sound effects (esp. in kabuki)/
弦楽(P);絃楽 [げんがく] /(n) music for strings/string music/(P)/
現代音楽 [げんだいおんがく] /(n) modern music/
交響楽 [こうきょうがく] /(n) symphony (orchestra)/(P)/
行楽 [こうらく] /(n) outing/excursion/pleasure trip/going on a picnic/(P)/
古楽 [こがく] /(n) ancient (early) music/
古典音楽 [こてんおんがく] /(n) classical music/
独楽 [こま] /(n) (uk) spinning top/(P)/
高麗楽 [こまがく] /(n) (See 右方高麗楽) old Japanese court music from the Nara period/
極楽 [ごくらく] /(n) (1) {Buddh} (See 阿弥陀・1) Sukhavati (Amitabha's Pure Land)/(2) paradise/(P)/
極楽極楽 [ごくらくごくらく] /(exp) (yoji) It's absolute heaven/It's sheer bliss/
娯楽 [ごらく] /(n,vs,adj-no) pleasure/amusement/(P)/
催馬楽 [さいばら] /(n) genre of Heian-period Japanese court music (primarily consisting of gagaku-styled folk melodies)/
左楽 [さがく] /(n) (abbr) (arch) (See 左方の楽) style of gagaku based on Tang-era Chinese music and ancient Indian song and dance/
里神楽 [さとかぐら] /(n) (See 御神楽) kagura performance held somewhere other than the imperial palace/
左方唐楽 [さほうとうがく] /(n) (obsc) (See 唐楽) style of gagaku based on Tang-era Chinese music and ancient Indian song and dance/
左方の楽 [さほうのがく] /(n) (arch) (See 唐楽) style of gagaku based on Tang-era Chinese music and ancient Indian song and dance/
猿楽;申楽;散楽 [さるがく;さるごう] /(n) (1) (arch) sarugaku (form of theatre popular in Japan during the 11th to 14th centuries)/(2) (さるがく only) (See 能楽) noh/(3) (さるごう only) fooling around/
散楽 [さんがく] /(n) (See 猿楽・1) form of ancient Chinese entertainment similar to a circus (brought to Japan during the Nara period)/
雑楽 [ざつがく] /(n) (arch) (ant: 正楽) popular music/
式楽 [しきがく] /(n) ceremonial music/
室内楽 [しつないがく] /(n) chamber music/(P)/
宗教音楽 [しゅうきょうおんがく] /(n) religious music/
勝楽 [しょうらく] /(n) Cakrasamvara/Samvara/Supreme Bliss (tantric Buddhist deity)/
食道楽;食い道楽 [しょくどうらく(食道楽);くいどうらく] /(n,adj-no) gourmand/epicure/
清楽 [しんがく] /(n) (See 清・しん) Qing-era Chinese music (popularized in Japan during the early 19th century)/
ジプシー音楽 [ジプシーおんがく] /(n) gypsy music/
寂滅為楽 [じゃくめついらく] /(exp) (yoji) freedom from one's desires (entry into Nirvana) is true bliss/
聚楽 [じゅらく] /(n) grey wall covering material (gray)/
吹奏楽 [すいそうがく] /(n) wind music/wind instrument music/
正楽 [せいがく] /(n) (See 雅楽) court music/gagaku/
聖楽 [せいがく] /(n) church music/sacred music/
声楽 [せいがく] /(n,adj-no) vocal music/(P)/
西洋音楽 [せいようおんがく] /(n) Western music/
千秋楽 [せんしゅうらく] /(n) (1) concluding festivities/concluding program/concluding programme/(2) {sumo} final day of a tournament/(P)/
先憂後楽 [せんゆうこうらく] /(n) (yoji) worrying before one's people worry, enjoying oneself only after one's people have enjoyed themselves (a precept to be observed by a ruler)/
絶対音楽 [ぜったいおんがく] /(n) absolute music/
奏楽 [そうがく] /(n,vs) musical performance/
俗楽 [ぞくがく] /(n) (ant: 雅楽) popular music/common people's music (as opposed to court music)/
大衆娯楽 [たいしゅうごらく] /(n) popular entertainment/mass entertainment/public amusement/
太平楽 [たいへいらく] /(n) happy-go-lucky/
耽楽 [たんらく] /(n,vs) (obsc) indulging in pleasure/giving oneself up to enjoyment/
太神楽;大神楽;代神楽 [だいかぐら;ダイカグラ] /(n) (1) grand kagura performance at Ise/(2) (See 雑芸・1) type of performance including the lion dance and juggling/(3) (uk) (See 椿・1) Camellia japonica 'Daikagura' (cultivar of Japanese camellia)/
太々神楽;太太神楽;大々神楽;大大神楽 [だいだいかぐら] /(n) (See 太神楽・1) grand kagura performance at Ise/
天竺楽 [てんじくがく] /(n) (arch) (See 雅楽) gagaku of Indian origin/
デジタル音楽 [デジタルおんがく] /(n) {comp} digital music/
田楽 [でんがく] /(n) (1) ritual music and dancing in shrines and temples/(2) rice dance/rice festival/(3) (abbr) {food} (See 田楽焼き) tofu (or fish, etc.) baked and coated with miso/(4) (abbr) (See 田楽返し) turning something in the manner one would use to cook dengaku-doufu on both sides/
電子音楽 [でんしおんがく] /(n,adj-no) electronic music/
伝統音楽 [でんとうおんがく] /(n) traditional music/
唐楽 [とうがく] /(n) (1) Tang-era Chinese music/(2) (See 雅楽,林邑楽) style of gagaku based on Tang-era Chinese music and ancient Indian song and dance/
道楽 [どうらく] /(n,adj-na) (1) pastime/hobby/favorite amusement/(n,vs,adj-na) (2) (derog) (See 道楽息子,道楽娘) dissipation/debauchery/loose living/prodigality/indulging in alcohol, women, gambling, etc./profligacy/
日本音楽 [にほんおんがく] /(n) Japanese music (esp. traditional Japanese music)/
能楽 [のうがく] /(n) noh play/(P)/
背景音楽 [はいけいおんがく] /(n) background music/
花独楽 [はなごま] /(n) cardboard spinning top, shaped and coloured like a flower/
ハワイアン音楽 [ハワイアンおんがく] /(n) Hawaiian music/
</pre>
</BODY>
</HTML>

WaniKani Vocab Beyond.user.js:408 [WKVB] WWWJDIC maybeOnlyCommonRenderables.length 21
WaniKani Vocab Beyond.user.js:408 [WKVB] WWWJDIC renderablesWithinLimit.length 15
WaniKani Vocab Beyond.user.js:408 [WKVB] WWWJDIC renderablesWithinLimit (15) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
WaniKani Vocab Beyond.user.js:408 [WKVB] shouldDisableForvo true

I’m on Chrome 80.0.3987.149