Logtime Plus

https://github.com/pcluchet/logtime-plus

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name        Logtime Plus
// @namespace   profile.intra.42.fr
// @include     https://profile.intra.42.fr/
// @version     1.3
// @grant       none
// @description https://github.com/pcluchet/logtime-plus
// ==/UserScript==
 
function minTommss(minutes){
    var sign = minutes < 0 ? "-" : "";
    var min = Math.floor(Math.abs(minutes));
    var sec = Math.floor((Math.abs(minutes) * 60) % 60);
    return sign + (min < 10 ? "0" : "") + min + "h" + (sec < 10 ? "0" : "") + sec;
}

function load_js()
   {
      var head= document.getElementsByTagName('head')[0];
      var script= document.createElement('script');
      script.type= 'text/javascript';
      script.src= 'https://profile.intra.42.fr/assets/application-a482bc20dff3485ff22a2d7350c86b65accb523b5f0b6f711d36840efbefc37d.js';
      head.appendChild(script);
   }
 
 
function wait(ms){
   var start = new Date().getTime();
   var end = start;
   while(end < start + ms) {
     end = new Date().getTime();
  }
}
 
function get_n(add, n){
    //console.log("Birdel0");
    var tt = n + add;
    console.log('n : ' + n + " add : " + add);
   if (tt == 0)
  {
   return 12;
  }
  else if ( tt < 0)
    {
      return 11;
    }
    else
        {
  return n+add;
        }
}

function disp_hint_top(event){

                              var box = document.createElementNS("http://www.w3.org/2000/svg", 'g');
                             var svg = document.getElementById("user-locations");
                             var s = new XMLSerializer();
                // get the inner DOM of alpha.svg
                    console.log('target = '+ s.serializeToString(event.target));
               
                             var sum = event.target.parentNode.getAttribute('hoursum');
                             var x = parseFloat(event.target.parentNode.getAttribute('spoof_x'));
                             var y = parseFloat(event.target.parentNode.getAttribute('spoof_y'));
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'rect')
                         to_add.setAttribute("x", x+17);
                         to_add.setAttribute("y", y-5);
                         to_add.setAttribute("fill", '#fff');
                         to_add.setAttribute("width", '53');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("filter", 'url(#black-glow)');
                         to_add.setAttribute("font-family", 'sans-serif');
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'text')
                         to_add.setAttribute("x", x+28);
                         to_add.setAttribute("y", y+11);
                         to_add.setAttribute("fill", '#444');
                         to_add.setAttribute("width", '42');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("font-family", 'sans-serif');
                         to_add.setAttribute("font-size", '13');
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                         var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'line')
                         to_add.setAttribute("x1", x+16);
                         to_add.setAttribute("y1", y-5);
                         to_add.setAttribute("x2", x+16);
                         to_add.setAttribute("y2", y+18);
                         to_add.setAttribute("stroke", '#666');
                         to_add.setAttribute("stroke-width", '1');
                        
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             
                             console.log("created id = ", sum + x + y);
                         //to_add.innerHTML = minTommss(tot);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'polygon')
                         to_add.setAttribute("x", x+9);
                         to_add.setAttribute("y", y+8);
                         to_add.setAttribute("fill", '#666');
                             var p1x = x+10;
                             var p1y = y+8;
                             var p2x = x+16;
                             var p2y = y+2;
                             var p3x = x+16;
                             var p3y = y+14;
                         to_add.setAttribute("points", p1x + ' ' + p1y + ', ' + p2x + ' ' + p2y + ', ' + p3x + ' ' + p3y);
                             console.log('attribut pts :' + to_add.getAttribute('points'));
                         to_add.setAttribute("height", '17');
                          box.appendChild(to_add);
                          svg.appendChild(box);
                            
                             console.log("sum =" +sum);
                             
                             //alert('sum = ' + sum);
          
                         }

function disp_hint(event){
                             console.log('FIREF');
                              var box = document.createElementNS("http://www.w3.org/2000/svg", 'g');
                             var svg = document.getElementById("user-locations");
                             var s = new XMLSerializer();
                // get the inner DOM of alpha.svg
                    console.log('target = '+ s.serializeToString(event.target));
               
                             var sum = event.target.getAttribute('hoursum');
                             var x = parseFloat(event.target.getAttribute('x'));
                             var y = parseFloat(event.target.getAttribute('y'));
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'rect')
                         to_add.setAttribute("x", x+17);
                         to_add.setAttribute("y", y-5);
                         to_add.setAttribute("fill", '#fff');
                         to_add.setAttribute("width", '53');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("filter", 'url(#black-glow)');
                         to_add.setAttribute("font-family", 'sans-serif');
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'text')
                         to_add.setAttribute("x", x+28);
                         to_add.setAttribute("y", y+11);
                         to_add.setAttribute("fill", '#444');
                         to_add.setAttribute("width", '42');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("font-family", 'sans-serif');
                         to_add.setAttribute("font-size", '13');
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                         var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'line')
                         to_add.setAttribute("x1", x+16);
                         to_add.setAttribute("y1", y-5);
                         to_add.setAttribute("x2", x+16);
                         to_add.setAttribute("y2", y+18);
                         to_add.setAttribute("stroke", '#666');
                         to_add.setAttribute("stroke-width", '1');
                        
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             
                             console.log("created id = ", sum + x + y);
                         //to_add.innerHTML = minTommss(tot);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'polygon')
                         to_add.setAttribute("x", x+9);
                         to_add.setAttribute("y", y+8);
                         to_add.setAttribute("fill", '#666');
                             var p1x = x+10;
                             var p1y = y+8;
                             var p2x = x+16;
                             var p2y = y+2;
                             var p3x = x+16;
                             var p3y = y+14;
                         to_add.setAttribute("points", p1x + ' ' + p1y + ', ' + p2x + ' ' + p2y + ', ' + p3x + ' ' + p3y);
                             console.log('attribut pts :' + to_add.getAttribute('points'));
                         to_add.setAttribute("height", '17');
                          box.appendChild(to_add);
                          svg.appendChild(box);
                            
                             console.log("sum =" +sum);
                             
                             //alert('sum = ' + sum);
          
                         }

function disp_hint_reverse( event ) {
                             console.log('FIREF');
                              var box = document.createElementNS("http://www.w3.org/2000/svg", 'g');
                             var svg = document.getElementById("user-locations");
                             var s = new XMLSerializer();
                // get the inner DOM of alpha.svg
                    console.log('target = '+ s.serializeToString(event.target));
               
                             var sum = event.target.getAttribute('hoursum');
                             var x = parseFloat(event.target.getAttribute('x'));
                             var y = parseFloat(event.target.getAttribute('y'));
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'rect')
                         to_add.setAttribute("x", x-7-53);
                         to_add.setAttribute("y", y-5);
                         to_add.setAttribute("fill", '#fff');
                         to_add.setAttribute("width", '53');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("filter", 'url(#black-glow)');
                         to_add.setAttribute("font-family", 'sans-serif');
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'text')
                         to_add.setAttribute("x", x-8-42);
                         to_add.setAttribute("y", y+11);
                         to_add.setAttribute("fill", '#444');
                         to_add.setAttribute("width", '42');
                         to_add.setAttribute("height", '22');
                         to_add.setAttribute("font-family", 'sans-serif');
                         to_add.setAttribute("font-size", '13');
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                         var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'line')
                         to_add.setAttribute("x1", x-6);
                         to_add.setAttribute("y1", y-5);
                         to_add.setAttribute("x2", x-6);
                         to_add.setAttribute("y2", y+18);
                         to_add.setAttribute("stroke", '#666');
                         to_add.setAttribute("stroke-width", '1');
                        
                         to_add.innerHTML = sum;
                         box.setAttribute("id", sum + x + y);
                         box.appendChild(to_add);
                             
                             
                             console.log("created id = ", sum + x + y);
                         //to_add.innerHTML = minTommss(tot);
                             
                             var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'polygon')
                         to_add.setAttribute("x", x+9);
                         to_add.setAttribute("y", y+8);
                         to_add.setAttribute("fill", '#666');
                             var p1x = x-1;
                             var p1y = y+8;
                             var p2x = x-6;
                             var p2y = y+2;
                             var p3x = x-6;
                             var p3y = y+14;
                         to_add.setAttribute("points", p1x + ' ' + p1y + ', ' + p2x + ' ' + p2y + ', ' + p3x + ' ' + p3y);
                             console.log('attribut pts :' + to_add.getAttribute('points'));
                         to_add.setAttribute("height", '17');
                          box.appendChild(to_add);
                          svg.appendChild(box);
                            
                             console.log("sum =" +sum);
                             
                             //alert('sum = ' + sum);
          
                         }

function remove_hint( event ) {
                              console.log('MOUSEOUT');
                             var svg = document.getElementById("user-locations");
                             var s = new XMLSerializer();
                    //console.log('svg = '+ s.serializeToString(event.target));
                             var sum = event.target.getAttribute('hoursum');
                             var x = event.target.getAttribute('x');
                             var y = event.target.getAttribute('y');
                             
                             var to_remove = document.getElementById(sum + x + y);

                             to_remove.parentNode.removeChild(to_remove);

                         }

function remove_hint_spoof( event ) {
                              console.log('MOUSEOUT');
                             var svg = document.getElementById("user-locations");
                             var s = new XMLSerializer();
                    //console.log('svg = '+ s.serializeToString(event.target));
                             var sum = event.target.parentNode.getAttribute('hoursum');
                             var x = event.target.parentNode.getAttribute('spoof_x');
                             var y = event.target.parentNode.getAttribute('spoof_y');
                             
                             var to_remove = document.getElementById(sum + x + y);

                             to_remove.parentNode.removeChild(to_remove);

                         }
 
 
window.onload = function(){
   
    var mois = [];
mois[1] = 0.0;
mois[2] = 0.0;
mois[3] = 0.0;
mois[4] = 0.0;
mois[5] = 0.0;
mois[6] = 0.0;
mois[7] = 0.0;
mois[8] = 0.0;
mois[9] = 0.0;
mois[10] = 0.0;
mois[11] = 0.0;
mois[12] = 0.0;
  
var mois_j = [];
  
  for (var w = 0; w <= 12; w++)
    {
      var jours = [];
      for (var z = 0; z <= 31; z++)
         {
            jours[z] = 0.0;
         }  
            mois_j[w] = jours;
    }

 
 
var months = [];
months[1] = 'Janvier';
months[2] = 'Febrier';
months[3] = 'Mars';
months[4] = 'April';
months[5] = 'May';
months[6] = 'June';
months[7] = 'July';
months[8] = 'August';
months[9] = 'Septembre';
months[10] = 'Octobre';
months[11] = 'Novembre';
months[12] = 'Decembre';
   
    var jl = document.getElementsByClassName("container-inner-item boxed");
var logtimes = document.getElementById("user-locations").getAttribute("data-location-graph");
   
    logtimes = logtimes.substr(1);
logtimes = logtimes.substr(0, logtimes.length - 1);
var set = logtimes.split(",");
 
set.forEach(function(element) {
 
    var base = element.split(":");
    var annee = base[0].substr(1,4);
    var ms = base[0].substr(6,2);
    var jour = base[0].substr(9,2);
 
    var heures = base[1].substr(1,2);
    var minutes = base[2];
    var secondes = base[3].substr(0,2);
 
    mois[parseInt(ms)] += parseInt(heures) + parseInt(minutes)/60;//+(parseInt(minutes)/60)*10);
    mois_j[parseInt(ms)][parseInt(jour)] = parseInt(heures) + parseInt(minutes)/60;
 
});
  
//  console.log('mj = ' + mois_j);
 
var d = new Date();
  console.log("la date c: " + d.toISOString());
var n = d.getMonth();
var total = mois[n-1] + mois[n-0] + mois[n+1];
 
var t = document.createElement("div");
 
t.innerHTML = '<h4>Logtime Plus : '+ minTommss(total) + '</h4>';
n = get_n(-1,d.getMonth());
t.innerHTML = t.innerHTML + months[n-1] +' : '+ minTommss(mois[n-1])+'<br/>';
n = get_n(0,d.getMonth());
t.innerHTML = t.innerHTML + months[n-0]+' : '+minTommss(mois[n-0])+'<br/>';
n = d.getMonth();
t.innerHTML = t.innerHTML + months[n+1]+' : '+minTommss(mois[n+1])+'<br/>';
 
 
 
var k = jl[2].getElementsByClassName('profile-title');
 
k[0].innerHTML = 'Logtime⁺';
 
    var svg = document.getElementById("user-locations");
  
  	//this kills the handlers
  	//svg.innerHTML = svg.innerHTML;
  
  
    svg.setAttribute('viewBox','0 0 610 200');
    var s = new XMLSerializer();
                // get the inner DOM of alpha.svg
                    console.log('svg = '+ s.serializeToString(svg));
                   var svgBrut = s.serializeToString(svg);
               
   
   
                var parser = new DOMParser();
                //var svgDoc = parser.parseFromString(svgBrut, "text/xml");
                var svgDoc = svg;
                var defs = document.createElementNS("http://www.w3.org/2000/svg", 'defs');
    defs.innerHTML = "<filter id=\"black-glow\">\
    <feColorMatrix type=\"matrix\" values=\
                \"0 0 0 0   0\
                 0 0 0 0   0\
                 0 0 0 0   0\
                 0 0 0 0.1 0\"/>\
    <feGaussianBlur stdDeviation=\"2.5\" result=\"coloredBlur\"/>\
    <feMerge>\
        <feMergeNode in=\"coloredBlur\"/>\
        <feMergeNode in=\"SourceGraphic\"/>\
    </feMerge>\
</filter>";
                svgDoc.insertBefore(defs, svgDoc.firstChild);
        
                var elemcol = [];
                var texts = svgDoc.getElementsByTagName("*");
                var kmatch = 999;
                var oldx = 0;
                var oldy = 0;
                var tot = 0.0;
                var match = false;
                var last = false;
                var max = texts.length;
                for(var i = 0; i <= max; i++) {
                    if ( i == max)
                        last = true;
                  /*
                  if (texts[i].tagName = 'g' && texts[i].firstChild && texts[i].firstChild.tagName == 'rect')
                  {
                    var sum = 0.0;
                    
                    n = get_n(kmatch,d.getMonth());
                    sum = mois_j[n+kmatch][texts[i].childNodes[1].innerHTML]
                    
                    console.log('en x =' + texts[i].childNodes[0].getAttribute('x'));
                    texts[i].setAttribute("hoursum", minTommss(sum));
                    texts[i].setAttribute("spoof_x", texts[i].childNodes[0].getAttribute('x') );
                    texts[i].setAttribute("spoof_y", texts[i].childNodes[0].getAttribute('y') );
            		texts[i].addEventListener("mouseover", disp_hint_top);
                    texts[i].addEventListener("mouseout",remove_hint_spoof);
                    console.log('g');
                  }
                 */
                   // console.log('elem: '+ texts[i].innerHTML);
                   
                  //valeurs a coté du nom du mois
                    for(var k = -2; k <= 1; k++)
                        {
                    n = get_n(k, d.getMonth());
                    var moistxt = months[n];
                    //console.log('mois = ' + moistxt);
                    //console.log('cmp = ' + moistxt.substr(0,3) + "html = "+ texts[i].innerHTML);
                   
                    if (texts[i].innerHTML == moistxt.substr(0,3))
                        {
                          match = true;
                          kmatch = k;
                            console.log("moistxt =" + moistxt + "k = " + k);
                            console.log("MATCH MATCH MATCH");
                            texts[i].innerHTML = moistxt.substr(0,3) +"  -  " + minTommss(mois[n]);  
                            texts[i].setAttribute('font-size','12');
                            if (k == -2)
                                {
                                  texts[i].setAttribute('x','50');
                                }
                            else if (k == -1)
                                {
                                  texts[i].setAttribute('x','195');
                                }
                            else if (k == 0)
                                {
                                  texts[i].setAttribute('x','339');
                                }
                            else if (k == 1)
                                {
                                  texts[i].setAttribute('x','480');
                                }
                        }  
                    }
                  
                  //decalage pour faire la place du temps semaine
                  var xxx = parseFloat(texts[i].getAttribute('x'));
                  var yyy = parseFloat(texts[i].getAttribute('y'));
                   			if (kmatch == -2)
                                {
                                   xxx += -10;
                                  texts[i].setAttribute('x',xxx);
                                }
                            else if (kmatch == -1)
                                {
                                  texts[i].setAttribute('x',xxx);
                                }
                            else if (kmatch == 0)
                                {
                                   xxx += 10;
                                  texts[i].setAttribute('x',xxx);
                                }
                            else if (kmatch == 1)
                                {
                                  xxx += 20;
                                  texts[i].setAttribute('x',xxx);
                                }
                  //fin de semaine ou besoin d'écrire le total de semaine
                  if ( oldx == 120.5 || oldx == 274.5 || oldx == 582.5 || oldx == 428.5 ||  match || last)
                    {
                      //creation du rectangle coloré pour la semaine
                        var box = document.createElementNS("http://www.w3.org/2000/svg", 'g');
                        var to_add = document.createElementNS("http://www.w3.org/2000/svg", 'rect');
                        
                        var en_x = 0;
                        if (match)
                            kmatch -= 1;
                         console.log('mois = ' + kmatch);
                        
                         if (kmatch == -2)
                                {
                                   en_x = 135.5;
                                }
                            else if (kmatch == -1)
                                {
                                   en_x = 289.5;
                                }
                            else if (kmatch == 0)
                                {
                                     en_x = 443.5;
                                }
                            else if (kmatch == 1)
                                {
                                     en_x = 597.5;
                                }
                        if (match)
                            kmatch += 1;
                        
                         to_add.setAttribute("x", en_x);
                         to_add.setAttribute("y", oldy-10);
                         if (tot)
                             {
                                var color = '#2CD57B';
                                 var ratio = (tot/60);
                             }
                         else
                             {
                                var color = '#F5F5F5';
                                var ratio = 1;
                             }
                         to_add.setAttribute("fill", color );
                         
                         to_add.setAttribute("fill-opacity", ratio);
                         to_add.setAttribute("width", '7');
                         to_add.setAttribute("height", '17');
                         to_add.setAttribute("font-family", 'sans-serif');
                         to_add.setAttribute("font-size", '8');
                         to_add.setAttribute("hoursum", minTommss(tot));
                        var tmp = oldx-5;
                        var tmp2 = oldy-10;
                        box.appendChild(to_add);
                        
                        
                        //ajout des listeners pour afficher le temps lors du survol.
                        if (!(last || kmatch == 1)) 
                           box.addEventListener("mouseover", disp_hint);
                        else 
                           box.addEventListener("mouseover",disp_hint_reverse);
                        
                         box.addEventListener("mouseout",remove_hint);
                         
                         svg.appendChild(box);
                        
                     
                      tot = 0.0;
                    }
                  n = get_n(kmatch,d.getMonth());
                  if (parseInt(texts[i].innerHTML) && kmatch != 999)
                    {
                    //  console.log("trying to get [" + n +"+"+kmatch + "][" + texts[i].innerHTML +"]");
                    // console.log("inside = " + mois_j[n+kmatch][texts[i].innerHTML]);
                       tot += mois_j[n][texts[i].innerHTML];
                    }
                  
                  if (xxx)
                      oldx = xxx;
                  else
                      oldx = -100;
                  if (xxx)
                      oldy = yyy;
                  match = false
 
                }       
                     
            };