mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
dispatch select event from input.select() and textarea.select()
This commit is contained in:
@@ -221,6 +221,44 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id="select_event">
|
||||
{
|
||||
const input = document.createElement('input');
|
||||
input.value = 'Hello World';
|
||||
document.body.appendChild(input);
|
||||
|
||||
let eventCount = 0;
|
||||
let lastEvent = null;
|
||||
|
||||
input.addEventListener('select', (e) => {
|
||||
eventCount++;
|
||||
lastEvent = e;
|
||||
});
|
||||
|
||||
let onselectFired = false;
|
||||
input.onselect = () => { onselectFired = true; };
|
||||
|
||||
let bubbledToBody = false;
|
||||
document.body.addEventListener('select', () => {
|
||||
bubbledToBody = true;
|
||||
});
|
||||
|
||||
testing.expectEqual(0, eventCount);
|
||||
|
||||
input.select();
|
||||
|
||||
testing.eventually(() => {
|
||||
testing.expectEqual(1, eventCount);
|
||||
testing.expectEqual('select', lastEvent.type);
|
||||
testing.expectEqual(input, lastEvent.target);
|
||||
testing.expectEqual(true, lastEvent.bubbles);
|
||||
testing.expectEqual(false, lastEvent.cancelable);
|
||||
testing.expectEqual(true, bubbledToBody);
|
||||
testing.expectEqual(true, onselectFired);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- <script id="defaultChecked">
|
||||
testing.expectEqual(true, $('#check1').defaultChecked)
|
||||
testing.expectEqual(false, $('#check2').defaultChecked)
|
||||
|
||||
@@ -230,6 +230,44 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id="select_event">
|
||||
{
|
||||
const textarea = document.createElement('textarea');
|
||||
textarea.value = 'Hello World';
|
||||
document.body.appendChild(textarea);
|
||||
|
||||
let eventCount = 0;
|
||||
let lastEvent = null;
|
||||
|
||||
textarea.addEventListener('select', (e) => {
|
||||
eventCount++;
|
||||
lastEvent = e;
|
||||
});
|
||||
|
||||
let onselectFired = false;
|
||||
textarea.onselect = () => { onselectFired = true; };
|
||||
|
||||
let bubbledToBody = false;
|
||||
document.body.addEventListener('select', () => {
|
||||
bubbledToBody = true;
|
||||
});
|
||||
|
||||
testing.expectEqual(0, eventCount);
|
||||
|
||||
textarea.select();
|
||||
|
||||
testing.eventually(() => {
|
||||
testing.expectEqual(1, eventCount);
|
||||
testing.expectEqual('select', lastEvent.type);
|
||||
testing.expectEqual(textarea, lastEvent.target);
|
||||
testing.expectEqual(true, lastEvent.bubbles);
|
||||
testing.expectEqual(false, lastEvent.cancelable);
|
||||
testing.expectEqual(true, bubbledToBody);
|
||||
testing.expectEqual(true, onselectFired);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id="selectionchange_event">
|
||||
{
|
||||
const textarea = document.createElement('textarea');
|
||||
|
||||
@@ -290,6 +290,9 @@ pub fn setRequired(self: *Input, required: bool, page: *Page) !void {
|
||||
pub fn select(self: *Input, page: *Page) !void {
|
||||
const len = if (self._value) |v| @as(u32, @intCast(v.len)) else 0;
|
||||
try self.setSelectionRange(0, len, null, page);
|
||||
const event = try Event.init("select", .{ .bubbles = true }, page);
|
||||
defer if (!event._v8_handoff) event.deinit(false);
|
||||
try page._event_manager.dispatch(self.asElement().asEventTarget(), event);
|
||||
}
|
||||
|
||||
fn selectionAvailable(self: *const Input) bool {
|
||||
|
||||
@@ -139,6 +139,9 @@ pub fn setRequired(self: *TextArea, required: bool, page: *Page) !void {
|
||||
pub fn select(self: *TextArea, page: *Page) !void {
|
||||
const len = if (self._value) |v| @as(u32, @intCast(v.len)) else 0;
|
||||
try self.setSelectionRange(0, len, null, page);
|
||||
const event = try Event.init("select", .{ .bubbles = true }, page);
|
||||
defer if (!event._v8_handoff) event.deinit(false);
|
||||
try page._event_manager.dispatch(self.asElement().asEventTarget(), event);
|
||||
}
|
||||
|
||||
const HowSelected = union(enum) { partial: struct { u32, u32 }, full, none };
|
||||
|
||||
Reference in New Issue
Block a user