mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
style: Serialize also "only" qualifier, and fix serialization of all media expressions without explicit qualifiers.
This commit is contained in:
parent
bb672f1a2c
commit
c04c3c60c3
1 changed files with 29 additions and 9 deletions
|
@ -86,6 +86,17 @@ pub enum Qualifier {
|
||||||
Not,
|
Not,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToCss for Qualifier {
|
||||||
|
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
||||||
|
where W: fmt::Write
|
||||||
|
{
|
||||||
|
match *self {
|
||||||
|
Qualifier::Not => write!(dest, "not"),
|
||||||
|
Qualifier::Only => write!(dest, "only"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||||
pub struct MediaQuery {
|
pub struct MediaQuery {
|
||||||
|
@ -115,22 +126,32 @@ impl ToCss for MediaQuery {
|
||||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
||||||
where W: fmt::Write
|
where W: fmt::Write
|
||||||
{
|
{
|
||||||
if self.qualifier == Some(Qualifier::Not) {
|
if let Some(qual) = self.qualifier {
|
||||||
try!(write!(dest, "not "));
|
try!(qual.to_css(dest));
|
||||||
|
try!(write!(dest, " "));
|
||||||
}
|
}
|
||||||
|
|
||||||
match self.media_type {
|
match self.media_type {
|
||||||
MediaQueryType::All => try!(write!(dest, "all")),
|
MediaQueryType::All => {
|
||||||
|
// We need to print "all" if there's a qualifier, or there's
|
||||||
|
// just an empty list of expressions.
|
||||||
|
//
|
||||||
|
// Otherwise, we'd serialize media queries like "(min-width:
|
||||||
|
// 40px)" in "all (min-width: 40px)", which is unexpected.
|
||||||
|
if self.qualifier.is_some() || self.expressions.is_empty() {
|
||||||
|
try!(write!(dest, "all"));
|
||||||
|
}
|
||||||
|
},
|
||||||
MediaQueryType::Known(MediaType::Screen) => try!(write!(dest, "screen")),
|
MediaQueryType::Known(MediaType::Screen) => try!(write!(dest, "screen")),
|
||||||
MediaQueryType::Known(MediaType::Print) => try!(write!(dest, "print")),
|
MediaQueryType::Known(MediaType::Print) => try!(write!(dest, "print")),
|
||||||
MediaQueryType::Unknown(ref desc) => try!(write!(dest, "{}", desc)),
|
MediaQueryType::Unknown(ref desc) => try!(write!(dest, "{}", desc)),
|
||||||
};
|
}
|
||||||
|
|
||||||
if self.expressions.is_empty() {
|
if self.expressions.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.media_type != MediaQueryType::All || self.qualifier == Some(Qualifier::Not) {
|
if self.media_type != MediaQueryType::All || self.qualifier.is_some() {
|
||||||
try!(write!(dest, " and "));
|
try!(write!(dest, " and "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,10 +164,9 @@ impl ToCss for MediaQuery {
|
||||||
};
|
};
|
||||||
try!(write!(dest, "{}width: ", mm));
|
try!(write!(dest, "{}width: ", mm));
|
||||||
try!(l.to_css(dest));
|
try!(l.to_css(dest));
|
||||||
if i == self.expressions.len() - 1 {
|
try!(write!(dest, ")"));
|
||||||
try!(write!(dest, ")"));
|
if i != self.expressions.len() - 1 {
|
||||||
} else {
|
try!(write!(dest, " and "));
|
||||||
try!(write!(dest, ") and "));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue