1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 10:17:41 +00:00
Commit graph

8354 commits

Author SHA1 Message Date
Andreas Kling
fe67fe3791 LibWeb: Check for valid names in Document.createElement() & friends
We now validate that the provided tag names are valid XML tag names,
and otherwise throw an "invalid character" DOM exception.

2% progression on ACID3. :^)
2022-02-26 10:03:07 +01:00
Andreas Kling
8daf603f46 LibWeb: Paint full bitmap font glyphs, even if there's overlap
Since we now honor the CSS font-size values when deciding line box
metrics, we sometimes find ourselves needing to paint text with a bitmap
font into a box that isn't large enough for the glyphs.

As it turns out, it looks a bit better if we just grow the paint rect to
fit the glyphs (instead of painting chopped-off glyphs.) So let's just
do that for now.
2022-02-26 09:32:52 +01:00
Andreas Kling
00146005bb LibWeb: Very basic support for CSS vertical-align: <length>
If vertical-align is a length value, we lift each line box fragment that
far from the baseline of the line box.

This is rather messy, and we'll have to improve factoring as we add
support for more alignment types.
2022-02-26 09:30:17 +01:00
Andreas Kling
c8892f64f5 LibWeb: Make InlineLevelIterator not enter into inline-block boxes
The purpose of "entering" a box is to collect box model metrics that
apply to content fragments within the box. However, inline-blocks are
special, in that their inner content does not directly participate in
the inline formatting context outside it.
2022-02-26 09:27:20 +01:00
Andreas Kling
3ca26c7a7a LibWeb: Fix InlineLevelIterator not exiting box model metric nodes
We were neglecting to pop nodes from the box model stack. The metrics
were already being zeroed out when used, but let's not grow the stack
needlessly.
2022-02-26 09:25:24 +01:00
Andreas Kling
797f51e122 LibWeb: Add border box top/bottom metrics to line box fragments
This will allow us to support more kinds of vertical alignment.
2022-02-26 09:24:40 +01:00
Andreas Kling
8b369bf7bd LibWeb: Remove unused LineBox::ends_with_forced_line_break() 2022-02-26 08:33:45 +01:00
Andreas Kling
784dbdef8e LibWeb: Make DOM inspector overlay rects a little nicer
Instead of just the outline, fill them with some semi-transparent color.
Also add tag name, ID, classes and coordinates to the little tooltip.
Finally, use the border box instead of the context box for metrics,
same as other browsers.
2022-02-26 08:25:46 +01:00
Andreas Kling
c59ab7cc8b LibWeb: Make StyleValue absolutization non-destructive
Instead of awkwardly visiting and mutating lengths inside StyleValues,
we now simply create a new StyleValue instead.

This fixes an issue where inherited relative lengths could get
absolutized using a parent as reference, and then not having the correct
values when used in a child context.
2022-02-26 01:35:25 +01:00
Andreas Kling
1cdbd377e7 LibWeb: Add vertical-align to ComputedValues 2022-02-26 01:35:06 +01:00
Andreas Kling
c9f4759329 LibWeb: Use CSS font-size when computing text fragment content height 2022-02-26 01:10:43 +01:00
Itamar
d88da82e28 Userland: Rename IPC::ServerConnection=>IPC::ConnectionToServer
This was done with CLion's automatic rename feature.
2022-02-25 22:35:12 +01:00
Andreas Kling
efac862570 LibWeb: Parse <style> element text content when inserted into document
1% progression on ACID3. :^)
2022-02-25 22:05:42 +01:00
Andreas Kling
fb11741f20 LibWeb: Use the prefix passed to Document.createElementNS()
1% progression on ACID3. :^)
2022-02-25 21:29:12 +01:00
Andreas Kling
fa17776a51 LibWeb: Support HTMLFormElement.elements and HTMLFormElement.length
Note that we implement .elements as a HTMLCollection for now, instead of
the correct HTMLFormControlsCollection subclass. This covers most
use-cases already.

1% progression on ACID3. :^)
2022-02-25 21:19:06 +01:00
Andreas Kling
fbee0490a3 LibWeb: Improve HTMLElement.click()
This API now follows the spec a bit more closely, with regards to the
event being dispatched. There are still FIXME's but this is already an
improvement.

2% progression on ACID3. :^)
2022-02-25 20:45:19 +01:00
Andreas Kling
c25d653c31 LibWeb: Implement Range.commonAncestorContainer 2022-02-25 20:45:03 +01:00
Andreas Kling
aec0e54f73 LibWeb: Expose Range.collapsed to JavaScript 2022-02-25 20:20:31 +01:00
Andreas Kling
17f34488f6 LibWeb: Implement HTMLImageElement.width and HTMLImageElement.height 2022-02-25 19:38:31 +01:00
Andreas Kling
b023308f5c LibWeb: Notify parent when DOM::CharacterData content changes
This makes <style> elements reparse the CSS when their text child is
programmatically changed.
2022-02-25 19:38:31 +01:00
Andreas Kling
d0ab546d7a LibWeb: Implement UIEvent.initUIEvent()
1% progression on ACID3. :^)
2022-02-25 19:38:31 +01:00
Andreas Kling
093e66afc0 LibWeb: Make document.createEvent("UIEvent") actually create a UIEvent
There were two things preventing this from working right:

- UIEvents::UIEvent::create() was actually just DOM::Event::create()
- We didn't return the right JavaScript wrapper type for UIEvent
2022-02-25 19:38:31 +01:00
Andreas Kling
31508b2788 LibWeb: Make CSS :empty selector match empty text nodes as well
Previously we were only matching elements with *no* text children.
With this patch, we now also allow any number of empty text children to
be present as well.

1% progression on ACID3. :^)
2022-02-25 19:38:31 +01:00
Andreas Kling
29144f9238 LibWeb: Allow all ASCII whitespace chars between element class names
1% progression on ACID3. :^)
2022-02-25 19:38:31 +01:00
Andreas Kling
7ed6549c8b LibWeb: Fix off-by-one in calculation of available space for line boxes
The rightmost edge of the available space ends exactly at the leftmost
right-side floating box, not one pixel away from it.
2022-02-25 19:38:31 +01:00
Andreas Kling
a5c2ab69ec LibWeb: Look for nearest available size when using bitmap fonts
Use the new Gfx::Font::AllowInexactSizeMatch parameter when doing CSS
font lookups. This fixes a long-standing issue where text with e.g text
with "font-size:12px" would be larger than "font-size:13px" since there
was an exact match for 12, but none for 13 (so we'd fall back to 10).
2022-02-25 19:38:31 +01:00
Andreas Kling
95715f0c8f LibWeb: Fix rounding errors in calculation of final line box width
Instead of re-measuring the distance between the left and right edges of
a line box, we now simply adjust the final width based on how much the
rightmost fragment moved during the alignment process.
2022-02-25 19:38:31 +01:00
Sam Atkins
f3cda3c830 LibWeb: Add a rule-cache for PseudoElements
This works a little differently from the other caches - ALL rules
containing a pseudo-element are in this bucket. This lets us only look
at this bucket when finding styles for a pseudo-element, and ignore it
if we're not.
2022-02-25 19:35:34 +01:00
Sam Atkins
817cd13d59 LibWeb: Implement the ::marker pseudo-element
This matches the marker boxes of list-items.
2022-02-25 19:35:34 +01:00
Sam Atkins
5113128bc9 LibWeb: Paint InlineNode overlay in correct phase, skip pseudo-elements
We were painting this in the Foreground phase by mistake. Also, the
`inspected_node() == dom_node()` check returns true for pseudo-elements
(both values are nullptr) so I've added an extra check there. As noted,
once pseudo-elements are inspectable we will need to revisit this.
2022-02-25 19:35:34 +01:00
Sam Atkins
b76ee0e30d LibWeb: Account for all simple-selectors when calculating specificity
This fixes the Acid2 blue nose when hovering. :^)
2022-02-25 19:35:34 +01:00
Sam Atkins
ab2c47542d LibWeb: Create layout nodes for ::before and ::after pseudo-elements :^)
For now, we only handle their `content` being text, but it's a start!
2022-02-25 19:35:34 +01:00
Sam Atkins
1de0ca3286 LibWeb: Compute value for content property 2022-02-25 19:35:34 +01:00
Sam Atkins
7eb7396f8b LibWeb: Match styles for pseudo-elements
Since each selector can only have zero or one pseudo-element, we match
against it as a separate step, before matching the rest of the
selector. This should be faster, but mostly I did this because I could
not figure out how else to stop selectors without a pseudo-element from
matching the pseudo-element, eg so `.foo` styles don't affect
`.foo::before`.
2022-02-25 19:35:34 +01:00
Sam Atkins
caef4ec157 LibWeb: Move PseudoElement enum up a level
This in preparation for changing how we store these, plus it's unwieldy
having to type CSS::Selector::SimpleSelector::PseudoElement.
2022-02-25 19:35:34 +01:00
Sam Atkins
5390e05851 LibWeb: Extract code for creating a Layout::Node based on display type
We need to run the same logic for creating the ::before and ::after
pseudo-elements, so this saves us from duplicating the code.
2022-02-25 19:35:34 +01:00
Sam Atkins
7bb721bea2 LibWeb: Make display: foo box constructors take the Element by pointer
This means we can instantiate them for pseudo-elements, which don't have
an associated Element. They all pass it to their parent as a
`Layout::Node*` and handle a lack of `layout_node()` already so this
won't affect any functionality.
2022-02-25 19:35:34 +01:00
Sam Atkins
adaab23149 LibWeb: Parse the content property
For now, we only understand `none`, `normal`, `<image>` and `<string>`.
The various other functions and identifiers can be added later.

