您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
https://github.com/pcluchet/logtime-plus
// ==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 } };
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址