WK Lesson Items Tooltip

Displays number of items in lessons queue (sorting by level and type)

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         WK Lesson Items Tooltip
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Displays number of items in lessons queue (sorting by level and type)
// @author       Richard J. Sové
// @include      https://www.wanikani.com/dashboard
// @include      https://www.wanikani.com/
// @grant        none
// ==/UserScript==


(function()
{
    'use strict';

    // User API Key
    var user_api_key = ''; // <- insert your API key here

    // Create Authorization Header
    var header = new Headers();
    header.append('Authorization','Bearer ' + user_api_key);

    // Get Lessons DOM
    var lessons = document.getElementsByClassName('lessons-and-reviews__lessons-button')[0];
    lessons.addEventListener("mouseover",toggle_tooltip);
    lessons.addEventListener("mouseout",toggle_tooltip);

    // Get Lessons Position
    var parent_rect = lessons.parentNode.getBoundingClientRect();
    var lessons_rect = lessons.getBoundingClientRect();
    var position_x = lessons_rect.x-parent_rect.x; // middle
    var position_y = parent_rect.height; // bottom

    // Tooltip Style
    var style = "<style>"+
	"table#lessons_tooltip_text td:nth-child(even) { text-align : right}"+
    "table#lessons_tooltip_text {margin-left : 25px}"+
    "</style>";
    document.head.insertAdjacentHTML("beforeend",style);

    // Tooltip HTML
    var tooltip_text = "";
    function tooltip_html()
    {
        var tooltip_html = "<div id=\"tooltip\" style=\"top: "+position_y+"px; left: "+position_x+"px; display: block;\">"+
        "<span class=\"arrow\">"+ tooltip_text +
        "</span>"+
        "</div>";
        return tooltip_html;
    }

    // Format
    function table(lvl,rad,kan,voc)
    {
        return "Level "+lvl+"<br><table id=lessons_tooltip_text><tr><td>Radical:</td><td>"+rad+
            "</td></tr><tr><td>Kanji:</td><td>"+kan+"</td><tr><td>Vocab:</td><td>"+voc+"</td></tr><table>";
    }

    // Tooltip Function
    function toggle_tooltip(event)
    {
        if (event.type == "mouseover")
        {
            // Display Tooltip
            lessons.insertAdjacentHTML("beforeend",tooltip_html());
        }
        else if (event.type == "mouseout")
        {
            // Hide Tooltip
            lessons.removeChild(lessons.childNodes[lessons.childNodes.length-1]);
        }
    }

    // HTTP Requests
    var url_summary_info = 'https://api.wanikani.com/v2/summary';
    var url_user_info = 'https://api.wanikani.com/v2/user';
    var url_wk_items = 'https://api.wanikani.com/v2/assignments?srs_stages=0&unlocked=true&levels=';

    // Temp Defs
    var current_level = 26;

    // Request Summary Info to Get Number of Lessons
    var summary_info = new Request(url_summary_info,{headers : header});
    fetch(summary_info)
    .then(response => response.json())
    .then(data =>
    {
        // Get Number of Lessons
        var total_lessons = data.data.lessons.length;

        // Request User Info to Get Current Level
        var user_info = new Request(url_user_info,{headers : header});
        fetch(user_info)
        .then(response => response.json())
        .then(data =>
        {
            // Get Current Level
            var current_level = data.data.level;

            // Fetch API
            fetchAPI(current_level,0,0,0);

            // Fetch Function Definition
            function fetchAPI(level,radical_count,kanji_count,vocab_count)
            {
                var request = new Request(url_wk_items+level,{headers : header});
                fetch(request)
                .then(response => response.json())
                .then(data =>
                {
                    // Count Items in 'level'
                    var radical = 0, kanji = 0, vocab = 0;
                    for (var i = 0; i < data.data.length; i++)
                    {
                        var type = data.data[i].data.subject_type;
                        if (type == "radical")
                        {
                            radical++;
                        }
                        else if (type == "kanji")
                        {
                            kanji++;
                        }
                        else if (type == "vocabulary")
                        {
                            vocab++;
                        }
                    }
                    radical_count+=radical;
                    kanji_count+=kanji;
                    vocab_count+=vocab;

                    // Append to Tooltip
                    if (level==current_level || radical+kanji+vocab!=0)
                    {
                        tooltip_text += table(level,radical,kanji,vocab);
                    }

                    // Determine if All Lesson Items Have Been Counted
                    if ((radical_count+kanji_count+vocab_count) == total_lessons || level<2)
                    {
                        return;
                    }
                    else
                    {
                        level--;
                        fetchAPI(level,radical_count,kanji_count,vocab_count);
                    }
                });
            }
        });
     });
})();