Wanikani: Locked Count

Adds a locked count to the SRS breakdown on the dashboard

// ==UserScript==
// @name         Wanikani: Locked Count
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  Adds a locked count to the SRS breakdown on the dashboard
// @author       Kumirei
// @match        https://www.wanikani.com/
// @match        https://www.wanikani.com/dashboard
// @include      *preview.wanikani.com*
// @grant        none
// ==/UserScript==
/*jshint esversion: 8 */

;(function () {
    var wkof = window.wkof
    // Make sure WKOF is installed
    if (!wkof) {
        var response = confirm(
            '"Wanikani: Locked Count" requires WaniKani Open Framework.\n Click "OK" to be forwarded to installation instructions.',
        )
        if (response)
            window.location.href =
                'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549'
        return
    } else {
        wkof.include('ItemData')
        wkof.ready('ItemData').then(fetch_items).then(get_counts).then(display_counts)
    }

    function fetch_items() {
        const config = {
            wk_items: {
                options: {
                    assignments: true,
                },
                filters: {
                    srs: '-1, 0',
                },
            },
        }
        return wkof.ItemData.get_items(config)
    }

    function get_counts(items) {
        const srs = wkof.ItemData.get_index(items, 'srs_stage')
        const type = wkof.ItemData.get_index(items, 'item_type')
        const counts = {
            locked: items.length,
            radical: (type.radical || []).length,
            kanji: (type.kanji || []).length,
            vocabulary: (type.vocabulary || []).length,
        }
        return counts
    }

    function display_counts(counts) {
        console.log(counts)
        $('.srs-progress #burned').before(`
            <li id="locked">
                <span>${counts.locked}</span>
                <span class="title">Locked</span>
            <div class="popover srs right in">
                <div class="arrow"></div>
                <div class="popover-inner">
                    <h3 class="popover-title">
                        <div class="srs-logo initiate"></div>
                    </h3>
                    <div class="popover-content">
                        <ul>
                            <li>Radicals
                                <span>${counts.radical}</span>
                            </li>
                            <li>Kanji
                                <span>${counts.kanji}</span>
                            </li>
                            <li>Vocabulary
                                <span>${counts.vocabulary}</span>
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </li>
        `)
        $('.srs-progress #locked').hover(
            () => {
                $('.srs-progress #locked .popover').css('display', 'block')
            },
            () => {
                $('.srs-progress #locked .popover').css('display', 'none')
            },
        )
        $('.srs-progress #locked .popover').hover(() => {
            $('.srs-progress #locked .popover').css('display', 'none')
        })
        $('head').append(`<style id="WKLockedCount">
            .srs-progress {font-size: 0px;}
            .srs-progress > ul {display: flex;}
            .srs-progress > ul > li {
                font-size: 14px;
                width: 16.66% !important;
            }
            .srs-progress #apprentice {border-radius: 0;}
            .srs-progress #locked {
                position: relative;
                float: left;
                background-color: #aaa;
                order: -1;
                border-radius: 0 0 0 5px;
            }
            .srs-progress #locked .title {
                font-size: 14px;
                font-weight: normal;
                color: rgba(0,0,0,0.3);
                text-shadow: none;
                position: absolute;
                bottom: 0;
                left: 0;
                width: 100%;
                padding-bottom: 20px;
                margin-bottom: 2.5px;
            }
            .srs-progress #locked .popover {
                left: 100%;
                top: -46px;
            }
            .srs-progress #locked .popover ul li {
                width: 100%;
                border-radius: 0;
                text-align: left;
                text-shadow: none;
                box-shadow: none;
            }
            .srs-progress #locked .popover ul li span {
                font-size: 14px;
                font-weight: bold;
                text-shadow: none;
            }
        </style>`)
    }
})()