mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 14:05:15 +00:00
The CSS `fetch_foo()` functions resolve the URL relative to the CSSStyleSheet if one is provided. So, style values that do so need to know what CSSStyleSheet they are part of so that, for example, `url (foo.png)` is loaded relative to the style sheet's URL instead of the document's one. That all works without this change because we currently absolutize URLs during parsing, but we're in the process of stopping that. This commit adds the infrastructure for telling style values what their CSSStyleSheet is.
58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <andreas@ladybird.org>
|
|
* Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
|
|
* Copyright (c) 2021-2025, Sam Atkins <sam@ladybird.org>
|
|
* Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/CSS/CSSStyleValue.h>
|
|
|
|
namespace Web::CSS {
|
|
|
|
class StyleValueList final : public StyleValueWithDefaultOperators<StyleValueList> {
|
|
public:
|
|
enum class Separator {
|
|
Space,
|
|
Comma,
|
|
};
|
|
static ValueComparingNonnullRefPtr<StyleValueList> create(StyleValueVector&& values, Separator separator)
|
|
{
|
|
return adopt_ref(*new (nothrow) StyleValueList(move(values), separator));
|
|
}
|
|
|
|
size_t size() const { return m_properties.values.size(); }
|
|
StyleValueVector const& values() const { return m_properties.values; }
|
|
ValueComparingNonnullRefPtr<CSSStyleValue const> value_at(size_t i, bool allow_loop) const
|
|
{
|
|
if (allow_loop)
|
|
return m_properties.values[i % size()];
|
|
return m_properties.values[i];
|
|
}
|
|
|
|
virtual String to_string(SerializationMode) const override;
|
|
|
|
bool properties_equal(StyleValueList const& other) const { return m_properties == other.m_properties; }
|
|
|
|
Separator separator() const { return m_properties.separator; }
|
|
|
|
private:
|
|
StyleValueList(StyleValueVector&& values, Separator separator)
|
|
: StyleValueWithDefaultOperators(Type::ValueList)
|
|
, m_properties { .separator = separator, .values = move(values) }
|
|
{
|
|
}
|
|
|
|
virtual void set_style_sheet(GC::Ptr<CSSStyleSheet>) override;
|
|
|
|
struct Properties {
|
|
Separator separator;
|
|
StyleValueVector values;
|
|
bool operator==(Properties const&) const;
|
|
} m_properties;
|
|
};
|
|
|
|
}
|