From ae12f7036b486bc87b64177b7fa067189638061c Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Wed, 8 Jan 2025 16:24:38 +0100 Subject: [PATCH] LibWeb: Implement the "italic" editing command --- Libraries/LibWeb/Editing/Commands.cpp | 24 +++++++++++++ Libraries/LibWeb/Editing/Commands.h | 1 + .../expected/Editing/execCommand-italic.txt | 4 +++ .../input/Editing/execCommand-italic.html | 34 +++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 Tests/LibWeb/Text/expected/Editing/execCommand-italic.txt create mode 100644 Tests/LibWeb/Text/input/Editing/execCommand-italic.html diff --git a/Libraries/LibWeb/Editing/Commands.cpp b/Libraries/LibWeb/Editing/Commands.cpp index 695c3bd5999..e444454ba1c 100644 --- a/Libraries/LibWeb/Editing/Commands.cpp +++ b/Libraries/LibWeb/Editing/Commands.cpp @@ -1189,6 +1189,23 @@ bool command_insert_paragraph_action(DOM::Document& document, String const&) return true; } +// https://w3c.github.io/editing/docs/execCommand/#the-italic-command +bool command_italic_action(DOM::Document& document, String const&) +{ + // If queryCommandState("italic") returns true, set the selection's value to "normal". + if (document.query_command_state(CommandNames::italic)) { + set_the_selections_value(document, CommandNames::italic, "normal"_string); + } + + // Otherwise set the selection's value to "italic". + else { + set_the_selections_value(document, CommandNames::italic, "italic"_string); + } + + // Either way, return true. + return true; +} + // https://w3c.github.io/editing/docs/execCommand/#the-stylewithcss-command bool command_style_with_css_action(DOM::Document& document, String const& value) { @@ -1281,6 +1298,13 @@ static Array const commands { .action = command_insert_paragraph_action, .preserves_overrides = true, }, + // https://w3c.github.io/editing/docs/execCommand/#the-italic-command + CommandDefinition { + .command = CommandNames::italic, + .action = command_italic_action, + .relevant_css_property = CSS::PropertyID::FontStyle, + .inline_activated_values = { "italic"sv, "oblique"sv }, + }, // https://w3c.github.io/editing/docs/execCommand/#the-stylewithcss-command CommandDefinition { .command = CommandNames::styleWithCSS, diff --git a/Libraries/LibWeb/Editing/Commands.h b/Libraries/LibWeb/Editing/Commands.h index 205caa0bdee..1acd8a6475c 100644 --- a/Libraries/LibWeb/Editing/Commands.h +++ b/Libraries/LibWeb/Editing/Commands.h @@ -42,6 +42,7 @@ bool command_fore_color_action(DOM::Document&, String const&); bool command_forward_delete_action(DOM::Document&, String const&); bool command_insert_linebreak_action(DOM::Document&, String const&); bool command_insert_paragraph_action(DOM::Document&, String const&); +bool command_italic_action(DOM::Document&, String const&); bool command_style_with_css_action(DOM::Document&, String const&); bool command_style_with_css_state(DOM::Document const&); diff --git a/Tests/LibWeb/Text/expected/Editing/execCommand-italic.txt b/Tests/LibWeb/Text/expected/Editing/execCommand-italic.txt new file mode 100644 index 00000000000..5cc817bf978 --- /dev/null +++ b/Tests/LibWeb/Text/expected/Editing/execCommand-italic.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/input/Editing/execCommand-italic.html b/Tests/LibWeb/Text/input/Editing/execCommand-italic.html new file mode 100644 index 00000000000..45b21a97495 --- /dev/null +++ b/Tests/LibWeb/Text/input/Editing/execCommand-italic.html @@ -0,0 +1,34 @@ + +
foobar
+