Andreas Kling
8d2194bdbd
LibWeb: Make DOM timers cancellable and stop leaking them
...
This patch adds a Web::Timer object that represents a single timer
registration made with window.setTimeout() or window.setInterval().
All live timers are owned by the DOM Window object.
The timers can be stopped via clearTimeout() or clearInterval().
Note that those API's are actually interchangeable, but we have to
support both.
2020-06-27 20:02:04 +02:00
Kevin Meyer
22b20c381f
LibWeb: Implement remaining missing tokenizer EOF cases
2020-06-27 13:27:10 +02:00
Hüseyin ASLITÜRK
0f7a651adc
LibWeb: Add "image/x‑portable‑graymap" mime type for pgm file extension
2020-06-27 13:01:27 +02:00
Andreas Kling
8e6522d034
LibWeb: Implement some missing tokenizer cases for EOF handling
2020-06-26 22:47:07 +02:00
Andreas Kling
9d8565cf9a
LibWeb: Add CanvasRenderingContext2D.rotate()
...
This is pretty limited since we don't have wholesale mapping through
the context transform, but we have to start somewhere. :^)
2020-06-26 18:27:12 +02:00
Andreas Kling
ba76a72422
LibWeb: Skip over floating elements when collapsing margins
...
Two sibling blocks are not vertically adjacent if one is float:left
and the other is float:none. Respect this when collapsing margins.
2020-06-26 18:27:12 +02:00
Andreas Kling
62daa6f73c
LibWeb: Add the 'float' CSS property to LayoutStyle
...
Note that we don't use the property for anything yet, as I'm still
wrapping my head around how to implement floats.
2020-06-26 18:27:12 +02:00
theazgra
6a401a9bde
LibWeb: Remove duplicate if branch in fragment parsing.
...
I noticed in the video the duplicate `if` check. This commit removes
the duplicated branch.
2020-06-26 11:58:53 +02:00
Andreas Kling
6293d1a13c
LibWeb+Browser: Remove old HTML parser :^)
...
The new parser is now used everywhere and it's working pretty well!
2020-06-26 00:53:25 +02:00
Andreas Kling
92d831c25b
LibWeb: Implement fragment parsing and use it for Element.innerHTML
...
This patch implements most of the HTML fragment parsing algorithm and
ports Element::set_inner_html() to it. This was the last remaining user
of the old HTML parser. :^)
2020-06-26 00:53:25 +02:00
Andreas Kling
eb33021d65
LibWeb: Tolerate quoted HTTP Content-Type encodings
2020-06-26 00:53:25 +02:00
Andreas Kling
edf0aacda4
LibWeb: Add Document.getElementsByTagName()
2020-06-26 00:53:25 +02:00
Andreas Kling
ee4cf0bc69
LibWeb: Let's not pass "%u" to String() and expect something to happen
2020-06-26 00:53:25 +02:00
Andreas Kling
ebf326a98c
LibWeb: Fix build after Specificity.h removal
2020-06-25 20:59:00 +02:00
Andreas Kling
4f7c7bbb09
LibWeb: Treat all HTTP 4xx codes as errors
2020-06-25 17:19:29 +02:00
Andreas Kling
505b133fda
LibWeb: Don't allow more than one color sub-value in CSS 'background'
2020-06-25 16:55:43 +02:00
Andreas Kling
3fefc7f3e9
LibWeb: Tweak CSS parser to swallow backslash-escaped characters
...
This isn't the correct way of doing this, but at least it allows the
parsing to progress a bit further in some cases.
2020-06-25 16:52:38 +02:00
Andreas Kling
49dd4b7e8a
LibWeb: Compress specificity into a 32-bit unsigned int
...
Instead of storing the three-part specificy for every selector,
just mash them together into a 32-bit value instead.
This saves both space and time, and matches the behavior of other
browser engines.
2020-06-25 16:43:49 +02:00
Andreas Kling
8be74ea65c
LibWeb: Percentage 'height' should sometimes behave as 'auto'
...
Something like "height: 50%" is equivalent to "height: auto" unless the
containing block has explicitly specified height.
2020-06-25 16:04:57 +02:00
Andreas Kling
afebbd1cd7
LibWeb: Serialize Length::Type::Percentage with a "%" suffix
...
"10 percentage" looked rather silly. :^)
2020-06-25 15:53:23 +02:00
Andreas Kling
f650f18bd2
LibWeb: Make scroll-to-anchor zone in on the element's padding box
...
That seems to be what other engines do. This is a bit hackish but we'll
soon have to redo scroll-to-anchor anyway for the multi-process model.
2020-06-25 15:53:23 +02:00
Andreas Kling
bab0143bb2
LibWeb: Place normal-flow blocks relative to non-absolute siblings
...
We could previously place a box next to a preceding sibling with
position:fixed, which is wrong since fixed-position elements are taken
out of the normal flow.
2020-06-25 15:53:23 +02:00
Andreas Kling
b2f54be514
LibWeb: Draw the margin and padding boxes around the inspected node
...
When highlighting a node in the inspector, we now paint three overlays:
- The content box (magenta)
- The padding box (cyan)
- The margin box (yellow)
This makes it a lot easier to debug layout issues.
2020-06-25 15:53:23 +02:00
Andreas Kling
8f92ed957b
LibWeb: Iterating more on placement of absolutely positioned elements
2020-06-25 15:53:23 +02:00
Andreas Kling
ee1c241be9
LibWeb: Update the border metrics of absolutely positioned boxes
...
We were neglecting to populate the border parts of BoxModelMetrics for
absolutely positioned block descendants.
2020-06-25 15:53:23 +02:00
Andreas Kling
232e41a238
LibWeb: Remove empty trailing line boxes
...
Sometimes we end up with an empty line box at the bottom of a block.
Instead of worrying about this in all the places we split into lines,
just remove the trailing box (if any) after splitting is finshed.
2020-06-25 15:53:23 +02:00
Andreas Kling
58f76ed11f
LibWeb: Avoid some redundant resolution of padding values during layout
...
Padding is not affected by the width constraining algorithm, so we can
just resolve it up front.
2020-06-25 15:53:23 +02:00
Andreas Kling
8960c6f8fe
LibWeb: Use the cached white-space from LayoutStyle in text_for_style()
2020-06-24 21:44:11 +02:00
Andreas Kling
440b4ece22
LibWeb: Move border width and color into LayoutStyle
...
To make this possible, I also had to give each LayoutNode a Document&
so it can resolve document-specific colors correctly. There's probably
ways to avoid having this extra member by resolving colors later, but
this works for now.
2020-06-24 19:43:27 +02:00
Andreas Kling
4b2ac34725
LibWeb: Move the offset, margin and padding boxes into LayoutStyle
2020-06-24 18:06:21 +02:00
Andreas Kling
6b334e02e6
LibWeb: Move white-space into LayoutStyle
2020-06-24 18:06:21 +02:00
Andreas Kling
bc178ee743
LibWeb: Add CSS::Display enum and StyleProperties::display()
...
The display property is not interesting after we've built the layout
tree, so we don't have to move it into LayoutStyle.
2020-06-24 18:06:21 +02:00
Andreas Kling
5d86305a72
LibWeb: Move height, min-height and max-height into LayoutStyle
2020-06-24 16:49:51 +02:00
Andreas Kling
ec466c0385
LibWeb: Move min-width and max-width into LayoutStyle
2020-06-24 16:49:51 +02:00
Andreas Kling
ecacab8618
LibWeb: Move width into LayoutStyle
...
This patch also adds the ability for Length to contain percentage
values. This is a little off-spec, but will make storing and dealing
with lengths a lot easier.
To resolve a Length to a px-or-auto Length, there are now helpers
for that. After calling them, you no longer have to think about
em, rem, %, and such things.
2020-06-24 16:49:51 +02:00
Andreas Kling
959464fce4
LibWeb: Move position and text-align to LayoutStyle
2020-06-24 16:49:51 +02:00
Andreas Kling
6f28f08096
LibWeb: Add LayoutStyle, a place to store style info for layout & paint
...
StyleProperties is really only the specified "input" to what eventually
becomes the used/computed style we use for layout and painting.
Unlike StyleProperties, LayoutStyle will have strongly typed values for
everything it contains (i.e no CSS::ValueID or strings, etc.)
This first patch moves z-index into LayoutStyle.
2020-06-24 16:49:51 +02:00
Andreas Kling
5e83a97fa2
LibWeb: Rename LayoutNode::style() => specified_style()
...
Let's make way for a slightly-more-cooked style() that will eventually
replace the raw specified_style() for layout and paint purposes.
2020-06-24 13:54:31 +02:00
Andreas Kling
90edaabc4b
LibWeb: Add an "undefined" state to Length
...
A default-constructed Length now gives you an undefined length value,
which can be used to signify the absence of a value.
2020-06-24 11:24:00 +02:00
Andreas Kling
f742b245b7
LibWeb: Turn BoxModelMetrics into a simple struct
...
Using getters for this thing was just cumbersome and didn't achieve
anything of value so just turn it into a plain struct.
2020-06-24 11:22:34 +02:00
Andreas Kling
5744dd43c5
LibWeb: Remove default Length constructor and add make_auto()/make_px()
...
To prepare for adding an undefined/empty state for Length, let's first
move away from Length() creating an auto value.
2020-06-24 11:08:46 +02:00
Andreas Kling
26eef65017
LibWeb: Use the cached text-align value in LineBox::add_fragment()
2020-06-24 00:09:45 +02:00
Andreas Kling
f4ecb5362f
LibWeb: Cache the used CSS text-align property on LayoutNodeWithStyle
2020-06-23 23:28:40 +02:00
Andreas Kling
ae181e1573
LibWeb: Always inline absolute Length to_px() conversion
...
Only do the relative Length units out of line.
2020-06-23 23:21:58 +02:00
Andreas Kling
5f0a1ef21b
LibWeb: Always inline is<LayoutBox>() and is<LayoutBlock>()
2020-06-23 23:21:39 +02:00
Andreas Kling
9b8464f455
LibWeb: Cache the used CSS 'position' value on LayoutNodeWithStyle
...
This avoids having to query the StyleProperties hash map whenever we
need to know if an element is absolutely positioned. This was extremely
hot in interactive window resize profiles.
2020-06-23 23:15:23 +02:00
Andreas Kling
d0312f6208
LibWeb: Handle empty inputs to the CSS parser
...
Empty inputs -> empty outputs.
2020-06-23 20:06:45 +02:00
Andreas Kling
86098505ec
LibWeb: Handle position:absolute with both left and right specified
...
In this case, we need to undo the right-side offsetting, since the
width computation algorithm will already have stretched the width to
accomodate both the side constraints.
2020-06-23 20:05:35 +02:00
Andreas Kling
8d235d0e2f
LibWeb: Make sure BoxModelMetrics are set for position:absolute boxes
...
This is all very redundant and we should find a way to share this code
between at least some of the positioning modes.
2020-06-23 19:21:04 +02:00
Andreas Kling
7c848645c3
LibWeb: Take margin into account when positioning absolute descendants
2020-06-23 19:20:06 +02:00