diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index c12abc32c96..4fbb432614c 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -280,6 +280,33 @@ impl RawLayoutElementHelpers for Element { vertical: width_value, })))); } + + + let size = if self.is_htmlinputelement() { + // FIXME(pcwalton): More use of atoms, please! + // FIXME(Ms2ger): this is nonsense! Invalid values also end up as + // a text field + match self.get_attr_val_for_layout(&ns!(""), &atom!("type")) { + Some("text") | Some("password") => { + let this: &HTMLInputElement = mem::transmute(self); + match this.get_size_for_layout() { + 0 => None, + s => Some(s as i32), + } + } + _ => None + } + } else { + None + }; + + if let Some(size) = size { + let value = specified::Length::ServoCharacterWidth( + specified::CharacterWidth(size)); + hints.push(from_declaration( + PropertyDeclaration::Width(SpecifiedValue( + specified::LengthOrPercentageOrAuto::Length(value))))); + } } #[inline] @@ -304,13 +331,6 @@ impl RawLayoutElementHelpers for Element { unsafe fn get_integer_attribute_for_layout(&self, integer_attribute: IntegerAttribute) -> Option { match integer_attribute { - IntegerAttribute::Size => { - if !self.is_htmlinputelement() { - panic!("I'm not a form input!") - } - let this: &HTMLInputElement = mem::transmute(self); - Some(this.get_size_for_layout() as i32) - } IntegerAttribute::Cols => { if !self.is_htmltextareaelement() { panic!("I'm not a textarea element!") diff --git a/components/style/legacy.rs b/components/style/legacy.rs index 57343341e29..8c4ed130916 100644 --- a/components/style/legacy.rs +++ b/components/style/legacy.rs @@ -30,8 +30,6 @@ pub enum LengthAttribute { /// Legacy presentational attributes that take an integer as defined in HTML5 ยง 2.4.4.2. #[derive(Copy, Clone, PartialEq, Eq)] pub enum IntegerAttribute { - /// `` - Size, Cols, Rows, } @@ -122,25 +120,6 @@ impl PresentationalHintSynthesis for Stylist { matching_rules_list, shareable); } - name if *name == atom!("input") => { - // FIXME(pcwalton): More use of atoms, please! - match element.get_attr(&ns!(""), &atom!("type")) { - Some("text") | Some("password") => { - match element.get_integer_attribute(IntegerAttribute::Size) { - Some(value) if value != 0 => { - let value = specified::Length::ServoCharacterWidth( - specified::CharacterWidth(value)); - matching_rules_list.push(from_declaration( - PropertyDeclaration::Width(SpecifiedValue( - specified::LengthOrPercentageOrAuto::Length(value))))); - *shareable = false - } - Some(_) | None => {} - } - } - _ => {} - }; - } name if *name == atom!("textarea") => { match element.get_integer_attribute(IntegerAttribute::Cols) { Some(value) if value != 0 => {