diff --git a/greasemonkey/virtualblinders.user.js b/greasemonkey/virtualblinders.user.js
index f52a1a5..bdea8d1 100644
--- a/greasemonkey/virtualblinders.user.js
+++ b/greasemonkey/virtualblinders.user.js
@@ -6,9 +6,12 @@
// ==/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 failing so far
# improve the list of websites to include
-## consider include * then refine pattern per task
+## 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
@@ -26,17 +29,65 @@ GM_xmlhttpRequest({
url: "http://fabien.benetou.fr/pub/currenttask",
onload: function(response) {
task = response.responseText;
- if (task == 'Reading\n' || task == 'Programming\n'){
- //document.body.innerHTML="You should be focusing on "+task+" instead,\nare you sure you need that information from that website?";
- 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!
"+document.body.innerHTML;
- t=setInterval(mytimer,1000);
- //see http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Pitfall_.231:_Auto-eval_Strings
+ responseCheck(task);
}
- }
});
-function mytimer(){
+function responseCheck(task) {
+ //task = 'Reading\n';
+ timeThreshold = 600;
+ aboveThreshold = ( timeThreshold < time_spent );
+ //aboveThreshold = true;
+ 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("onblur", stopTimer, true);
+ window.addEventListener("onfocus", restartTimer, true);
+ window.addEventListener("onunload", 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;
- document.getElementById('timespent').innerText=time_spent;
+ //fail document.getElementById('timespent').innerText=time_spent;
+ GM_setValue(MODE,time_spent);
+ // this should only be un setTotalTimeSpent() but since the events do not work this will remain here for now
+}
+
+function stopTimer() {
+ GM_log("stop timer");
+ // never called!
+ window.clearInterval(t);
+ // tested and worked, t value is correct
+}
+
+function restartTimer() {
+ GM_log("restart timer");
+ t=window.setInterval(mytimer,1000);
+}
+
+function setTotalTimeSpent() {
+ GM_log("set total time spent");
GM_setValue(MODE,time_spent);
}