diff options
author | Dongie Agnir <dongie.agnir@gmail.com> | 2015-10-23 13:12:06 -1000 |
---|---|---|
committer | Dongie Agnir <dongie.agnir@gmail.com> | 2015-10-23 13:12:06 -1000 |
commit | 6e9e1465bf1b2915215c7c1ab806baae5dbc1695 (patch) | |
tree | 6a5e3f319bf6a7705a46429d27d0965c9b877f19 /components/script/dom/htmlselectelement.rs | |
parent | b1d6b0f7970b18820b85385c0df85ced0ebc1b5e (diff) | |
download | servo-6e9e1465bf1b2915215c7c1ab806baae5dbc1695.tar.gz servo-6e9e1465bf1b2915215c7c1ab806baae5dbc1695.zip |
Implement pick_option.
Diffstat (limited to 'components/script/dom/htmlselectelement.rs')
-rw-r--r-- | components/script/dom/htmlselectelement.rs | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs index d50ba64cc43..d1f3fc98c7d 100644 --- a/components/script/dom/htmlselectelement.rs +++ b/components/script/dom/htmlselectelement.rs @@ -83,18 +83,30 @@ impl HTMLSelectElement { } } - // https://html.spec.whatwg.org/multipage/#concept-select-size - fn display_size(&self) -> u32 { - if self.Size() == 0 { - if self.Multiple() { - 4 - } else { - 1 + pub fn pick_option(&self, picked: &HTMLOptionElement) { + if !self.Multiple() { + let node = self.upcast::<Node>(); + let picked = picked.upcast(); + for opt in node.traverse_preorder().filter_map(Root::downcast::<HTMLOptionElement>) { + if opt.upcast::<HTMLElement>() != picked { + opt.set_selectedness(false); + } } - } else { - self.Size() } } + + // https://html.spec.whatwg.org/multipage/#concept-select-size + fn display_size(&self) -> u32 { + if self.Size() == 0 { + if self.Multiple() { + 4 + } else { + 1 + } + } else { + self.Size() + } + } } impl HTMLSelectElementMethods for HTMLSelectElement { |