servo: Merge #19202 - Fire 'select' event in SetSelection{Start,End} (from jonleighton:issue-19171); r=KiChjang

See #19171.

Source-Repo: https://github.com/servo/servo
Source-Revision: 2efbf2230a61a2fda1ecc4cd12618177d4ca50cd

--HG--
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
extra : subtree_revision : dfd0ab9c996dac7757b1dbdaf140cbc5d95c9d90
This commit is contained in:
Jon Leighton 2017-11-15 04:08:24 -06:00
Родитель 5b2c0adf24
Коммит e987d6cbd2
1 изменённых файлов: 29 добавлений и 16 удалений

Просмотреть файл

@ -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
@ -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
@ -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,
@ -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 {