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