style: Serialize also "only" qualifier, and fix serialization of all media expressions without explicit qualifiers.

This commit is contained in:
Emilio Cobos Álvarez 2016-12-27 01:00:12 +01:00
parent bb672f1a2c
commit c04c3c60c3
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C

View file

@ -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(())