您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Are you level 60? Psssh! You don't have time for any of those silly progress bars! Get rid of 'em with this neat script!
// ==UserScript== // @name Wanikani 2 Cool 4 Progress // @namespace http://tampermonkey.net/ // @version 2.19.1 // @description Are you level 60? Psssh! You don't have time for any of those silly progress bars! Get rid of 'em with this neat script! // @author Pep95 // @require https://code.jquery.com/jquery-3.3.1.min.js#sha256=FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8= // @include https://www.wanikani.com/dashboard // @include https://www.wanikani.com/ // @grant none // @run-at document-end // ==/UserScript== /* jshint esversion: 6 */ (function() { 'use strict'; console.log('Function starts'); let dom = {}; dom.$ = window.jQuery.noConflict(true); if (!window.wkof) { let response = confirm('WaniKani Dashboard 2 Cool 4 Progress script 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; } const config = { wk_items: { options: { review_statistics: true, assignments: true, }, filter: { level: '1..+0', srs: '1..8' } } }; wkof.include('Menu,Settings,ItemData'); wkof.ready('Menu,Settings,ItemData').then(load_settings).then(install_menu).then(getItems).then(determineRatio).then(createBar); function getItems() { return wkof.ItemData.get_items(config); } function getSrsStage(assignments) { return assignments.srs_stage; } function determineRatio(items) { let itemsBySrs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].reduce((result, srs) => { result[srs] = { total: 0, leech: 0 }; return result; }, {}); items.forEach(function(item) { let srsStage = (item.assignments ? getSrsStage(item.assignments) : 0); itemsBySrs[srsStage].total++; }); return itemsBySrs; } function createBar(itemsBySrs) { //////////////////////////////////// //Calculate Widths And Margin-Left// //////////////////////////////////// let widths = new Array(); let widthsRem = new Array(); let widthsText = new Array(); let widthsTextRem = new Array(); let widthsDispText = new Array(); let widthsDispTextTitle = new Array(); var i; if (wkof.settings.total_progression.Subsection) { let AllItems = itemsBySrs[0].total + itemsBySrs[1].total + itemsBySrs[2].total + itemsBySrs[3].total + itemsBySrs[4].total + itemsBySrs[5].total + itemsBySrs[6].total + itemsBySrs[7].total + itemsBySrs[8].total + itemsBySrs[9].total; widths[0] = 100*itemsBySrs[0].total/AllItems; widthsText[0] = widths[0] + "%"; if (widths[0] > 3.8) { widthsDispText[0] = widths[0].toFixed(2) + "%"; } else { widthsDispText[0] = ""; } for (i = 1; i < 10; i++) { widths[i] = 100*itemsBySrs[i].total/AllItems; widthsText[i] = widths[i] + "%"; if (widths[i] > 3.8) { widthsDispText[i] = widths[i].toFixed(2) + "%"; } else { widthsDispText[i] = ""; } } if (wkof.settings.total_progression.ReverseOrder) { widthsRem[9] = 0; widthsTextRem[9] = widthsRem[9] + "%"; for (i = 1; i < 10; i++) { widthsRem[9-i] = widths[10-i] + widthsRem[10-i]; widthsTextRem[9-i] = widthsRem[9-i] + "%"; } } else { widthsRem[0] = 0; widthsTextRem[0] = widthsRem[0] + "%"; for (i = 1; i < 10; i++) { widthsRem[i] = widths[i-1] + widthsRem[i-1]; widthsTextRem[i] = widthsRem[i] + "%"; } } } else { let itemsBySrsNoSub = []; itemsBySrsNoSub[0] = itemsBySrs[0].total; itemsBySrsNoSub[1] = itemsBySrs[1].total + itemsBySrs[2].total + itemsBySrs[3].total + itemsBySrs[4].total; itemsBySrsNoSub[2] = itemsBySrs[5].total + itemsBySrs[6].total; itemsBySrsNoSub[3] = itemsBySrs[7].total; itemsBySrsNoSub[4] = itemsBySrs[8].total; itemsBySrsNoSub[5] = itemsBySrs[9].total; let AllItems = itemsBySrsNoSub[0] + itemsBySrsNoSub[1] + itemsBySrsNoSub[2] + itemsBySrsNoSub[3] + itemsBySrsNoSub[4] + itemsBySrsNoSub[5]; widths[0] = 100*itemsBySrsNoSub[0]/AllItems; widthsText[0] = widths[0] + "%"; if (widths[0] > 3.8) { widthsDispText[0] = widths[0].toFixed(2) + "%"; } else { widthsDispText[0] = ""; } for (i = 1; i < 6; i++) { widths[i] = 100*itemsBySrsNoSub[i]/AllItems; widthsText[i] = widths[i] + "%"; if (widths[i] > 3.8) { widthsDispText[i] = widths[i].toFixed(2) + "%"; } else { widthsDispText[i] = ""; } } if (wkof.settings.total_progression.ReverseOrder) { widthsRem[5] = 0; widthsTextRem[5] = widthsRem[5] + "%"; for (i = 1; i < 6; i++) { widthsRem[5-i] = widths[6-i] + widthsRem[6-i]; widthsTextRem[5-i] = widthsRem[5-i] + "%"; } } else { widthsRem[0] = 0; widthsTextRem[0] = widthsRem[0] + "%"; for (i = 1; i < 6; i++) { widthsRem[i] = widths[i-1] + widthsRem[i-1]; widthsTextRem[i] = widthsRem[i] + "%"; } } } ///////////////// //Hovertip Text// ///////////////// if (wkof.settings.total_progression.Subsection) { widthsDispTextTitle[0] = "Locked/Lessons: " + widths[0].toFixed(2) + "%"; widthsDispTextTitle[1] = "Apprentice 1: " + widths[1].toFixed(2) + "%"; widthsDispTextTitle[2] = "Apprentice 2: " + widths[2].toFixed(2) + "%"; widthsDispTextTitle[3] = "Apprentice 3: " + widths[3].toFixed(2) + "%"; widthsDispTextTitle[4] = "Apprentice 4: " + widths[4].toFixed(2) + "%"; widthsDispTextTitle[5] = "Guru 1: " + widths[5].toFixed(2) + "%"; widthsDispTextTitle[6] = "Guru 2: " + widths[6].toFixed(2) + "%"; widthsDispTextTitle[7] = "Master: " + widths[7].toFixed(2) + "%"; widthsDispTextTitle[8] = "Enlightened: " + widths[8].toFixed(2) + "%"; widthsDispTextTitle[9] = "Burned: " + widths[9].toFixed(2) + "%"; } else { widthsDispTextTitle[0] = "Locked/Lessons: " + widths[0].toFixed(2) + "%"; widthsDispTextTitle[1] = "Apprentice: " + widths[1].toFixed(2) + "%"; widthsDispTextTitle[2] = "Guru: " + widths[2].toFixed(2) + "%"; widthsDispTextTitle[3] = "Master: " + widths[3].toFixed(2) + "%"; widthsDispTextTitle[4] = "Enlightened: " + widths[4].toFixed(2) + "%"; widthsDispTextTitle[5] = "Burned: " + widths[5].toFixed(2) + "%"; } ////////////////// //Create Colours// ////////////////// let LockedLessonColor = ""; let Apprentice1Color = ""; let Apprentice2Color = ""; let Apprentice3Color = ""; let Apprentice4Color = ""; let Guru1Color = ""; let Guru2Color = ""; let MasterColor = ""; let EnlightenedColor = ""; let BurnColor = ""; let AutoFade = 0; ///////////////// //Apply Presets// ///////////////// switch (wkof.settings.total_progression.Presets){ case '0': LockedLessonColor = wkof.settings.total_progression.LockedLessonColor; Apprentice1Color = wkof.settings.total_progression.Apprentice1Color; Apprentice2Color = wkof.settings.total_progression.Apprentice2Color; Apprentice3Color = wkof.settings.total_progression.Apprentice3Color; Apprentice4Color = wkof.settings.total_progression.Apprentice4Color; Guru1Color = wkof.settings.total_progression.Guru1Color; Guru2Color = wkof.settings.total_progression.Guru2Color; MasterColor = wkof.settings.total_progression.MasterColor; EnlightenedColor = wkof.settings.total_progression.EnlightenedColor; BurnColor = wkof.settings.total_progression.BurnColor; AutoFade = wkof.settings.total_progression.AutoFade; break; case '1': wkof.settings.total_progression.LockedLessonColor = "#545454"; wkof.settings.total_progression.Apprentice1Color = "#ffe0f4"; wkof.settings.total_progression.Apprentice2Color = "#ff80d4"; wkof.settings.total_progression.Apprentice3Color = "#ff33bb"; wkof.settings.total_progression.Apprentice4Color = "#f500a3"; wkof.settings.total_progression.Guru1Color = "#b95bd1"; wkof.settings.total_progression.Guru2Color = "#a035bb"; wkof.settings.total_progression.MasterColor = "#3a5bde"; wkof.settings.total_progression.EnlightenedColor = "#009EEE"; wkof.settings.total_progression.BurnColor = "#fab623"; wkof.settings.total_progression.AutoFade = 0; LockedLessonColor = "#545454"; Apprentice1Color = "#ffe0f4"; Apprentice2Color = "#ff80d4"; Apprentice3Color = "#ff33bb"; Apprentice4Color = "#f500a3"; Guru1Color = "#b95bd1"; Guru2Color = "#a035bb"; MasterColor = "#3a5bde"; EnlightenedColor = "#009EEE"; BurnColor = "#fab623"; AutoFade = 0; break; case '2': wkof.settings.total_progression.LockedLessonColor = "#545454"; wkof.settings.total_progression.Apprentice1Color = "#a2d3fd"; wkof.settings.total_progression.Apprentice2Color = "#7ec0f9"; wkof.settings.total_progression.Apprentice3Color = "#50abf9"; wkof.settings.total_progression.Apprentice4Color = "#2f98f3"; wkof.settings.total_progression.Guru1Color = "#7edcb8"; wkof.settings.total_progression.Guru2Color = "#30dc9a"; wkof.settings.total_progression.MasterColor = "#c9ce3a"; wkof.settings.total_progression.EnlightenedColor = "#f67301"; wkof.settings.total_progression.BurnColor = "#da4453"; wkof.settings.total_progression.AutoFade = 0; LockedLessonColor = "#545454"; Apprentice1Color = "#a2d3fd"; Apprentice2Color = "#7ec0f9"; Apprentice3Color = "#50abf9"; Apprentice4Color = "#2f98f3"; Guru1Color = "#7edcb8"; Guru2Color = "#30dc9a"; MasterColor = "#c9ce3a"; EnlightenedColor = "#f67301"; BurnColor = "#da4453"; AutoFade = 0; break; default: break; } ///////////// //Auto-Fade// ///////////// var part3 = 5/6; var part2 = 4/6; var part1 = 3/6; if (wkof.settings.total_progression.AutoFade == 1) { wkof.settings.total_progression.Apprentice3Color = rgb2hex(255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,1))*part3),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,2))*part3),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,3))*part3)); wkof.settings.total_progression.Apprentice2Color = rgb2hex(255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,1))*part2),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,2))*part2),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,3))*part2)); wkof.settings.total_progression.Apprentice1Color = rgb2hex(255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,1))*part1),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,2))*part1),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Apprentice4Color,3))*part1)); wkof.settings.total_progression.Guru1Color = rgb2hex(255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Guru2Color,1))*part2),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Guru2Color,2))*part2),255-Math.round((255-hex2rorgorb(wkof.settings.total_progression.Guru2Color,3))*part2)); } /////////////////////////////////// //Actually Finally Create The Bar// /////////////////////////////////// let MyBar if (wkof.settings.total_progression.PercentagePosition == 1 || wkof.settings.total_progression.PercentagePosition == 2) { if (wkof.settings.total_progression.Subsection) { MyBar = `<div class="removeit" style="height: 30px; width: 100%; position: relative; margin-bottom: 5px; border-radius: 5px; overflow: hidden"> <div title="${widthsDispTextTitle[0]}" style="height: 30px; width: ${widthsText[0]}; background-color: ${LockedLessonColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[0]};"> ${widthsDispText[0]} </div> <div title="${widthsDispTextTitle[1]}" style="height: 30px; width: ${widthsText[1]}; background-color: ${Apprentice1Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[1]};"> ${widthsDispText[1]} </div> <div title="${widthsDispTextTitle[2]}" style="height: 30px; width: ${widthsText[2]}; background-color: ${Apprentice2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[2]};"> ${widthsDispText[2]} </div> <div title="${widthsDispTextTitle[3]}" style="height: 30px; width: ${widthsText[3]}; background-color: ${Apprentice3Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[3]};"> ${widthsDispText[3]} </div> <div title="${widthsDispTextTitle[4]}" style="height: 30px; width: ${widthsText[4]}; background-color: ${Apprentice4Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[4]};"> ${widthsDispText[4]} </div> <div title="${widthsDispTextTitle[5]}" style="height: 30px; width: ${widthsText[5]}; background-color: ${Guru1Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[5]};"> ${widthsDispText[5]} </div> <div title="${widthsDispTextTitle[6]}" style="height: 30px; width: ${widthsText[6]}; background-color: ${Guru2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[6]};"> ${widthsDispText[6]} </div> <div title="${widthsDispTextTitle[7]}" style="height: 30px; width: ${widthsText[7]}; background-color: ${MasterColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[7]};"> ${widthsDispText[7]} </div> <div title="${widthsDispTextTitle[8]}" style="height: 30px; width: ${widthsText[8]}; background-color: ${EnlightenedColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[8]};"> ${widthsDispText[8]} </div> <div title="${widthsDispTextTitle[9]}" style="height: 30px; width: ${widthsText[9]}; background-color: ${BurnColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[9]};"> ${widthsDispText[9]} </div> </div>`; } else { MyBar = `<div class="removeit" style="height: 30px; width: 100%; position: relative; margin-bottom: 5px; border-radius: 5px; overflow: hidden"> <div title="${widthsDispTextTitle[0]}" style="height: 30px; width: ${widthsText[0]}; background-color: ${LockedLessonColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[0]};"> ${widthsDispText[0]} </div> <div title="${widthsDispTextTitle[1]}" style="height: 30px; width: ${widthsText[1]}; background-color: ${Apprentice4Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[1]};"> ${widthsDispText[1]} </div> <div title="${widthsDispTextTitle[2]}" style="height: 30px; width: ${widthsText[2]}; background-color: ${Guru2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[2]};"> ${widthsDispText[2]} </div> <div title="${widthsDispTextTitle[3]}" style="height: 30px; width: ${widthsText[3]}; background-color: ${MasterColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[3]};"> ${widthsDispText[3]} </div> <div title="${widthsDispTextTitle[4]}" style="height: 30px; width: ${widthsText[4]}; background-color: ${EnlightenedColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[4]};"> ${widthsDispText[4]} </div> <div title="${widthsDispTextTitle[5]}" style="height: 30px; width: ${widthsText[5]}; background-color: ${BurnColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[5]};"> ${widthsDispText[5]} </div> </div>`; } } else if (wkof.settings.total_progression.PercentagePosition == 3) { if (wkof.settings.total_progression.Subsection) { MyBar = `<div class="removeit" style="height: 30px; width: 100%; margin-top: 20px; margin-bottom: 20px; position: relative; box-shadow: 0 0 2pt 2pt #BBBBBB;"> <div title="${widthsDispTextTitle[0]}" style="height: 30px; width: ${widthsText[0]}; background-color: ${LockedLessonColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[0]};"> ${widthsDispText[0]} </div> <div title="${widthsDispTextTitle[1]}" style="height: 30px; width: ${widthsText[1]}; background-color: ${Apprentice1Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[1]};"> ${widthsDispText[1]} </div> <div title="${widthsDispTextTitle[2]}" style="height: 30px; width: ${widthsText[2]}; background-color: ${Apprentice2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[2]};"> ${widthsDispText[2]} </div> <div title="${widthsDispTextTitle[3]}" style="height: 30px; width: ${widthsText[3]}; background-color: ${Apprentice3Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[3]};"> ${widthsDispText[3]} </div> <div title="${widthsDispTextTitle[4]}" style="height: 30px; width: ${widthsText[4]}; background-color: ${Apprentice4Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[4]};"> ${widthsDispText[4]} </div> <div title="${widthsDispTextTitle[5]}" style="height: 30px; width: ${widthsText[5]}; background-color: ${Guru1Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[5]};"> ${widthsDispText[5]} </div> <div title="${widthsDispTextTitle[6]}" style="height: 30px; width: ${widthsText[6]}; background-color: ${Guru2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[6]};"> ${widthsDispText[6]} </div> <div title="${widthsDispTextTitle[7]}" style="height: 30px; width: ${widthsText[7]}; background-color: ${MasterColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[7]};"> ${widthsDispText[7]} </div> <div title="${widthsDispTextTitle[8]}" style="height: 30px; width: ${widthsText[8]}; background-color: ${EnlightenedColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[8]};"> ${widthsDispText[8]} </div> <div title="${widthsDispTextTitle[9]}" style="height: 30px; width: ${widthsText[9]}; background-color: ${BurnColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[9]};"> ${widthsDispText[9]} </div> </div>`; } else { MyBar = `<div class="removeit" style="height: 30px; width: 100%; margin-top: 20px; margin-bottom: 20px; position: relative; box-shadow: 0 0 2pt 2pt #BBBBBB;"> <div title="${widthsDispTextTitle[0]}" style="height: 30px; width: ${widthsText[0]}; background-color: ${LockedLessonColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[0]};"> ${widthsDispText[0]} </div> <div title="${widthsDispTextTitle[1]}" style="height: 30px; width: ${widthsText[1]}; background-color: ${Apprentice4Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[1]};"> ${widthsDispText[1]} </div> <div title="${widthsDispTextTitle[2]}" style="height: 30px; width: ${widthsText[2]}; background-color: ${Guru2Color}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[2]};"> ${widthsDispText[2]} </div> <div title="${widthsDispTextTitle[3]}" style="height: 30px; width: ${widthsText[3]}; background-color: ${MasterColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[3]};"> ${widthsDispText[3]} </div> <div title="${widthsDispTextTitle[4]}" style="height: 30px; width: ${widthsText[4]}; background-color: ${EnlightenedColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[4]};"> ${widthsDispText[4]} </div> <div title="${widthsDispTextTitle[5]}" style="height: 30px; width: ${widthsText[5]}; background-color: ${BurnColor}; position: absolute; text-align: center; vertical-align: middle; line-height: 30px; color: #efefef; margin-left: ${widthsTextRem[5]};"> ${widthsDispText[5]} </div> </div>`; } } let testblock = `<div style="height : 1000px; width : 1000px; background-color: green"></div>` if (wkof.settings.total_progression.PercentagePosition == 1) { dom.$('.removeit').remove(); dom.$('.srs-progress').before(MyBar); if (wkof.settings.total_progression.RemoveProgression) { dom.$('.radicals-progress').css("display","none"); dom.$('.kanji-progress').css("display","none"); dom.$('.progression').css("display","none"); } else { dom.$('.progression').css("display","block"); dom.$('.radicals-progress').css("display","block"); dom.$('.kanji-progress').css("display","block"); } } else if (wkof.settings.total_progression.PercentagePosition == 2) { dom.$('.removeit').remove(); dom.$('.srs-progress').after(MyBar); if (wkof.settings.total_progression.RemoveProgression) { dom.$('.radicals-progress').css("display","none"); dom.$('.kanji-progress').css("display","none"); dom.$('.progression').css("display","none"); } else { dom.$('.progression').css("display","block"); dom.$('.radicals-progress').css("display","block"); dom.$('.kanji-progress').css("display","block"); } } else if (wkof.settings.total_progression.PercentagePosition == 3) { if (wkof.settings.total_progression.RemoveProgression) { dom.$('.removeit').remove(); dom.$('.progression').html(MyBar); dom.$('.progression').prepend(`<h3 class="removeit" style="margin-bottom: 0px;">Post-60 Progress Bar</h3>`); dom.$('.progression').css("display","block"); dom.$('.kanji-progress').css("display","none"); dom.$('.radicals-progress').css("display","none"); } else { dom.$('.removeit').remove(); dom.$('.progression').prepend(`<hr class="removeit">`); dom.$('.progression').prepend(MyBar); dom.$('.progression').prepend(`<h3 class="removeit" style="margin-bottom: 0px;">Total Progress Bar</h3>`); dom.$('.progression').css("display","block"); dom.$('.radicals-progress').css("display","block"); dom.$('.kanji-progress').css("display","block"); } } } function hex2rorgorb(hexin,rgb) { var col = 0; var hexpart1 = hexin.substr(2*rgb-1, 1); var hexpart2 = hexin.substr(2*rgb, 1); switch(hexpart1){ case "a": col = 160; break; case "b": col = 176; break; case "c": col = 192; break; case "d": col = 208; break; case "e": col = 224; break; case "f": col = 240; break; default: col = parseInt(hexpart1*16); break; } switch(hexpart2){ case "a": col = col + 10; break; case "b": col = col + 11; break; case "c": col = col + 12; break; case "d": col = col + 13; break; case "e": col = col + 14; break; case "f": col = col + 15; break; default: col = col + parseInt(hexpart2); break; } // console.log(hexin + ", " + hexpart1 + ", " + hexpart2 + ", " + col) return col; } function num2hex(hexin) { var col = ""; switch(hexin){ case 15: col = "f"; break; case 14: col = "e"; break; case 13: col = "d"; break; case 12: col = "c"; break; case 11: col = "b"; break; case 10: col = "a"; break; default: col = hexin.toString(); break; } return col; } function rgb2hex(rcol, gcol, bcol){ var firrcol = 0; var secrcol = 0; var firgcol = 0; var secgcol = 0; var firbcol = 0; var secbcol = 0; var hexout = ""; firrcol = Math.floor(rcol/16); secrcol = rcol - firrcol*16; firgcol = Math.floor(gcol/16); secgcol = gcol - firgcol*16; //console.log(gcol + ", " + firgcol + ", " + secgcol) firbcol = Math.floor(bcol/16); secbcol = bcol - firbcol*16; hexout = "#" + num2hex(firrcol) + num2hex(secrcol) + num2hex(firgcol) + num2hex(secgcol) + num2hex(firbcol) + num2hex(secbcol); //console.log(rcol + ", " + gcol + ", " + bcol) //console.log(hexout) return hexout; } // Fetches items and updates display function fetch_and_update() { fetch_items().then(getItems).then(determineRatio).then(createBar) } // Fetches the relevant items function fetch_items() { var [promise, resolve] = new_promise(); var config = { wk_items: { options: {assignments: true}, filters: {level: "1..+0"} } }; wkof.ItemData.get_items(config).then(resolve); return promise; } // Load settings and set defaults function load_settings() { var defaults = { RemoveProgression: 'true', PercentagePosition: '3', ReverseOrder: 'false', Subsection: 'true', Presets: '0', AutoFade: 'true', LockedLessonColor: '#545454', Apprentice1Color: '#ffe0f4', Apprentice2Color: '#ff80d4', Apprentice3Color: '#ff33bb', Apprentice4Color: '#f500a3', Guru1Color: '#b95bd1', Guru2Color: '#a035bb', MasterColor: '#3a5bde', EnlightenedColor: '#009eee', BurnColor: '#fab623' }; return wkof.Settings.load('total_progression', defaults); } // Installs the options button in the menu function install_menu() { var config = { name: 'total_progression_settings', submenu: 'Settings', title: 'Total Progression Bar', on_click: open_settings }; wkof.Menu.insert_script_link(config); } // Create the options function open_settings(items) { var config = { script_id: 'total_progression', title: 'Total Progression', on_save: fetch_and_update, content: { PercentagePosition: { type: 'dropdown', label: 'Position Total Progress Bar', hover_tip: 'Where should the total progress bar be positioned?', default: '3', content: { 1: 'Above the SRS Breakdown', 2: 'Below the SRS Breakdown', 3: 'Inside the Progress Bar Section' } }, RemoveProgression: { type: 'checkbox', label: 'Remove Level Progress Bar?', hover_tip: 'Should the Level-Specific Progress Bars for Radicals and Kanji be removed?', default: 'true' }, ReverseOrder: { type: 'checkbox', label: 'Reverse Order?', hover_tip: 'Reverse the order of the categories', default: 'false' }, Subsection: { type: 'checkbox', label: 'Use Subsections?', hover_tip: 'Divide Apprentice and Guru into subsections', default: 'true' }, Presets: { type: 'dropdown', label: 'Preset', hover_tip: 'Do you want to use a preset?', default: '0', content: { 0: 'Custom', 1: 'Wanikani Default (Gold)', 2: 'Breeze Dark' } }, AutoFade: { type: 'checkbox', label: 'AutoFade', hover_tip: 'Automatically fade Apprentice Colours from Apprentice 4 and Guru Colours from Guru 2.', default: 'true' }, LockedLessonColor: { type: 'color', label: 'Locked/Lesson Color', hover_tip: 'The color of Locked/Lesson Items', default: '#545454' }, Apprentice1Color: { type: 'color', label: 'Apprentice 1 Color', hover_tip: 'The color of Apprentice 1 Items', default: '#ffe0f4' }, Apprentice2Color: { type: 'color', label: 'Apprentice 2 Color', hover_tip: 'The color of Apprentice 2 Items', default: '#ff80d4' }, Apprentice3Color: { type: 'color', label: 'Apprentice 3 Color', hover_tip: 'The color of Apprentice 3 Items', default: '#ff33bb' }, Apprentice4Color: { type: 'color', label: 'Apprentice 4 Color', hover_tip: 'The color of Apprentice 4 Items', default: '#f500a3' }, Guru1Color: { type: 'color', label: 'Guru 1 Color', hover_tip: 'The color of Guru 1 Items', default: '#b95bd1' }, Guru2Color: { type: 'color', label: 'Guru 2 Color', hover_tip: 'The color of Guru 2 Items', default: '#a035bb' }, MasterColor: { type: 'color', label: 'Master Color', hover_tip: 'Master Items', default: '#3a5bde' }, EnlightenedColor: { type: 'color', label: 'Enlightened Color', hover_tip: 'The color of Enlightened Items', default: '#009eee' }, BurnColor: { type: 'color', label: 'Burn Color', hover_tip: 'The color of Burn Items', default: '#fab623' } } } var dialog = new wkof.Settings(config); dialog.open(); } // Adds the script's CSS to the page // function add_css() { // dom.$('head').append('<style id="Total_Progress_CSS">'+ // '#total_progress {'+ // ' background: #434343;'+ // ' border-radius: 0 0 3px 3px;'+ // ' height: 30px;'+ // ' line-height: 30px;'+ // ' color: rgb(240, 240, 240);'+ // ' font-size: 16px;'+ // '}'+ // '#total_progress > div {'+ // ' width: calc(20% - 1px);'+ // ' display: inline-block;'+ // ' text-align: center;'+ // '}'+ // '#total_progress .level_label {'+ // ' font-weight: bold;'+ // '}'+ // // '.dashboard > .container > .row > .span12 > section.srs-progress {'+ // // ' margin-bottom: 0 !important;'+ // // '}'+ // // '.srs-progress > ul > li {'+ // // ' border-radius: 0 !important;'+ // // '}'+ // '#total_progress.dark_theme {'+ // ' background: #232629;'+ // ' box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.7), 2px 2px 2px rgba(0, 0, 0, 0.7);'+ // ' margin: 0 3px 3px 3px;'+ // '}'+ // '#total_progress.dark_theme > div:not(:last-child) {'+ // ' border-right: 1px solid #31363b;'+ // '}'+ // '</style>'); // } // Returns a promise and a resolve function function new_promise() { var resolve, promise = new Promise((res, rej)=>{resolve = res;}); return [promise, resolve]; } // // Handy little function that rfindley wrote. Checks whether the theme is dark. // function is_dark_theme() { // // Grab the <html> background color, average the RGB. If less than 50% bright, it's dark theme. // return $('body').css('background-color').match(/\((.*)\)/)[1].split(',').slice(0,3).map(str => Number(str)).reduce((a, i) => a+i)/(255*3) < 0.5; // } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址