diff options
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 { |