diff options
author | Ben Murdoch <benm@google.com> | 2009-08-11 17:01:47 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2009-08-11 18:21:02 +0100 |
commit | 0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5 (patch) | |
tree | 2943df35f62d885c89d01063cc528dd73b480fea /WebCore/inspector/front-end/ElementsPanel.js | |
parent | 7e7a70bfa49a1122b2597a1e6367d89eb4035eca (diff) | |
download | external_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.js | 126 |
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); } |