Home | History | Annotate | Download | only in idle_simple
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 /**
      6  * Convert a state and time into a nice styled chunk of HTML.
      7  */
      8 function renderState(state, time) {
      9   var now = new Date().getTime();
     10   var diff = Math.round((time.getTime() - now) / 1000);
     11   var str = (diff == 0) ?
     12       "now" :
     13       Math.abs(diff) + " seconds " + (diff > 0 ? "from now" : "ago");
     14   var col = (state == "active") ?
     15       "#009900" :
     16       "#990000";
     17   return "<b style='color: " + col + "'>" + state + "</b> " + str;
     18 };
     19 
     20 /**
     21  * Creates DOM and injects a rendered state into the page.
     22  */
     23 function renderItem(state, time, parent) {
     24   var dom_item = document.createElement('li');
     25   dom_item.innerHTML = renderState(state, time);
     26   parent.appendChild(dom_item);
     27 };
     28 
     29 // Store previous state so we can show deltas.  This is important
     30 // because the API currently doesn't fire idle messages, and we'd
     31 // like to keep track of last time we went idle.
     32 var laststate = null;
     33 var laststatetime = null;
     34 
     35 /**
     36  * Checks the current state of the browser.
     37  */
     38 function checkState() {
     39   threshold = parseInt(document.querySelector('#idle-threshold').value);
     40   var dom_threshold = document.querySelector('#idle-set-threshold');
     41   dom_threshold.innerText = threshold;
     42 
     43   // Request the state based off of the user-supplied threshold.
     44   chrome.idle.queryState(threshold, function(state) {
     45     var time = new Date();
     46     if (laststate != state) {
     47       laststate = state;
     48       laststatetime = time;
     49     }
     50 
     51     // Keep rendering results so we get a nice "seconds elapsed" view.
     52     var dom_result = document.querySelector('#idle-state');
     53     dom_result.innerHTML = renderState(state, time);
     54     var dom_laststate = document.querySelector('#idle-laststate');
     55     dom_laststate.innerHTML = renderState(laststate, laststatetime);
     56   });
     57 };
     58 
     59 var dom_history = document.querySelector('#idle-history');
     60 
     61 /**
     62  * Render the data gathered by the background page - should show a log
     63  * of "active" states.  No events are fired upon idle.
     64  */
     65 function renderHistory() {
     66   dom_history.innerHTML = "";
     67   var history_log = chrome.extension.getBackgroundPage().history_log;
     68   for (var i = 0; i < history_log.length; i++) {
     69     var data = history_log[i];
     70     renderItem(data['state'], data['time'], dom_history);
     71   }
     72 };
     73 
     74 
     75 document.addEventListener('DOMContentLoaded', function() {
     76   // Check every second (even though this is overkill - minimum idle
     77   // threshold is 15 seconds) so that the numbers appear to be counting up.
     78   checkState();
     79   window.setInterval(checkState, 1000);
     80 
     81   // Check every second (see above).
     82   renderHistory();
     83   window.setInterval(renderHistory, 1000);
     84 });
     85