WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
185930
Web Inspector: Styles: overridden CSS property should have go-to button to jump to effective property
https://bugs.webkit.org/show_bug.cgi?id=185930
Summary
Web Inspector: Styles: overridden CSS property should have go-to button to ju...
Nikita Vasilyev
Reported
2018-05-23 17:47:42 PDT
It's often hard to find why the property is strikethrough, and what overrode it. To solve this, display an arrow up icon after the overridden CSS property. Clicking this icon would scroll up to either: 1. The active property (highest priority property). 2. Next property with the higher priority, but not necessary the active property. If this is hard to implement, [1] is fine. After scrolling to the property, focus on the property and highlight it (the same way we highlight the properties when jumping from the Computed panel). This has been requested several times. AFAIK, neither Chrome DevTools nor Firefox DevTools have this.
Attachments
Patch
(14.22 KB, patch)
2019-03-04 16:53 PST
,
Nikita Vasilyev
ews-watchlist
: commit-queue-
Details
Formatted Diff
Diff
[Video] With patch applied
(1.75 MB, video/quicktime)
2019-03-04 16:55 PST
,
Nikita Vasilyev
no flags
Details
Archive of layout-test-results from ews123 for ios-simulator-wk2
(3.57 MB, application/zip)
2019-03-04 21:55 PST
,
EWS Watchlist
no flags
Details
Patch
(14.22 KB, patch)
2019-03-04 23:58 PST
,
Nikita Vasilyev
mattbaker
: review-
Details
Formatted Diff
Diff
Patch
(14.64 KB, patch)
2019-03-05 14:54 PST
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Patch
(14.58 KB, patch)
2019-03-05 17:24 PST
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Patch
(15.48 KB, patch)
2019-03-07 00:29 PST
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Patch
(16.07 KB, patch)
2019-03-07 15:11 PST
,
Nikita Vasilyev
mattbaker
: review+
Details
Formatted Diff
Diff
Patch for landing
(16.12 KB, patch)
2019-03-07 15:59 PST
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Show Obsolete
(7)
View All
Add attachment
proposed patch, testcase, etc.
Radar WebKit Bug Importer
Comment 1
2018-05-23 17:59:09 PDT
<
rdar://problem/40506252
>
Nikita Vasilyev
Comment 2
2019-03-04 16:53:45 PST
Created
attachment 363569
[details]
Patch
Nikita Vasilyev
Comment 3
2019-03-04 16:55:41 PST
Created
attachment 363570
[details]
[Video] With patch applied
Matt Baker
Comment 4
2019-03-04 20:05:10 PST
(In reply to Nikita Vasilyev from
comment #3
)
> Created
attachment 363570
[details]
> [Video] With patch applied
Nice! To reduce UI clutter, should we only reveal the arrow on mouseover?
EWS Watchlist
Comment 5
2019-03-04 21:55:08 PST
Comment on
attachment 363569
[details]
Patch
Attachment 363569
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
https://webkit-queues.webkit.org/results/11371958
New failing tests: fast/scrolling/ios/hit-testing-iframe-004.html fast/scrolling/ios/mixing-user-and-programmatic-scroll-006.html fast/scrolling/ios/hit-testing-iframe-001.html
EWS Watchlist
Comment 6
2019-03-04 21:55:10 PST
Created
attachment 363598
[details]
Archive of layout-test-results from ews123 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews123 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
Nikita Vasilyev
Comment 7
2019-03-04 23:58:02 PST
(In reply to Matt Baker from
comment #4
)
> (In reply to Nikita Vasilyev from
comment #3
) > > Created
attachment 363570
[details]
> > [Video] With patch applied > > Nice! To reduce UI clutter, should we only reveal the arrow on mouseover?
Yeah, I do like that!
Nikita Vasilyev
Comment 8
2019-03-04 23:58:23 PST
Created
attachment 363610
[details]
Patch
Matt Baker
Comment 9
2019-03-05 14:40:27 PST
Comment on
attachment 363610
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=363610&action=review
r- because of a couple general comments: I'm worried that CSSProperty _overridden and _overriddenBy could get out of sync. What about dropping _overridden and replacing the public property with: get overridden() { return !!this._overriddingProperty; } You'd need to eliminate the WI.CSSProperty constructor argument `overridden`, or replaced it with `overriddingProperty`. This could be an issue in DOMNodeStyles.prototype._parseStylePropertyPayload, which constructs a WI.CSSProperty and sets overridden equal to true if payload.status.inactive. If this is too annoying to refactor, you can disregard this but be sure to fix the issue in CSSProperty.prototype.update. My other comment is style. 1) The spacing between the property value, goto arrow, and overriding property value feels too cramped. 2. The overriding property value hint should be shown with the arrow. It feels odd having it appear only when the goto arrow is hovered.
> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:34 > + this._overriddenBy = null;
What about _overridingProperty?
> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:266 > + this._overriddenBy = null;
This should also be nulled out in update() when !overridden.
Matt Baker
Comment 10
2019-03-05 14:47:26 PST
I wonder if we want a way to reveal/flash a property, like we do with source code locations. I was a little surprised that the property became selected after clicking the goto arrow. It's fine for now, but we might want to consider this for a follow-up.
Nikita Vasilyev
Comment 11
2019-03-05 14:54:46 PST
Created
attachment 363692
[details]
Patch
Nikita Vasilyev
Comment 12
2019-03-05 14:59:51 PST
(In reply to Matt Baker from
comment #10
)
> I wonder if we want a way to reveal/flash a property, like we do with source > code locations. I was a little surprised that the property became selected > after clicking the goto arrow. It's fine for now, but we might want to > consider this for a follow-up.
Yes, it would be a nice follow-up! We used to do that. It had several bugs. For instance, lines being stuck highlighted when the animation was interrupted (by switching to a different tab or panel, for instance). Regardless, I think we should bring it back and fix the bugs.
Matt Baker
Comment 13
2019-03-05 15:05:52 PST
(In reply to Nikita Vasilyev from
comment #11
)
> Created
attachment 363692
[details]
> Patch
This doesn't address the hover or horizontal spacing issues.
Nikita Vasilyev
Comment 14
2019-03-05 15:20:40 PST
(In reply to Matt Baker from
comment #9
)
> Comment on
attachment 363610
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=363610&action=review
> > r- because of a couple general comments: > > I'm worried that CSSProperty _overridden and _overriddenBy could get out of > sync. What about dropping _overridden and replacing the public property with: > > get overridden() > { > return !!this._overriddingProperty; > } > > You'd need to eliminate the WI.CSSProperty constructor argument > `overridden`, or replaced it with `overriddingProperty`. This could be an > issue in DOMNodeStyles.prototype._parseStylePropertyPayload, which > constructs a WI.CSSProperty and sets overridden equal to true if > payload.status.inactive. If this is too annoying to refactor, you can > disregard this but be sure to fix the issue in CSSProperty.prototype.update.
The current patch adds an experimental setting and tries to make as little as possible changes to the existing behavior. I agree with what you're saying! I think this refactoring should be done when the feature is turned on by default.
> > My other comment is style. > > 1) The spacing between the property value, goto arrow, and overriding > property value feels too cramped.
More than 40% of our users use Web Inspector docked to right with the styles sidebar being very narrow. What are you suggesting, exactly?
> 2. The overriding property value hint should be shown with the arrow. It > feels odd having it appear only when the goto arrow is hovered.
I tried it out and it didn't seem too obnoxious, so I think I agree with you.
Nikita Vasilyev
Comment 15
2019-03-05 17:24:56 PST
Created
attachment 363712
[details]
Patch Addressed the hover. Left a comment about the horizontal spacing above.
Devin Rousso
Comment 16
2019-03-05 18:12:13 PST
Comment on
attachment 363712
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=363712&action=review
> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:300 > + if (!WI.settings.experimentalEnableStylesJumpToEffective.value) > + return;
When this value changes, should we reset `_overridingProperty` to `null` (or force a reload of Web Inspector)?
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:921 > property.overridden = true; > + property.overridingProperty = effectiveProperty;
Rather than have both an `overridden` and an `overridingProperty`, why don't we say that `get overridden` returns true if `overridingProperty` is non-null?
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:926 > property.overridden = true; > + property.overridingProperty = effectiveProperty;
Ditto (>920).
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:932 > effectiveProperty.overridden = true; > + effectiveProperty.overridingProperty = property;
Ditto (>920).
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:169 > +.spreadsheet-style-declaration-editor .property .select-effective-property {
Does this sector match anything? I would think that we only create `.select-effective-property` when we're `.overridden`?
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:173 > + margin-left: 0;
NIT: I try to keep this in between "sizing" (e.g. `width` and `height`) and "content" (e.g. `line-height`, `vertical-align`, etc.) properties.
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:184 > + content: attr(data-value);
NIT: I normally put this with other "content"-esque properties, like above `white-space`.
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:187 > + display: inline-block;
NIT: I normally put this as the first property, since it can have the most impact/effect of other properties (e.g. `display: none;` trumps all other styles).
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:224 > + this._jumpToEffectiveButton = arrowButton;
Why not just use `this._jumpToEffectiveButton` instead of making another variable `arrowButton`? ``` this._jumpToEffectiveButton = WI.createGoToArrowButton(); this._jumpToEffectiveButton.classList.add("select-effective-property"); ... ```
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:279 > + this._jumpToEffectiveButton.dataset.value = this._property.overridingProperty ? this._property.overridingProperty.rawValue : "";
Shouldn't we always have an `overridingProperty`? Maybe just assert instead?
Nikita Vasilyev
Comment 17
2019-03-06 23:16:24 PST
Comment on
attachment 363712
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=363712&action=review
>> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:921 >> + property.overridingProperty = effectiveProperty; > > Rather than have both an `overridden` and an `overridingProperty`, why don't we say that `get overridden` returns true if `overridingProperty` is non-null?
Yes, I agree that would make things easier. However, currently, the overridden logic is split between the backend and the front-end. See _parseStylePropertyPayload and _markOverriddenProperties. If we move all the logic to the front-end, then I could make `get overridden` returns true if `overridingProperty` is non-null. If I do this, I'd want to write tests. I outlined some other concerns related to the existing `overridden` logic here:
https://bugs.webkit.org/show_bug.cgi?id=195389#c2
Nikita Vasilyev
Comment 18
2019-03-07 00:22:46 PST
Comment on
attachment 363712
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=363712&action=review
>> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:300 >> + return; > > When this value changes, should we reset `_overridingProperty` to `null` (or force a reload of Web Inspector)?
Good point.
>> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:184 >> + content: attr(data-value); > > NIT: I normally put this with other "content"-esque properties, like above `white-space`.
I still think `content` is the most important property.
>> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:224 >> + this._jumpToEffectiveButton = arrowButton; > > Why not just use `this._jumpToEffectiveButton` instead of making another variable `arrowButton`? > ``` > this._jumpToEffectiveButton = WI.createGoToArrowButton(); > this._jumpToEffectiveButton.classList.add("select-effective-property"); > ... > ```
Ok, since this is what we usually do.
>> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:279 >> + this._jumpToEffectiveButton.dataset.value = this._property.overridingProperty ? this._property.overridingProperty.rawValue : ""; > > Shouldn't we always have an `overridingProperty`? Maybe just assert instead?
Yes, it should. Good point.
Nikita Vasilyev
Comment 19
2019-03-07 00:29:37 PST
Created
attachment 363854
[details]
Patch
Matt Baker
Comment 20
2019-03-07 13:04:45 PST
(In reply to Nikita Vasilyev from
comment #19
)
> Created
attachment 363854
[details]
> Patch
A few issues we observed offline, which need to be resolved: 1) The tip text with the overriding property value is hard to see in dark mode. This is compounded when the property has a warning, and has the warning color background color. 2) Goto arrow doesn't appear for overridden User Agent properties.
Nikita Vasilyev
Comment 21
2019-03-07 15:11:02 PST
Created
attachment 363938
[details]
Patch
Matt Baker
Comment 22
2019-03-07 15:44:34 PST
Comment on
attachment 363938
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=363938&action=review
r=me, with some suggestions.
> Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js:915 > +localizedStrings["Show Jump to Effective Property Buttons"] = "Show Jump to Effective Property Buttons";
This should be singular: "Show Jump to Effective Property Button".
> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:299 > + if (!WI.settings.experimentalEnableStylesJumpToEffective.value)
Should we be performing this check? I think we should always track the effective property, but only show the UI when the setting is enabled.
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:921 > + property.overridingProperty = effectiveProperty;
You could eliminate some of the syncing of these two properties by doing this: class CSSProperty { set overridingProperty(property = null) { if (this._overridingProperty === property) return; this._overridingProperty = property; this._overridden = !!this._overridingProperty } } Unless it's possible that `overridden === true && overridingProperty === null`. Just a thought. If it doesn't simplify things, please disregard.
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:226 > + /* .select-effective-property has inverted colors. Invert the text color again to make it readable. */
Suggestion: ".select-effective-property has inverted colors. Invert the pseudo-element again to restore the original text color."
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:42 > + this._jumpToEffectiveButton = null;
this._jumpToEffectivePropertyButton
> Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:264 > if (this._property.overridden) {
If it is not possible that `overridden && !overridingProperty`, I'd test this._overridingProperty instead. Then you can eliminate the assert and test below.
Nikita Vasilyev
Comment 23
2019-03-07 15:59:38 PST
Created
attachment 363943
[details]
Patch for landing
WebKit Commit Bot
Comment 24
2019-03-07 16:40:07 PST
Comment on
attachment 363943
[details]
Patch for landing Clearing flags on attachment: 363943 Committed
r242622
: <
https://trac.webkit.org/changeset/242622
>
WebKit Commit Bot
Comment 25
2019-03-07 16:40:09 PST
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug