KlavoDaily ProgressBar

Прогресс бар для ежедневного задания

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        KlavoDaily ProgressBar
// @namespace   ru.ilpihp
// @description Прогресс бар для ежедневного задания
// @author Darwinian
// @version     1
// @grant       none
// @include        http://klavogonki.ru*
// ==/UserScript==
(function (window, undefined) {  // [2] нормализуем window
    var w;
    if (typeof unsafeWindow != undefined) {
        w = unsafeWindow
    } else {
        w = window;
    }
    // В юзерскрипты можно вставлять практически любые javascript-библиотеки.
    // Код библиотеки копируется прямо в юзерскрипт.
    // При подключении библиотеки нужно передать w в качестве параметра окна window
    // Пример: подключение jquery.min.js
    // (function(a,b){function ci(a) ... a.jQuery=a.$=d})(w);

    // [3] не запускаем скрипт во фреймах
    // без этого условия скрипт будет запускаться несколько раз на странице с фреймами
    if (w.self != w.top) {
        return;
    }
    // [4] дополнительная проверка наряду с @include
    if (/http:\/\/klavogonki\.ru/.test(w.location.href)) {
        //Ниже идёт непосредственно код скрипта
      var oldReal;
      
      function readProgress(){
        return $$(".user-dropdown .daily-task")[0].readAttribute('original-title');
      };
      
      function setIconStyle() {
        $$(".user-dropdown .daily-task img.icon")[0].setStyle('width: 30px;height: 30px;margin-left: 6px;');
      };
      
      function displayProgressBar(real, goal) {
        var pb = $('daily-progress-bar');
        if (!pb) {
          var htmlToInsert = "<div id='daily-progress-bar' style='margin-top: 30px;font-size: 10px;text-align: center;position: absolute;width: 100%;'>"+real+"/"+goal+"</div>";
          $$(".user-dropdown .daily-task")[0].insert(htmlToInsert);
        } else {
          pb.innerText = real+"/"+goal;
        }
      };
      
      function showProgressBar(progressString) {
        var numbers = progressString.split(" ")[1];
        var real = numbers.split("/")[0];
        var goal = numbers.split("/")[1];
        
        if (oldReal != real) {
          if (!oldReal) {
            setIconStyle();
          }
          displayProgressBar(real, goal);
          oldReal = real;
        }
        
      };
      
      var progressString;
      function waitProgress() {
        progressString = readProgress();
        
        if (progressString) {
          showProgressBar(progressString);
        }
        setTimeout(waitProgress, 1000);
      };
      
      waitProgress();
      
    }
})(window);