mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 19:37:34 +00:00
LibWeb: Add basic HTML meter element support
This commit is contained in:
parent
761d824b72
commit
2107ab823d
13 changed files with 442 additions and 14 deletions
|
@ -309,15 +309,21 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
if (is<DOM::Element>(dom_node)) {
|
||||
auto& element = static_cast<DOM::Element&>(dom_node);
|
||||
|
||||
// Special path for ::placeholder, which corresponds to a synthetic DOM element inside the <input> UA shadow root.
|
||||
// Special path for elements that use pseudo selectors.
|
||||
// FIXME: This is very hackish. Find a better way to architect this.
|
||||
if (element.pseudo_element() == CSS::Selector::PseudoElement::Placeholder) {
|
||||
auto& input_element = verify_cast<HTML::HTMLInputElement>(*element.root().parent_or_shadow_host());
|
||||
style = TRY(style_computer.compute_style(input_element, CSS::Selector::PseudoElement::Placeholder));
|
||||
if (input_element.placeholder_value().has_value())
|
||||
display = style->display();
|
||||
else
|
||||
display = CSS::Display::from_short(CSS::Display::Short::None);
|
||||
if (element.pseudo_element() == CSS::Selector::PseudoElement::Placeholder || element.pseudo_element() == CSS::Selector::PseudoElement::MeterBar || element.pseudo_element() == CSS::Selector::PseudoElement::MeterOptimumValue || element.pseudo_element() == CSS::Selector::PseudoElement::MeterSuboptimumValue || element.pseudo_element() == CSS::Selector::PseudoElement::MeterEvenLessGoodValue) {
|
||||
auto& parent_element = verify_cast<HTML::HTMLElement>(*element.root().parent_or_shadow_host());
|
||||
style = TRY(style_computer.compute_style(parent_element, element.pseudo_element()));
|
||||
display = style->display();
|
||||
if (element.pseudo_element() == CSS::Selector::PseudoElement::Placeholder) {
|
||||
auto& input_element = verify_cast<HTML::HTMLInputElement>(parent_element);
|
||||
if (!input_element.placeholder_value().has_value())
|
||||
display = CSS::Display::from_short(CSS::Display::Short::None);
|
||||
}
|
||||
if (element.pseudo_element() == CSS::Selector::PseudoElement::MeterOptimumValue || element.pseudo_element() == CSS::Selector::PseudoElement::MeterSuboptimumValue || element.pseudo_element() == CSS::Selector::PseudoElement::MeterEvenLessGoodValue) {
|
||||
auto computed_style = element.computed_css_values();
|
||||
style->set_property(CSS::PropertyID::Width, computed_style->property(CSS::PropertyID::Width));
|
||||
}
|
||||
}
|
||||
// Common path: this is a regular DOM element. Style should be present already, thanks to Document::update_style().
|
||||
else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue