mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
style: More container queries plumbing
Provide container information in computed::Context and use it to resolve the container queries. This still fails a lot of tests because we are not ensuring that layout is up-to-date when we style the container descendants, but that's expected. Differential Revision: https://phabricator.services.mozilla.com/D146478
This commit is contained in:
parent
5c2fac087f
commit
bbf10a43b8
18 changed files with 420 additions and 143 deletions
|
@ -6,7 +6,7 @@
|
|||
//! `(width >= 400px)`.
|
||||
|
||||
use super::feature::{Evaluator, QueryFeatureDescription};
|
||||
use super::feature::{KeywordDiscriminant, ParsingRequirements};
|
||||
use super::feature::{KeywordDiscriminant, FeatureFlags};
|
||||
use crate::parser::{Parse, ParserContext};
|
||||
use crate::str::{starts_with_ignore_ascii_case, string_as_ascii_lowercase};
|
||||
use crate::values::computed::{self, Ratio, ToComputedValue};
|
||||
|
@ -337,10 +337,7 @@ impl QueryFeatureExpression {
|
|||
W: fmt::Write,
|
||||
{
|
||||
let feature = self.feature();
|
||||
if feature
|
||||
.requirements
|
||||
.contains(ParsingRequirements::WEBKIT_PREFIX)
|
||||
{
|
||||
if feature.flags.contains(FeatureFlags::WEBKIT_PREFIX) {
|
||||
dest.write_str("-webkit-")?;
|
||||
}
|
||||
|
||||
|
@ -361,6 +358,11 @@ impl QueryFeatureExpression {
|
|||
&self.feature_type.features()[self.feature_index]
|
||||
}
|
||||
|
||||
/// Returns the feature flags for our feature.
|
||||
pub fn feature_flags(&self) -> FeatureFlags {
|
||||
self.feature().flags
|
||||
}
|
||||
|
||||
/// Parse a feature expression of the form:
|
||||
///
|
||||
/// ```
|
||||
|
@ -382,18 +384,18 @@ impl QueryFeatureExpression {
|
|||
input: &mut Parser<'i, 't>,
|
||||
feature_type: FeatureType,
|
||||
) -> Result<(usize, Option<LegacyRange>), ParseError<'i>> {
|
||||
let mut requirements = ParsingRequirements::empty();
|
||||
let mut flags = FeatureFlags::empty();
|
||||
let location = input.current_source_location();
|
||||
let ident = input.expect_ident()?;
|
||||
|
||||
if context.in_ua_or_chrome_sheet() {
|
||||
requirements.insert(ParsingRequirements::CHROME_AND_UA_ONLY);
|
||||
flags.insert(FeatureFlags::CHROME_AND_UA_ONLY);
|
||||
}
|
||||
|
||||
let mut feature_name = &**ident;
|
||||
if starts_with_ignore_ascii_case(feature_name, "-webkit-") {
|
||||
feature_name = &feature_name[8..];
|
||||
requirements.insert(ParsingRequirements::WEBKIT_PREFIX);
|
||||
flags.insert(FeatureFlags::WEBKIT_PREFIX);
|
||||
}
|
||||
|
||||
let range = if starts_with_ignore_ascii_case(feature_name, "min-") {
|
||||
|
@ -417,7 +419,7 @@ impl QueryFeatureExpression {
|
|||
};
|
||||
|
||||
if disabled_by_pref(&feature.name, context) ||
|
||||
!requirements.contains(feature.requirements) ||
|
||||
!flags.contains(feature.flags.parsing_requirements()) ||
|
||||
(range.is_some() && !feature.allows_ranges())
|
||||
{
|
||||
return Err(location.new_custom_error(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue