mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-10 18:10:56 +09:00
LibDevTools+LibWebView+WebContent: Implement editing DOM node HTML
These commands are used for the "Edit As HTML" feature in DevTools. This renames our existing HTML getter IPC to indicate that it is for outer HTML. DevTools will need a separate inner HTML getter.
This commit is contained in:
parent
aca4385daf
commit
d75eadc3c4
Notes:
github-actions[bot]
2025-03-11 13:52:05 +00:00
Author: https://github.com/trflynn89
Commit: d75eadc3c4
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3898
11 changed files with 155 additions and 32 deletions
|
@ -504,6 +504,29 @@ static void edit_dom_node(DevTools::TabDescription const& description, Applicati
|
|||
edit(*view);
|
||||
}
|
||||
|
||||
void Application::get_dom_node_outer_html(DevTools::TabDescription const& description, Web::UniqueNodeID node_id, OnDOMNodeHTMLReceived on_complete) const
|
||||
{
|
||||
auto view = ViewImplementation::find_view_by_id(description.id);
|
||||
if (!view.has_value()) {
|
||||
on_complete(Error::from_string_literal("Unable to locate tab"));
|
||||
return;
|
||||
}
|
||||
|
||||
view->on_received_dom_node_html = [&view = *view, on_complete = move(on_complete)](auto html) {
|
||||
view.on_received_dom_node_html = nullptr;
|
||||
on_complete(html);
|
||||
};
|
||||
|
||||
view->get_dom_node_outer_html(node_id);
|
||||
}
|
||||
|
||||
void Application::set_dom_node_outer_html(DevTools::TabDescription const& description, Web::UniqueNodeID node_id, String const& value, OnDOMNodeEditComplete on_complete) const
|
||||
{
|
||||
edit_dom_node(description, move(on_complete), [&](auto& view) {
|
||||
view.set_dom_node_outer_html(node_id, value);
|
||||
});
|
||||
}
|
||||
|
||||
void Application::set_dom_node_text(DevTools::TabDescription const& description, Web::UniqueNodeID node_id, String const& value, OnDOMNodeEditComplete on_complete) const
|
||||
{
|
||||
edit_dom_node(description, move(on_complete), [&](auto& view) {
|
||||
|
|
|
@ -100,6 +100,8 @@ private:
|
|||
virtual void clear_highlighted_dom_node(DevTools::TabDescription const&) const override;
|
||||
virtual void listen_for_dom_mutations(DevTools::TabDescription const&, OnDOMMutationReceived) const override;
|
||||
virtual void stop_listening_for_dom_mutations(DevTools::TabDescription const&) const override;
|
||||
virtual void get_dom_node_outer_html(DevTools::TabDescription const&, Web::UniqueNodeID, OnDOMNodeHTMLReceived) const override;
|
||||
virtual void set_dom_node_outer_html(DevTools::TabDescription const&, Web::UniqueNodeID, String const&, OnDOMNodeEditComplete) const override;
|
||||
virtual void set_dom_node_text(DevTools::TabDescription const&, Web::UniqueNodeID, String const&, OnDOMNodeEditComplete) const override;
|
||||
virtual void set_dom_node_tag(DevTools::TabDescription const&, Web::UniqueNodeID, String const&, OnDOMNodeEditComplete) const override;
|
||||
virtual void add_dom_node_attributes(DevTools::TabDescription const&, Web::UniqueNodeID, ReadonlySpan<Attribute>, OnDOMNodeEditComplete) const override;
|
||||
|
|
|
@ -368,7 +368,7 @@ void InspectorClient::context_menu_copy_dom_node()
|
|||
{
|
||||
VERIFY(m_context_menu_data.has_value());
|
||||
|
||||
m_content_web_view.get_dom_node_html(m_context_menu_data->dom_node_id);
|
||||
m_content_web_view.get_dom_node_outer_html(m_context_menu_data->dom_node_id);
|
||||
m_context_menu_data.clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -354,6 +354,16 @@ void ViewImplementation::set_listen_for_dom_mutations(bool listen_for_dom_mutati
|
|||
client().async_set_listen_for_dom_mutations(page_id(), listen_for_dom_mutations);
|
||||
}
|
||||
|
||||
void ViewImplementation::get_dom_node_outer_html(Web::UniqueNodeID node_id)
|
||||
{
|
||||
client().async_get_dom_node_outer_html(page_id(), node_id);
|
||||
}
|
||||
|
||||
void ViewImplementation::set_dom_node_outer_html(Web::UniqueNodeID node_id, String const& html)
|
||||
{
|
||||
client().async_set_dom_node_outer_html(page_id(), node_id, html);
|
||||
}
|
||||
|
||||
void ViewImplementation::set_dom_node_text(Web::UniqueNodeID node_id, String const& text)
|
||||
{
|
||||
client().async_set_dom_node_text(page_id(), node_id, text);
|
||||
|
@ -394,11 +404,6 @@ void ViewImplementation::remove_dom_node(Web::UniqueNodeID node_id)
|
|||
client().async_remove_dom_node(page_id(), node_id);
|
||||
}
|
||||
|
||||
void ViewImplementation::get_dom_node_html(Web::UniqueNodeID node_id)
|
||||
{
|
||||
client().async_get_dom_node_html(page_id(), node_id);
|
||||
}
|
||||
|
||||
void ViewImplementation::list_style_sheets()
|
||||
{
|
||||
client().async_list_style_sheets(page_id());
|
||||
|
|
|
@ -115,6 +115,8 @@ public:
|
|||
void clear_highlighted_dom_node();
|
||||
|
||||
void set_listen_for_dom_mutations(bool);
|
||||
void get_dom_node_outer_html(Web::UniqueNodeID node_id);
|
||||
void set_dom_node_outer_html(Web::UniqueNodeID node_id, String const& html);
|
||||
void set_dom_node_text(Web::UniqueNodeID node_id, String const& text);
|
||||
void set_dom_node_tag(Web::UniqueNodeID node_id, String const& name);
|
||||
void add_dom_node_attributes(Web::UniqueNodeID node_id, ReadonlySpan<Attribute> attributes);
|
||||
|
@ -123,7 +125,6 @@ public:
|
|||
void create_child_text_node(Web::UniqueNodeID node_id);
|
||||
void clone_dom_node(Web::UniqueNodeID node_id);
|
||||
void remove_dom_node(Web::UniqueNodeID node_id);
|
||||
void get_dom_node_html(Web::UniqueNodeID node_id);
|
||||
|
||||
void list_style_sheets();
|
||||
void request_style_sheet_source(Web::CSS::StyleSheetIdentifier const&);
|
||||
|
@ -218,7 +219,7 @@ public:
|
|||
Function<void(Web::UniqueNodeID)> on_received_hovered_node_id;
|
||||
Function<void(Mutation)> on_dom_mutation_received;
|
||||
Function<void(Optional<Web::UniqueNodeID> const& node_id)> on_finshed_editing_dom_node;
|
||||
Function<void(String const&)> on_received_dom_node_html;
|
||||
Function<void(String)> on_received_dom_node_html;
|
||||
Function<void(JsonValue)> on_received_js_console_result;
|
||||
Function<void(i32 message_id)> on_console_message_available;
|
||||
Function<void(i32 start_index, Vector<String> const& message_types, Vector<String> const& messages)> on_received_styled_console_messages;
|
||||
|
|
|
@ -371,7 +371,7 @@ void WebContentClient::did_get_dom_node_html(u64 page_id, String html)
|
|||
{
|
||||
if (auto view = view_for_page_id(page_id); view.has_value()) {
|
||||
if (view->on_received_dom_node_html)
|
||||
view->on_received_dom_node_html(html);
|
||||
view->on_received_dom_node_html(move(html));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue