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