diff --git a/servo/components/script/dom/htmlinputelement.rs b/servo/components/script/dom/htmlinputelement.rs
index 48a6110f5032..78afb4630db4 100755
--- a/servo/components/script/dom/htmlinputelement.rs
+++ b/servo/components/script/dom/htmlinputelement.rs
@@ -574,9 +574,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectionstart
fn SetSelectionStart(&self, start: u32) {
- let selection_end = self.SelectionEnd();
- self.textinput.borrow_mut().set_selection_range(start, selection_end);
- self.upcast::().dirty(NodeDamage::OtherNodeDamage);
+ self.set_selection_range(start, self.SelectionEnd(), self.selection_direction());
}
// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectionend
@@ -586,9 +584,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectionend
fn SetSelectionEnd(&self, end: u32) {
- let selection_start = self.SelectionStart();
- self.textinput.borrow_mut().set_selection_range(selection_start, end);
- self.upcast::().dirty(NodeDamage::OtherNodeDamage);
+ self.set_selection_range(self.SelectionStart(), end, self.selection_direction());
}
// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectiondirection
@@ -603,17 +599,10 @@ impl HTMLInputElementMethods for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#dom-textarea/input-setselectionrange
fn SetSelectionRange(&self, start: u32, end: u32, direction: Option) {
+ // Step 4
let direction = direction.map_or(SelectionDirection::None, |d| SelectionDirection::from(d));
- self.textinput.borrow_mut().selection_direction = direction;
- self.textinput.borrow_mut().set_selection_range(start, end);
- let window = window_from_node(self);
- let _ = window.user_interaction_task_source().queue_event(
- &self.upcast(),
- atom!("select"),
- EventBubbles::Bubbles,
- EventCancelable::NotCancelable,
- &window);
- self.upcast::().dirty(NodeDamage::OtherNodeDamage);
+
+ self.set_selection_range(start, end, direction);
}
// Select the files based on filepaths passed in,
@@ -886,6 +875,30 @@ impl HTMLInputElement {
_ => ()
}
}
+
+ fn selection_direction(&self) -> SelectionDirection {
+ self.textinput.borrow().selection_direction
+ }
+
+ // https://html.spec.whatwg.org/multipage/#set-the-selection-range
+ fn set_selection_range(&self, start: u32, end: u32, direction: SelectionDirection) {
+ // Step 5
+ self.textinput.borrow_mut().selection_direction = direction;
+
+ // Step 3
+ self.textinput.borrow_mut().set_selection_range(start, end);
+
+ // Step 6
+ let window = window_from_node(self);
+ let _ = window.user_interaction_task_source().queue_event(
+ &self.upcast(),
+ atom!("select"),
+ EventBubbles::Bubbles,
+ EventCancelable::NotCancelable,
+ &window);
+
+ self.upcast::().dirty(NodeDamage::OtherNodeDamage);
+ }
}
impl VirtualMethods for HTMLInputElement {