mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 10:41:30 +00:00
LibWeb: Implement the "insertUnorderedList" editing command
This commit is contained in:
parent
26cadf06d2
commit
1c3251e2d5
Notes:
github-actions[bot]
2025-01-10 22:35:00 +00:00
Author: https://github.com/gmta
Commit: 1c3251e2d5
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3216
4 changed files with 67 additions and 0 deletions
|
@ -1841,6 +1841,28 @@ bool command_insert_text_action(DOM::Document& document, String const& value)
|
||||||
return true;
|
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
|
// https://w3c.github.io/editing/docs/execCommand/#the-italic-command
|
||||||
bool command_italic_action(DOM::Document& document, String const&)
|
bool command_italic_action(DOM::Document& document, String const&)
|
||||||
{
|
{
|
||||||
|
@ -2245,6 +2267,14 @@ static Array const commands {
|
||||||
.command = CommandNames::insertText,
|
.command = CommandNames::insertText,
|
||||||
.action = command_insert_text_action,
|
.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
|
// https://w3c.github.io/editing/docs/execCommand/#the-italic-command
|
||||||
CommandDefinition {
|
CommandDefinition {
|
||||||
.command = CommandNames::italic,
|
.command = CommandNames::italic,
|
||||||
|
|
|
@ -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_ordered_list_state(DOM::Document const&);
|
||||||
bool command_insert_paragraph_action(DOM::Document&, String const&);
|
bool command_insert_paragraph_action(DOM::Document&, String const&);
|
||||||
bool command_insert_text_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_italic_action(DOM::Document&, String const&);
|
||||||
bool command_remove_format_action(DOM::Document&, String const&);
|
bool command_remove_format_action(DOM::Document&, String const&);
|
||||||
bool command_strikethrough_action(DOM::Document&, String const&);
|
bool command_strikethrough_action(DOM::Document&, String const&);
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<ul><li>foobar</li></ul>
|
||||||
|
<div>foobar</div>
|
||||||
|
<ul><li>foobar</li></ul>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<script src="../include.js"></script>
|
||||||
|
<div contenteditable="true" id="d1">foobar</div>
|
||||||
|
<div contenteditable="true" id="d2"><ul><li>foobar</li></ul></div>
|
||||||
|
<div contenteditable="true" id="d3"><ol><li>foobar</li></ol></div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
const range = document.createRange();
|
||||||
|
getSelection().addRange(range);
|
||||||
|
|
||||||
|
// Create unordered list of 'foobar'
|
||||||
|
const div1 = document.querySelector('#d1');
|
||||||
|
range.setStart(div1.firstChild, 0);
|
||||||
|
range.setEnd(div1.firstChild, 6);
|
||||||
|
document.execCommand('insertUnorderedList');
|
||||||
|
println(div1.innerHTML);
|
||||||
|
|
||||||
|
// De-unordered list 'foobar'
|
||||||
|
const div2 = document.querySelector('#d2');
|
||||||
|
range.setStart(div2.firstChild.firstChild.firstChild, 0);
|
||||||
|
range.setEnd(div2.firstChild.firstChild.firstChild, 6);
|
||||||
|
document.execCommand('insertUnorderedList');
|
||||||
|
println(div2.innerHTML);
|
||||||
|
|
||||||
|
// Change type of list
|
||||||
|
const div3 = document.querySelector('#d3');
|
||||||
|
range.setStart(div3.firstChild.firstChild.firstChild, 0);
|
||||||
|
range.setEnd(div3.firstChild.firstChild.firstChild, 6);
|
||||||
|
document.execCommand('insertUnorderedList');
|
||||||
|
println(div3.innerHTML);
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue