Commit graph

1975 commits

Author SHA1 Message Date
Sam Atkins
513dee04d4 LibWeb: Parse place-self property using TokenStream 2023-12-26 15:32:32 +00:00
Sam Atkins
5a8f57f7b3 LibWeb: Parse place-items property using TokenStream 2023-12-26 15:32:32 +00:00
Sam Atkins
61d6f611cb LibWeb: Parse place-content property using TokenStream 2023-12-26 15:32:32 +00:00
Sam Atkins
4f773a7dae LibWeb: Parse overflow property using TokenStream
Also simplify it a bit. We don't need to handle 1 / 2 values separately,
but past Sam didn't realise that.
2023-12-26 15:32:32 +00:00
Sam Atkins
0578bec655 LibWeb: Parse math-depth property using TokenStream
We don't need to skip whitespace at the top level because that's already
done before we're called. But we do still have to skip it inside the
`add()` function
2023-12-26 15:32:32 +00:00
Sam Atkins
6e0a550a03 LibWeb: Parse list-style property using TokenStream 2023-12-26 15:32:32 +00:00
Sam Atkins
14e2e2bac4 LibWeb: Parse grid track placements using TokenStream
I'm not entirely happy with this, but I barely understand grid, and this
does still work.
2023-12-26 15:32:32 +00:00
Aliaksandr Kalenik
32a6bf908a LibWeb/CSS: Fix stack use after scope in matches_attribute()
If a short string is used for the attribute value, then the result of:
```cpp
auto const view = element.attribute(attribute_name).value_or({})
    .bytes_as_string_view().split_view(' ');
```
is an array of string views pointing into a temporarily allocated
string.

With this change we keep string on stack until the end of scope.

Page that allows to reproduce the problem.
```html
<!DOCTYPE html><style>
    div[data-info~="a"] {
        background-color: yellow;
    }
</style><div data-info="a">a</div>
```
2023-12-24 08:03:58 +00:00
Andreas Kling
f4fa37afd2 LibJS+LibWeb: Add missing JS_DEFINE_ALLOCATOR() for a bunch of classes 2023-12-23 23:02:10 +01:00
Shannon Booth
e2e7c4d574 Everywhere: Use to_number<T> instead of to_{int,uint,float,double}
In a bunch of cases, this actually ends up simplifying the code as
to_number will handle something such as:

```
Optional<I> opt;
if constexpr (IsSigned<I>)
    opt = view.to_int<I>();
else
    opt = view.to_uint<I>();
```

For us.

The main goal here however is to have a single generic number conversion
API between all of the String classes.
2023-12-23 20:41:07 +01:00
Bastiaan van der Plaat
c30911ab10 LibWeb: Hide select chevron icon when appearance: none; 2023-12-23 10:12:36 +01:00
Bastiaan van der Plaat
44ff957784 LibWeb: Make -webkit-appearance an alias for the appearance css property 2023-12-23 10:12:36 +01:00
Bastiaan van der Plaat
0f37e0ee89 LibWeb: Add basic input range rendering 2023-12-21 13:17:51 +01:00
Bastiaan van der Plaat
a05fd28b7b LibWeb: Move use pseudo element styles from TreeBuilder to StyleComputer
The styling of elements using the `use_pseudo_element()` was only
applied on layout. When an element style was recomputed later that
styling was not overruled with the pseudo element selector styles.
This moves the styling override from `TreeBuilder.cpp` to
`StyleComputer.cpp`. Now the styles are always correctly applied.
I also removed the method `property_id_by_index()` because it was
not needed anymore.

Als some calls to `invalidate_layout()` in the Meter, Progress and
Select elements where not needed anymore because the style values
are update on the changing of the style attribute.

This fixes issue #22278.
2023-12-17 23:12:34 +01:00
Andreas Kling
9793d69d4f LibWeb: Make HTML::Window::page() return a Page& 2023-12-15 22:04:46 +01:00
Andreas Kling
7c95ebc302 LibWeb: Make Document::page() return a Page&
Now that Document always has a Page, and always keeps it alive, we can
make this return a Page&, exposing various unnecessary null checks.
2023-12-15 22:04:46 +01:00
Aliaksandr Kalenik
51ecfdf71f LibWeb: Add unscaled fallback font in case Font::with_size() failed 2023-12-13 22:25:00 +01:00
Aliaksandr Kalenik
de4b240429 LibWeb: Add missing null check in font_with_point_size() 2023-12-13 22:25:00 +01:00
Aliaksandr Kalenik
41a3c19cfe LibWeb: Make HTML::DecodedImageData to be GC-allocated
This change fixes GC-leak caused by following mutual dependency:
- SVGDecodedImageData owns JS::Handle for Page.
- SVGDecodedImageData is owned by visited objects.
by making everything inherited from HTML::DecodedImageData and
ListOfAvailableImages to be GC-allocated.

Generally, if visited object has a handle, very likely we leak
everything visited from object in a handle.
2023-12-12 23:01:08 +01:00
Shannon Booth
ed97946975 LibWeb: Support obsolete but required -webkit- CSS parsing quirk
As outlined in: https://www.w3.org/TR/selectors-4/#compat

