// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * Debug information about an active copresence directive. * @typedef {{ * type: string, * medium: string, * duration: string * }} */ var Directive; /** * Debug information about a recent copresence token. * @typedef {{ * id: string, * statuses: string, * medium: string, * time: string * }} */ var Token; /** * Callback to refresh the list of directives. * @param {Array} directives */ function refreshDirectives(directives) { var table = $('directives-table').tBodies[0]; // Fix the directives table to have the correct number of rows. while (table.rows.length < directives.length) table.insertRow(); while (table.rows.length > directives.length) table.deleteRow(); // Populate the directives into the table. directives.forEach(function(directive, index) { var row = table.rows.item(index); while (row.cells.length < 3) row.insertCell(); row.cells.item(0).textContent = directive.type; row.cells.item(1).textContent = directive.medium; row.cells.item(2).textContent = directive.duration; }); } /** * Callback to add or update transmitted tokens. * @param {Token} token */ function updateTransmittedToken(token) { updateTokenTable($('transmitted-tokens-table'), token); } /** * Callback to add or update received tokens. * @param {Token} token */ function updateReceivedToken(token) { updateTokenTable($('received-tokens-table'), token); } /** * Callback to clear out the token tables. */ function clearTokens() { clearTable($('transmitted-tokens-table')); clearTable($('received-tokens-table')); } /** * Add or update a token in the specified table. * @param {HTMLTableElement} table * @param {Token} token */ function updateTokenTable(table, token) { var rows = table.tBodies[0].rows; var index; for (index = 0; index < rows.length; index++) { var row = rows.item(index); if (row.cells[0].textContent == token.id) { updateTokenRow(row, token); break; } } if (index == rows.length) updateTokenRow(table.tBodies[0].insertRow(), token); } /** * Update a token on the specified row. * @param {HTMLTableRowElement} row * @param {Token} token */ function updateTokenRow(row, token) { while (row.cells.length < 4) row.insertCell(); row.className = token.statuses; row.cells[0].textContent = token.id; row.cells[1].textContent = token.statuses.replace('confirmed', '(Confirmed)'); row.cells[2].textContent = token.medium; row.cells[3].textContent = token.time; } /** * Delete all the rows in a table. * @param {HTMLTableElement} table */ function clearTable(table) { var body = table.tBodies[0]; while (body.rows.length > 0) body.deleteRow(); } document.addEventListener('DOMContentLoaded', function() { chrome.send('populateCopresenceState'); $('reset-button').addEventListener('click', function() { if (confirm(loadTimeData.getString('confirm_delete'))) chrome.send('clearCopresenceState'); }); });