-
Notifications
You must be signed in to change notification settings - Fork 3k
Declarative CSS Modules #11687
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Declarative CSS Modules #11687
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces declarative CSS modules support to HTML, allowing CSS to be imported as modules through <style>
elements with a specifier
attribute and <template>
elements with a shadowrootadoptedstylesheets
attribute.
- Adds a
specifier
attribute to<style>
elements that creates module import maps for CSS content - Introduces a
shadowrootadoptedstylesheets
attribute for<template>
elements to declaratively adopt CSS modules - Implements algorithms for creating declarative CSS module scripts and stylesheet adoption
Comments suppressed due to low confidence (5)
source:1
- Missing attribute name in IDL definition. Should be
[SameObject, PutForwards=value, Reflect] readonly attribute DOMString <dfn attribute for="HTMLStyleElement" data-x="dom-style-specifier">specifier</dfn>;
to match the pattern used for other attributes in this interface.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Grammar error: 'is defines' should be 'defines' - remove the word 'is'.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Grammar error: 'appended with the of the' should be 'appended with the' - remove the duplicate 'the of'.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Logic error: The algorithm references
<var>specifier</var>
but this variable is not defined in the algorithm. It should reference the value of theshadowrootadoptedstylesheets
attribute instead.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Incorrect data-x reference: Should be
data-x=\"attr-style-specifier\"
notdata-x=\"attr-style-blocking\"
for the specifier attribute row.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (9)
source:1
- The IDL attribute should be named to match the content attribute. The content attribute is
specifier
but the IDL should use camelCase convention:[SameObject, PutForwards=value, Reflect] readonly attribute DOMString specifier;
should have a data-x attribute defining the DOM property name.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- The
shadowrootadoptedstylesheets
attribute is listed twice in the content attributes section for the template element. This duplication should be removed.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- The
shadowrootadoptedstylesheets
attribute is listed twice in the content attributes section for the template element. This duplication should be removed.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- The algorithm step is missing proper HTML structure. It should end with
</li>
and the nested<ol>
should be properly closed with</ol>
.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- The variable
moduleScript
is referenced but never defined in this algorithm. This should likely be the current module script or settings object context.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- These variable assignments are missing closing
</p>
tags. Each should end with</p></li>
.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Missing spaces after commas in the parameter list. Should be
<var>fetchClient</var>, <var>destination</var>, <var>options</var>, <var>settingsObject</var>, <var>referrer</var>
for consistency.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Incorrect data-x reference in the table. Line 148289 should reference
data-x=\"element-template\"
or similar, notdata-x=\"attr-template-shadowrootclonable\"
.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
source:1
- Incorrect data-x reference in the table. Line 148363 should reference
data-x=\"element-style\"
instead ofdata-x=\"attr-style-blocking\"
.
<!-- -*- mode: Text; fill-column: 100 -*- vim: set textwidth=100 :
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review in progress, sharing feedback so far.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM (No permissions to actually Approve)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is coming together nicely. I think the biggest thing still to figure out is to prevent a given <style type=module>
from being processed twice. I'm about to head out on leave so I'm going to Approve this since I'm supportive of the direction and I trust that the remaining open issues will be handled appropriately.
<ol> | ||
<li><p>Let <var>element</var> be the <code>style</code> element.</p></li> | ||
|
||
<li><p>If <var>element</var> is not <span>connected</span>, then return.</p></li> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess this is also the point where we'd also check a new equivalent of the already started flag to ensure a given <style type=module>
only ever gets processed once?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I'll have to think about this a little more. I will likely bring this up soon with the WHATWG.
source
Outdated
of the value of the <span data-x="attr-style-specifier">specifier attribute</span> and a value of | ||
<var>styleDataURI</var>.</p></li> | ||
|
||
<li><p><span>Create an import map parse result</span> with <var>input</var> as <var>jsonString</var> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Create an import map parse result
can throw -- do we need to handle any of those cases? The one I particularly had in mind to watch for is does it throw when a given specifier is invalid? If not, do we need to handle an invalid specifier some other way?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question. For now I added a step to look at the importMapParseResult's error to rethrow and to continue if that happens. In practice, we probably want to log something in the console, but this might be enough for the spec.
You can include "Fixes #10673" in the OP so that there's a link from the issue in GitHub's UI. (Also should be in the commit message when squashing.) |
@annevk - I believe the last two commits addressed all of the issues you brought up this morning, so please take a look when you get a chance. And also let me know if I missed anything else you mentioned today. |
(See WHATWG Working Mode: Changes for more details.)
/acknowledgements.html ( diff )
/indices.html ( diff )
/infrastructure.html ( diff )
/parsing.html ( diff )
/scripting.html ( diff )
/semantics.html ( diff )