Skip to content

Commit

Permalink
LibWeb: Implement document.execCommand("styleWithCSS")
Browse files Browse the repository at this point in the history
  • Loading branch information
gmta committed Nov 30, 2024
1 parent 836832a commit db0370a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Libraries/LibWeb/DOM/Document.h
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,10 @@ class Document
FlyString const& default_single_line_container_name() const { return m_default_single_line_container_name; }
void set_default_single_line_container_name(FlyString const& name) { m_default_single_line_container_name = name; }

// https://w3c.github.io/editing/docs/execCommand/#css-styling-flag
bool css_styling_flag() const { return m_css_styling_flag; }
void set_css_styling_flag(bool flag) { m_css_styling_flag = flag; }

protected:
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
Expand Down Expand Up @@ -1046,6 +1050,9 @@ class Document

// https://w3c.github.io/editing/docs/execCommand/#default-single-line-container-name
FlyString m_default_single_line_container_name { HTML::TagNames::div };

// https://w3c.github.io/editing/docs/execCommand/#css-styling-flag
bool m_css_styling_flag { false };
};

template<>
Expand Down
19 changes: 19 additions & 0 deletions Libraries/LibWeb/Editing/Commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,24 @@

namespace Web::Editing {

// https://w3c.github.io/editing/docs/execCommand/#the-stylewithcss-command
bool command_style_with_css_action(DOM::Document& document, String const& value)
{
// If value is an ASCII case-insensitive match for the string "false", set the CSS styling flag to false.
// Otherwise, set the CSS styling flag to true.
document.set_css_styling_flag(!value.equals_ignoring_ascii_case("false"sv));

// Either way, return true.
return true;
}

// https://w3c.github.io/editing/docs/execCommand/#the-stylewithcss-command
bool command_style_with_css_state(DOM::Document const& document)
{
// True if the CSS styling flag is true, otherwise false.
return document.css_styling_flag();
}

// https://w3c.github.io/editing/docs/execCommand/#the-defaultparagraphseparator-command
bool command_default_paragraph_separator_action(DOM::Document& document, String const& input_value)
{
Expand Down Expand Up @@ -365,6 +383,7 @@ bool command_delete_action(DOM::Document& document, String const&)
static Array const commands {
CommandDefinition { CommandNames::delete_, command_delete_action, {}, {}, {} },
CommandDefinition { CommandNames::defaultParagraphSeparator, command_default_paragraph_separator_action, {}, {}, command_default_paragraph_separator_value },
CommandDefinition { CommandNames::styleWithCSS, command_style_with_css_action, {}, command_style_with_css_state, {} },
};

Optional<CommandDefinition const&> find_command_definition(String const& command)
Expand Down
2 changes: 2 additions & 0 deletions Libraries/LibWeb/Editing/Commands.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ struct CommandDefinition {
Optional<CommandDefinition const&> find_command_definition(String const&);

// Command implementations
bool command_style_with_css_action(DOM::Document&, String const&);
bool command_style_with_css_state(DOM::Document 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&);
Expand Down

0 comments on commit db0370a

Please sign in to comment.