We can *almost* use a StyleValueList for this, except it's divided into
two parts - the content, and the optional "alt text". So, I've added a
new StyleValue for it.
2022-02-25 19:35:34 +01:00
Timothy Flynn
21bd3a21bd LibWeb: Append only one line feed character in Document.writeln
There were a couple issues here:

1. The line feed should only be appended once, rather than one per
   string.
2. The new_strings list of strings was unused (we were creating the new
   list, then passing the old list to Document.write).
2022-02-24 18:12:19 +01:00
Sam Atkins
09262e3b77 LibWeb: Actually query the orientation
I made a typo and was checking for "hover" twice.
2022-02-24 08:04:25 +01:00
Sam Atkins
114a7b357b LibWeb: Implement @media(overflow-inline)
I guess I got confused by this before, but it's actually the same as
overflow-block.
2022-02-24 08:04:25 +01:00
Sam Atkins
fd2ef43cb4 LibWeb: Implement <resolution> as a media feature type
This is the only dimension type besides `<length>` that is used in any
media queries in levels 4 or 5 right now. Others can be included
if/when they're needed.
2022-02-24 08:04:25 +01:00
Sam Atkins
5c8ea81d21 LibWeb: Parse Angle/Frequency/Resolution/Time types 2022-02-24 08:04:25 +01:00
Sam Atkins
f76a541819 LibWeb: Move length-unit-from-string code into Length
This means the units are defined in a single place instead of two.

Also removed the verify that we didn't produce a bogus % dimension token
in the Tokenizer, since this has never happened and the parser is not a
tokenizer test suite. :^)
2022-02-24 08:04:25 +01:00
Sam Atkins
608bfac2a9 LibWeb: Implement CSS Time class
This corresponds to `<time>` in the grammar.
2022-02-24 08:04:25 +01:00
Sam Atkins
0465abcfec LibWeb: Implement CSS Resolution class
This corresponds to `<resolution>` in the grammar.
2022-02-24 08:04:25 +01:00
Sam Atkins
bd79c303f6 LibWeb: Implement CSS Frequency class
This corresponds to `<frequency>` in the grammar.
2022-02-24 08:04:25 +01:00
Sam Atkins
355d1936f2 LibWeb: Implement CSS Angle class
This corresponds to `<angle>` in the grammar.
2022-02-24 08:04:25 +01:00
Sam Atkins
a07fed4e53 LibWeb: Account for Calculated in Length methods
We were ignoring this in a couple of places.
2022-02-24 08:04:25 +01:00
Sam Atkins
64f112c4ea LibWeb: Alphabetize LibWeb CMakeLists.txt 2022-02-24 08:04:25 +01:00