Commit Graph

41791 Commits

Author SHA1 Message Date
Andreas Kling
913d9221aa LibWeb: Don't insert inline nodes directly under inline-flex container
Yet another legacy "is inline-block?" condition was causing us to insert
inline nodes directly as children of inline-flex containers (instead of
wrapping them in anonymous blocks, which would then cause them to become
flex items.)
2022-10-07 12:47:46 +02:00
Andreas Kling
90b66533d0 LibWeb: Don't hit test all child stacking contexts twice
We're supposed to hit test positive z-index stacking contexts first,
and negative z-index stacking contexts later. Instead, we were hit
testing all stacking contexts both times.

This made hit testing unbearably slow on some websites.

While we're here, also add an extra comment about why stacking contexts
are traversed in reverse order. It tripped me up while looking at this,
so I'm sure it could trip someone else up too.

Regressed in 44057c9482.
2022-10-07 12:10:59 +02:00
Luke Wilde
102e02d336 LibWeb: Use DOM manipulation task source for <script> src parsing errors
See: https://github.com/whatwg/html/commit/5d34cb8

We were already using queue_an_element_task here.
2022-10-06 22:21:17 +01:00
Timothy Flynn
7fc03e8967 LibJS: Use Unicode normalization within String.prototype.normalize 2022-10-06 22:14:44 +01:00
Timothy Flynn
19b758ce8b LibUnicode: Add to-and-from string converters for NormalizationForm 2022-10-06 22:14:44 +01:00
Sam Atkins
462c49ad55 LibWeb: Remove duplicate reference to SVGElement.cpp 2022-10-06 21:45:07 +01:00
Sam Atkins
ab19c5fab8 LibWeb: Implement DOMPoint/DOMPointReadOnly.fromPoint() 2022-10-06 21:45:07 +01:00
Sam Atkins
0823a3c422 BindingsGenerator+LibWeb: Pass a VM to static IDL-based functions
This saves us from having to yoink the VM out of thin air.
2022-10-06 21:45:07 +01:00
Sam Atkins
8a78679152 LibWeb: Correct types in DOMPoint IDL files, and add FIXMEs
Also, the `w` parameters for the constructor default to 1, not 0.
2022-10-06 21:45:07 +01:00
Sam Atkins
a6f0508f9f BindingsGenerator+LibIDL: Parse "inherit" attributes
An "inherit attribute" calls an ancestor's getter with the same name,
but defines its own setter. Since a parent class's public methods are
exposed to child classes, we don't have to do any special handling here
to call the parent's methods, it just works. :^)
2022-10-06 21:45:07 +01:00
Itamar
c30c6eb1c1 HackStudio: Use a single global tooltip window
Previously, every Editor instance had two instances of tooltip windows
& `OutOfProcessWebView`s, one for documentation and one for parameter
hints.

They were initialized with the Editor, which slowed down creation of new
tabs.

We use a single global tooltip & OOPWV instance that is shared between
tabs.

Closes #15488

Co-authored-by: Sam Atkins <atkinssj@serenityos.org>
2022-10-06 21:27:40 +01:00
Itamar
2046a670b3 HackStudio: Remove adjustment of text range for documentation tooltip
We no longer need to adjust the hovered span's range to get the correct
hovered text. This fixes the "documentation tooltip" feature.
2022-10-06 21:27:40 +01:00
martinfalisse
84290ed7c8 Base+LibWeb: Make sure grid positions don't cause out of bounds
Add some tests to the test page to make sure that different combinations
of GridTrackPlacement don't cause out of bounds issues.
2022-10-06 21:16:01 +02:00
martinfalisse
97230c4ddb LibWeb: Clean up grid track placement shorthand parser
Use the implemented non-shorthand version of the GridTrackPlacement
parser to clean up the shorthand version and deduplicate code.
2022-10-06 21:16:01 +02:00
martinfalisse
56f50c9cde Base+LibWeb: Deal with zero-positioned grid items
If a grid item has as its position value a 0 then it should be
invalidated.
2022-10-06 21:16:01 +02:00
martinfalisse
9051a56554 Base+LibWeb: Stub out negative spans
Ensure that when a grid item is passed with a span and a fixed end
position, that if the resulting start of this item is less than 0 then
it won't throw. This is a temporary measure until the correct
functionality is implemented.
2022-10-06 21:16:01 +02:00
martinfalisse
a764e43db3 LibWeb: Factor out OccupationGrid functions
Clean up the code by using an OccupationGrid class. This was a neat idea
proposed by MacDue.
2022-10-06 21:16:01 +02:00
martinfalisse
db19570b94 LibWeb: Truncate oversized grid spans
If a span makes a CSS Grid item overflow vertically, then it should be
truncated as done on other web engines.
2022-10-06 21:16:01 +02:00
martinfalisse
f3bf01f265 LibWeb: Fix bug in placing row-constrained grid items
For row-constrained items (with a row position defined in the CSS),
should be checking for an available position in that row and not in
another..
2022-10-06 21:16:01 +02:00
martinfalisse
a528ea71d1 LibWeb: Use span values for auto-positioned grid items
Auto-positioned items should also take into account the span attributes
passed to them.
2022-10-06 21:16:01 +02:00
martinfalisse
4dc2bd3df0 LibWeb: Handle different span properties for GridTrackPlacement parsing
These changes improve the parsing of the span property, including
handling negative values for the span (defaults to 1), as well as when
no number is passed (also defaults to 1).
2022-10-06 21:16:01 +02:00
martinfalisse
6c22f9bf3f LibWeb: Use ident instead of to_string in parser
Use the ident() function instead of to_string() for parsing. Fix this up
in the rect parser as well.
2022-10-06 21:16:01 +02:00
martinfalisse
330af1a769 LibWeb: Fix bug in spec implementation auto_placement_cursor 2022-10-06 21:16:01 +02:00
martinfalisse
93824edeb7 LibWeb: Fix implementation bugs of grid track is_span()
After having corrected the tracking of span variables in the
GridTrackPlacement class, now can fix some small bugs for its correct
implementation in the GridFormattingContext class.
2022-10-06 21:16:01 +02:00
martinfalisse
9fd07e9cb1 LibWeb: Make it easier to check if grid track is auto positioned
Add some helper functions for checking if a grid-track is
auto-positioned. I think this makes the code more legible.
2022-10-06 21:16:01 +02:00
martinfalisse
236795e931 LibWeb+Base: Re-implement grid track span
Implement span correctly when indicated in the grid-column-start,
grid-row-start, etc. CSS properties. Previously it had been implemented
as if span was something that went alongside the position property, but
actually it seems like if you do 'span 3' in the grid-column-start
property, for example, this means it literally spans 3 blocks, and the
3 has nothing to do with position.
2022-10-06 21:16:01 +02:00
martinfalisse
86ce1b64f0 LibWeb: Fix bug in checking if GridTrackPlacement is auto-positioned
This fixes something I thought I had already fixed everywhere, where
previously there wasn't the possibility to have an Auto
GridTrackPlacement and so the Auto "implementation" was simply checking
if the position of the track was 0.
2022-10-06 21:16:01 +02:00
Andreas Kling
b6ab9a261f LibWeb: Make TreeBuilder treat inline-flex's children correctly
We were skipping over inline flex containers when looking for an
insertion parent. This made us not generate flex items in those cases.

This commit changes the behavior, so that non-inline-level items can
get inserted into an inline-outside parent, as long as the parent isn't
just flow-inside.
2022-10-06 21:08:50 +02:00
Andreas Kling
71f7bb619d LibWeb: Use text node's own display value when inserting CSS content
This ensures that the pseudo element wrapper is transformed into a block
container with inline children if needed.
2022-10-06 21:08:50 +02:00
Andreas Kling
d3069bceeb LibWeb: Only consider inline-outside flag when choosing insertion type
Now that we don't have to deal with the ad-hoc "inline" flag on layout
nodes anymore, we're free to simply obey the inline-outside flag from
the CSS display value when choosing whether to insert as an inline-level
node or not.
2022-10-06 21:08:50 +02:00
Andreas Kling
82df793d5d LibWeb: Use correct cache key for pseudo elements
We were incorrectly caching both ::before and ::after pseudo elements
with the ::before key.

This regressed in 1ab7a8e0db.
2022-10-06 21:08:50 +02:00
Andreas Kling
c7d592dd01 LibWeb: Generate a BlockContainer box for display:inline-flex
We were previously generating an InlineNode, which is not a Box. We need
some type of Box to do flex layout, so let's just make a BlockContainer.
2022-10-06 21:08:50 +02:00
Andreas Kling
97bbb630c8 LibWeb: Make IFC happy to layout anything as long as it's inline outside
Before this, whenever encountering something other than dumb text
content in an inline flow, we assumed it had to be either a replaced
element, or an inline-block.

