Wanikani: Level Duration 2

Displays the number of days you have spent on the current level.

当前为 2019-05-24 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Wanikani: Level Duration 2
// @namespace    Wanikani: Level Duration
// @version      2.5.3.
// @description  Displays the number of days you have spent on the current level.
// @author       Kumirei
// @include      https://www.wanikani.com*
// @grant        none
// ==/UserScript==

(function() {
		//check that the Wanikani Framework is installed
		var script_name = 'Level Duration';
		if (!window.wkof) {
				if (confirm(script_name+' requires Wanikani Open Framework.\nDo you want to be forwarded to the installation instructions?'))
						window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549';
				return;
		}
		//if it's installed then do the stuffs
		else {
				var date;

				// Include the Menu module, and wait for it to be ready.
				wkof.include('Menu,Settings');
				wkof.ready('Menu,Settings')
						.then(load_settings)
						.then(install_menu)
				wkof.include('Apiv2');
				wkof.ready('Apiv2').then(fetch_data);
		}

		//fetches and processes the level's unlock date
		function fetch_data(data) {
				wkof.Apiv2.fetch_endpoint('/level_progressions').then(function(data) {
						date = data.data[data.total_count-1].data.unlocked_at;
						var days_passed = (Date.now() - Date.parse(date))/(1000*60*60*24);

						$('head').append('<style>' +
										 '    .global-header {padding-bottom: 3px;}'+
										 '    .level-duration {' +
										 '        color: #999 !important;' +
										 '        text-shadow: 0 1px 0 #ffffff;' +
										 '        margin-top: -7px;' +
										 '        font-size: 14px;' +
										 '    }' +
										 '    .level-duration span {'+
										 '        display: inline-block;'+
										 '        margin: 0 50%;'+
										 '        transform: translateX(-50%);'+
										 '        white-space: nowrap;'+
										 '    }'+
										 '    .dropdown.levels > a, .nav li.reviews a {padding-bottom: 0 !important;}' +
										 '    .level-duration-old {' +
										 '        text-align: center;' +
										 '        color: #999 !important;' +
										 '        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;' +
										 '        text-shadow: 0 1px 0 #ffffff;' +
										 '        margin-top: -2px;' +
										 '    }' +
										 '</style>');
						update_display();
				});
		}

		// This function is called when the Menu module is ready to use.
		function install_menu() {
				var config = {
						name: 'level_duration_settings',
						submenu: 'Settings',
						title: 'Level Duration',
						on_click: open_settings
				};
				wkof.Menu.insert_script_link(config);
		}

		function load_settings() {
				var defaults = {
						displayHours: false
				};
				wkof.Settings.load('level_duration', defaults);
		}

		function open_settings(items) {
				var config = {
						script_id: 'level_duration',
						title: 'Level Duration',
						on_save: update_display,
						content: {
								displayHours: {
										type: 'checkbox',
										label: 'Display Hours',
										default: false,
										hover_tip: 'Include hours in the level-duration display.',
								},
						}
				}
				var dialog = new wkof.Settings(config);
				dialog.open();
		}

		function update_display() {
				var displayHours = wkof.settings.level_duration.displayHours;
				var days_passed = (Date.now() - Date.parse(date))/(1000*60*60*24);
				var level_text = " days on level";
				if (displayHours && days_passed < 100) {
						level_text = " days " + Math.floor((days_passed-Math.floor(days_passed))*24) + " hours";
						days_passed = Math.floor(days_passed);
				}
				else {
						if (days_passed > 10) days_passed = Math.round(days_passed);
						days_passed = Math.round(days_passed*10)/10;
						if (days_passed == 1 && level_text == " days on level") level_text = " day on level";
				}
				if (!$('.level-duration').length) {
						var elem = document.createElement('div');
						elem.className = "level-duration";
						if ($('.sitemap__section.sitemap--divider > h2')[0]) var target = ".sitemap .sitemap__section:first-child"; // New header
						else {// Old header
								target = ".dropdown.levels";
								elem.className = "level-duration-old";
						}
						elem.innerHTML = '<span>'+ days_passed + level_text +'</span>';
						$(target)[0].append(elem);
				}
				else {
						$('.level-duration')[0].innerText = days_passed + level_text;
				}
		}
})();