// ==UserScript== // @author Zaso // @name Check Point Timer // @category Info // @version 0.1.2.20200216.174028 // @description Add to the sidebar a countdown timer to next checkpoint. // @id check-point-timer@Zaso // @namespace https://github.com/IITC-CE/ingress-intel-total-conversion // @downloadURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/Zaso/check-point-timer.user.js // @updateURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/Zaso/check-point-timer.meta.js // @match https://intel.ingress.com/* // @grant none // ==/UserScript== function wrapper(plugin_info) { // ensure plugin framework is there, even if iitc is not yet loaded if(typeof window.plugin !== 'function') window.plugin = function() {}; //PLUGIN AUTHORS: writing a plugin outside of the IITC build environment? if so, delete these lines!! //(leaving them in place might break the 'About IITC' page or break update checks) plugin_info.buildName = 'ZasoItems'; plugin_info.dateTimeVersion = '2020-02-16-174028'; plugin_info.pluginId = 'check-point-timer'; //END PLUGIN AUTHORS NOTE // PLUGIN START //////////////////////////////////////////////////////// // History // 0.1.2 Headers changed. Ready for IITC-CE // 0.1.1 Original sript // use own namespace for plugin window.plugin.cpTimer = function(){}; window.plugin.cpTimer.timer = {}; window.plugin.cpTimer.dom = {}; window.plugin.cpTimer.timers = {} window.plugin.cpTimer.ui = {}; window.plugin.cpTimer.util = {}; window.plugin.cpTimer.action = {}; window.plugin.cpTimer.secCP = (60*60)*5; window.plugin.cpTimer.secSept = ((60*60)*5)*(7*5); window.plugin.cpTimer.nextCP = 0; //------------------------------------------------------------------ window.plugin.cpTimer.getNow = function(){ var arr = [4,6,20]; var arr = [0,0,0]; var plus = ((60*60*arr[0])+(60*arr[1])+(arr[2]))*1000; return new Date().getTime()+plus; } window.plugin.cpTimer.getSeptDateTs = function(){ var now = window.plugin.cpTimer.getNow(); var septStart = Math.floor(now / (window.plugin.cpTimer.secSept*1000))*(window.plugin.cpTimer.secSept*1000); var septEnd = septStart+window.plugin.cpTimer.secSept*1000; return [septStart, septEnd]; } window.plugin.cpTimer.ui.appendSeptDateHTML = function(){ var sept = window.plugin.cpTimer.getSeptDateTs(); var septStart = unixTimeToString(sept[0],true).slice(0, -3); var septEnd = unixTimeToString(sept[1],true).slice(0, -3); // var cpList = window.plugin.cpTimer.util.getCPlistTooltip(); var cpList = ''; var html = ''; html += '
'; // html += '
'+septStart+'
'; // html += '
'+septEnd+'
'; html += '
'+septStart+'
'; html += '
'+septEnd+'
'; html += '
'; $('#cp-timer').append(html); // window.plugin.cpTimer.util.updateCPlistTooltip(); } window.plugin.cpTimer.util.getTimerData = function(id){ return window.plugin.cpTimer.timers[id]; } window.plugin.cpTimer.util.getDom = function(id){ return window.plugin.cpTimer.dom[id]; } window.plugin.cpTimer.util.getPreviousNextCP = function(){ var now = window.plugin.cpTimer.getNow(); var start = Math.floor(now / (window.plugin.cpTimer.secCP*1000))*(window.plugin.cpTimer.secCP*1000); var end = start+window.plugin.cpTimer.secCP*1000; s = unixTimeToString(start,true).slice(0, -3); e = unixTimeToString(end,true).slice(0, -3); return [[start, s],[end, e]]; } window.plugin.cpTimer.util.getPreviousCP = function(){ return window.plugin.cpTimer.util.getPreviousNextCP()[0]; } window.plugin.cpTimer.util.getNextCP = function(){ return window.plugin.cpTimer.util.getPreviousNextCP()[1]; } window.plugin.cpTimer.util.getCPlist = function(){ var startend = window.plugin.cpTimer.getSeptDateTs(); var start = startend[0]; var end = startend[1]; var list = []; var t = start; while(t'; for(i in list){ var cp_date = list[i][1].split(' '); var ymd = ''+cp_date[0]+''; var hms = ''+cp_date[1]+''; var html_date = ymd+' '+hms; if(nextCP[1] == list[i][1]){ html += '
  • '+html_date+'
  • '; isPast = false; }else{ if(isPast === true){ html += '
  • '+html_date+'
  • '; }else{ html += '
  • '+html_date+'
  • '; } } } html += ''; return '
    '+html+'
    '; } window.plugin.cpTimer.util.updateCPlistTooltip = function(){ var newList = window.plugin.cpTimer.util.getCPlistTooltip(); $('#cp-timer .sept').attr('title', newList); } window.plugin.cpTimer.timers = { 'cp':{ id: 'cp', label: 'Next CP', start: window.plugin.cpTimer.getSeptDateTs()[0], duration: window.plugin.cpTimer.secCP }, }; //------------------------------------------------------------------ window.plugin.cpTimer.startTimer = function(id){ window.plugin.cpTimer.timer[id] = setInterval(function(){ window.plugin.cpTimer.updateTimer(id) },1000); } window.plugin.cpTimer.stopTimer = function(id){ clearTimeout(window.plugin.cpTimer.timer[id]); } window.plugin.cpTimer.updateTimer = function(id){ var t = window.plugin.cpTimer.util.getTimerData(id); var domElem = window.plugin.cpTimer.util.getDom(id); var start = t.start, duration = t.duration, diff, hours, minutes, seconds; var now = window.plugin.cpTimer.getNow(); // get the number of seconds that have elapsed since // startTimer() was called delta = ((now - start) / 1000); while(delta > duration){ delta -= duration; } diff = duration - delta; // does the same job as parseInt truncates the float hours = (diff / 3600) | 0; minutes = ((diff % 3600) / 60) | 0; seconds = (diff % 60) | 0; hours = hours < 10 ? "0" + hours : hours; minutes = minutes < 10 ? "0" + minutes : minutes; seconds = seconds < 10 ? "0" + seconds : seconds; // videostamp domElem.children('.timer').html(hours + ":" + minutes + ":" + seconds); /* if (diff <= 0){ // add one second so that the count down starts at the full duration // example 05:00 not 04:59 start = Date.now() + 1000; } */ // we don't want to wait a full second before the timer starts if(now > window.plugin.cpTimer.nextCP){ window.plugin.cpTimer.nextCP = window.plugin.cpTimer.util.getNextCP()[0]; window.plugin.cpTimer.util.updateCPlistTooltip(); } } window.plugin.cpTimer.ui.getContainerHTML = function(){ return '
    '; } window.plugin.cpTimer.ui.getTimerHTML = function(id){ var t = window.plugin.cpTimer.util.getTimerData(id); var clickAction = 'onclick="window.plugin.cpTimer.action.click(\''+id+'\');return false;"'; var title = 'title="Click to stop/play the timer"'; // var clickAction = ''; // var title = ''; var html = ''; html += '
    '; html += ''+t.label+''; html += '00:00:00'; html += '
    '; return html; } window.plugin.cpTimer.ui.appendTimer = function(id){ var dom = window.plugin.cpTimer.ui.getTimerHTML(id); var d = $(dom).appendTo('#cp-timer'); window.plugin.cpTimer.dom[id] = d; } window.plugin.cpTimer.action.setAllTimers = function(){ for(id in window.plugin.cpTimer.timers){ window.plugin.cpTimer.action.setTimer(id); } }; window.plugin.cpTimer.action.setTimer = function(id){ window.plugin.cpTimer.ui.appendTimer(id); window.plugin.cpTimer.startTimer(id); }; window.plugin.cpTimer.action.click = function(id){ var domElem = window.plugin.cpTimer.util.getDom(id); if(domElem.hasClass('stopped')){ window.plugin.cpTimer.startTimer(id); domElem.removeClass('stopped'); }else{ window.plugin.cpTimer.stopTimer(id); domElem.addClass('stopped'); } } window.plugin.cpTimer.action.destroyTimer = function(id){ window.plugin.cpTimer.stopTimer(id); window.plugin.cpTimer.util.getDom(id).remove(); delete window.plugin.cpTimer.dom[id]; } //------------------------------------------------------------------ // Append the stylesheet //------------------------------------------------------------------ window.plugin.cpTimer.setupCSS = function(){ $('