NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @id 101_Logtime // @name 101_Logtime // @namespace http://tampermonkey.net/ // @version 1.11.0 // @description Affiche votre logtime du mois courant et des 3 mois précédents, avant d'installer ce script il faut tout d'abord avoir l'extension tampermonkey ## LIEN TAMPERMONKEY : https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=fr // @author Grégoire Hazette // @match https://profile.intra.42.fr/ // @match https://profile.intra.42.fr/users/* // @downloadURL https://openuserjs.org/install/ghazette/101_Logtime.user.js // @updateURL https://openuserjs.org/install/ghazette/101_Logtime.user.js // @run-at document-end // @license MIT // ==/UserScript== var months = { 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December" }; function getJSON(url) { var Httpreq = new XMLHttpRequest(); Httpreq.open("GET", url, false); Httpreq.send(null); return JSON.parse(Httpreq.responseText); } function getLogin() { let login = document.getElementsByClassName("login")[0]; return (login.getAttribute("data-login")); } function get_Logtime() { let date = new Date(); let month = date.getMonth() + 1; if (month < 10) month = "0" + month; let year = date.getYear() + 1900; let regexp = new RegExp(year + "-" + month + "-[0-9]{2}"); let parsed = getJSON("https://profile.intra.42.fr/users/" + getLogin() + "/locations_stats.json"); let Logtime = 0; let hours = 0; let minutes = 0; let seconds = 0; for (let key in parsed) { if (key.match(regexp)) { let time = (parsed[key]).split(":"); hours += Number(time[0]); minutes += Number(time[1]); seconds += Number(time[2]); } } while (seconds) { if (seconds < 60) break; seconds -= 60; minutes++; } while (minutes) { if (minutes < 60) break; minutes -= 60; hours++; } hours = (hours < 10) ? "0" + hours : hours; minutes = (minutes < 10) ? "0" + minutes : minutes; seconds = (seconds < 10) ? "0" + seconds : seconds; return (hours + "H " + minutes + "M " + seconds + "S"); } function get_logtime_prev() { let date = new Date(); let i = 0; let month = date.getMonth(); /* month 0 to 11, this is why if 0 (january) we set it to 12 (december) */ if (month === 0) month = 12; let parsed = getJSON("https://profile.intra.42.fr/users/" + getLogin() + "/locations_stats.json"); var Logtime = []; let hours = 0; let minutes = 0; let seconds = 0; while (i < 3) { if (month === 0) month = 12; if (month < 10) month = "0" + month; let regexp = new RegExp(month + "-[0-9]{2}"); let logtime = 0; for (let key in parsed) { if (key.match(regexp)) { let time = (parsed[key]).split(":"); hours += Number(time[0]); minutes += Number(time[1]); seconds += Number(time[2]); } } while (seconds) { if (seconds < 60) break; seconds -= 60; minutes++; } while (minutes) { if (minutes < 60) break; minutes -= 60; hours++; } hours = (hours < 10) ? "0" + hours : hours; minutes = (minutes < 10) ? "0" + minutes : minutes; seconds = (seconds < 10) ? "0" + seconds : seconds; Logtime[i] = hours + "H " + minutes + "M " + seconds + "S"; month--; hours = 0; minutes = 0; seconds = 0; i++; } return Logtime; } function createEl(type, _class, id, css, html) { let elem = document.createElement(type); if (_class) elem.className = _class; if (id) elem.id = id; if (css) elem.style.cssText = css; if (html) elem.innerHTML = html; return elem; } function matching(obj) { obj = obj.join('|'); if ((document.baseURI).match(obj)) return 1; return 0; } function display() { let month = new Date().getMonth() + 1; var regexs = [ "^https:\/\/profile\.intra\.42\.fr\/$", "^https:\/\/profile\.intra\.42\.fr\/#$" ]; if (matching(regexs)) { const currentMonth = months[month]; let text = document.createTextNode(" for " + currentMonth + " : " + get_Logtime()); let login = document.getElementsByClassName("profile-title")[2]; login.appendChild(text); setInterval(() => { login.innerHTML = "LOGTIME for " + currentMonth + " : " + get_Logtime(); }, 1000) } if ((document.baseURI).match(/^https:\/\/profile\.intra\.42\.fr\/users\/[a-z0-9-_]+$/i)) { let userinfo = document.getElementsByClassName("user-infos-sub")[0]; let div = createEl("div", "user-eta user-inline-stat", null, null, null); let title = createEl("span", "user-eta user-inline-stat", null, "color: rgb(0, 186, 150);", months[new Date().getMonth() + 1] + " Logtime"); let sub = createEl("span", "user-eta-value", null, null, get_Logtime()); userinfo.appendChild(div); div.appendChild(title); div.appendChild(sub); setInterval(() => { sub.innerHTML = get_Logtime(); }, 1000) } let Logtimeprev = get_logtime_prev(); let svgLogtime = document.getElementById("user-locations"); let i = []; i[0] = (month == 1) ? month = 12 : month -= 1; i[1] = (month == 1) ? month = 12 : month -= 1; i[2] = (month == 1) ? month = 12 : month -= 1; let prevMonths = "<span style=\"opacity:0.85;\">" + months[i[0]] + " : " + Logtimeprev[0] + "</span><br><span style=\"opacity:0.70;\">" + months[i[1]] + " : " + Logtimeprev[1] + "</span><br><span style=\"opacity:0.50;\">" + months[i[2]] + " : " + Logtimeprev[2] + "</span"; let logtimediv = createEl("div", null, null, "color:#202026; font-family: Futura PT; font-size:0.85em; font-weight: bold; width:50%; position:absolute; bottom:20px;", prevMonths); svgLogtime.parentNode.appendChild(logtimediv); } (function () { 'use strict'; display(); })();