mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-05 23:59:49 +00:00
LibWeb: Remove GeneratedPseudoElement enum
This doesn't currently provide any value over just using PseudoElement, and makes it harder to work with PseudoElement in other places.
This commit is contained in:
parent
a57595faf5
commit
dfce9974b5
Notes:
github-actions[bot]
2025-06-19 11:37:32 +00:00
Author: https://github.com/AtkinsSJ
Commit: dfce9974b5
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5132
Reviewed-by: https://github.com/tcl3
5 changed files with 11 additions and 87 deletions
|
@ -169,7 +169,6 @@ Each entry has the following properties:
|
||||||
|----------------------|----------|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|----------------------|----------|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `alias-for` | No | Nothing | Use to specify that this should be treated as an alias for the named pseudo-element. |
|
| `alias-for` | No | Nothing | Use to specify that this should be treated as an alias for the named pseudo-element. |
|
||||||
| `function-syntax` | No | Nothing | Syntax for the function arguments if this is a function-type pseudo-element. Copied directly from the spec. |
|
| `function-syntax` | No | Nothing | Syntax for the function arguments if this is a function-type pseudo-element. Copied directly from the spec. |
|
||||||
| `is-generated` | No | `false` | Whether this is a [generated pseudo-element](https://drafts.csswg.org/css-pseudo-4/#generated-content). |
|
|
||||||
| `is-allowed-in-has` | No | `false` | Whether this is a [`:has`-allowed pseudo-element](https://drafts.csswg.org/selectors/#has-allowed-pseudo-element). |
|
| `is-allowed-in-has` | No | `false` | Whether this is a [`:has`-allowed pseudo-element](https://drafts.csswg.org/selectors/#has-allowed-pseudo-element). |
|
||||||
| `is-pseudo-root` | No | `false` | Whether this is a [pseudo-element root](https://drafts.csswg.org/css-view-transitions/#pseudo-element-root). |
|
| `is-pseudo-root` | No | `false` | Whether this is a [pseudo-element root](https://drafts.csswg.org/css-view-transitions/#pseudo-element-root). |
|
||||||
| `property-whitelist` | No | Nothing | Some pseudo-elements only permit certain properties. If so, name them in an array here. Some special values are allowed here for categories of properties - see below. |
|
| `property-whitelist` | No | Nothing | Some pseudo-elements only permit certain properties. If so, name them in an array here. Some special values are allowed here for categories of properties - see below. |
|
||||||
|
@ -184,9 +183,6 @@ The generated code provides:
|
||||||
- `bool is_has_allowed_pseudo_element(PseudoElement)` returns whether the pseudo-element is valid inside `:has()`
|
- `bool is_has_allowed_pseudo_element(PseudoElement)` returns whether the pseudo-element is valid inside `:has()`
|
||||||
- `bool is_pseudo_element_root(PseudoElement)` returns whether the pseudo-element is a [pseudo-element root](https://drafts.csswg.org/css-view-transitions/#pseudo-element-root)
|
- `bool is_pseudo_element_root(PseudoElement)` returns whether the pseudo-element is a [pseudo-element root](https://drafts.csswg.org/css-view-transitions/#pseudo-element-root)
|
||||||
- `bool pseudo_element_supports_property(PseudoElement, PropertyID)` returns whether the property can be applied to this pseudo-element
|
- `bool pseudo_element_supports_property(PseudoElement, PropertyID)` returns whether the property can be applied to this pseudo-element
|
||||||
- A `GeneratedPseudoElement` enum listing only the pseudo-elements that are [generated content](https://drafts.csswg.org/css-pseudo-4/#generated-content)
|
|
||||||
- `Optional<GeneratedPseudoElement> to_generated_pseudo_element(PseudoElement)` for converting from `PseudoElement` to `GeneratedPseudoElement`. Returns nothing if it's not a generated pseudo-element
|
|
||||||
- `PseudoElement to_pseudo_element(GeneratedPseudoElement)` does the opposite conversion
|
|
||||||
|
|
||||||
### `property-whitelist`
|
### `property-whitelist`
|
||||||
|
|
||||||
|
|
|
@ -30,16 +30,13 @@
|
||||||
"alias-for": "slider-thumb"
|
"alias-for": "slider-thumb"
|
||||||
},
|
},
|
||||||
"after": {
|
"after": {
|
||||||
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-after",
|
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-after"
|
||||||
"is-generated": true
|
|
||||||
},
|
},
|
||||||
"backdrop": {
|
"backdrop": {
|
||||||
"spec": "https://drafts.csswg.org/css-position-4/#selectordef-backdrop",
|
"spec": "https://drafts.csswg.org/css-position-4/#selectordef-backdrop"
|
||||||
"is-generated": true
|
|
||||||
},
|
},
|
||||||
"before": {
|
"before": {
|
||||||
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-before",
|
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-before"
|
||||||
"is-generated": true
|
|
||||||
},
|
},
|
||||||
"details-content": {
|
"details-content": {
|
||||||
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-details-content"
|
"spec": "https://drafts.csswg.org/css-pseudo-4/#selectordef-details-content"
|
||||||
|
|
|
@ -50,10 +50,10 @@ public:
|
||||||
void reset_needs_layout_update() { m_needs_layout_update = false; }
|
void reset_needs_layout_update() { m_needs_layout_update = false; }
|
||||||
|
|
||||||
bool is_generated() const { return m_generated_for.has_value(); }
|
bool is_generated() const { return m_generated_for.has_value(); }
|
||||||
bool is_generated_for_before_pseudo_element() const { return m_generated_for == CSS::GeneratedPseudoElement::Before; }
|
bool is_generated_for_before_pseudo_element() const { return m_generated_for == CSS::PseudoElement::Before; }
|
||||||
bool is_generated_for_after_pseudo_element() const { return m_generated_for == CSS::GeneratedPseudoElement::After; }
|
bool is_generated_for_after_pseudo_element() const { return m_generated_for == CSS::PseudoElement::After; }
|
||||||
bool is_generated_for_backdrop_pseudo_element() const { return m_generated_for == CSS::GeneratedPseudoElement::Backdrop; }
|
bool is_generated_for_backdrop_pseudo_element() const { return m_generated_for == CSS::PseudoElement::Backdrop; }
|
||||||
void set_generated_for(CSS::GeneratedPseudoElement type, DOM::Element& element)
|
void set_generated_for(CSS::PseudoElement type, DOM::Element& element)
|
||||||
{
|
{
|
||||||
m_generated_for = type;
|
m_generated_for = type;
|
||||||
m_pseudo_element_generator = &element;
|
m_pseudo_element_generator = &element;
|
||||||
|
@ -224,7 +224,7 @@ private:
|
||||||
|
|
||||||
bool m_needs_layout_update { false };
|
bool m_needs_layout_update { false };
|
||||||
|
|
||||||
Optional<CSS::GeneratedPseudoElement> m_generated_for {};
|
Optional<CSS::PseudoElement> m_generated_for {};
|
||||||
|
|
||||||
u32 m_initial_quote_nesting_level { 0 };
|
u32 m_initial_quote_nesting_level { 0 };
|
||||||
};
|
};
|
||||||
|
|
|
@ -219,15 +219,14 @@ void TreeBuilder::create_pseudo_element_if_needed(DOM::Element& element, CSS::Ps
|
||||||
pseudo_element_node->prepend_child(*list_item_marker);
|
pseudo_element_node->prepend_child(*list_item_marker);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto generated_for = CSS::to_generated_pseudo_element(pseudo_element).release_value();
|
pseudo_element_node->set_generated_for(pseudo_element, element);
|
||||||
pseudo_element_node->set_generated_for(generated_for, element);
|
|
||||||
pseudo_element_node->set_initial_quote_nesting_level(initial_quote_nesting_level);
|
pseudo_element_node->set_initial_quote_nesting_level(initial_quote_nesting_level);
|
||||||
|
|
||||||
// FIXME: Handle images, and multiple values
|
// FIXME: Handle images, and multiple values
|
||||||
if (pseudo_element_content.type == CSS::ContentData::Type::String) {
|
if (pseudo_element_content.type == CSS::ContentData::Type::String) {
|
||||||
auto text = document.realm().create<DOM::Text>(document, pseudo_element_content.data);
|
auto text = document.realm().create<DOM::Text>(document, pseudo_element_content.data);
|
||||||
auto text_node = document.heap().allocate<Layout::TextNode>(document, *text);
|
auto text_node = document.heap().allocate<Layout::TextNode>(document, *text);
|
||||||
text_node->set_generated_for(generated_for, element);
|
text_node->set_generated_for(pseudo_element, element);
|
||||||
|
|
||||||
push_parent(*pseudo_element_node);
|
push_parent(*pseudo_element_node);
|
||||||
insert_node_into_inline_or_block_ancestor(*text_node, text_node->display(), AppendOrPrepend::Append);
|
insert_node_into_inline_or_block_ancestor(*text_node, text_node->display(), AppendOrPrepend::Append);
|
||||||
|
@ -583,7 +582,7 @@ void TreeBuilder::update_layout_tree(DOM::Node& dom_node, TreeBuilder::Context&
|
||||||
return;
|
return;
|
||||||
|
|
||||||
top_layer_element->set_pseudo_element_node({}, CSS::PseudoElement::Backdrop, pseudo_element_node);
|
top_layer_element->set_pseudo_element_node({}, CSS::PseudoElement::Backdrop, pseudo_element_node);
|
||||||
pseudo_element_node->set_generated_for(CSS::GeneratedPseudoElement::Backdrop, top_layer_element);
|
pseudo_element_node->set_generated_for(CSS::PseudoElement::Backdrop, top_layer_element);
|
||||||
insert_node_into_inline_or_block_ancestor(*pseudo_element_node, pseudo_element_display, AppendOrPrepend::Append);
|
insert_node_into_inline_or_block_ancestor(*pseudo_element_node, pseudo_element_display, AppendOrPrepend::Append);
|
||||||
}();
|
}();
|
||||||
update_layout_tree(top_layer_element, context, should_create_layout_node ? MustCreateSubtree::Yes : MustCreateSubtree::No);
|
update_layout_tree(top_layer_element, context, should_create_layout_node ? MustCreateSubtree::Yes : MustCreateSubtree::No);
|
||||||
|
|
|
@ -99,23 +99,6 @@ struct PseudoElementMetadata {
|
||||||
};
|
};
|
||||||
PseudoElementMetadata pseudo_element_metadata(PseudoElement);
|
PseudoElementMetadata pseudo_element_metadata(PseudoElement);
|
||||||
|
|
||||||
enum class GeneratedPseudoElement : @generated_pseudo_element_underlying_type@ {
|
|
||||||
)~~~");
|
|
||||||
pseudo_elements_data.for_each_member([&](auto& name, JsonValue const& value) {
|
|
||||||
auto& pseudo_element = value.as_object();
|
|
||||||
if (!pseudo_element.get_bool("is-generated"sv).value_or(false))
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto member_generator = generator.fork();
|
|
||||||
member_generator.set("name:titlecase", title_casify(name));
|
|
||||||
member_generator.appendln(" @name:titlecase@,");
|
|
||||||
});
|
|
||||||
generator.append(R"~~~(
|
|
||||||
};
|
|
||||||
|
|
||||||
Optional<GeneratedPseudoElement> to_generated_pseudo_element(PseudoElement);
|
|
||||||
PseudoElement to_pseudo_element(GeneratedPseudoElement);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
)~~~");
|
)~~~");
|
||||||
|
|
||||||
|
@ -565,57 +548,6 @@ PseudoElementMetadata pseudo_element_metadata(PseudoElement pseudo_element)
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<GeneratedPseudoElement> to_generated_pseudo_element(PseudoElement pseudo_element)
|
|
||||||
{
|
|
||||||
switch (pseudo_element) {
|
|
||||||
)~~~");
|
|
||||||
|
|
||||||
pseudo_elements_data.for_each_member([&](auto& name, JsonValue const& value) {
|
|
||||||
auto& pseudo_element = value.as_object();
|
|
||||||
if (pseudo_element.has("alias-for"sv))
|
|
||||||
return;
|
|
||||||
if (!pseudo_element.get_bool("is-generated"sv).value_or(false))
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto member_generator = generator.fork();
|
|
||||||
member_generator.set("name:titlecase", title_casify(name));
|
|
||||||
member_generator.append(R"~~~(
|
|
||||||
case PseudoElement::@name:titlecase@:
|
|
||||||
return GeneratedPseudoElement::@name:titlecase@;
|
|
||||||
)~~~");
|
|
||||||
});
|
|
||||||
|
|
||||||
generator.append(R"~~~(
|
|
||||||
default:
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PseudoElement to_pseudo_element(GeneratedPseudoElement generated_pseudo_element)
|
|
||||||
{
|
|
||||||
switch (generated_pseudo_element) {
|
|
||||||
)~~~");
|
|
||||||
|
|
||||||
pseudo_elements_data.for_each_member([&](auto& name, JsonValue const& value) {
|
|
||||||
auto& pseudo_element = value.as_object();
|
|
||||||
if (pseudo_element.has("alias-for"sv))
|
|
||||||
return;
|
|
||||||
if (!pseudo_element.get_bool("is-generated"sv).value_or(false))
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto member_generator = generator.fork();
|
|
||||||
member_generator.set("name:titlecase", title_casify(name));
|
|
||||||
member_generator.append(R"~~~(
|
|
||||||
case GeneratedPseudoElement::@name:titlecase@:
|
|
||||||
return PseudoElement::@name:titlecase@;
|
|
||||||
)~~~");
|
|
||||||
});
|
|
||||||
|
|
||||||
generator.append(R"~~~(
|
|
||||||
}
|
|
||||||
VERIFY_NOT_REACHED();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
)~~~");
|
)~~~");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue