Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Side by Side Diff: remoting/webapp/connection_history.js

Issue 9562044: Added connection history (minus the history data) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't instantiate the connection history dialog. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/webapp/connection_history.css ('k') | remoting/webapp/main.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 * @fileoverview
7 * Class to track of connections to and from this computer and display them.
8 */
9
10 'use strict';
11
12 /** @suppress {duplicate} */
13 var remoting = remoting || {};
14
15 /** @constructor */
16 remoting.ConnectionHistory = function() {
17 /** @type {HTMLElement} @private */
18 this.viewAll_ = document.getElementById('history-view-all');
19 /** @type {HTMLElement} @private */
20 this.viewOutgoing_ = document.getElementById('history-view-outgoing');
21 /** @type {HTMLElement} @private */
22 this.viewIncoming_ = document.getElementById('history-view-incoming');
23 /** @type {HTMLElement} @private */
24 this.clear_ = document.getElementById('clear-connection-history');
25 /** @type {HTMLElement} @private */
26 this.historyEntries_ = document.getElementById('connection-history-entries');
27 /** @type {remoting.ConnectionHistory.Filter} @private */
28 this.filter_ = remoting.ConnectionHistory.Filter.VIEW_ALL;
29
30 /** @type {remoting.ConnectionHistory} */
31 var that = this;
32 var closeButton = document.getElementById('close-connection-history');
33 closeButton.addEventListener('click', function() { that.hide(); }, false);
34 /** @param {Event} event Event identifying which button was clicked. */
35 var setFilter = function(event) { that.setFilter_(event.target); };
36 var clearHistory = function() { that.clearHistory_(); };
37 this.viewAll_.addEventListener('click', setFilter, false);
38 this.viewOutgoing_.addEventListener('click', setFilter, false);
39 this.viewIncoming_.addEventListener('click', setFilter, false);
40 this.clear_.addEventListener('click', clearHistory, false);
41 };
42
43 /** @enum {string} */
44 remoting.ConnectionHistory.Filter = {
45 VIEW_ALL: 'history-view-all',
46 VIEW_OUTGOING: 'history-view-outgoing',
47 VIEW_INCOMING: 'history-view-incoming'
48 };
49
50 /** Show the dialog and refresh its contents */
51 remoting.ConnectionHistory.prototype.show = function() {
52 this.load();
53 remoting.setMode(remoting.AppMode.HISTORY);
54 };
55
56 /** Hide the dialog */
57 remoting.ConnectionHistory.prototype.hide = function() {
58 remoting.setMode(remoting.AppMode.HOME);
59 };
60
61 /**
62 * A saved entry in the connection history.
63 * @param {Object} object A Javascript object, which may or may not be of the
64 * correct type.
65 * @constructor
66 */
67 remoting.ConnectionHistory.Entry = function(object) {
68 this.valid =
69 'date' in object && typeof(object['date']) == 'number' &&
70 'from' in object && typeof(object['from']) == 'string' &&
71 'to' in object && typeof(object['to']) == 'string' &&
72 'duration' in object && typeof(object['duration']) == 'number';
73 if (this.valid) {
74 /** @type {Date} */
75 this.date = new Date(object['date']);
76 /** @type {string} */
77 this.from = object['from'];
78 /** @type {string} */
79 this.to = object['to'];
80 /** @type {number} */
81 this.duration = object['duration'];
82 }
83 };
84
85 /**
86 * @return {string} The connection duration, formatted as a string, or 'Not
87 * available' if there is no duration stored.
88 * @private
89 */
90 remoting.ConnectionHistory.Entry.prototype.durationString_ = function() {
91 var secs = this.duration % 60;
92 var mins = ((this.duration - secs) / 60) % 60;
93 var hours = (this.duration - secs - 60 * mins) / 3600;
94 if (secs < 10) {
95 secs = '0' + secs;
96 }
97 var result = mins + ':' + secs;
98 if (hours > 0) {
99 if (mins < 10) {
100 result = '0' + result;
101 }
102 result = hours + ':' + result;
103 }
104 return result;
105 };
106
107 /**
108 * @return {{summary: Element, detail: Element}} Two table rows containing the
109 * summary and detail information, respectively, for the connection.
110 */
111 remoting.ConnectionHistory.Entry.prototype.createTableRows = function() {
112 var summary = document.createElement('tr');
113 addClass(summary, 'connection-history-summary');
114 var zippy = document.createElement('td');
115 addClass(zippy, 'zippy');
116 summary.appendChild(zippy);
117 // TODO(jamiewalch): Find a way of combining date and time such both align
118 // vertically without being considered separate columns, which puts too much
119 // space between them.
120 var date = document.createElement('td');
121 // TODO(jamiewalch): Use a shorter localized version of the date.
122 date.innerText = this.date.toLocaleDateString();
123 summary.appendChild(date);
124 var time = document.createElement('td');
125 time.innerText = this.date.toLocaleTimeString();
126 summary.appendChild(time);
127 var from = document.createElement('td');
128 from.innerText = this.from;
129 summary.appendChild(from);
130 var to = document.createElement('td');
131 to.innerText = this.to;
132 summary.appendChild(to);
133 var duration = document.createElement('td');
134 duration.innerText = this.durationString_();
135 summary.appendChild(duration);
136 // TODO(jamiewalch): Fill out the detail row correctly.
137 var detail = document.createElement('tr');
138 addClass(detail, 'connection-history-detail');
139 for (var i = 0; i < summary.childElementCount; ++i) {
140 var td = document.createElement('td');
141 if (i != 0) {
142 // The inner div allows the details rows to be hidden without changing
143 // the column widths.
144 var div = document.createElement('div');
145 div.innerText = 'Nothing to see here';
146 td.appendChild(div);
147 }
148 detail.appendChild(td);
149 }
150 /** @param {Element} node The summary row. */
151 var toggleDetail = function(node) {
152 if (hasClass(node.className, 'expanded')) {
153 removeClass(node, 'expanded');
154 } else {
155 addClass(node, 'expanded');
156 }
157 };
158 summary.addEventListener('click',
159 function() { toggleDetail(summary); },
160 false);
161 detail.addEventListener('click',
162 function() { toggleDetail(summary); },
163 false);
164 return { 'summary': summary, 'detail': detail };
165 };
166
167 /** Refresh the contents of the connection history table */
168 remoting.ConnectionHistory.prototype.load = function() {
169 // TODO(jamiewalch): Load connection history data when it's available.
170 var history = [];
171 // Remove existing entries from the DOM and repopulate.
172 // TODO(jamiewalch): Enforce the filter.
173 this.historyEntries_.innerHTML = '';
174 for (var i in history) {
175 var connection = new remoting.ConnectionHistory.Entry(history[i]);
176 if (connection.valid) {
177 var rows = connection.createTableRows();
178 this.historyEntries_.appendChild(rows.summary);
179 this.historyEntries_.appendChild(rows.detail);
180 }
181 }
182 };
183
184 /**
185 * @param {EventTarget} element The element that was clicked.
186 * @private
187 */
188 remoting.ConnectionHistory.prototype.setFilter_ = function(element) {
189 for (var i in remoting.ConnectionHistory.Filter) {
190 var link = document.getElementById(remoting.ConnectionHistory.Filter[i]);
191 if (element == link) {
192 addClass(link, 'no-link');
193 this.filter_ = /** @type {remoting.ConnectionHistory.Filter} */ (i);
194 } else {
195 removeClass(link, 'no-link');
196 }
197 }
198 };
199
200 /**
201 * @private
202 */
203 remoting.ConnectionHistory.prototype.clearHistory_ = function() {
204 // TODO(jamiewalch): Implement once we store users' connection histories.
205 };
206
207 /** @type {remoting.ConnectionHistory} */
208 remoting.ConnectionHistory.connectionHistory = null;
OLDNEW
« no previous file with comments | « remoting/webapp/connection_history.css ('k') | remoting/webapp/main.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698