> The [`@import`](https://www.w3.org/TR/css-cascade-5/#at-import) rule is 
> extended to support conditional stylesheet imports:
> 
> 
> @import [ <url> | <string> ] <media-query-list>? ;
> 
> 
> Conceptually, a conditional import takes all rules of the referenced 
> stylesheet, literally includes them at the location of the `@import` rule, 
> and surrounds them with a `@media` rule with the specified 
> `<media-query-list>`.
> 
> The implementation of this feature extends media queries with a context-free 
> evaluation function:
> 
> interface MediaQuery {
>     TriState evaluate(); // returns TRUE / FALSE / UNKNOWN
> }
> 
> 
> This mode of evaluation uses Kleene's strong trivalent logic to determine 
> whether the media query will always match (it's a tautology), will never 
> match (it's a contradiction), or whether it depends on the context or we 
> simply don't know.
> 
> Using this mechanism, a conditional stylesheet import that can never match 
> will be skipped at runtime. Similarly, a conditional stylesheet import that 
> will always match doesn't need the `<media-query-list>` at all; its rules 
> will be pasted verbatim into the main stylesheet.
> 
> Note that this mechanism is _not_ meant to be a full-blown theorem solver. It 
> won't detect that, for example, the following import conditions will always 
> match:
> 
> @import url("stylesheet.css") (width > 1000) or (width <= 1000);
> 
> 
> Its purpose is an optimization for "obvious" cases. For example, at the 
> moment the built-in themes use hard-coded conditions to include user-agent 
> stylesheets at runtime:
> 
>     // in PlatformImpl.java:
>     if (isSupported(ConditionalFeature.INPUT_TOUCH)) {
>         
> uaStylesheets.add("com/sun/javafx/scene/control/skin/modena/touch.css");
>     }
> 
> In the future, we might have a way to test for `ConditionalFeature` flags 
> that achieves the same thing, but with a public API available to all theme 
> authors:
> 
> @import url("com/sun/javafx/scene/control/skin/modena/touch.css")
>         (-fx-supports-conditional-feature: input-touch);

Michael Strauß has updated the pull request with a new target base due to a 
merge or a rebase. The incremental webrev excludes the unrelated changes 
brought in by the merge/rebase. The pull request contains two additional 
commits since the last revision:

 - Merge branch 'master' into feature/conditional-import
 - Conditional stylesheet imports

-------------

Changes:
  - all: https://git.openjdk.org/jfx/pull/2031/files
  - new: https://git.openjdk.org/jfx/pull/2031/files/3aaab577..12fc8915

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=00-01

  Stats: 1420 lines in 23 files changed: 918 ins; 193 del; 309 mod
  Patch: https://git.openjdk.org/jfx/pull/2031.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2031/head:pull/2031

PR: https://git.openjdk.org/jfx/pull/2031

Reply via email to