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

Side by Side Diff: chrome/browser/resources/net_internals/detailsview.js

Issue 1593009: Add extra views to the new net internals page. This adds tabs along the top f... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 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 | « no previous file | chrome/browser/resources/net_internals/index.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * The DetailsView handles the tabbed view that displays either the "log" or 6 * The DetailsView handles the tabbed view that displays either the "log" or
7 * "timeline" view. This class keeps track of what the current view is, and 7 * "timeline" view. This class keeps track of what the current view is, and
8 * invalidates the specific view each time the selected data has changed. 8 * invalidates the specific view each time the selected data has changed.
9 * 9 *
10 * @constructor 10 * @constructor
11 */ 11 */
12 function DetailsView(logTabHandleId, 12 function DetailsView(tabHandlesContainerId,
13 timelineTabHandleId, 13 logTabId,
14 detailsTabContentId) { 14 timelineTabId,
15 // The DOM nodes that which contain the tab title. 15 logBoxId,
16 this.tabHandles_ = {}; 16 timelineBoxId) {
17 TabSwitcherView.call(this, new DivView(tabHandlesContainerId));
17 18
18 this.tabHandles_['timeline'] = document.getElementById(timelineTabHandleId); 19 this.logView_ = new DetailsLogView(logBoxId);
19 this.tabHandles_['log'] = document.getElementById(logTabHandleId); 20 this.timelineView_ = new DetailsTimelineView(timelineBoxId);
20 21
21 // The DOM node that contains the currently active tab sheet. 22 this.addTab(logTabId, this.logView_);
22 this.contentArea_ = document.getElementById(detailsTabContentId); 23 this.addTab(timelineTabId, this.timelineView_);
23
24 // Attach listeners to the "tab handles" so when you click them, it switches
25 // active view.
26
27 var self = this;
28
29 this.tabHandles_['timeline'].onclick = function() {
30 self.switchToView_('timeline');
31 };
32
33 this.tabHandles_['log'].onclick = function() {
34 self.switchToView_('log');
35 };
36
37 this.currentData_ = [];
38 24
39 // Default to the log view. 25 // Default to the log view.
40 this.switchToView_('log'); 26 this.switchToTab(logTabId);
41 }; 27 };
42 28
29 inherits(DetailsView, TabSwitcherView);
30
43 // The delay between updates to repaint. 31 // The delay between updates to repaint.
44 DetailsView.REPAINT_TIMEOUT_MS = 50; 32 DetailsView.REPAINT_TIMEOUT_MS = 50;
45 33
46 /** 34 /**
47 * Switches to the tab with name |viewName|. (Either 'log' or 'timeline'.
48 */
49 DetailsView.prototype.switchToView_ = function(viewName) {
50 if (this.currentView_) {
51 // Remove the selected styling on currently selected tab.
52 changeClassName(this.tabHandles_[this.currentView_], 'selected', false);
53 }
54
55 this.currentView_ = viewName;
56 changeClassName(this.tabHandles_[this.currentView_], 'selected', true);
57 this.repaint_();
58 };
59
60 /**
61 * Updates the data this view is using. 35 * Updates the data this view is using.
62 */ 36 */
63 DetailsView.prototype.setData = function(currentData) { 37 DetailsView.prototype.setData = function(currentData) {
64 // Make a copy of the array (in case the caller mutates it), and sort it 38 // Make a copy of the array (in case the caller mutates it), and sort it
65 // by the source ID. 39 // by the source ID.
66 this.currentData_ = DetailsView.createSortedCopy_(currentData); 40 var sortedCurrentData = DetailsView.createSortedCopy_(currentData);
67 41
68 // Invalidate the view. 42 for (var i = 0; i < this.tabs_.length; ++i)
69 if (!this.outstandingRepaint_) { 43 this.tabs_[i].contentView.setData(sortedCurrentData);
70 this.outstandingRepaint_ = true;
71 window.setTimeout(this.repaint_.bind(this),
72 DetailsView.REPAINT_TIMEOUT_MS);
73 }
74 };
75
76 DetailsView.prototype.repaint_ = function() {
77 this.outstandingRepaint_ = false;
78 this.contentArea_.innerHTML = '';
79
80 if (this.currentView_ == 'log') {
81 PaintLogView(this.currentData_, this.contentArea_);
82 } else {
83 PaintTimelineView(this.currentData_, this.contentArea_);
84 }
85 }; 44 };
86 45
87 DetailsView.createSortedCopy_ = function(origArray) { 46 DetailsView.createSortedCopy_ = function(origArray) {
88 var sortedArray = origArray.slice(0); 47 var sortedArray = origArray.slice(0);
89 sortedArray.sort(function(a, b) { 48 sortedArray.sort(function(a, b) {
90 return a.getSourceId() - b.getSourceId(); 49 return a.getSourceId() - b.getSourceId();
91 }); 50 });
92 return sortedArray; 51 return sortedArray;
93 }; 52 };
53
54 //-----------------------------------------------------------------------------
55
56 /**
57 * Base class for the Log view and Timeline view.
58 *
59 * @constructor
60 */
61 function DetailsSubView(boxId) {
62 DivView.call(this, boxId);
63 this.sourceEntries_ = [];
64 }
65
66 inherits(DetailsSubView, DivView);
67
68 DetailsSubView.prototype.setData = function(sourceEntries) {
69 this.sourceEntries_ = sourceEntries;
70
71 // Repaint the view.
72 if (this.isVisible() && !this.outstandingRepaint_) {
73 this.outstandingRepaint_ = true;
74 window.setTimeout(this.repaint.bind(this),
75 DetailsView.REPAINT_TIMEOUT_MS);
76 }
77 };
78
79 DetailsSubView.prototype.repaint = function() {
80 this.outstandingRepaint_ = false;
81 this.getNode().innerHTML = '';
82 };
83
84 DetailsSubView.prototype.show = function(isVisible) {
85 DetailsSubView.superClass_.show.call(this, isVisible);
86 if (isVisible) {
87 this.repaint();
88 } else {
89 this.getNode().innerHTML = '';
90 }
91 };
92
93 //-----------------------------------------------------------------------------
94
95
96 /**
97 * Subview that is displayed in the log tab.
98 * @constructor
99 */
100 function DetailsLogView(boxId) {
101 DetailsSubView.call(this, boxId);
102 }
103
104 inherits(DetailsLogView, DetailsSubView);
105
106 DetailsLogView.prototype.repaint = function() {
107 DetailsLogView.superClass_.repaint.call(this);
108 PaintLogView(this.sourceEntries_, this.getNode());
109 };
110
111 //-----------------------------------------------------------------------------
112
113 /**
114 * Subview that is displayed in the timeline tab.
115 * @constructor
116 */
117 function DetailsTimelineView(boxId) {
118 DetailsSubView.call(this, boxId);
119 }
120
121 inherits(DetailsTimelineView, DetailsSubView);
122
123 DetailsTimelineView.prototype.repaint = function() {
124 DetailsTimelineView.superClass_.repaint.call(this);
125 PaintTimelineView(this.sourceEntries_, this.getNode());
126 };
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/net_internals/index.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698