diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS')
6 files changed, 79 insertions, 43 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 24f0170719..f5b16eef54 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -67,6 +67,7 @@ #include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h> #include <LibWeb/CSS/StyleValues/TimeStyleValue.h> #include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> +#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/Dump.h> #include <LibWeb/Infra/Strings.h> diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 24afe8e3fa..6288d9bf43 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -44,6 +44,7 @@ #include <LibWeb/CSS/StyleValues/OverflowStyleValue.h> #include <LibWeb/CSS/StyleValues/PercentageStyleValue.h> #include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h> +#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Element.h> #include <LibWeb/FontCache.h> diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index 19b64f4b38..aa259167be 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -50,6 +50,7 @@ #include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h> #include <LibWeb/CSS/StyleValues/TimeStyleValue.h> #include <LibWeb/CSS/StyleValues/TransformationStyleValue.h> +#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/HTML/BrowsingContext.h> #include <LibWeb/Loader/LoadRequest.h> @@ -1151,22 +1152,6 @@ ErrorOr<String> RectStyleValue::to_string() const return String::formatted("rect({} {} {} {})", m_rect.top_edge, m_rect.right_edge, m_rect.bottom_edge, m_rect.left_edge); } -ErrorOr<String> UnresolvedStyleValue::to_string() const -{ - StringBuilder builder; - for (auto& value : m_values) - TRY(builder.try_append(TRY(value.to_string()))); - return builder.to_string(); -} - -bool UnresolvedStyleValue::equals(StyleValue const& other) const -{ - if (type() != other.type()) - return false; - // This is a case where comparing the strings actually makes sense. - return to_string().release_value_but_fixme_should_propagate_errors() == other.to_string().release_value_but_fixme_should_propagate_errors(); -} - bool StyleValueList::Properties::operator==(Properties const& other) const { return separator == other.separator && values.span() == other.values.span(); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index 2502ad0461..bb8d0af38a 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -622,33 +622,6 @@ private: NonnullOwnPtr<CalcSum> m_expression; }; -class UnresolvedStyleValue final : public StyleValue { -public: - static ValueComparingNonnullRefPtr<UnresolvedStyleValue> create(Vector<Parser::ComponentValue>&& values, bool contains_var_or_attr) - { - return adopt_ref(*new UnresolvedStyleValue(move(values), contains_var_or_attr)); - } - virtual ~UnresolvedStyleValue() override = default; - - virtual ErrorOr<String> to_string() const override; - - Vector<Parser::ComponentValue> const& values() const { return m_values; } - bool contains_var_or_attr() const { return m_contains_var_or_attr; } - - virtual bool equals(StyleValue const& other) const override; - -private: - UnresolvedStyleValue(Vector<Parser::ComponentValue>&& values, bool contains_var_or_attr) - : StyleValue(Type::Unresolved) - , m_values(move(values)) - , m_contains_var_or_attr(contains_var_or_attr) - { - } - - Vector<Parser::ComponentValue> m_values; - bool m_contains_var_or_attr { false }; -}; - class UnsetStyleValue final : public StyleValueWithDefaultOperators<UnsetStyleValue> { public: static ValueComparingNonnullRefPtr<UnsetStyleValue> the() diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp new file mode 100644 index 0000000000..3b0a77e560 --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> + * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org> + * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "UnresolvedStyleValue.h" +#include <AK/StringBuilder.h> + +namespace Web::CSS { + +ErrorOr<String> UnresolvedStyleValue::to_string() const +{ + StringBuilder builder; + for (auto& value : m_values) + TRY(builder.try_append(TRY(value.to_string()))); + return builder.to_string(); +} + +bool UnresolvedStyleValue::equals(StyleValue const& other) const +{ + if (type() != other.type()) + return false; + // This is a case where comparing the strings actually makes sense. + return to_string().release_value_but_fixme_should_propagate_errors() == other.to_string().release_value_but_fixme_should_propagate_errors(); +} + +} diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h new file mode 100644 index 0000000000..4fa6e1cf08 --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> + * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org> + * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/Vector.h> +#include <LibWeb/CSS/Parser/ComponentValue.h> +#include <LibWeb/CSS/StyleValue.h> + +namespace Web::CSS { + +class UnresolvedStyleValue final : public StyleValue { +public: + static ValueComparingNonnullRefPtr<UnresolvedStyleValue> create(Vector<Parser::ComponentValue>&& values, bool contains_var_or_attr) + { + return adopt_ref(*new UnresolvedStyleValue(move(values), contains_var_or_attr)); + } + virtual ~UnresolvedStyleValue() override = default; + + virtual ErrorOr<String> to_string() const override; + + Vector<Parser::ComponentValue> const& values() const { return m_values; } + bool contains_var_or_attr() const { return m_contains_var_or_attr; } + + virtual bool equals(StyleValue const& other) const override; + +private: + UnresolvedStyleValue(Vector<Parser::ComponentValue>&& values, bool contains_var_or_attr) + : StyleValue(Type::Unresolved) + , m_values(move(values)) + , m_contains_var_or_attr(contains_var_or_attr) + { + } + + Vector<Parser::ComponentValue> m_values; + bool m_contains_var_or_attr { false }; +}; + +} |