summaryrefslogtreecommitdiffstats
path: root/WebCore/inspector/front-end/ResourcesPanel.js
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/inspector/front-end/ResourcesPanel.js')
-rw-r--r--WebCore/inspector/front-end/ResourcesPanel.js109
1 files changed, 97 insertions, 12 deletions
diff --git a/WebCore/inspector/front-end/ResourcesPanel.js b/WebCore/inspector/front-end/ResourcesPanel.js
index 5285dae..d6f7172 100644
--- a/WebCore/inspector/front-end/ResourcesPanel.js
+++ b/WebCore/inspector/front-end/ResourcesPanel.js
@@ -61,9 +61,10 @@ WebInspector.ResourcesPanel = function(database)
this.sidebarTree.appendChild(this.fileSystemListTreeElement);
this.fileSystemListTreeElement.expand();
}
-
+
this.storageViews = document.createElement("div");
this.storageViews.id = "storage-views";
+ this.storageViews.className = "diff-container";
this.element.appendChild(this.storageViews);
this.storageViewStatusBarItemsContainer = document.createElement("div");
@@ -99,11 +100,8 @@ WebInspector.ResourcesPanel.prototype = {
{
WebInspector.Panel.prototype.show.call(this);
- if (this.visibleView instanceof WebInspector.ResourceView) {
- // SourceViews are shared between the panels.
- this.visibleView.headersVisible = false;
- this.visibleView.show(this.storageViews);
- }
+ if (this.visibleView instanceof WebInspector.ResourceView)
+ this._showResourceView(this.visibleView.resource);
if (this._initializedDefaultSelection)
return;
@@ -147,7 +145,6 @@ WebInspector.ResourcesPanel.prototype = {
this._domStorage = [];
this._cookieViews = {};
-
this._fileSystemView = null;
this._applicationCacheView = null;
@@ -359,7 +356,6 @@ WebInspector.ResourcesPanel.prototype = {
if (line) {
var view = WebInspector.ResourceManager.resourceViewForResource(resource);
- view.selectContentTab();
if (view.revealLine)
view.revealLine(line);
if (view.highlightLine)
@@ -371,10 +367,46 @@ WebInspector.ResourcesPanel.prototype = {
_showResourceView: function(resource)
{
var view = WebInspector.ResourceManager.resourceViewForResource(resource);
- view.headersVisible = false;
+
+ // Consider rendering diff markup here.
+ if (resource.baseRevision && view instanceof WebInspector.SourceView) {
+ function callback(baseContent)
+ {
+ if (baseContent)
+ this._applyDiffMarkup(view, baseContent, resource.content);
+ }
+ resource.baseRevision.requestContent(callback.bind(this));
+ }
this._innerShowView(view);
},
+ _applyDiffMarkup: function(view, baseContent, newContent) {
+ var oldLines = baseContent.split("\n");
+ var newLines = newContent.split("\n");
+
+ var diff = Array.diff(oldLines, newLines);
+
+ var diffData = {};
+ diffData.added = [];
+ diffData.removed = [];
+ diffData.changed = [];
+
+ var offset = 0;
+ var right = diff.right;
+ for (var i = 0; i < right.length; ++i) {
+ if (typeof right[i] === "string") {
+ if (right.length > i + 1 && right[i + 1].row === i + 1 - offset)
+ diffData.changed.push(i);
+ else {
+ diffData.added.push(i);
+ offset++;
+ }
+ } else
+ offset = i - right[i].row;
+ }
+ view.sourceFrame.markDiff(diffData);
+ },
+
showDatabase: function(database, tableName)
{
if (!database)
@@ -813,7 +845,8 @@ WebInspector.BaseStorageTreeElement.prototype = {
set titleText(titleText)
{
this._titleText = titleText;
- this.titleElement.textContent = this._titleText;
+ if (this.titleElement)
+ this.titleElement.textContent = this._titleText;
},
isEventWithinDisclosureTriangle: function()
@@ -944,6 +977,7 @@ WebInspector.FrameResourceTreeElement = function(storagePanel, resource)
WebInspector.BaseStorageTreeElement.call(this, storagePanel, resource, resource.displayName, "resource-sidebar-tree-item resources-category-" + resource.category.name);
this._resource = resource;
this._resource.addEventListener("errors-warnings-updated", this._errorsWarningsUpdated, this);
+ this._resource.addEventListener("content-changed", this._contentChanged, this);
this.tooltip = resource.url;
}
@@ -989,8 +1023,7 @@ WebInspector.FrameResourceTreeElement.prototype = {
_ondragstart: function(event)
{
- event.dataTransfer.setData("text/plain", this._resource.url);
- event.dataTransfer.setData("text/uri-list", this._resource.url + "\r\n");
+ event.dataTransfer.setData("text/plain", this._resource.content);
event.dataTransfer.effectAllowed = "copy";
return true;
},
@@ -1054,6 +1087,17 @@ WebInspector.FrameResourceTreeElement.prototype = {
if (this._resource.errors)
this._bubbleElement.addStyleClass("error");
+ },
+
+ _contentChanged: function(event)
+ {
+ this.insertChild(new WebInspector.ResourceRevisionTreeElement(this._storagePanel, event.data.revision), 0);
+ var oldView = WebInspector.ResourceManager.existingResourceViewForResource(this._resource);
+ if (oldView) {
+ var newView = WebInspector.ResourceManager.recreateResourceView(this._resource);
+ if (oldView === this._storagePanel.visibleView)
+ this._storagePanel.visibleView = newView;
+ }
}
}
@@ -1181,6 +1225,47 @@ WebInspector.ApplicationCacheTreeElement.prototype = {
}
WebInspector.ApplicationCacheTreeElement.prototype.__proto__ = WebInspector.BaseStorageTreeElement.prototype;
+WebInspector.ResourceRevisionTreeElement = function(storagePanel, revision)
+{
+ var title = revision.timestamp ? revision.timestamp.toLocaleTimeString() : "(original)";
+ WebInspector.BaseStorageTreeElement.call(this, storagePanel, null, title, "resource-sidebar-tree-item resources-category-" + revision.category.name);
+ if (revision.timestamp)
+ this.tooltip = revision.timestamp.toLocaleString();
+ this._resource = revision;
+}
+
+WebInspector.ResourceRevisionTreeElement.prototype = {
+ onattach: function()
+ {
+ WebInspector.BaseStorageTreeElement.prototype.onattach.call(this);
+ this.listItemElement.draggable = true;
+ this.listItemElement.addEventListener("dragstart", this._ondragstart.bind(this), false);
+ this.listItemElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true);
+ },
+
+ onselect: function()
+ {
+ WebInspector.BaseStorageTreeElement.prototype.onselect.call(this);
+ this._storagePanel._showResourceView(this._resource);
+ },
+
+ _ondragstart: function(event)
+ {
+ event.dataTransfer.setData("text/plain", this._resource.content);
+ event.dataTransfer.effectAllowed = "copy";
+ return true;
+ },
+
+ _handleContextMenuEvent: function(event)
+ {
+ var contextMenu = new WebInspector.ContextMenu();
+ contextMenu.appendItem(WebInspector.UIString("Revert to this revision"), this._resource.revertToThis.bind(this._resource));
+ contextMenu.show(event);
+ }
+}
+
+WebInspector.ResourceRevisionTreeElement.prototype.__proto__ = WebInspector.BaseStorageTreeElement.prototype;
+
WebInspector.FileSystemTreeElement = function(storagePanel, origin)
{
WebInspector.BaseStorageTreeElement.call(this, storagePanel, null, origin, "file-system-storage-tree-item");