LibWeb: Add CDATASection

Not used for anything currently other than exposing it on the Window
object. This allows Web Components Polyfills to patch its prototype.
This commit is contained in:
Luke Wilde 2022-06-27 21:20:59 +01:00 committed by Linus Groh
parent 2916b3bebf
commit 1ceba560f4
Notes: sideshowbarker 2024-07-17 09:56:12 +09:00
10 changed files with 68 additions and 1 deletions

View file

@ -15,6 +15,8 @@
#include <LibWeb/Bindings/AbstractRangeConstructor.h>
#include <LibWeb/Bindings/AbstractRangePrototype.h>
#include <LibWeb/Bindings/AudioConstructor.h>
#include <LibWeb/Bindings/CDATASectionConstructor.h>
#include <LibWeb/Bindings/CDATASectionPrototype.h>
#include <LibWeb/Bindings/CSSConditionRuleConstructor.h>
#include <LibWeb/Bindings/CSSConditionRulePrototype.h>
#include <LibWeb/Bindings/CSSFontFaceRuleConstructor.h>
@ -370,6 +372,7 @@
ADD_WINDOW_OBJECT_INTERFACE(AbortController) \
ADD_WINDOW_OBJECT_INTERFACE(AbortSignal) \
ADD_WINDOW_OBJECT_INTERFACE(AbstractRange) \
ADD_WINDOW_OBJECT_INTERFACE(CDATASection) \
ADD_WINDOW_OBJECT_INTERFACE(CSSConditionRule) \
ADD_WINDOW_OBJECT_INTERFACE(CSSFontFaceRule) \
ADD_WINDOW_OBJECT_INTERFACE(CSSGroupingRule) \

View file

@ -74,6 +74,7 @@ set(SOURCES
DOM/AbortSignal.cpp
DOM/Attribute.cpp
DOM/Attribute.idl
DOM/CDATASection.cpp
DOM/CharacterData.cpp
DOM/CharacterData.idl
DOM/Comment.cpp

View file

@ -0,0 +1,20 @@
/*
* Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/DOM/CDATASection.h>
namespace Web::DOM {
CDATASection::CDATASection(Document& document, String const& data)
: Text(document, NodeType::CDATA_SECTION_NODE, data)
{
}
CDATASection::~CDATASection()
{
}
}

View file

@ -0,0 +1,28 @@
/*
* Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/RefCounted.h>
#include <LibWeb/DOM/Text.h>
namespace Web::DOM {
class CDATASection final : public Text {
public:
using WrapperType = Bindings::CDATASectionWrapper;
CDATASection(Document&, String const&);
virtual ~CDATASection() override;
// ^Node
virtual FlyString node_name() const override { return "#cdata-section"; }
};
template<>
inline bool Node::fast_is<CDATASection>() const { return is_cdata_section(); }
}

View file

@ -0,0 +1,3 @@
[Exposed=Window]
interface CDATASection : Text {
};

View file

@ -72,6 +72,7 @@ public:
bool is_parent_node() const { return is_element() || is_document() || is_document_fragment(); }
bool is_slottable() const { return is_element() || is_text(); }
bool is_attribute() const { return type() == NodeType::ATTRIBUTE_NODE; }
bool is_cdata_section() const { return type() == NodeType::CDATA_SECTION_NODE; }
virtual bool is_shadow_root() const { return false; }
virtual bool requires_svg_container() const { return false; }

View file

@ -17,6 +17,11 @@ Text::Text(Document& document, String const& data)
{
}
Text::Text(Document& document, NodeType type, String const& data)
: CharacterData(document, type, data)
{
}
// https://dom.spec.whatwg.org/#dom-text-text
NonnullRefPtr<Text> Text::create_with_global_object(Bindings::WindowObject& window, String const& data)
{

View file

@ -12,7 +12,7 @@
namespace Web::DOM {
class Text final : public CharacterData {
class Text : public CharacterData {
public:
using WrapperType = Bindings::TextWrapper;
@ -32,6 +32,9 @@ public:
ExceptionOr<NonnullRefPtr<Text>> split_text(size_t offset);
protected:
Text(Document&, NodeType, String const&);
private:
WeakPtr<HTML::HTMLInputElement> m_owner_input_element;

View file

@ -118,6 +118,7 @@ class AbstractRange;
class AbortController;
class AbortSignal;
class Attribute;
class CDATASection;
class CharacterData;
class Comment;
class CustomEvent;
@ -410,6 +411,7 @@ class AttributeWrapper;
struct CallbackType;
class CanvasGradientWrapper;
class CanvasRenderingContext2DWrapper;
class CDATASectionWrapper;
class CharacterDataWrapper;
class CloseEventWrapper;
class CommentWrapper;

View file

@ -24,6 +24,7 @@ libweb_js_wrapper(DOM/AbstractRange)
libweb_js_wrapper(DOM/Attribute)
libweb_js_wrapper(DOM/AbortController)
libweb_js_wrapper(DOM/AbortSignal)
libweb_js_wrapper(DOM/CDATASection)
libweb_js_wrapper(DOM/CharacterData)
libweb_js_wrapper(DOM/Comment)
libweb_js_wrapper(DOM/CustomEvent)