This removes the special-casing of inline-block so that IFC can size and
layout anything as long as it's inline on the outside.
2022-10-06 21:08:50 +02:00
Gunnar Beutner
be80ac619f Browser: Add a custom icon for the "New Window" action 2022-10-06 20:51:04 +02:00
Andreas Kling
19494b436b LibWeb: Fix unsafe capture in fetch_external_module_script_graph()
We can't be capturing the AK::URL by reference here, since on_complete
may be called later, after the value is no longer alive.
2022-10-06 18:29:52 +02:00
Andreas Kling
b9a45cf1aa LibWeb: Don't try to layout inside of replaced elements in BFC 2022-10-06 18:29:52 +02:00
Andreas Kling
5ff1fc4347 LibWeb: Make sure replaced elements never create a BFC 2022-10-06 18:29:52 +02:00
Andreas Kling
829ba4afb9 LibWeb: Remove unnecessary verify_cast in greatest_child_width() 2022-10-06 18:29:52 +02:00
Kemal Zebari
90719d34af Browser: Provide ability to create new browser windows
This change allows a user to spawn new browser processes by either
going to "File -> New Window" or by the shortcut "Ctrl + N".
2022-10-06 16:52:57 +01:00
Baitinq
48389f4179 Toolchain: serenity.nix: Fix fuse2fs not being installed
Nix (nixpkgs) have updated a while back how the e2fsprogs derivation
works and now fuse2fs wasnt being installed with it. It is now needed to
add a new derivation (package) to the dependency list: "fuse2fs". This
fixes the Meta/serenity.sh script not finding the fuse2fs binary for
rootless image building :^)
2022-10-06 16:16:51 +01:00
Andreas Kling
7354ac724e WebContent: Don't pthread_setname_np() non-SerenityOS platforms 2022-10-06 17:15:28 +02:00
Andreas Kling
2baad565ca LibWeb: Remove bogus verify_cast when dimensioning inline-blocks
There's no need to make the assumption that any inline-block box will
be represented by a BlockContainer. Nothing we do with the box here
requires that specific type anyway.
2022-10-06 17:15:28 +02:00
Andreas Kling
f190e394b3 LibUnicode: Let's use the GCC 11/12 workaround on all platforms
I seem to be getting some miscompiles on Linux as well, so let's make
the hitherto macOS-specific workaround universal.
2022-10-06 17:15:28 +02:00
Andreas Kling
9d50191dca LibWeb: Tidy up FormattingContext::creates_block_formatting_context()
We use comments from MDN here, since the rules for creating a BFC are
inconsistently spread across many different specifications.
2022-10-06 17:15:28 +02:00
EWouters
bc5d77ac40 Ports/ccache: Update ccache to version 4.6.3 2022-10-06 16:14:40 +01:00
EWouters
7c93eabffe LibC: Implement mkstemps() in stdlib and add a test
`mkstemps` generates a unique temporary file name from a pattern like
`prefixXXXXXXsuffix` where `prefix` and `suffix` can be any string with
only characters that are valid in a filename. The second parameter is
the length of the suffix.

`mkstemp` is `mkstemps` with suffix length 0, so to avoid code
duplication it calls `mkstemps`. It is unlikely this has any
significant performance impact on SerenityOS.

`generate_unique_filename` now takes the suffix length as a `size_t`.
The original behavior of this function is preserved when specifying a
suffix length of 0. All original uses of this function have been
adapted.

`mkstemps()` was added because it is required by version 4.6.3 of the
ccache port.
2022-10-06 16:14:40 +01:00
kleines Filmröllchen
678d385a3f Base: Add most Japanese infographic emoji
🈚 U+1F21A "free of charge"
🈯 U+1F22F "reserved" (or pointing finger)
🈲 U+1F232 "prohibited"
🈵 U+1F235 "no vacancy"
🈹 U+1F239 "discount"
🈺 U+1F23A "open for business"
🉐 U+1F250 "bargain"
2022-10-06 16:12:16 +01:00
Thomas Voss
5a4ee4df34 rev: Document the '-' filename 2022-10-06 16:06:50 +01:00
Thomas Voss
b556bfe8eb rev: Read from stdin if the filename '-' is given
The implementation of `rev` found on Linux systems does not have this
behavior, however other utilities do offer this behavior and so there
really isn't too much of an argument to be made for *not* having this as
a feature.
2022-10-06 16:06:50 +01:00
Thomas Voss
58d50d2657 Meta: Ignore vim's .exrc config
With the vim setting `exrc` enabled, vim automatically looks for a .exrc
file in the current directory for project-specific configuation.
2022-10-06 16:06:50 +01:00