| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |  * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  | #include <AK/NonnullRefPtr.h>
 | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  | #include <LibWeb/CSS/ComputedCSSStyleDeclaration.h>
 | 
					
						
							|  |  |  | #include <LibWeb/CSS/StyleResolver.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Document.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Element.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::CSS { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ComputedCSSStyleDeclaration::ComputedCSSStyleDeclaration(DOM::Element& element) | 
					
						
							|  |  |  |     : m_element(element) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ComputedCSSStyleDeclaration::~ComputedCSSStyleDeclaration() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | size_t ComputedCSSStyleDeclaration::length() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String ComputedCSSStyleDeclaration::item(size_t index) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     (void)index; | 
					
						
							|  |  |  |     return {}; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Display value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case CSS::Display::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case CSS::Display::Block: | 
					
						
							|  |  |  |         return CSS::ValueID::Block; | 
					
						
							|  |  |  |     case CSS::Display::Inline: | 
					
						
							|  |  |  |         return CSS::ValueID::Inline; | 
					
						
							|  |  |  |     case CSS::Display::InlineBlock: | 
					
						
							|  |  |  |         return CSS::ValueID::InlineBlock; | 
					
						
							|  |  |  |     case CSS::Display::ListItem: | 
					
						
							|  |  |  |         return CSS::ValueID::ListItem; | 
					
						
							|  |  |  |     case CSS::Display::Table: | 
					
						
							|  |  |  |         return CSS::ValueID::Table; | 
					
						
							|  |  |  |     case CSS::Display::TableRow: | 
					
						
							|  |  |  |         return CSS::ValueID::TableRow; | 
					
						
							|  |  |  |     case CSS::Display::TableCell: | 
					
						
							|  |  |  |         return CSS::ValueID::TableCell; | 
					
						
							|  |  |  |     case CSS::Display::TableHeaderGroup: | 
					
						
							|  |  |  |         return CSS::ValueID::TableHeaderGroup; | 
					
						
							|  |  |  |     case CSS::Display::TableRowGroup: | 
					
						
							|  |  |  |         return CSS::ValueID::TableRowGroup; | 
					
						
							|  |  |  |     case CSS::Display::TableFooterGroup: | 
					
						
							|  |  |  |         return CSS::ValueID::TableFooterGroup; | 
					
						
							|  |  |  |     case CSS::Display::TableColumn: | 
					
						
							|  |  |  |         return CSS::ValueID::TableColumn; | 
					
						
							|  |  |  |     case CSS::Display::TableColumnGroup: | 
					
						
							|  |  |  |         return CSS::ValueID::TableColumnGroup; | 
					
						
							|  |  |  |     case CSS::Display::TableCaption: | 
					
						
							|  |  |  |         return CSS::ValueID::TableCaption; | 
					
						
							|  |  |  |     case CSS::Display::Flex: | 
					
						
							|  |  |  |         return CSS::ValueID::Flex; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  | static CSS::ValueID to_css_value_id(CSS::Float value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Float::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case Float::Left: | 
					
						
							|  |  |  |         return CSS::ValueID::Left; | 
					
						
							|  |  |  |     case Float::Right: | 
					
						
							|  |  |  |         return CSS::ValueID::Right; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Clear value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Clear::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case Clear::Left: | 
					
						
							|  |  |  |         return CSS::ValueID::Left; | 
					
						
							|  |  |  |     case Clear::Right: | 
					
						
							|  |  |  |         return CSS::ValueID::Right; | 
					
						
							|  |  |  |     case Clear::Both: | 
					
						
							|  |  |  |         return CSS::ValueID::Both; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::TextDecorationLine value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case TextDecorationLine::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case TextDecorationLine::Underline: | 
					
						
							|  |  |  |         return CSS::ValueID::Underline; | 
					
						
							|  |  |  |     case TextDecorationLine::Overline: | 
					
						
							|  |  |  |         return CSS::ValueID::Overline; | 
					
						
							|  |  |  |     case TextDecorationLine::LineThrough: | 
					
						
							|  |  |  |         return CSS::ValueID::LineThrough; | 
					
						
							|  |  |  |     case TextDecorationLine::Blink: | 
					
						
							|  |  |  |         return CSS::ValueID::Blink; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Cursor value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Cursor::Auto: | 
					
						
							|  |  |  |         return CSS::ValueID::Auto; | 
					
						
							|  |  |  |     case Cursor::Default: | 
					
						
							|  |  |  |         return CSS::ValueID::Default; | 
					
						
							|  |  |  |     case Cursor::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case Cursor::ContextMenu: | 
					
						
							|  |  |  |         return CSS::ValueID::ContextMenu; | 
					
						
							|  |  |  |     case Cursor::Help: | 
					
						
							|  |  |  |         return CSS::ValueID::Help; | 
					
						
							|  |  |  |     case Cursor::Pointer: | 
					
						
							|  |  |  |         return CSS::ValueID::Pointer; | 
					
						
							|  |  |  |     case Cursor::Progress: | 
					
						
							|  |  |  |         return CSS::ValueID::Progress; | 
					
						
							|  |  |  |     case Cursor::Wait: | 
					
						
							|  |  |  |         return CSS::ValueID::Wait; | 
					
						
							|  |  |  |     case Cursor::Cell: | 
					
						
							|  |  |  |         return CSS::ValueID::Cell; | 
					
						
							|  |  |  |     case Cursor::Crosshair: | 
					
						
							|  |  |  |         return CSS::ValueID::Crosshair; | 
					
						
							|  |  |  |     case Cursor::Text: | 
					
						
							|  |  |  |         return CSS::ValueID::Text; | 
					
						
							|  |  |  |     case Cursor::VerticalText: | 
					
						
							|  |  |  |         return CSS::ValueID::VerticalText; | 
					
						
							|  |  |  |     case Cursor::Alias: | 
					
						
							|  |  |  |         return CSS::ValueID::Alias; | 
					
						
							|  |  |  |     case Cursor::Copy: | 
					
						
							|  |  |  |         return CSS::ValueID::Copy; | 
					
						
							|  |  |  |     case Cursor::Move: | 
					
						
							|  |  |  |         return CSS::ValueID::Move; | 
					
						
							|  |  |  |     case Cursor::NoDrop: | 
					
						
							|  |  |  |         return CSS::ValueID::NoDrop; | 
					
						
							|  |  |  |     case Cursor::NotAllowed: | 
					
						
							|  |  |  |         return CSS::ValueID::NotAllowed; | 
					
						
							|  |  |  |     case Cursor::Grab: | 
					
						
							|  |  |  |         return CSS::ValueID::Grab; | 
					
						
							|  |  |  |     case Cursor::Grabbing: | 
					
						
							|  |  |  |         return CSS::ValueID::Grabbing; | 
					
						
							|  |  |  |     case Cursor::EResize: | 
					
						
							|  |  |  |         return CSS::ValueID::EResize; | 
					
						
							|  |  |  |     case Cursor::NResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NResize; | 
					
						
							|  |  |  |     case Cursor::NeResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NeResize; | 
					
						
							|  |  |  |     case Cursor::NwResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NwResize; | 
					
						
							|  |  |  |     case Cursor::SResize: | 
					
						
							|  |  |  |         return CSS::ValueID::SResize; | 
					
						
							|  |  |  |     case Cursor::SeResize: | 
					
						
							|  |  |  |         return CSS::ValueID::SeResize; | 
					
						
							|  |  |  |     case Cursor::SwResize: | 
					
						
							|  |  |  |         return CSS::ValueID::SwResize; | 
					
						
							|  |  |  |     case Cursor::WResize: | 
					
						
							|  |  |  |         return CSS::ValueID::WResize; | 
					
						
							|  |  |  |     case Cursor::EwResize: | 
					
						
							|  |  |  |         return CSS::ValueID::EwResize; | 
					
						
							|  |  |  |     case Cursor::NsResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NsResize; | 
					
						
							|  |  |  |     case Cursor::NeswResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NeswResize; | 
					
						
							|  |  |  |     case Cursor::NwseResize: | 
					
						
							|  |  |  |         return CSS::ValueID::NwseResize; | 
					
						
							|  |  |  |     case Cursor::ColResize: | 
					
						
							|  |  |  |         return CSS::ValueID::ColResize; | 
					
						
							|  |  |  |     case Cursor::RowResize: | 
					
						
							|  |  |  |         return CSS::ValueID::RowResize; | 
					
						
							|  |  |  |     case Cursor::AllScroll: | 
					
						
							|  |  |  |         return CSS::ValueID::AllScroll; | 
					
						
							|  |  |  |     case Cursor::ZoomIn: | 
					
						
							|  |  |  |         return CSS::ValueID::ZoomIn; | 
					
						
							|  |  |  |     case Cursor::ZoomOut: | 
					
						
							|  |  |  |         return CSS::ValueID::ZoomOut; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::TextAlign value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case TextAlign::Left: | 
					
						
							|  |  |  |         return CSS::ValueID::Left; | 
					
						
							|  |  |  |     case TextAlign::Center: | 
					
						
							|  |  |  |         return CSS::ValueID::Center; | 
					
						
							|  |  |  |     case TextAlign::Right: | 
					
						
							|  |  |  |         return CSS::ValueID::Right; | 
					
						
							|  |  |  |     case TextAlign::Justify: | 
					
						
							|  |  |  |         return CSS::ValueID::Justify; | 
					
						
							|  |  |  |     case TextAlign::LibwebCenter: | 
					
						
							|  |  |  |         return CSS::ValueID::LibwebCenter; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::TextTransform value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case TextTransform::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case TextTransform::Capitalize: | 
					
						
							|  |  |  |         return CSS::ValueID::Capitalize; | 
					
						
							|  |  |  |     case TextTransform::Uppercase: | 
					
						
							|  |  |  |         return CSS::ValueID::Uppercase; | 
					
						
							|  |  |  |     case TextTransform::Lowercase: | 
					
						
							|  |  |  |         return CSS::ValueID::Lowercase; | 
					
						
							|  |  |  |     case TextTransform::FullWidth: | 
					
						
							|  |  |  |         return CSS::ValueID::FullWidth; | 
					
						
							|  |  |  |     case TextTransform::FullSizeKana: | 
					
						
							|  |  |  |         return CSS::ValueID::FullSizeKana; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Position value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Position::Static: | 
					
						
							|  |  |  |         return CSS::ValueID::Static; | 
					
						
							|  |  |  |     case Position::Relative: | 
					
						
							|  |  |  |         return CSS::ValueID::Relative; | 
					
						
							|  |  |  |     case Position::Absolute: | 
					
						
							|  |  |  |         return CSS::ValueID::Absolute; | 
					
						
							|  |  |  |     case Position::Fixed: | 
					
						
							|  |  |  |         return CSS::ValueID::Fixed; | 
					
						
							|  |  |  |     case Position::Sticky: | 
					
						
							|  |  |  |         return CSS::ValueID::Sticky; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::WhiteSpace value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case WhiteSpace::Normal: | 
					
						
							|  |  |  |         return CSS::ValueID::Normal; | 
					
						
							|  |  |  |     case WhiteSpace::Pre: | 
					
						
							|  |  |  |         return CSS::ValueID::Pre; | 
					
						
							|  |  |  |     case WhiteSpace::Nowrap: | 
					
						
							|  |  |  |         return CSS::ValueID::Nowrap; | 
					
						
							|  |  |  |     case WhiteSpace::PreLine: | 
					
						
							|  |  |  |         return CSS::ValueID::PreLine; | 
					
						
							|  |  |  |     case WhiteSpace::PreWrap: | 
					
						
							|  |  |  |         return CSS::ValueID::PreWrap; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::FlexDirection value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case FlexDirection::Row: | 
					
						
							|  |  |  |         return CSS::ValueID::Row; | 
					
						
							|  |  |  |     case FlexDirection::RowReverse: | 
					
						
							|  |  |  |         return CSS::ValueID::RowReverse; | 
					
						
							|  |  |  |     case FlexDirection::Column: | 
					
						
							|  |  |  |         return CSS::ValueID::Column; | 
					
						
							|  |  |  |     case FlexDirection::ColumnReverse: | 
					
						
							|  |  |  |         return CSS::ValueID::ColumnReverse; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::FlexWrap value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case FlexWrap::Nowrap: | 
					
						
							|  |  |  |         return CSS::ValueID::Nowrap; | 
					
						
							|  |  |  |     case FlexWrap::Wrap: | 
					
						
							|  |  |  |         return CSS::ValueID::Wrap; | 
					
						
							|  |  |  |     case FlexWrap::WrapReverse: | 
					
						
							|  |  |  |         return CSS::ValueID::WrapReverse; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::JustifyContent value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case JustifyContent::FlexStart: | 
					
						
							|  |  |  |         return CSS::ValueID::FlexStart; | 
					
						
							|  |  |  |     case JustifyContent::FlexEnd: | 
					
						
							|  |  |  |         return CSS::ValueID::FlexEnd; | 
					
						
							|  |  |  |     case JustifyContent::Center: | 
					
						
							|  |  |  |         return CSS::ValueID::Center; | 
					
						
							|  |  |  |     case JustifyContent::SpaceBetween: | 
					
						
							|  |  |  |         return CSS::ValueID::SpaceBetween; | 
					
						
							|  |  |  |     case JustifyContent::SpaceAround: | 
					
						
							|  |  |  |         return CSS::ValueID::SpaceAround; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Overflow value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Overflow::Auto: | 
					
						
							|  |  |  |         return CSS::ValueID::Auto; | 
					
						
							|  |  |  |     case Overflow::Clip: | 
					
						
							|  |  |  |         return CSS::ValueID::Clip; | 
					
						
							|  |  |  |     case Overflow::Hidden: | 
					
						
							|  |  |  |         return CSS::ValueID::Hidden; | 
					
						
							|  |  |  |     case Overflow::Scroll: | 
					
						
							|  |  |  |         return CSS::ValueID::Scroll; | 
					
						
							|  |  |  |     case Overflow::Visible: | 
					
						
							|  |  |  |         return CSS::ValueID::Visible; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::Repeat value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case Repeat::NoRepeat: | 
					
						
							|  |  |  |         return CSS::ValueID::NoRepeat; | 
					
						
							|  |  |  |     case Repeat::Repeat: | 
					
						
							|  |  |  |         return CSS::ValueID::Repeat; | 
					
						
							|  |  |  |     case Repeat::Round: | 
					
						
							|  |  |  |         return CSS::ValueID::Round; | 
					
						
							|  |  |  |     case Repeat::Space: | 
					
						
							|  |  |  |         return CSS::ValueID::Space; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static CSS::ValueID to_css_value_id(CSS::ListStyleType value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (value) { | 
					
						
							|  |  |  |     case ListStyleType::None: | 
					
						
							|  |  |  |         return CSS::ValueID::None; | 
					
						
							|  |  |  |     case ListStyleType::Disc: | 
					
						
							|  |  |  |         return CSS::ValueID::Disc; | 
					
						
							|  |  |  |     case ListStyleType::Circle: | 
					
						
							|  |  |  |         return CSS::ValueID::Circle; | 
					
						
							|  |  |  |     case ListStyleType::Square: | 
					
						
							|  |  |  |         return CSS::ValueID::Square; | 
					
						
							|  |  |  |     case ListStyleType::Decimal: | 
					
						
							|  |  |  |         return CSS::ValueID::Decimal; | 
					
						
							|  |  |  |     case ListStyleType::DecimalLeadingZero: | 
					
						
							|  |  |  |         return CSS::ValueID::DecimalLeadingZero; | 
					
						
							|  |  |  |     case ListStyleType::LowerAlpha: | 
					
						
							|  |  |  |         return CSS::ValueID::LowerAlpha; | 
					
						
							|  |  |  |     case ListStyleType::LowerLatin: | 
					
						
							|  |  |  |         return CSS::ValueID::LowerLatin; | 
					
						
							|  |  |  |     case ListStyleType::LowerRoman: | 
					
						
							|  |  |  |         return CSS::ValueID::LowerRoman; | 
					
						
							|  |  |  |     case ListStyleType::UpperAlpha: | 
					
						
							|  |  |  |         return CSS::ValueID::UpperAlpha; | 
					
						
							|  |  |  |     case ListStyleType::UpperLatin: | 
					
						
							|  |  |  |         return CSS::ValueID::UpperLatin; | 
					
						
							|  |  |  |     case ListStyleType::UpperRoman: | 
					
						
							|  |  |  |         return CSS::ValueID::UpperRoman; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  | static NonnullRefPtr<StyleValue> value_or_default(Optional<StyleProperty> property, NonnullRefPtr<StyleValue> default_style) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (property.has_value()) | 
					
						
							|  |  |  |         return property.value().value; | 
					
						
							|  |  |  |     return default_style; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  | RefPtr<StyleValue> ComputedCSSStyleDeclaration::style_value_for_property(Layout::NodeWithStyle const& layout_node, PropertyID property_id) const | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     switch (property_id) { | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Float: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().float_())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Clear: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().clear())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Cursor: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().cursor())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Display: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().display())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::ZIndex: { | 
					
						
							|  |  |  |         auto maybe_z_index = layout_node.computed_values().z_index(); | 
					
						
							|  |  |  |         if (!maybe_z_index.has_value()) | 
					
						
							|  |  |  |             return {}; | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return NumericStyleValue::create(maybe_z_index.release_value()); | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::TextAlign: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_align())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::TextDecorationLine: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_decoration_line())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::TextTransform: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_transform())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Position: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().position())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::WhiteSpace: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().white_space())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::FlexDirection: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().flex_direction())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::FlexWrap: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().flex_wrap())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::FlexBasis: { | 
					
						
							|  |  |  |         switch (layout_node.computed_values().flex_basis().type) { | 
					
						
							|  |  |  |         case FlexBasis::Content: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |             return IdentifierStyleValue::create(CSS::ValueID::Content); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |         case FlexBasis::Length: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |             return LengthStyleValue::create(layout_node.computed_values().flex_basis().length); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |         case FlexBasis::Auto: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |             return IdentifierStyleValue::create(CSS::ValueID::Auto); | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             VERIFY_NOT_REACHED(); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::FlexGrow: { | 
					
						
							|  |  |  |         auto maybe_grow_factor = layout_node.computed_values().flex_grow_factor(); | 
					
						
							|  |  |  |         if (!maybe_grow_factor.has_value()) | 
					
						
							|  |  |  |             return {}; | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return NumericStyleValue::create(maybe_grow_factor.release_value()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     case CSS::PropertyID::FlexShrink: { | 
					
						
							|  |  |  |         auto maybe_shrink_factor = layout_node.computed_values().flex_shrink_factor(); | 
					
						
							|  |  |  |         if (!maybe_shrink_factor.has_value()) | 
					
						
							|  |  |  |             return {}; | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return NumericStyleValue::create(maybe_shrink_factor.release_value()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     case CSS::PropertyID::Opacity: { | 
					
						
							| 
									
										
										
										
											2021-09-13 21:08:37 +02:00
										 |  |  |         auto maybe_opacity = layout_node.computed_values().opacity(); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |         if (!maybe_opacity.has_value()) | 
					
						
							|  |  |  |             return {}; | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return NumericStyleValue::create(maybe_opacity.release_value()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     case CSS::PropertyID::JustifyContent: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().justify_content())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BoxShadow: { | 
					
						
							|  |  |  |         auto maybe_box_shadow = layout_node.computed_values().box_shadow(); | 
					
						
							|  |  |  |         if (!maybe_box_shadow.has_value()) | 
					
						
							|  |  |  |             return {}; | 
					
						
							|  |  |  |         auto box_shadow_data = maybe_box_shadow.release_value(); | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BoxShadowStyleValue::create(box_shadow_data.offset_x, box_shadow_data.offset_y, box_shadow_data.blur_radius, box_shadow_data.color); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     case CSS::PropertyID::Width: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().width()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MinWidth: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().min_width()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MaxWidth: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().max_width()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Height: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().height()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MinHeight: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().min_height()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MaxHeight: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().max_height()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MarginTop: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().margin().top); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MarginRight: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().margin().right); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MarginBottom: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().margin().bottom); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::MarginLeft: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().margin().left); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::PaddingTop: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().padding().top); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::PaddingRight: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().padding().right); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::PaddingBottom: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().padding().bottom); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::PaddingLeft: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return LengthStyleValue::create(layout_node.computed_values().padding().left); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     case CSS::PropertyID::BorderRadius: { | 
					
						
							|  |  |  |         auto maybe_top_left_radius = property(CSS::PropertyID::BorderTopLeftRadius); | 
					
						
							|  |  |  |         auto maybe_top_right_radius = property(CSS::PropertyID::BorderTopRightRadius); | 
					
						
							|  |  |  |         auto maybe_bottom_left_radius = property(CSS::PropertyID::BorderBottomLeftRadius); | 
					
						
							|  |  |  |         auto maybe_bottom_right_radius = property(CSS::PropertyID::BorderBottomRightRadius); | 
					
						
							|  |  |  |         RefPtr<BorderRadiusStyleValue> top_left_radius, top_right_radius, bottom_left_radius, bottom_right_radius; | 
					
						
							|  |  |  |         if (maybe_top_left_radius.has_value()) { | 
					
						
							| 
									
										
										
										
											2021-09-23 21:17:25 +01:00
										 |  |  |             VERIFY(maybe_top_left_radius.value().value->is_border_radius()); | 
					
						
							|  |  |  |             top_left_radius = maybe_top_left_radius.value().value->as_border_radius(); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (maybe_top_right_radius.has_value()) { | 
					
						
							| 
									
										
										
										
											2021-09-23 21:17:25 +01:00
										 |  |  |             VERIFY(maybe_top_right_radius.value().value->is_border_radius()); | 
					
						
							|  |  |  |             top_right_radius = maybe_top_right_radius.value().value->as_border_radius(); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (maybe_bottom_left_radius.has_value()) { | 
					
						
							| 
									
										
										
										
											2021-09-23 21:17:25 +01:00
										 |  |  |             VERIFY(maybe_bottom_left_radius.value().value->is_border_radius()); | 
					
						
							|  |  |  |             bottom_left_radius = maybe_bottom_left_radius.value().value->as_border_radius(); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (maybe_bottom_right_radius.has_value()) { | 
					
						
							| 
									
										
										
										
											2021-09-23 21:17:25 +01:00
										 |  |  |             VERIFY(maybe_bottom_right_radius.value().value->is_border_radius()); | 
					
						
							|  |  |  |             bottom_right_radius = maybe_bottom_right_radius.value().value->as_border_radius(); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return CombinedBorderRadiusStyleValue::create(top_left_radius.release_nonnull(), top_right_radius.release_nonnull(), bottom_right_radius.release_nonnull(), bottom_left_radius.release_nonnull()); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     // FIXME: The two radius components are not yet stored, as we currently don't actually render them.
 | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BorderBottomLeftRadius: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BorderRadiusStyleValue::create(layout_node.computed_values().border_bottom_left_radius(), layout_node.computed_values().border_bottom_left_radius()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BorderBottomRightRadius: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BorderRadiusStyleValue::create(layout_node.computed_values().border_bottom_right_radius(), layout_node.computed_values().border_bottom_right_radius()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BorderTopLeftRadius: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BorderRadiusStyleValue::create(layout_node.computed_values().border_top_left_radius(), layout_node.computed_values().border_top_left_radius()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BorderTopRightRadius: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BorderRadiusStyleValue::create(layout_node.computed_values().border_top_right_radius(), layout_node.computed_values().border_top_right_radius()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::OverflowX: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().overflow_x())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::OverflowY: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().overflow_y())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::Color: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return ColorStyleValue::create(layout_node.computed_values().color()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case PropertyID::BackgroundColor: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return ColorStyleValue::create(layout_node.computed_values().background_color()); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BackgroundRepeatX: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().background_repeat_x())); | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::BackgroundRepeatY: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().background_repeat_y())); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     case CSS::PropertyID::BackgroundRepeat: { | 
					
						
							|  |  |  |         auto maybe_background_repeat_x = property(CSS::PropertyID::BackgroundRepeatX); | 
					
						
							|  |  |  |         auto maybe_background_repeat_y = property(CSS::PropertyID::BackgroundRepeatY); | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BackgroundRepeatStyleValue::create(value_or_default(maybe_background_repeat_x, IdentifierStyleValue::create(CSS::ValueID::RepeatX)), value_or_default(maybe_background_repeat_y, IdentifierStyleValue::create(CSS::ValueID::RepeatY))); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     case CSS::PropertyID::Background: { | 
					
						
							|  |  |  |         auto maybe_background_color = property(CSS::PropertyID::BackgroundColor); | 
					
						
							|  |  |  |         auto maybe_background_image = property(CSS::PropertyID::BackgroundImage); | 
					
						
							|  |  |  |         auto maybe_background_repeat_x = property(CSS::PropertyID::BackgroundRepeatX); | 
					
						
							|  |  |  |         auto maybe_background_repeat_y = property(CSS::PropertyID::BackgroundRepeatY); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return BackgroundStyleValue::create(value_or_default(maybe_background_color, InitialStyleValue::the()), value_or_default(maybe_background_image, IdentifierStyleValue::create(CSS::ValueID::None)), value_or_default(maybe_background_repeat_x, IdentifierStyleValue::create(CSS::ValueID::RepeatX)), value_or_default(maybe_background_repeat_y, IdentifierStyleValue::create(CSS::ValueID::RepeatX))); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-09-13 19:54:54 +02:00
										 |  |  |     case CSS::PropertyID::ListStyleType: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().list_style_type())); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     case CSS::PropertyID::Invalid: | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |         return IdentifierStyleValue::create(CSS::ValueID::Invalid); | 
					
						
							| 
									
										
										
										
											2021-09-14 00:38:46 +02:00
										 |  |  |     case CSS::PropertyID::Custom: | 
					
						
							|  |  |  |         dbgln("Computed style for custom properties was requested (?)"); | 
					
						
							|  |  |  |         return {}; | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  |     default: | 
					
						
							| 
									
										
										
										
											2021-09-12 20:09:24 +02:00
										 |  |  |         dbgln("FIXME: Computed style for the '{}' property was requested", string_from_property_id(property_id)); | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  |         return {}; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-09-18 13:14:40 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Optional<StyleProperty> ComputedCSSStyleDeclaration::property(PropertyID property_id) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const_cast<DOM::Document&>(m_element->document()).ensure_layout(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!m_element->layout_node()) { | 
					
						
							|  |  |  |         auto style = m_element->document().style_resolver().resolve_style(const_cast<DOM::Element&>(*m_element)); | 
					
						
							|  |  |  |         if (auto maybe_property = style->property(property_id); maybe_property.has_value()) { | 
					
						
							|  |  |  |             return StyleProperty { | 
					
						
							|  |  |  |                 .property_id = property_id, | 
					
						
							|  |  |  |                 .value = maybe_property.release_value(), | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return {}; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto& layout_node = *m_element->layout_node(); | 
					
						
							|  |  |  |     auto value = style_value_for_property(layout_node, property_id); | 
					
						
							|  |  |  |     if (!value) | 
					
						
							|  |  |  |         return {}; | 
					
						
							|  |  |  |     return StyleProperty { | 
					
						
							|  |  |  |         .property_id = property_id, | 
					
						
							|  |  |  |         .value = value.release_nonnull(), | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2021-09-12 20:05:29 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool ComputedCSSStyleDeclaration::set_property(PropertyID, StringView) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | } |