Index: chrome/browser/resources/net_internals/detailsview.js |
=================================================================== |
--- chrome/browser/resources/net_internals/detailsview.js (revision 0) |
+++ chrome/browser/resources/net_internals/detailsview.js (revision 0) |
@@ -0,0 +1,93 @@ |
+// Copyright (c) 2010 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. |
+ |
+/** |
+ * The DetailsView handles the tabbed view that displays either the "log" or |
+ * "timeline" view. This class keeps track of what the current view is, and |
+ * invalidates the specific view each time the selected data has changed. |
+ * |
+ * @constructor |
+ */ |
+function DetailsView(logTabHandleId, |
+ timelineTabHandleId, |
+ detailsTabContentId) { |
+ // The DOM nodes that which contain the tab title. |
+ this.tabHandles_ = {}; |
+ |
+ this.tabHandles_['timeline'] = document.getElementById(timelineTabHandleId); |
+ this.tabHandles_['log'] = document.getElementById(logTabHandleId); |
+ |
+ // The DOM node that contains the currently active tab sheet. |
+ this.contentArea_ = document.getElementById(detailsTabContentId); |
+ |
+ // Attach listeners to the "tab handles" so when you click them, it switches |
+ // active view. |
+ |
+ var self = this; |
+ |
+ this.tabHandles_['timeline'].onclick = function() { |
+ self.switchToView_('timeline'); |
+ }; |
+ |
+ this.tabHandles_['log'].onclick = function() { |
+ self.switchToView_('log'); |
+ }; |
+ |
+ this.currentData_ = []; |
+ |
+ // Default to the log view. |
+ this.switchToView_('log'); |
+}; |
+ |
+// The delay between updates to repaint. |
+DetailsView.REPAINT_TIMEOUT_MS = 50; |
+ |
+/** |
+ * Switches to the tab with name |viewName|. (Either 'log' or 'timeline'. |
+ */ |
+DetailsView.prototype.switchToView_ = function(viewName) { |
+ if (this.currentView_) { |
+ // Remove the selected styling on currently selected tab. |
+ changeClassName(this.tabHandles_[this.currentView_], 'selected', false); |
+ } |
+ |
+ this.currentView_ = viewName; |
+ changeClassName(this.tabHandles_[this.currentView_], 'selected', true); |
+ this.repaint_(); |
+}; |
+ |
+/** |
+ * Updates the data this view is using. |
+ */ |
+DetailsView.prototype.setData = function(currentData) { |
+ // Make a copy of the array (in case the caller mutates it), and sort it |
+ // by the source ID. |
+ this.currentData_ = DetailsView.createSortedCopy_(currentData); |
+ |
+ // Invalidate the view. |
+ if (!this.outstandingRepaint_) { |
+ this.outstandingRepaint_ = true; |
+ window.setTimeout(this.repaint_.bind(this), |
+ DetailsView.REPAINT_TIMEOUT_MS); |
+ } |
+}; |
+ |
+DetailsView.prototype.repaint_ = function() { |
+ this.outstandingRepaint_ = false; |
+ this.contentArea_.innerHTML = ''; |
+ |
+ if (this.currentView_ == 'log') { |
+ PaintLogView(this.currentData_, this.contentArea_); |
+ } else { |
+ PaintTimelineView(this.currentData_, this.contentArea_); |
+ } |
+}; |
+ |
+DetailsView.createSortedCopy_ = function(origArray) { |
+ var sortedArray = origArray.slice(0); |
+ sortedArray.sort(function(a, b) { |
+ return a.getSourceId() - b.getSourceId(); |
+ }); |
+ return sortedArray; |
+}; |
Property changes on: chrome\browser\resources\net_internals\detailsview.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |