aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlselectelement.rs
diff options
context:
space:
mode:
authorDongie Agnir <dongie.agnir@gmail.com>2015-10-23 13:12:06 -1000
committerDongie Agnir <dongie.agnir@gmail.com>2015-10-23 13:12:06 -1000
commit6e9e1465bf1b2915215c7c1ab806baae5dbc1695 (patch)
tree6a5e3f319bf6a7705a46429d27d0965c9b877f19 /components/script/dom/htmlselectelement.rs
parentb1d6b0f7970b18820b85385c0df85ced0ebc1b5e (diff)
downloadservo-6e9e1465bf1b2915215c7c1ab806baae5dbc1695.tar.gz
servo-6e9e1465bf1b2915215c7c1ab806baae5dbc1695.zip
Implement pick_option.
Diffstat (limited to 'components/script/dom/htmlselectelement.rs')
-rw-r--r--components/script/dom/htmlselectelement.rs30
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 {