OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 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 // require cr.js |
| 6 // require cr/event_target.js |
| 7 // require cr/util.js |
| 8 |
| 9 (function() { |
| 10 'use strict'; |
| 11 |
| 12 /** |
| 13 * Copy properties from src to dest. |
| 14 * @param {Object} src |
| 15 * @param {Object} dest |
| 16 */ |
| 17 var overwrite_ = function(src, dest) { |
| 18 for (var i in src) |
| 19 dest[i] = src[i]; |
| 20 return dest; |
| 21 }; |
| 22 |
| 23 var normalizer_ = { |
| 24 avail_: function(v) { |
| 25 return v === undefined ? 'N/A' : ''; |
| 26 }, |
| 27 |
| 28 bool: function(v) { |
| 29 return normalizer_.avail_(v) || (v ? 'true' : 'false'); |
| 30 }, |
| 31 |
| 32 text: function(v) { |
| 33 return normalizer_.avail_(v) || v; |
| 34 }, |
| 35 |
| 36 numBytes: function(v) { |
| 37 return normalizer_.avail_(v) || (function() { |
| 38 var PREFIX = ['', 'K', 'M', 'G', 'T']; |
| 39 var len = Math.floor((v.length - 1) / 3); |
| 40 return v.substring(0, v.length - 3 * len) + |
| 41 PREFIX[len] + 'B'; |
| 42 })(); |
| 43 }, |
| 44 |
| 45 date: function(v) { |
| 46 return normalizer_.avail_(v) || (function() { |
| 47 // TODO(tzik): show relative time |
| 48 return new Date(v).toString(); |
| 49 })(); |
| 50 }, |
| 51 |
| 52 num: function(v) { |
| 53 return normalizer_.avail_(v) || v.toString(); |
| 54 } |
| 55 }; |
| 56 |
| 57 /** |
| 58 * @type {{ |
| 59 * available_space: {?string}, |
| 60 * global_data: Object.<string, Object>, |
| 61 * host_data: Object.<string, Object>, |
| 62 * origin_data: Object.<string, Object> |
| 63 * }} |
| 64 */ |
| 65 var quota_data = { |
| 66 available_space: undefined, |
| 67 global_data: {}, |
| 68 host_data: {}, |
| 69 origin_data: {}, |
| 70 stats: {} |
| 71 }; |
| 72 |
| 73 /** |
| 74 * Event Handler for |cr.quota.onAvailableSpaceUpdated|. |
| 75 * |event.detail| contains |available_space| size. |
| 76 * |available_space| is a (toString'ed) 64bit integer, |
| 77 * that represents total available disk space. |
| 78 */ |
| 79 function handleAvailableSpace(event) { |
| 80 /** |
| 81 * @type {string} |
| 82 */ |
| 83 var available_space = event.detail; |
| 84 |
| 85 quota_data.available_space = available_space; |
| 86 $('diskspace-entry').innerHTML = normalizer_.numBytes(available_space); |
| 87 }; |
| 88 |
| 89 /** |
| 90 * Event Handler for |cr.quota.onGlobalDataUpdated|. |
| 91 * |event.detail| contains a record which has: |
| 92 * |type|: |
| 93 * Storage type, that is either 'temporary' or 'persistent' |
| 94 * |usage|: |
| 95 * Total storage usage of all hosts, |
| 96 * toString'ed 64bit integer. |
| 97 * |unlimited_usage|: |
| 98 * Total storage usage of unlimited-quota origins, |
| 99 * toString'ed 64bit integer. |
| 100 * |quota|: |
| 101 * Total quota of the storage, toString'ed 64bit integer. |
| 102 * |
| 103 * |usage|, |unlimited_usage| and |quota| can be missing, |
| 104 * and some additional field can be included. |
| 105 */ |
| 106 function handleGlobalData(event) { |
| 107 /** |
| 108 * @type {{ |
| 109 * type: {!string}, |
| 110 * usage: {?string}, |
| 111 * unlimited_usage: {?string} |
| 112 * quota: {?string} |
| 113 * }} |
| 114 */ |
| 115 var data = event.detail; |
| 116 |
| 117 var entry = quota_data.global_data[data.type] || |
| 118 (quota_data.global_data[data.type] = {}); |
| 119 overwrite_(data, entry); |
| 120 |
| 121 if (!entry.element) { |
| 122 entry.element = cr.doc.createElement('tr'); |
| 123 $('globaldata-entries').appendChild(entry.element); |
| 124 } |
| 125 |
| 126 entry.element.innerHTML = |
| 127 '<td>' + normalizer_.text(entry.type) + '</td>' + |
| 128 '<td>' + normalizer_.numBytes(entry.usage) + '</td>' + |
| 129 '<td>' + normalizer_.numBytes(entry.unlimited_usage) + '</td>' + |
| 130 '<td>' + normalizer_.numBytes(entry.quota) + '</td>'; |
| 131 }; |
| 132 |
| 133 /** |
| 134 * Event Handler for |cr.quota.onHostDataUpdated|. |
| 135 * |event.detail| contains records which have: |
| 136 * |host|: |
| 137 * Hostname of the entry. (e.g. 'example.com') |
| 138 * |type|: |
| 139 * Storage type. 'temporary' or 'persistent' |
| 140 * |usage|: |
| 141 * Total storage usage of the host, toString'ed 64bit integer. |
| 142 * |quota|: |
| 143 * Per-host quota, toString'ed 64bit integer. |
| 144 * |
| 145 * |usage| and |quota| can be missing, |
| 146 * and some additional field can be included. |
| 147 */ |
| 148 function handleHostData(event) { |
| 149 /** |
| 150 * @type {Array<{ |
| 151 * host: {!string}, |
| 152 * type: {!string}, |
| 153 * usage: {?string}, |
| 154 * quota: {?string} |
| 155 * }} |
| 156 */ |
| 157 var data_array = event.detail; |
| 158 |
| 159 for (var i = 0; i < data_array.length; ++i) { |
| 160 var data = data_array[i]; |
| 161 |
| 162 var id = data.host + '/' + data.type; |
| 163 var entry = quota_data.host_data[id] || |
| 164 (quota_data.host_data[id] = {}); |
| 165 overwrite_(data, entry); |
| 166 |
| 167 if (!entry.element) { |
| 168 entry.element = cr.doc.createElement('tr'); |
| 169 $('host-entries').appendChild(entry.element); |
| 170 } |
| 171 |
| 172 entry.element.innerHTML = |
| 173 '<td>' + normalizer_.text(entry.host) + '</td>' + |
| 174 '<td>' + normalizer_.text(entry.type) + '</td>' + |
| 175 '<td>' + normalizer_.numBytes(entry.usage) + '</td>' + |
| 176 '<td>' + normalizer_.numBytes(entry.quota) + '</td>'; |
| 177 } |
| 178 } |
| 179 |
| 180 /** |
| 181 * Event Handler for |cr.quota.onOriginDataUpdated|. |
| 182 * |event.detail| contains records which have: |
| 183 * |origin|: |
| 184 * Origin URL of the entry. |
| 185 * |type|: |
| 186 * Storage type of the entry. 'temporary' or 'persistent'. |
| 187 * |host|: |
| 188 * Hostname of the entry. |
| 189 * |in_use|: |
| 190 * Whether the origin is in use or not. |
| 191 * |used_count|: |
| 192 * Used count of the storage from the origin. |
| 193 * |last_access_time|: |
| 194 * Last storage access time from the origin. |
| 195 * Number of seconds since Jan 1, 1970. |
| 196 * |
| 197 * |in_use|, |used_count| and |last_access_time| can be missing, |
| 198 * and some additional field can be included. |
| 199 */ |
| 200 function handleOriginData(event) { |
| 201 /** |
| 202 * @type {Array<{ |
| 203 * origin: {!string}, |
| 204 * type: {!string}, |
| 205 * host: {!string}, |
| 206 * in_use: {?boolean}, |
| 207 * used_count: {?number}, |
| 208 * last_access_time: {?number} |
| 209 * }>} |
| 210 */ |
| 211 var data_array = event.detail; |
| 212 |
| 213 for (var i = 0; i < data_array.length; ++i) { |
| 214 var data = data_array[i]; |
| 215 |
| 216 var id = data.origin + data.type; |
| 217 var entry = quota_data.origin_data[id] || |
| 218 (quota_data.origin_data[id] = {}); |
| 219 overwrite_(data, entry); |
| 220 |
| 221 if (!entry.element) { |
| 222 entry.element = cr.doc.createElement('tr'); |
| 223 $('origin-entries').appendChild(entry.element); |
| 224 } |
| 225 |
| 226 entry.element.innerHTML = |
| 227 '<td>' + normalizer_.text(entry.origin) + '</td>' + |
| 228 '<td>' + normalizer_.text(entry.type) + '</td>' + |
| 229 '<td>' + normalizer_.text(entry.host) + '</td>' + |
| 230 '<td>' + normalizer_.bool(entry.in_use) + '</td>' + |
| 231 '<td>' + normalizer_.num(entry.used_count) + '</td>' + |
| 232 '<td>' + normalizer_.date(entry.last_access_time) + '</td>'; |
| 233 } |
| 234 } |
| 235 |
| 236 /** |
| 237 * Event Handler for |cr.quota.onStatisticsUpdated|. |
| 238 * |event.detail| contains misc statistics data as dictionary. |
| 239 */ |
| 240 function handleStatistics(event) { |
| 241 var stats = event.detail; |
| 242 |
| 243 for (var key in stats) { |
| 244 var value = stats[key]; |
| 245 var entry = quota_data.stats[key] || |
| 246 (quota_data.stats[key] = {}); |
| 247 entry.value = value; |
| 248 if (!entry.element) { |
| 249 entry.element = cr.doc.createElement('tr'); |
| 250 $('stat-entries').appendChild(entry.element); |
| 251 } |
| 252 |
| 253 entry.element.innerHTML = |
| 254 '<td>' + normalizer_.text(entry.value) + '</td>'; |
| 255 } |
| 256 } |
| 257 |
| 258 function onLoad() { |
| 259 cr.quota.onAvailableSpaceUpdated.addEventListener('update', |
| 260 handleAvailableSpace); |
| 261 cr.quota.onGlobalDataUpdated.addEventListener('update', handleGlobalData); |
| 262 cr.quota.onHostDataUpdated.addEventListener('update', handleHostData); |
| 263 cr.quota.onOriginDataUpdated.addEventListener('update', handleOriginData); |
| 264 cr.quota.triggar(); |
| 265 } |
| 266 |
| 267 cr.doc.addEventListener('DOMContentLoaded', onLoad, false); |
| 268 })(); |
OLD | NEW |