// ==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(){
$('