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

Unified Diff: Source/devtools/front_end/elements/StylesSidebarPane.js

Issue 1002293002: DevTools: [SSP] refactor internal representations of sections (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: address comments Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/inspector/elements/styles/undo-set-selector-text-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/elements/StylesSidebarPane.js
diff --git a/Source/devtools/front_end/elements/StylesSidebarPane.js b/Source/devtools/front_end/elements/StylesSidebarPane.js
index 703ce730a7580c300ca9b8bad16b61600f7b560d..37da3d89f98584855ab43a77e13516f7b3482052 100644
--- a/Source/devtools/front_end/elements/StylesSidebarPane.js
+++ b/Source/devtools/front_end/elements/StylesSidebarPane.js
@@ -255,14 +255,9 @@ WebInspector.StylesSidebarPane.prototype = {
{
if (!editedRule.styleSheetId)
return;
- for (var pseudoId in this.sections) {
- var styleRuleSections = this.sections[pseudoId];
- for (var i = 0; i < styleRuleSections.length; ++i) {
- var section = styleRuleSections[i];
- if (section.computedStyle)
- continue;
+ for (var block of this._sectionBlocks) {
+ for (var section of block.sections)
section._styleSheetRuleEdited(editedRule, oldRange, newRange);
- }
}
},
@@ -274,14 +269,9 @@ WebInspector.StylesSidebarPane.prototype = {
{
if (!oldMedia.parentStyleSheetId)
return;
- for (var pseudoId in this.sections) {
- var styleRuleSections = this.sections[pseudoId];
- for (var i = 0; i < styleRuleSections.length; ++i) {
- var section = styleRuleSections[i];
- if (section.computedStyle)
- continue;
+ for (var block of this._sectionBlocks) {
+ for (var section of block.sections)
section._styleSheetMediaEdited(oldMedia, newMedia);
- }
}
},
@@ -409,13 +399,22 @@ WebInspector.StylesSidebarPane.prototype = {
*/
_refreshUpdate: function(editedSection)
{
- var node = this._validateNode();
+ var node = this.node();
if (!node)
return;
- this._innerRefreshUpdate(node, editedSection);
+ for (var block of this._sectionBlocks) {
+ for (var section of block.sections) {
+ if (section.isBlank)
+ continue;
+ section.update(section === editedSection);
+ }
+ }
+
+ this._computedStylePane.update();
if (this._filterRegex)
this._updateFilter();
+ this._nodeStylesUpdatedForTest(node, false);
},
/**
@@ -426,12 +425,6 @@ WebInspector.StylesSidebarPane.prototype = {
{
this._updateForcedPseudoStateInputs();
- var node = this._validateNode();
- if (!node) {
- finishedCallback();
- return;
- }
-
this._fetchMatchedCascade()
.then(this._innerRebuildUpdate.bind(this))
.then(finishedCallback);
@@ -615,16 +608,6 @@ WebInspector.StylesSidebarPane.prototype = {
}
},
- _validateNode: function()
- {
- if (!this.node()) {
- this._sectionsContainer.removeChildren();
- this.sections = {};
- return null;
- }
- return this.node();
- },
-
/**
* @param {boolean} editing
*/
@@ -690,60 +673,46 @@ WebInspector.StylesSidebarPane.prototype = {
},
/**
- * @param {!WebInspector.DOMNode} node
- * @param {!WebInspector.StylePropertiesSection=} editedSection
- */
- _innerRefreshUpdate: function(node, editedSection)
- {
- for (var pseudoId in this.sections) {
- var sections = this.sections[pseudoId].filter(nonBlankSections);
- for (var section of sections)
- section.update(section === editedSection);
- }
-
- this._computedStylePane.update();
-
- this._nodeStylesUpdatedForTest(node, false);
-
- /**
- * @param {!WebInspector.StylePropertiesSection} section
- * @return {boolean}
- */
- function nonBlankSections(section)
- {
- return !section.isBlank;
- }
- },
-
- /**
* @param {?{matched: !WebInspector.SectionCascade, pseudo: !Map.<number, !WebInspector.SectionCascade>}} cascades
*/
_innerRebuildUpdate: function(cascades)
{
this._linkifier.reset();
this._sectionsContainer.removeChildren();
- this.sections = {};
+ this._sectionBlocks = [];
var node = this.node();
if (!cascades || !node)
return;
+ this._sectionBlocks = this._rebuildSectionsForMatchedStyleRules(cascades.matched);
+ var pseudoIds = cascades.pseudo.keysArray().sort();
+ for (var pseudoId of pseudoIds) {
+ var block = WebInspector.SectionBlock.createPseudoIdBlock(pseudoId);
+ var cascade = cascades.pseudo.get(pseudoId);
+ for (sectionModel of cascade.sectionModels()) {
+ var section = new WebInspector.StylePropertiesSection(this, sectionModel);
+ block.sections.push(section);
+ }
+ this._sectionBlocks.push(block);
+ }
+
if (!!node.pseudoType())
this._appendTopPadding();
- this.sections[0] = this._rebuildSectionsForStyleRules(cascades.matched);
- this._computedStylePane.update();
-
- var pseudoIds = cascades.pseudo.keysArray().sort();
- for (var pseudoId of pseudoIds) {
- this._appendSectionPseudoIdSeparator(pseudoId);
- this.sections[pseudoId] = this._rebuildSectionsForStyleRules(cascades.pseudo.get(pseudoId));
+ for (var block of this._sectionBlocks) {
+ var titleElement = block.titleElement();
+ if (titleElement)
+ this._sectionsContainer.appendChild(titleElement);
+ for (var section of block.sections)
+ this._sectionsContainer.appendChild(section.element);
}
if (this._filterRegex)
this._updateFilter();
this._nodeStylesUpdatedForTest(node, true);
+ this._computedStylePane.update();
},
/**
@@ -847,55 +816,25 @@ WebInspector.StylesSidebarPane.prototype = {
},
/**
- * @param {number} pseudoId
- */
- _appendSectionPseudoIdSeparator: function(pseudoId)
- {
- var separatorElement = createElement("div");
- separatorElement.className = "sidebar-separator";
- var pseudoName = WebInspector.StylesSidebarPane.PseudoIdNames[pseudoId];
- if (pseudoName)
- separatorElement.textContent = WebInspector.UIString("Pseudo ::%s element", pseudoName);
- else
- separatorElement.textContent = WebInspector.UIString("Pseudo element");
- this._sectionsContainer.appendChild(separatorElement);
- },
-
- /**
- * @param {!WebInspector.DOMNode} node
- */
- _appendSectionInheritedNodeSeparator: function(node)
- {
- var separatorElement = createElement("div");
- separatorElement.className = "sidebar-separator";
- var link = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
- separatorElement.createTextChild(WebInspector.UIString("Inherited from") + " ");
- separatorElement.appendChild(link);
- this._sectionsContainer.appendChild(separatorElement);
- },
-
- /**
- * @param {!WebInspector.SectionCascade} cascade
- * @return {!Array.<!WebInspector.StylePropertiesSection>}
+ * @param {!WebInspector.SectionCascade} matchedCascade
+ * @return {!Array.<!WebInspector.SectionBlock>}
*/
- _rebuildSectionsForStyleRules: function(cascade)
+ _rebuildSectionsForMatchedStyleRules: function(matchedCascade)
{
- var sections = [];
+ var blocks = [new WebInspector.SectionBlock(null)];
var lastParentNode = null;
- for (var sectionModel of cascade.sectionModels()) {
+ for (var sectionModel of matchedCascade.sectionModels()) {
var parentNode = sectionModel.parentNode();
if (parentNode && parentNode !== lastParentNode) {
lastParentNode = parentNode;
- this._appendSectionInheritedNodeSeparator(lastParentNode);
+ var block = WebInspector.SectionBlock.createInheritedNodeBlock(lastParentNode);
+ blocks.push(block);
}
var section = new WebInspector.StylePropertiesSection(this, sectionModel);
- section._markSelectorMatches();
- section.onpopulate();
- this._sectionsContainer.appendChild(section.element);
- sections.push(section);
+ blocks.peekLast().sections.push(section);
}
- return sections;
+ return blocks;
},
/**
@@ -919,10 +858,9 @@ WebInspector.StylesSidebarPane.prototype = {
*/
_colorFormatSettingChanged: function(event)
{
- for (var pseudoId in this.sections) {
- var sections = this.sections[pseudoId];
- for (var i = 0; i < sections.length; ++i)
- sections[i].update(true);
+ for (var block of this._sectionBlocks) {
+ for (var section of block.sections)
+ section.update(true);
}
},
@@ -964,7 +902,7 @@ WebInspector.StylesSidebarPane.prototype = {
{
var lines = text.split("\n");
var range = WebInspector.TextRange.createFromLocation(lines.length - 1, lines[lines.length - 1].length);
- this._addBlankSection(this.sections[0][0], styleSheetId, range);
+ this._addBlankSection(this._sectionBlocks[0].sections[0], styleSheetId, range);
}
},
@@ -981,9 +919,13 @@ WebInspector.StylesSidebarPane.prototype = {
this._sectionsContainer.insertBefore(blankSection.element, insertAfterSection.element.nextSibling);
- var index = this.sections[0].indexOf(insertAfterSection);
- this.sections[0].splice(index + 1, 0, blankSection);
- blankSection.startEditingSelector();
+ for (var block of this._sectionBlocks) {
+ var index = block.sections.indexOf(insertAfterSection);
+ if (index === -1)
+ continue;
+ block.sections.splice(index + 1, 0, blankSection);
+ blankSection.startEditingSelector();
+ }
},
/**
@@ -991,12 +933,11 @@ WebInspector.StylesSidebarPane.prototype = {
*/
removeSection: function(section)
{
- for (var pseudoId in this.sections) {
- var sections = this.sections[pseudoId];
- var index = sections.indexOf(section);
+ for (var block of this._sectionBlocks) {
+ var index = block.sections.indexOf(section);
if (index === -1)
continue;
- sections.splice(index, 1);
+ block.sections.splice(index, 1);
section.element.remove();
}
},
@@ -1032,7 +973,7 @@ WebInspector.StylesSidebarPane.prototype = {
*/
function clickListener(event)
{
- var node = this._validateNode();
+ var node = this.node();
if (!node)
return;
node.target().cssModel.forcePseudoState(node, event.target.state, event.target.checked);
@@ -1165,12 +1106,9 @@ WebInspector.StylesSidebarPane.prototype = {
_updateFilter: function()
{
- for (var pseudoId in this.sections) {
- var sections = this.sections[pseudoId];
- for (var i = 0; i < sections.length; ++i) {
- var section = sections[i];
+ for (var block of this._sectionBlocks) {
+ for (var section of block.sections)
section._updateFilter();
- }
}
},
@@ -1291,6 +1229,56 @@ WebInspector.StylesSidebarPane.createPropertyFilterElement = function(placeholde
/**
* @constructor
+ * @param {?Element} titleElement
+ */
+WebInspector.SectionBlock = function(titleElement)
+{
+ this._titleElement = titleElement;
+ this.sections = [];
+}
+
+/**
+ * @param {number} pseudoId
+ * @return {!WebInspector.SectionBlock}
+ */
+WebInspector.SectionBlock.createPseudoIdBlock = function(pseudoId)
+{
+ var separatorElement = createElement("div");
+ separatorElement.className = "sidebar-separator";
+ var pseudoName = WebInspector.StylesSidebarPane.PseudoIdNames[pseudoId];
+ if (pseudoName)
+ separatorElement.textContent = WebInspector.UIString("Pseudo ::%s element", pseudoName);
+ else
+ separatorElement.textContent = WebInspector.UIString("Pseudo element");
+ return new WebInspector.SectionBlock(separatorElement);
+}
+
+/**
+ * @param {!WebInspector.DOMNode} node
+ * @return {!WebInspector.SectionBlock}
+ */
+WebInspector.SectionBlock.createInheritedNodeBlock = function(node)
+{
+ var separatorElement = createElement("div");
+ separatorElement.className = "sidebar-separator";
+ var link = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
+ separatorElement.createTextChild(WebInspector.UIString("Inherited from") + " ");
+ separatorElement.appendChild(link);
+ return new WebInspector.SectionBlock(separatorElement);
+}
+
+WebInspector.SectionBlock.prototype = {
+ /**
+ * @return {?Element}
+ */
+ titleElement: function()
+ {
+ return this._titleElement;
+ }
+}
+
+/**
+ * @constructor
* @param {!WebInspector.StylesSidebarPane} parentPane
* @param {!WebInspector.StylesSectionModel} styleRule
*/
@@ -1360,6 +1348,9 @@ WebInspector.StylePropertiesSection = function(parentPane, styleRule)
if (!this.editable)
this.element.classList.add("read-only");
+
+ this._markSelectorMatches();
+ this.onpopulate();
}
WebInspector.StylePropertiesSection.prototype = {
« no previous file with comments | « LayoutTests/inspector/elements/styles/undo-set-selector-text-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698