Skip to content

Commit

Permalink
Fire 'select' event in SetSelection{Start,End}
Browse files Browse the repository at this point in the history
Issue #19171
  • Loading branch information
jonleighton committed Nov 15, 2017
1 parent 6f1d9a1 commit 93b047a
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 41 deletions.
45 changes: 29 additions & 16 deletions components/script/dom/htmlinputelement.rs
Expand Up @@ -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::<Node>().dirty(NodeDamage::OtherNodeDamage);
self.set_selection_range(start, self.SelectionEnd(), self.selection_direction());
}

// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectionend
Expand All @@ -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::<Node>().dirty(NodeDamage::OtherNodeDamage);
self.set_selection_range(self.SelectionStart(), end, self.selection_direction());
}

// https://html.spec.whatwg.org/multipage/#dom-textarea/input-selectiondirection
Expand All @@ -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<DOMString>) {
// 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::<Node>().dirty(NodeDamage::OtherNodeDamage);

self.set_selection_range(start, end, direction);
}

// Select the files based on filepaths passed in,
Expand Down Expand Up @@ -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::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}

impl VirtualMethods for HTMLInputElement {
Expand Down
@@ -1,6 +1,6 @@
[selection-start-end.html]
type: testharness
expected: TIMEOUT

[onselect should fire when selectionStart is changed]
expected: FAIL

Expand All @@ -16,27 +16,3 @@
[selectionStart edge-case values]
expected: FAIL

[onselect should fire when selectionStart is changed on input-appended]
expected: NOTRUN

[onselect should fire when selectionStart is changed on input-not-appended]
expected: NOTRUN

[onselect should fire when selectionStart is changed on input-appended-prefocused]
expected: NOTRUN

[onselect should fire when selectionStart is changed on input-not-appended-prefocused]
expected: NOTRUN

[onselect should fire when selectionEnd is changed on input-appended]
expected: NOTRUN

[onselect should fire when selectionEnd is changed on input-not-appended]
expected: NOTRUN

[onselect should fire when selectionEnd is changed on input-appended-prefocused]
expected: NOTRUN

[onselect should fire when selectionEnd is changed on input-not-appended-prefocused]
expected: NOTRUN

0 comments on commit 93b047a

Please sign in to comment.