summaryrefslogtreecommitdiffstats
path: root/WebCore/inspector/front-end/ElementsPanel.js
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2009-08-11 17:01:47 +0100
committerBen Murdoch <benm@google.com>2009-08-11 18:21:02 +0100
commit0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5 (patch)
tree2943df35f62d885c89d01063cc528dd73b480fea /WebCore/inspector/front-end/ElementsPanel.js
parent7e7a70bfa49a1122b2597a1e6367d89eb4035eca (diff)
downloadexternal_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.zip
external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.gz
external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.bz2
Merge in WebKit r47029.
Diffstat (limited to 'WebCore/inspector/front-end/ElementsPanel.js')
-rw-r--r--WebCore/inspector/front-end/ElementsPanel.js126
1 files changed, 123 insertions, 3 deletions
diff --git a/WebCore/inspector/front-end/ElementsPanel.js b/WebCore/inspector/front-end/ElementsPanel.js
index 3c9be54..ffa0000 100644
--- a/WebCore/inspector/front-end/ElementsPanel.js
+++ b/WebCore/inspector/front-end/ElementsPanel.js
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
* Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
+ * Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,6 +61,7 @@ WebInspector.ElementsPanel = function()
InspectorController.toggleNodeSearch();
this.panel.nodeSearchButton.removeStyleClass("toggled-on");
}
+ WebInspector.console.addInspectedNode(this._focusedDOMNode);
};
this.contentElement.appendChild(this.treeOutline.element);
@@ -95,7 +97,7 @@ WebInspector.ElementsPanel = function()
this.sidebarResizeElement.className = "sidebar-resizer-vertical";
this.sidebarResizeElement.addEventListener("mousedown", this.rightSidebarResizerDragStart.bind(this), false);
- this.nodeSearchButton = document.createElement("button");
+ this.nodeSearchButton = this.createStatusBarButton();
this.nodeSearchButton.title = WebInspector.UIString("Select an element in the page to inspect it.");
this.nodeSearchButton.id = "node-search-status-bar-item";
this.nodeSearchButton.className = "status-bar-item";
@@ -112,6 +114,9 @@ WebInspector.ElementsPanel = function()
this._nodeRemovedEventListener = InspectorController.wrapCallback(this._nodeRemoved.bind(this));
this._contentLoadedEventListener = InspectorController.wrapCallback(this._contentLoaded.bind(this));
+ this.stylesheet = null;
+ this.styles = {};
+
this.reset();
}
@@ -179,7 +184,7 @@ WebInspector.ElementsPanel.prototype = {
delete this.currentQuery;
this.searchCanceled();
- var inspectedWindow = InspectorController.inspectedWindow();
+ var inspectedWindow = Preferences.useDOMAgent ? WebInspector.domAgent.inspectedWindow : InspectorController.inspectedWindow();
if (!inspectedWindow || !inspectedWindow.document)
return;
@@ -516,6 +521,121 @@ WebInspector.ElementsPanel.prototype = {
this.updateMutationEventListeners(window);
},
+ renameSelector: function(oldIdentifier, newIdentifier, oldSelector, newSelector)
+ {
+ // TODO: Implement Shifting the oldSelector, and its contents to a newSelector
+ },
+
+ addStyleChange: function(identifier, style, property)
+ {
+ if (!style.parentRule)
+ return;
+
+ var selector = style.parentRule.selectorText;
+ if (!this.styles[identifier])
+ this.styles[identifier] = {};
+
+ if (!this.styles[identifier][selector])
+ this.styles[identifier][selector] = {};
+
+ if (!this.styles[identifier][selector][property])
+ WebInspector.styleChanges += 1;
+
+ this.styles[identifier][selector][property] = style.getPropertyValue(property);
+ },
+
+ removeStyleChange: function(identifier, style, property)
+ {
+ if (!style.parentRule)
+ return;
+
+ var selector = style.parentRule.selectorText;
+ if (!this.styles[identifier] || !this.styles[identifier][selector])
+ return;
+
+ if (this.styles[identifier][selector][property]) {
+ delete this.styles[identifier][selector][property];
+ WebInspector.styleChanges -= 1;
+ }
+ },
+
+ generateStylesheet: function()
+ {
+ if (!WebInspector.styleChanges)
+ return;
+
+ // Merge Down to Just Selectors
+ var mergedSelectors = {};
+ for (var identifier in this.styles) {
+ for (var selector in this.styles[identifier]) {
+ if (!mergedSelectors[selector])
+ mergedSelectors[selector] = this.styles[identifier][selector];
+ else { // merge on selector
+ var merge = {};
+ for (var property in mergedSelectors[selector])
+ merge[property] = mergedSelectors[selector][property];
+ for (var property in this.styles[identifier][selector]) {
+ if (!merge[property])
+ merge[property] = this.styles[identifier][selector][property];
+ else { // merge on property within a selector, include comment to notify user
+ var value1 = merge[property];
+ var value2 = this.styles[identifier][selector][property];
+
+ if (value1 === value2)
+ merge[property] = [value1];
+ else if (Object.type(value1) === "array")
+ merge[property].push(value2);
+ else
+ merge[property] = [value1, value2];
+ }
+ }
+ mergedSelectors[selector] = merge;
+ }
+ }
+ }
+
+ var builder = [];
+ builder.push("/**");
+ builder.push(" * Inspector Generated Stylesheet"); // UIString?
+ builder.push(" */\n");
+
+ var indent = " ";
+ function displayProperty(property, value, comment) {
+ if (comment)
+ return indent + "/* " + property + ": " + value + "; */";
+ else
+ return indent + property + ": " + value + ";";
+ }
+
+ for (var selector in mergedSelectors) {
+ var psuedoStyle = mergedSelectors[selector];
+ var properties = Object.properties(psuedoStyle);
+ if (properties.length) {
+ builder.push(selector + " {");
+ for (var i = 0; i < properties.length; ++i) {
+ var property = properties[i];
+ var value = psuedoStyle[property];
+ if (Object.type(value) !== "array")
+ builder.push(displayProperty(property, value));
+ else {
+ if (value.length === 1)
+ builder.push(displayProperty(property, value) + " /* merged from equivalent edits */"); // UIString?
+ else {
+ builder.push(indent + "/* There was a Conflict... There were Multiple Edits for '" + property + "' */"); // UIString?
+ for (var j = 0; j < value.length; ++j)
+ builder.push(displayProperty(property, value, true));
+ }
+ }
+ }
+ builder.push("}\n");
+ }
+ }
+
+ WebInspector.showConsole();
+ var result = builder.join("\n");
+ InspectorController.inspectedWindow().console.log(result);
+ },
+
_addMutationEventListeners: function(monitoredWindow)
{
monitoredWindow.document.addEventListener("DOMNodeInserted", this._nodeInsertedEventListener, true);
@@ -913,7 +1033,7 @@ WebInspector.ElementsPanel.prototype = {
{
var rightPadding = 20;
var errorWarningElement = document.getElementById("error-warning-count");
- if (!WebInspector.console.visible && errorWarningElement)
+ if (!WebInspector.drawer.visible && errorWarningElement)
rightPadding += errorWarningElement.offsetWidth;
return ((crumbs.totalOffsetLeft + crumbs.offsetWidth + rightPadding) < window.innerWidth);
}