Logtime Plus

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

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==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
 
                }       
                     
            };