diff --git a/Libraries/LibWeb/Editing/Commands.cpp b/Libraries/LibWeb/Editing/Commands.cpp index e2004027237..af3c4aac26b 100644 --- a/Libraries/LibWeb/Editing/Commands.cpp +++ b/Libraries/LibWeb/Editing/Commands.cpp @@ -1841,6 +1841,28 @@ bool command_insert_text_action(DOM::Document& document, String const& value) return true; } +// https://w3c.github.io/editing/docs/execCommand/#the-insertunorderedlist-command +bool command_insert_unordered_list_action(DOM::Document& document, String const&) +{ + // Toggle lists with tag name "ul", then return true. + toggle_lists(document, HTML::TagNames::ul); + return true; +} + +// https://w3c.github.io/editing/docs/execCommand/#the-insertunorderedlist-command +bool command_insert_unordered_list_indeterminate(DOM::Document const& document) +{ + // True if the selection's list state is "mixed" or "mixed ul", false otherwise. + return first_is_one_of(selections_list_state(document), SelectionsListState::Mixed, SelectionsListState::MixedUl); +} + +// https://w3c.github.io/editing/docs/execCommand/#the-insertunorderedlist-command +bool command_insert_unordered_list_state(DOM::Document const& document) +{ + // True if the selection's list state is "ul", false otherwise. + return selections_list_state(document) == SelectionsListState::Ul; +} + // https://w3c.github.io/editing/docs/execCommand/#the-italic-command bool command_italic_action(DOM::Document& document, String const&) { @@ -2245,6 +2267,14 @@ static Array const commands { .command = CommandNames::insertText, .action = command_insert_text_action, }, + // https://w3c.github.io/editing/docs/execCommand/#the-insertunorderedlist-command + CommandDefinition { + .command = CommandNames::insertUnorderedList, + .action = command_insert_unordered_list_action, + .indeterminate = command_insert_unordered_list_indeterminate, + .state = command_insert_unordered_list_state, + .preserves_overrides = true, + }, // https://w3c.github.io/editing/docs/execCommand/#the-italic-command CommandDefinition { .command = CommandNames::italic, diff --git a/Libraries/LibWeb/Editing/Commands.h b/Libraries/LibWeb/Editing/Commands.h index 9de47785ad2..906342b299a 100644 --- a/Libraries/LibWeb/Editing/Commands.h +++ b/Libraries/LibWeb/Editing/Commands.h @@ -53,6 +53,9 @@ bool command_insert_ordered_list_indeterminate(DOM::Document const&); bool command_insert_ordered_list_state(DOM::Document const&); bool command_insert_paragraph_action(DOM::Document&, String const&); bool command_insert_text_action(DOM::Document&, String const&); +bool command_insert_unordered_list_action(DOM::Document&, String const&); +bool command_insert_unordered_list_indeterminate(DOM::Document const&); +bool command_insert_unordered_list_state(DOM::Document const&); bool command_italic_action(DOM::Document&, String const&); bool command_remove_format_action(DOM::Document&, String const&); bool command_strikethrough_action(DOM::Document&, String const&); diff --git a/Tests/LibWeb/Text/expected/Editing/execCommand-insertUnorderedList.txt b/Tests/LibWeb/Text/expected/Editing/execCommand-insertUnorderedList.txt new file mode 100644 index 00000000000..9b10e2110d6 --- /dev/null +++ b/Tests/LibWeb/Text/expected/Editing/execCommand-insertUnorderedList.txt @@ -0,0 +1,3 @@ + +
foobar
+ diff --git a/Tests/LibWeb/Text/input/Editing/execCommand-insertUnorderedList.html b/Tests/LibWeb/Text/input/Editing/execCommand-insertUnorderedList.html new file mode 100644 index 00000000000..7633668c97d --- /dev/null +++ b/Tests/LibWeb/Text/input/Editing/execCommand-insertUnorderedList.html @@ -0,0 +1,31 @@ + +
foobar
+
+
  1. foobar
+