15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * Converts a number in bytes to a string in megabytes split by comma into
7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * three digit block.
8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * @param {number} bytes The number in bytes.
9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * @return {string} Formatted string in megabytes.
10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch */
11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochfunction ToMegaByteString(bytes) {
12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  var mb = Math.floor(bytes / (1 << 20));
13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return mb.toString().replace(
14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      /\d+?(?=(\d{3})+$)/g,  // Digit sequence (\d+) followed (?=) by 3n digits.
15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      function(three_digit_block) { return three_digit_block + ','; }
16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  );
17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch/**
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the Drive related Preferences section.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Array} preferences List of dictionaries describing preferences.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateDriveRelatedPreferences(preferences) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var ul = $('drive-related-preferences');
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  updateKeyValueList(ul, preferences);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Updates the Connection Status section.
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param {Object} connStatus Dictionary containing connection status.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)function updateConnectionStatus(connStatus) {
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  $('connection-status').textContent = connStatus['status'];
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  $('has-refresh-token').textContent = connStatus['has-refresh-token'];
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  $('has-access-token').textContent = connStatus['has-access-token'];
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates the Path Configurations section.
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Array} paths List of dictionaries describing paths.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function updatePathConfigurations(paths) {
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var ul = $('path-configurations');
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  updateKeyValueList(ul, paths);
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the GCache Contents section.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Array} gcacheContents List of dictionaries describing metadata
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of files and directories under the GCache directory.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} gcacheSummary Dictionary of summary of GCache.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateGCacheContents(gcacheContents, gcacheSummary) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var tbody = $('gcache-contents');
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < gcacheContents.length; i++) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var entry = gcacheContents[i];
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var tr = document.createElement('tr');
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Add some suffix based on the type.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var path = entry.path;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (entry.is_directory)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      path += '/';
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else if (entry.is_symbolic_link)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      path += '@';
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', path));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', entry.size));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', entry.last_modified));
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    tr.appendChild(createElementFromText('td', entry.permission));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tbody.appendChild(tr);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  $('gcache-summary-total-size').textContent =
74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      ToMegaByteString(gcacheSummary['total_size']);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the File System Contents section. The function is called from the
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * C++ side repeatedly with contents of a directory.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} directoryContentsAsText Pre-formatted string representation
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of contents a directory in the file system.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateFileSystemContents(directoryContentsAsText) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var div = $('file-system-contents');
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  div.appendChild(createElementFromText('pre', directoryContentsAsText));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the Cache Contents section.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} cacheEntry Dictionary describing a cache entry.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The function is called from the C++ side repeatedly.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateCacheContents(cacheEntry) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var tr = document.createElement('tr');
958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  tr.appendChild(createElementFromText('td', cacheEntry.local_id));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tr.appendChild(createElementFromText('td', cacheEntry.md5));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tr.appendChild(createElementFromText('td', cacheEntry.is_present));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tr.appendChild(createElementFromText('td', cacheEntry.is_pinned));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tr.appendChild(createElementFromText('td', cacheEntry.is_dirty));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('cache-contents').appendChild(tr);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the Local Storage summary.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} localStorageSummary Dictionary describing the status of local
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * stogage.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateLocalStorageUsage(localStorageSummary) {
110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  var freeSpaceInMB = ToMegaByteString(localStorageSummary.free_space);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('local-storage-freespace').innerText = freeSpaceInMB;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the summary about in-flight operations.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Array} inFlightOperations List of dictionaries describing the status
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of in-flight operations.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateInFlightOperations(inFlightOperations) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var container = $('in-flight-operations-contents');
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Reset the table. Remove children in reverse order. Otherwides each
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // existingNodes[i] changes as a side effect of removeChild.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var existingNodes = container.childNodes;
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (var i = existingNodes.length - 1; i >= 0; i--) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var node = existingNodes[i];
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (node.className == 'in-flight-operation')
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      container.removeChild(node);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add in-flight operations.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < inFlightOperations.length; i++) {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var operation = inFlightOperations[i];
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var tr = document.createElement('tr');
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.className = 'in-flight-operation';
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    tr.appendChild(createElementFromText('td', operation.id));
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    tr.appendChild(createElementFromText('td', operation.type));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', operation.file_path));
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    tr.appendChild(createElementFromText('td', operation.state));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var progress = operation.progress_current + '/' + operation.progress_total;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (operation.progress_total > 0) {
142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      var percent = operation.progress_current / operation.progress_total * 100;
143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      progress += ' (' + Math.round(percent) + '%)';
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', progress));
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    container.appendChild(tr);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Updates the summary about about resource.
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} aboutResource Dictionary describing about resource.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function updateAboutResource(aboutResource) {
156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  var quotaTotalInMb = ToMegaByteString(aboutResource['account-quota-total']);
157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  var quotaUsedInMb = ToMegaByteString(aboutResource['account-quota-used']);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('account-quota-info').textContent =
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      quotaUsedInMb + ' / ' + quotaTotalInMb + ' (MB)';
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('account-largest-changestamp-remote').textContent =
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      aboutResource['account-largest-changestamp-remote'];
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  $('root-resource-id').textContent = aboutResource['root-resource-id'];
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Updates the summary about app list.
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} appList Dictionary describing app list.
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function updateAppList(appList) {
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  $('app-list-etag').textContent = appList['etag'];
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  var itemContainer = $('app-list-items');
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (var i = 0; i < appList['items'].length; i++) {
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    var app = appList['items'][i];
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var tr = document.createElement('tr');
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.className = 'installed-app';
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tr.appendChild(createElementFromText('td', app.name));
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tr.appendChild(createElementFromText('td', app.application_id));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', app.object_type));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tr.appendChild(createElementFromText('td', app.supports_create));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    itemContainer.appendChild(tr);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the local cache information about account metadata.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} localMetadata Dictionary describing account metadata.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateLocalMetadata(localMetadata) {
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  var changestamp = localMetadata['account-largest-changestamp-local'];
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('account-largest-changestamp-local').textContent =
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      changestamp.toString() +
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      (changestamp > 0 ? ' (loaded)' : ' (not loaded)') +
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (localMetadata['account-metadata-refreshing'] ? ' (refreshing)' : '');
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the summary about delta update status.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} deltaUpdateStatus Dictionary describing delta update status.
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateDeltaUpdateStatus(deltaUpdateStatus) {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('push-notification-enabled').textContent =
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        deltaUpdateStatus['push-notification-enabled'];
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('last-update-check-time').textContent =
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        deltaUpdateStatus['last-update-check-time'];
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('last-update-check-error').textContent =
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        deltaUpdateStatus['last-update-check-error'];
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Updates the event log section.
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Array} log Array of events.
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function updateEventLog(log) {
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  var ul = $('event-log');
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  updateKeyValueList(ul, log);
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an element named |elementName| containing the content |text|.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} elementName Name of the new element to be created.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} text Text to be contained in the new element.
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {HTMLElement} The newly created HTML element.
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function createElementFromText(elementName, text) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var element = document.createElement(elementName);
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  element.appendChild(document.createTextNode(text));
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return element;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates <ul> element with the given key-value list.
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {HTMLElement} ul <ul> element to be modified.
237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * @param {Array} list List of dictionaries containing 'key', 'value' (optional)
238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * and 'class' (optional). For each element <li> element with specified class is
239a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * created.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateKeyValueList(ul, list) {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < list.length; i++) {
243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    var item = list[i];
244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    var text = item.key;
245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (item.value != '')
246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      text += ': ' + item.value;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var li = createElementFromText('li', text);
249a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (item.class)
250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      li.classList.add(item.class);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ul.appendChild(li);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates the text next to the 'reset' button to update the status.
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {boolean} success whether or not resetting has succeeded.
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function updateResetStatus(success) {
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  $('reset-status-text').textContent = (success ? 'success' : 'failed');
261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', function() {
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.send('pageLoaded');
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the table of contents.
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var toc = $('toc');
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var sections = document.getElementsByTagName('h2');
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < sections.length; i++) {
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var section = sections[i];
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a = createElementFromText('a', section.textContent);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    a.href = '#' + section.id;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var li = document.createElement('li');
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    li.appendChild(a);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    toc.appendChild(li);
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  $('button-clear-access-token').addEventListener('click', function() {
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome.send('clearAccessToken');
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  });
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  $('button-clear-refresh-token').addEventListener('click', function() {
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome.send('clearRefreshToken');
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  });
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  $('button-reset-drive-filesystem').addEventListener('click', function() {
2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('reset-status-text').textContent = 'resetting...';
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    chrome.send('resetDriveFileSystem');
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  });
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  $('button-show-file-entries').addEventListener('click', function() {
292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    var button = $('button-show-file-entries');
293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    button.parentNode.removeChild(button);
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    chrome.send('listFileEntries');
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  });
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  window.setInterval(function() {
298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    chrome.send('periodicUpdate');
299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }, 1000);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
301