| 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 = {
|
|
|