We now do not treat unknown webkit pseudo-elements as invalid at parse
time, and also support serializing these elements.

Fixes: #21959
2023-12-11 16:54:59 +01:00
Shannon Booth
83758d4cdd LibWeb: Wrap PseudoElements stored in SimpleSelector in a class
No functional impact intended. This is just a more complicated way of
writing what we have now.

The goal of this commit is so that we are able to store the 'name' of a
pseudo element for use in serializing 'unknown -webkit-
pseudo-elements', see:

https://www.w3.org/TR/selectors-4/#compat

This is quite awkward, as in pretty much all cases just the selector
type enum is enough, but we will need to cache the name for serializing
these unknown selectors. I can't figure out any reason why we would need
this name anywhere else in the engine, so pretty much everywhere is
still just passing around this raw enum. But this change will allow us
to easily store the name inside of this new struct for when it is needed
for serialization, once those webkit unknown elements are supported by
our engine.
2023-12-11 16:54:59 +01:00
Shannon Booth
08920b7a34 LibWeb: Simplify a conditional check in parse_pseudo_simple_selector
Put a shared `pseudo_element.has_value()` check into the same block.
2023-12-11 16:54:59 +01:00
Shannon Booth
2dce09b12e LibWeb: Use code_points helper for getting delim CSS token codepoint
This is less code, and more expressive.
2023-12-11 16:54:59 +01:00
Bastiaan van der Plaat
3b3558865c LibWeb: Improve select element CSS stylebility 2023-12-10 20:56:19 +01:00
Aliaksandr Kalenik
2cb0039a13 LibGfx+LibWeb: Produce font cascade list in CSS font matching algorithm
According to the CSS font matching algorithm specification, it is
supposed to be executed for each glyph instead of each text run, as is
currently done. This change partially implements this by having the
font matching algorithm produce a list of fonts against which each
glyph will be tested to find its suitable font.

Now, it becomes possible to have per-glyph fallback fonts: if the
needed glyph is not present in a font, we can check the subsequent
fonts in the list.
2023-12-10 17:32:04 +01:00
Aliaksandr Kalenik
f50bf00814 LibWeb+LibGfx: Move UnicodeRange from LibWeb to LibGfx
In upcoming changes UnicodeRange is going to be used in LibGfx in
a class that represents font cascade list.
2023-12-10 17:32:04 +01:00
Bastiaan van der Plaat
f621dc464b LibWeb: Add internal use_pseudo_element to DOM Element 2023-12-10 16:44:12 +01:00
Shannon Booth
74b6e7b1f0 LibWeb: Avoid calling FlyString::from_utf8 on FlyString's 2023-12-10 09:45:03 +01:00
Shannon Booth
6ce0d588ee Everywhere: Avoid calling from_utf8 on FlyString or String
We already have a String :^)
2023-12-10 09:45:03 +01:00
Aliaksandr Kalenik
af13bd8af0 LibWeb: Remove unused StyleProperties::clone() function 2023-12-09 19:04:45 +01:00
Sam Atkins
29ecb2eda6 LibWeb: Parse grid-template-areas property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
b569ab72e8 LibWeb: Correct grid-template-areas definition
The spec syntax is `none | <string>+` and `none` is the default.
2023-12-08 10:47:23 +00:00
Sam Atkins
c3583317ee LibWeb: Parse grid-auto-flow property using TokenStream
RefPtr is already `[[nodiscard]]` so we can remove that extra noise from
the declaration.
2023-12-08 10:47:23 +00:00
Sam Atkins
bbbd9c14ac LibWeb: Parse grid-area property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
a16b35a755 LibWeb: Parse grid-column and grid-row properties using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
b18c334a4f LibWeb: Ensure there are no trailing tokens when parsing font-family 2023-12-08 10:47:23 +00:00
Sam Atkins
f84ccb8627 LibWeb: Part font property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
333b705f25 LibWeb: Parse flex-flow property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
bf3576667a LibWeb: Parse flex property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
4f3136c230 LibWeb: Parse shadow values using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
3a36b2eea9 LibWeb: Parse border properties using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
0e00d9a67d LibWeb: Parse background property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
64a44b719e LibWeb: Parse FilterValueListStyleValue using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
2efaadd63c LibWeb: Parse aspect-ratio property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
647d52ff9a LibWeb: Parse quotes property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
ebad94658a LibWeb: Parse display property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
3d6eb36664 LibWeb: Parse content property using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
4d6e8d8f37 LibWeb: Parse border-radius properties using TokenStream 2023-12-08 10:47:23 +00:00
Sam Atkins
28c719fff5 LibWeb: Extract contains_single_none_ident() helper function
Several CSS properties can be `none` instead of their usual value.
2023-12-08 10:47:23 +00:00
Sam Atkins
1cc88dc4bc LibWeb: Make parse_comma_separated_value_list() take a TokenStream
This lets us use it from inside places that use TokenStreams.
2023-12-08 10:47:23 +00:00