summaryrefslogtreecommitdiff
path: root/Libraries/LibWeb/DOM/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibWeb/DOM/Node.cpp')
-rw-r--r--Libraries/LibWeb/DOM/Node.cpp263
1 files changed, 0 insertions, 263 deletions
diff --git a/Libraries/LibWeb/DOM/Node.cpp b/Libraries/LibWeb/DOM/Node.cpp
deleted file mode 100644
index 6890e4fda5..0000000000
--- a/Libraries/LibWeb/DOM/Node.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <AK/StringBuilder.h>
-#include <LibJS/AST.h>
-#include <LibJS/Runtime/Function.h>
-#include <LibJS/Runtime/ScriptFunction.h>
-#include <LibWeb/Bindings/EventWrapper.h>
-#include <LibWeb/Bindings/EventWrapperFactory.h>
-#include <LibWeb/Bindings/NodeWrapper.h>
-#include <LibWeb/Bindings/NodeWrapperFactory.h>
-#include <LibWeb/CSS/StyleResolver.h>
-#include <LibWeb/DOM/Element.h>
-#include <LibWeb/DOM/Event.h>
-#include <LibWeb/DOM/EventDispatcher.h>
-#include <LibWeb/DOM/EventListener.h>
-#include <LibWeb/DOM/Node.h>
-#include <LibWeb/DOM/ShadowRoot.h>
-#include <LibWeb/HTML/HTMLAnchorElement.h>
-#include <LibWeb/Layout/BlockBox.h>
-#include <LibWeb/Layout/InitialContainingBlockBox.h>
-#include <LibWeb/Layout/InlineNode.h>
-#include <LibWeb/Layout/Node.h>
-#include <LibWeb/Layout/TextNode.h>
-
-//#define EVENT_DEBUG
-
-namespace Web::DOM {
-
-Node::Node(Document& document, NodeType type)
- : EventTarget(static_cast<Bindings::ScriptExecutionContext&>(document))
- , m_document(&document)
- , m_type(type)
-{
- if (!is_document())
- m_document->ref_from_node({});
-}
-
-Node::~Node()
-{
- ASSERT(m_deletion_has_begun);
- if (layout_node() && layout_node()->parent())
- layout_node()->parent()->remove_child(*layout_node());
-
- if (!is_document())
- m_document->unref_from_node({});
-}
-
-const HTML::HTMLAnchorElement* Node::enclosing_link_element() const
-{
- for (auto* node = this; node; node = node->parent()) {
- if (is<HTML::HTMLAnchorElement>(*node) && downcast<HTML::HTMLAnchorElement>(*node).has_attribute(HTML::AttributeNames::href))
- return downcast<HTML::HTMLAnchorElement>(node);
- }
- return nullptr;
-}
-
-const HTML::HTMLElement* Node::enclosing_html_element() const
-{
- return first_ancestor_of_type<HTML::HTMLElement>();
-}
-
-String Node::text_content() const
-{
- StringBuilder builder;
- for (auto* child = first_child(); child; child = child->next_sibling()) {
- builder.append(child->text_content());
- }
- return builder.to_string();
-}
-
-void Node::set_text_content(const String& content)
-{
- if (is_text()) {
- downcast<Text>(this)->set_data(content);
- } else {
- remove_all_children();
- append_child(document().create_text_node(content));
- }
-
- set_needs_style_update(true);
- document().invalidate_layout();
-}
-
-RefPtr<Layout::Node> Node::create_layout_node()
-{
- return nullptr;
-}
-
-void Node::invalidate_style()
-{
- for_each_in_subtree_of_type<Element>([&](auto& element) {
- element.set_needs_style_update(true);
- return IterationDecision::Continue;
- });
- document().schedule_style_update();
-}
-
-bool Node::is_link() const
-{
- return enclosing_link_element();
-}
-
-bool Node::dispatch_event(NonnullRefPtr<Event> event)
-{
- return EventDispatcher::dispatch(*this, event);
-}
-
-String Node::child_text_content() const
-{
- if (!is<ParentNode>(*this))
- return String::empty();
-
- StringBuilder builder;
- downcast<ParentNode>(*this).for_each_child([&](auto& child) {
- if (is<Text>(child))
- builder.append(downcast<Text>(child).text_content());
- });
- return builder.build();
-}
-
-Node* Node::root()
-{
- Node* root = this;
- while (root->parent())
- root = root->parent();
- return root;
-}
-
-Node* Node::shadow_including_root()
-{
- auto node_root = root();
- if (is<ShadowRoot>(node_root))
- return downcast<ShadowRoot>(node_root)->host()->shadow_including_root();
- return node_root;
-}
-
-bool Node::is_connected() const
-{
- return shadow_including_root() && shadow_including_root()->is_document();
-}
-
-Element* Node::parent_element()
-{
- if (!parent() || !is<Element>(parent()))
- return nullptr;
- return downcast<Element>(parent());
-}
-
-const Element* Node::parent_element() const
-{
- if (!parent() || !is<Element>(parent()))
- return nullptr;
- return downcast<Element>(parent());
-}
-
-RefPtr<Node> Node::append_child(NonnullRefPtr<Node> node, bool notify)
-{
- if (&node->document() != &document())
- document().adopt_node(node);
- TreeNode<Node>::append_child(node, notify);
- return node;
-}
-
-RefPtr<Node> Node::insert_before(NonnullRefPtr<Node> node, RefPtr<Node> child, bool notify)
-{
- if (!child)
- return append_child(move(node), notify);
- if (child->parent_node() != this) {
- dbgln("FIXME: Trying to insert_before() a bogus child");
- return nullptr;
- }
- if (&node->document() != &document())
- document().adopt_node(node);
- TreeNode<Node>::insert_before(node, child, notify);
- return node;
-}
-
-void Node::set_document(Badge<Document>, Document& document)
-{
- if (m_document == &document)
- return;
- document.ref_from_node({});
- m_document->unref_from_node({});
- m_document = &document;
-}
-
-bool Node::is_editable() const
-{
- return parent() && parent()->is_editable();
-}
-
-Bindings::EventTargetWrapper* Node::create_wrapper(JS::GlobalObject& global_object)
-{
- return wrap(global_object, *this);
-}
-
-void Node::removed_last_ref()
-{
- if (is<Document>(*this)) {
- downcast<Document>(*this).removed_last_ref();
- return;
- }
- m_deletion_has_begun = true;
- delete this;
-}
-
-void Node::set_layout_node(Badge<Layout::Node>, Layout::Node* layout_node) const
-{
- if (layout_node)
- m_layout_node = layout_node->make_weak_ptr();
- else
- m_layout_node = nullptr;
-}
-
-EventTarget* Node::get_parent(const Event&)
-{
- // FIXME: returns the node’s assigned slot, if node is assigned, and node’s parent otherwise.
- return parent();
-}
-
-void Node::set_needs_style_update(bool value)
-{
- if (m_needs_style_update == value)
- return;
- m_needs_style_update = value;
-
- if (m_needs_style_update) {
- for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent())
- ancestor->m_child_needs_style_update = true;
- document().schedule_style_update();
- }
-}
-
-void Node::inserted_into(Node&)
-{
- set_needs_style_update(true);
-}
-
-}