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 5648a1d42cd126513b84c13ac6354e3da67a75a3..75cef59dd38dbd84380fc2548021fe90f4ab00a3 100644 |
--- a/Source/devtools/front_end/elements/StylesSidebarPane.js |
+++ b/Source/devtools/front_end/elements/StylesSidebarPane.js |
@@ -133,6 +133,14 @@ WebInspector.StylesSidebarPane._colorFormat = function(color) |
} |
/** |
+ * @return {boolean} |
+ */ |
+WebInspector.StylesSidebarPane._hasMatchingSelectors = function(styleRule) |
+{ |
+ return styleRule.rule ? styleRule.rule.matchingSelectors.length > 0 : true; |
+} |
+ |
+/** |
* @param {!WebInspector.CSSProperty} property |
*/ |
WebInspector.StylesSidebarPane._ignoreErrorsForProperty = function(property) { |
@@ -637,15 +645,25 @@ WebInspector.StylesSidebarPane.prototype = { |
_innerRefreshUpdate: function(node, computedStyle, editedSection) |
{ |
for (var pseudoId in this.sections) { |
- var styleRules = this._refreshStyleRules(this.sections[pseudoId], computedStyle); |
+ var filteredSections = this.sections[pseudoId] ? this.sections[pseudoId].filter(nonBlankSections) : []; |
+ var styleRules = this._refreshStyleRules(filteredSections, computedStyle); |
var usedProperties = {}; |
this._markUsedProperties(styleRules, usedProperties); |
- this._refreshSectionsForStyleRules(styleRules, usedProperties, editedSection); |
+ this._refreshSectionsForStyleRules(filteredSections, styleRules, usedProperties, editedSection); |
} |
if (computedStyle) |
this.sections[0][0].rebuildComputedTrace(this.sections[0]); |
this._nodeStylesUpdatedForTest(node, false); |
+ |
+ /** |
+ * @param {!WebInspector.PropertiesSection} section |
+ * @return {boolean} |
+ */ |
+ function nonBlankSections(section) |
+ { |
+ return !section.isBlank; |
+ } |
}, |
_innerRebuildUpdate: function(node, styles) |
@@ -697,11 +715,9 @@ WebInspector.StylesSidebarPane.prototype = { |
var styleRules = []; |
for (var i = 0; sections && i < sections.length; ++i) { |
var section = sections[i]; |
- if (section.isBlank) |
- continue; |
if (section.computedStyle) |
section.styleRule.style = nodeComputedStyle; |
- var styleRule = { section: section, style: section.styleRule.style, computedStyle: section.computedStyle, rule: section.rule, editable: !!(section.styleRule.style && section.styleRule.style.styleSheetId), |
+ var styleRule = { style: section.styleRule.style, computedStyle: section.computedStyle, rule: section.rule, editable: !!(section.styleRule.style && section.styleRule.style.styleSheetId), |
isAttribute: section.styleRule.isAttribute, isInherited: section.styleRule.isInherited, parentNode: section.styleRule.parentNode }; |
styleRules.push(styleRule); |
} |
@@ -800,7 +816,7 @@ WebInspector.StylesSidebarPane.prototype = { |
var styleRule = styleRules[i]; |
if (styleRule.computedStyle || styleRule.isStyleSeparator) |
continue; |
- if (styleRule.section && styleRule.section.noAffect) |
+ if (!WebInspector.StylesSidebarPane._hasMatchingSelectors(styleRule)) |
continue; |
styleRule.usedProperties = {}; |
@@ -843,12 +859,12 @@ WebInspector.StylesSidebarPane.prototype = { |
} |
}, |
- _refreshSectionsForStyleRules: function(styleRules, usedProperties, editedSection) |
+ _refreshSectionsForStyleRules: function(sections, styleRules, usedProperties, editedSection) |
{ |
// Walk the style rules and update the sections with new overloaded and used properties. |
for (var i = 0; i < styleRules.length; ++i) { |
var styleRule = styleRules[i]; |
- var section = styleRule.section; |
+ var section = sections[i]; |
if (styleRule.computedStyle) { |
section._usedProperties = usedProperties; |
section.update(); |
@@ -1438,7 +1454,7 @@ WebInspector.StylePropertiesSection.prototype = { |
*/ |
isPropertyOverloaded: function(propertyName, isShorthand) |
{ |
- if (!this._usedProperties || this.noAffect) |
+ if (!this._usedProperties || !WebInspector.StylesSidebarPane._hasMatchingSelectors(this.styleRule)) |
return false; |
if (this.isInherited && !WebInspector.CSSMetadata.isPropertyInherited(propertyName)) { |
@@ -1536,13 +1552,11 @@ WebInspector.StylePropertiesSection.prototype = { |
{ |
var style = this.styleRule.style; |
var allProperties = style.allProperties; |
- this.uniqueProperties = []; |
var styleHasEditableSource = this.editable && !!style.range; |
if (styleHasEditableSource) { |
for (var i = 0; i < allProperties.length; ++i) { |
var property = allProperties[i]; |
- this.uniqueProperties.push(property); |
if (property.styleBased) |
continue; |
@@ -1559,7 +1573,6 @@ WebInspector.StylePropertiesSection.prototype = { |
// For style-based properties, generate shorthands with values when possible. |
for (var i = 0; i < allProperties.length; ++i) { |
var property = allProperties[i]; |
- this.uniqueProperties.push(property); |
var isShorthand = !!WebInspector.CSSMetadata.cssPropertiesMetainfo.longhands(property.name); |
// For style-based properties, try generating shorthands. |
@@ -1624,7 +1637,7 @@ WebInspector.StylePropertiesSection.prototype = { |
var matchingSelectors = rule.matchingSelectors; |
// .selector is rendered as non-affecting selector by default. |
- if (this.noAffect || matchingSelectors) |
+ if (!WebInspector.StylesSidebarPane._hasMatchingSelectors(this.styleRule) || matchingSelectors) |
this._selectorElement.className = "selector"; |
if (!matchingSelectors) |
return; |
@@ -1884,17 +1897,11 @@ WebInspector.StylePropertiesSection.prototype = { |
function successCallback(newRule) |
{ |
var doesAffectSelectedNode = newRule.matchingSelectors.length > 0; |
- if (!doesAffectSelectedNode) { |
- this.noAffect = true; |
- this.element.classList.add("no-affect"); |
- } else { |
- delete this.noAffect; |
- this.element.classList.remove("no-affect"); |
- } |
+ this.element.classList.toggle("no-affect", !doesAffectSelectedNode); |
var oldSelectorRange = this.rule.selectorRange; |
this.rule = newRule; |
- this.styleRule = { section: this, style: newRule.style, selectorText: newRule.selectorText, media: newRule.media, rule: newRule }; |
+ this.styleRule = { style: newRule.style, selectorText: newRule.selectorText, media: newRule.media, rule: newRule }; |
this._parentPane._refreshUpdate(this, false); |
this._parentPane._styleSheetRuleEdited(this.rule, oldSelectorRange, this.rule.selectorRange); |
@@ -2060,8 +2067,9 @@ WebInspector.ComputedStylePropertiesSection.prototype = { |
if (section.computedStyle || section.isBlank) |
continue; |
- for (var j = 0; j < section.uniqueProperties.length; ++j) { |
- var property = section.uniqueProperties[j]; |
+ var properties = section.styleRule.style.allProperties; |
+ for (var j = 0; j < properties.length; ++j) { |
+ var property = properties[j]; |
if (property.disabled) |
continue; |
if (section.isInherited && !WebInspector.CSSMetadata.isPropertyInherited(property.name)) |
@@ -2168,13 +2176,11 @@ WebInspector.BlankStylePropertiesSection.prototype = { |
function successCallback(newRule) |
{ |
var doesSelectorAffectSelectedNode = newRule.matchingSelectors.length > 0; |
- var styleRule = { media: newRule.media, section: this, style: newRule.style, selectorText: newRule.selectorText, rule: newRule }; |
+ var styleRule = { media: newRule.media, style: newRule.style, selectorText: newRule.selectorText, rule: newRule }; |
this._makeNormal(styleRule); |
- if (!doesSelectorAffectSelectedNode) { |
- this.noAffect = true; |
+ if (!doesSelectorAffectSelectedNode) |
this.element.classList.add("no-affect"); |
- } |
var ruleTextLines = ruleText.split("\n"); |
var startLine = this._ruleLocation.startLine; |