1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:25:10 +00:00

LibWeb: Make DOM::Range more suitable for JS.

This commit is contained in:
asynts 2020-12-06 19:51:55 +01:00 committed by Andreas Kling
parent 4df0eeaa3d
commit 10f9c85090
11 changed files with 186 additions and 69 deletions

View file

@ -26,6 +26,7 @@
#include <AK/StringBuilder.h>
#include <LibWeb/DOM/Position.h>
#include <LibWeb/DOM/Range.h>
#include <LibWeb/DOM/Text.h>
#include <LibWeb/Layout/LayoutPosition.h>
#include <LibWeb/Page/Frame.h>
@ -39,15 +40,15 @@
namespace Web {
// This method is quite convoluted but this is necessary to make editing feel intuitive.
void EditEventHandler::handle_delete(DOM::Range range)
void EditEventHandler::handle_delete(DOM::Range& range)
{
auto* start = downcast<DOM::Text>(range.start().node());
auto* end = downcast<DOM::Text>(range.end().node());
auto* start = downcast<DOM::Text>(range.start_container());
auto* end = downcast<DOM::Text>(range.end_container());
if (start == end) {
StringBuilder builder;
builder.append(start->data().substring_view(0, range.start().offset()));
builder.append(end->data().substring_view(range.end().offset()));
builder.append(start->data().substring_view(0, range.start_offset()));
builder.append(end->data().substring_view(range.end_offset()));
start->set_data(builder.to_string());
} else {
@ -84,8 +85,8 @@ void EditEventHandler::handle_delete(DOM::Range range)
// Join the start and end nodes.
StringBuilder builder;
builder.append(start->data().substring_view(0, range.start().offset()));
builder.append(end->data().substring_view(range.end().offset()));
builder.append(start->data().substring_view(0, range.start_offset()));
builder.append(end->data().substring_view(range.end_offset()));
start->set_data(builder.to_string());
start->parent()->remove_child(*end);