LibWeb keeps growing and the Web namespace is filling up fast.
Let's put DOM stuff into Web::DOM, just like we already started doing
with SVG stuff in Web::SVG.
isnormal really messes up the build. Just remove it for now; it can be
addressed in a seperate commit. Additionally, conditionally add
`noexcept` to the math functions if we are in a C++ context.
This commit starts adding a basic SVG element. Currently, svg elements
have support for the width and height properties, as well as the stroke,
stroke-width, and fill properties. The only child element supported
is the path element, as most other graphical elements are just shorthand
for paths.
More steps towards multiple global object support. Primitive cells
like strings, bigints, etc, don't actually have any connection to
the global object. Use the explicit API to clarify this.
This allows you to not have to write a separate test file
for the same thing but in a different situation.
This doesn't handle when you change the page with location.href
however.
Changes the name of the page load handlers to prevent confusion
with this.
Sometimes the IDL attribute and the DOM attribute don't have the same
exact name. In those cases, we can now do this:
[Reflect=foobar] attribute DOMString fooBar;
You can now tag reflecting attributes with [Reflect] to generate code
that does basic DOM element attribute get/set.
(This patch also makes it easy to add more extended attributes like
that going forward.)
From the HTML spec:
"Some IDL attributes are defined to reflect a particular content
attribute. This means that on getting, the IDL attribute returns
the current value of the content attribute, and on setting,
the IDL attribute changes the value of the content attribute
to the given value."
This API is not super perfect as it merely overrides the source alpha
on all source pixels instead of blending the alpha values. There is
room for improvement here for sure.
We were relying on Core::is<Window>() to tell us whether the parent
of an action is a window. This didn't work since we only saw a forward
declaration of GUI::Window in Action.cpp.
This is an unfortunate flaw in the is<T> pattern and we should solve
it somehow but not in this patch.
To prepare for fully qualified tag names, let's call this local_name.
Note that we still keep an Element::tag_name() around since that's what
the JS bindings end up calling into for the Element.tagName property.