From a71e999ac83495e3dbcc786aaefdcb8c6c019bc5 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Tue, 7 Jan 2025 14:15:09 +0100 Subject: [PATCH] LibWeb: Implement the "bold" editing command --- Libraries/LibWeb/Editing/Commands.cpp | 24 +++++++++++++ Libraries/LibWeb/Editing/Commands.h | 3 +- .../expected/Editing/execCommand-bold.txt | 4 +++ .../Editing/execCommand-is-a-noop.txt | 7 ---- .../Text/input/Editing/execCommand-bold.html | 34 +++++++++++++++++++ .../input/Editing/execCommand-is-a-noop.html | 32 ----------------- 6 files changed, 64 insertions(+), 40 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/Editing/execCommand-bold.txt delete mode 100644 Tests/LibWeb/Text/expected/Editing/execCommand-is-a-noop.txt create mode 100644 Tests/LibWeb/Text/input/Editing/execCommand-bold.html delete mode 100644 Tests/LibWeb/Text/input/Editing/execCommand-is-a-noop.html diff --git a/Libraries/LibWeb/Editing/Commands.cpp b/Libraries/LibWeb/Editing/Commands.cpp index 187294d5a5d..e55bd8c6422 100644 --- a/Libraries/LibWeb/Editing/Commands.cpp +++ b/Libraries/LibWeb/Editing/Commands.cpp @@ -25,6 +25,23 @@ namespace Web::Editing { +// https://w3c.github.io/editing/docs/execCommand/#the-bold-command +bool command_bold_action(DOM::Document& document, String const&) +{ + // If queryCommandState("bold") returns true, set the selection's value to "normal". + if (document.query_command_state(CommandNames::bold)) { + set_the_selections_value(document, CommandNames::bold, "normal"_string); + } + + // Otherwise set the selection's value to "bold". + else { + set_the_selections_value(document, CommandNames::bold, "bold"_string); + } + + // Either way, return true. + return true; +} + // https://w3c.github.io/editing/docs/execCommand/#the-defaultparagraphseparator-command bool command_default_paragraph_separator_action(DOM::Document& document, String const& input_value) { @@ -822,6 +839,13 @@ bool command_style_with_css_state(DOM::Document const& document) } static Array const commands { + // https://w3c.github.io/editing/docs/execCommand/#the-bold-command + CommandDefinition { + .command = CommandNames::bold, + .action = command_bold_action, + .relevant_css_property = CSS::PropertyID::FontWeight, + .inline_activated_values = { "bold"sv, "600"sv, "700"sv, "800"sv, "900"sv }, + }, // https://w3c.github.io/editing/docs/execCommand/#the-delete-command CommandDefinition { .command = CommandNames::delete_, diff --git a/Libraries/LibWeb/Editing/Commands.h b/Libraries/LibWeb/Editing/Commands.h index 58fedab1176..0fed3493ab7 100644 --- a/Libraries/LibWeb/Editing/Commands.h +++ b/Libraries/LibWeb/Editing/Commands.h @@ -23,12 +23,13 @@ struct CommandDefinition { bool preserves_overrides { false }; // https://w3c.github.io/editing/docs/execCommand/#inline-command-activated-values - Vector inline_activated_values {}; + Vector inline_activated_values {}; }; Optional find_command_definition(FlyString const&); // Command implementations +bool command_bold_action(DOM::Document&, String const&); bool command_default_paragraph_separator_action(DOM::Document&, String const&); String command_default_paragraph_separator_value(DOM::Document const&); bool command_delete_action(DOM::Document&, String const&); diff --git a/Tests/LibWeb/Text/expected/Editing/execCommand-bold.txt b/Tests/LibWeb/Text/expected/Editing/execCommand-bold.txt new file mode 100644 index 00000000000..c11be414a61 --- /dev/null +++ b/Tests/LibWeb/Text/expected/Editing/execCommand-bold.txt @@ -0,0 +1,4 @@ +Div contents: "foobar" state: false selection: #document 0 #document 0 +Div contents: "foobar" state: true selection: #text 0 #text 3 +Div contents: "foobar" state: true selection: #text 0 #text 3 +Div contents: "foobar" state: false selection: #text 0 #text 3 diff --git a/Tests/LibWeb/Text/expected/Editing/execCommand-is-a-noop.txt b/Tests/LibWeb/Text/expected/Editing/execCommand-is-a-noop.txt deleted file mode 100644 index 89752242564..00000000000 --- a/Tests/LibWeb/Text/expected/Editing/execCommand-is-a-noop.txt +++ /dev/null @@ -1,7 +0,0 @@ -execCommand("bold") returned false -Hello, world!I'm totally bold rn -queryCommandEnabled("bold") returned false -queryCommandIndeterm("bold") returned false -queryCommandState("bold") returned false -queryCommandSupported("bold") returned false -queryCommandValue("bold") returned "" diff --git a/Tests/LibWeb/Text/input/Editing/execCommand-bold.html b/Tests/LibWeb/Text/input/Editing/execCommand-bold.html new file mode 100644 index 00000000000..89ebd8a89b4 --- /dev/null +++ b/Tests/LibWeb/Text/input/Editing/execCommand-bold.html @@ -0,0 +1,34 @@ + +
foobar
+ diff --git a/Tests/LibWeb/Text/input/Editing/execCommand-is-a-noop.html b/Tests/LibWeb/Text/input/Editing/execCommand-is-a-noop.html deleted file mode 100644 index 7470d878480..00000000000 --- a/Tests/LibWeb/Text/input/Editing/execCommand-is-a-noop.html +++ /dev/null @@ -1,32 +0,0 @@ - -
-