// ==UserScript== // @name VirtualBlinders // @namespace Utopiah // @description Stay focus, damnit! // @include *youtube.com* // ==/UserScript== /* TODO # handle background tab ## stop timer when focus lost window.onunload or window.onblur ## restart timer when focus is back window.load or window.onfocus ## XXX what is happening when 2 background tabs are increasing the timer?! # improve the list of websites to include ## consider include * then refine window.location pattern per task # make timers (default to 0 sec, value defined via the script or a GM_Value) to be more flexible ## reset timer either manually or per day (i.e.) reset if last set date <5AM ## set 2 thresholds, the first as a warning, the second as an action Note that it does work even when Flash has focus. */ var t; var MODE="video"; var time_spent = GM_getValue(MODE,0); GM_xmlhttpRequest({ method: "GET", url: "http://fabien.benetou.fr/pub/currenttask", onload: function(response) { task = response.responseText; responseCheck(task); } }); function responseCheck(task) { task = 'Reading\n'; timeThreshold = 600; aboveThreshold = ( timeThreshold < time_spent ); aboveThreshold = false; if (task == 'Reading\n' || task == 'Programming\n'){ if ( !aboveThreshold ) { //under threshold, just display a warning and the content document.body.innerHTML="You should be focusing on " + task + " instead,\nare you sure you need that information from that website?" + "
Note that you have already spent " + time_spent + " seconds on that website so far!" + "(which still is under the threshold of "+timeThreshold+" seconds)
" +document.body.innerHTML; t=window.setInterval(mytimer,1000); //regarding the specific syntax //see http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Pitfall_.231:_Auto-eval_Strings GM_log("register listeners"); window.addEventListener("blur", stopTimer, true); window.addEventListener("focus", restartTimer, true); window.addEventListener("unload", setTotalTimeSpent, true); } else { //above threshold, only display the warning without the content document.body.innerHTML="You should be focusing on " + task + " instead,\nare you sure you need that information from that website?" + "
Note that you have already spent " + time_spent + " seconds on that website so far!
" + "(which is above the allowed threshold of "+timeThreshold+" seconds)
"; } } } function mytimer() { //GM_log("timer tick"); time_spent=time_spent+1; //fail document.getElementById('timespent').innerText=time_spent; } function stopTimer() { GM_log("stop timer"); window.clearInterval(t); } function restartTimer() { GM_log("restart timer"); t=window.setInterval(mytimer,1000); } function setTotalTimeSpent() { GM_log("set total time spent"); GM_setValue(MODE,time_spent); // probably better to re-read the value then add the time ellapsed since }