ET Summary Timer

Displays crafting timers in Summary menu. Settings available in console via window.et_summaryTimer

目前為 2017-11-13 提交的版本,檢視 最新版本

// ==UserScript==
// @name         ET Summary Timer
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Displays crafting timers in Summary menu. Settings available in console via window.et_summaryTimer
// @author       Aes Sedai
// @match        http*://*.eternitytower.net/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Default settings, use window.et_summaryTimer in console to change settings
    // showCrafting: BOOLEAN, default: true; if true, shows a timer for crafting in summary list
    // showInscription: BOOLEAN, default: true; if true, shows a timer for inscription in summary list
    // interval: INTEGER, default: 1000; time in millisecons to wait before refreshing timer
    window.et_summaryTimer = {
        showCrafting: true,
        showInscription: true,
        interval: 1000
    };

    if(localStorage.getItem('et_summaryTimer')) window.et_summaryTimer = Object.assign({}, window.et_summaryTimer, JSON.parse(localStorage.getItem('et_summaryTimer')));

    $(window).on("beforeunload", function() {
        localStorage.setItem('et_summaryTimer', JSON.stringify(window.et_summaryTimer));
    });

    function getTimeRemaining(endtime) {
        var t = Date.parse(endtime) - Date.parse(new Date());
        var seconds = Math.floor( (t/1000) % 60 );
        var minutes = Math.floor( (t/1000/60) % 60 );
        var hours = Math.floor( (t/(1000*60*60)) % 24 );
        var days = Math.floor( t/(1000*60*60*24) );
        return {
            'total': t,
            'days': days,
            'hours': hours.toString().padStart(2, '0'),
            'minutes': minutes.toString().padStart(2, '0'),
            'seconds': seconds.toString().padStart(2, '0')
        };
    }

    function formatTimeRemaining(time) {
        if(time.days > 0) return time.days + ":" + time.hours + ":" + time.minutes + ":" + time.seconds;
        if(time.hours > 0) return time.hours + ":" + time.minutes + ":" + time.seconds;
        if(time.minutes > 0) return time.minutes + ":" + time.seconds;
        if(time.secodns > 0) return time.seconds;
    }

    var summaries = [
        {classSelector: ".crafting-timer", redis: Meteor.connection._mongo_livedata_collections.crafting.find(), rowSelector: "#content > div.d-sm-flex.flex-grow > div.hidden-lg-down > div > div:nth-of-type(1)", active: window.et_summaryTimer.showCrafting},
        {classSelector: ".inscription-timer", redis: Meteor.connection._mongo_livedata_collections.inscription.find(), rowSelector: "#content > div.d-sm-flex.flex-grow > div.hidden-lg-down > div > div:nth-of-type(2)", active: window.et_summaryTimer.showInscription}
    ];

    var interval = setInterval(function() {
        summaries.forEach(function(summary) {
            if(!summary.active) return;
            if($(summary.classSelector).length > 0) {
                $(summary.classSelector).html(formatTimeRemaining(getTimeRemaining(summary.redis.fetch()[0].currentlyCrafting[0].endDate)));
            } else if($(summary.rowSelector).length > 0) {
                var row = $(summary.rowSelector);
                var timeContainer = document.createElement("span");
                timeContainer.className = summary.classSelector.replace('.', '');
                timeContainer.style.cssText = 'padding-left: 6px;';
                timeContainer.innerHTML = formatTimeRemaining(getTimeRemaining(summary.redis.fetch()[0].currentlyCrafting[0].endDate));
                row.after(timeContainer);
            }
        });
    }, window.et_summaryTimer.interval);
})();