mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	LibWeb: Move DOM classes into the Web::DOM namespace
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.
This commit is contained in:
		
							parent
							
								
									96d13f75cf
								
							
						
					
					
						commit
						11ff9d0f17
					
				
					 178 changed files with 516 additions and 523 deletions
				
			
		|  | @ -47,13 +47,13 @@ ConsoleWidget::ConsoleWidget() | |||
|     set_layout<GUI::VerticalBoxLayout>(); | ||||
|     set_fill_with_background_color(true); | ||||
| 
 | ||||
|     auto base_document = adopt(*new Web::Document); | ||||
|     base_document->append_child(adopt(*new Web::DocumentType(base_document))); | ||||
|     auto html_element = create_element(base_document, "html"); | ||||
|     auto base_document = adopt(*new Web::DOM::Document); | ||||
|     base_document->append_child(adopt(*new Web::DOM::DocumentType(base_document))); | ||||
|     auto html_element = Web::DOM::create_element(base_document, "html"); | ||||
|     base_document->append_child(html_element); | ||||
|     auto head_element = create_element(base_document, "head"); | ||||
|     auto head_element = Web::DOM::create_element(base_document, "head"); | ||||
|     html_element->append_child(head_element); | ||||
|     auto body_element = create_element(base_document, "body"); | ||||
|     auto body_element = Web::DOM::create_element(base_document, "body"); | ||||
|     html_element->append_child(body_element); | ||||
|     m_output_container = body_element; | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ private: | |||
| 
 | ||||
|     RefPtr<GUI::TextBox> m_input; | ||||
|     RefPtr<Web::PageView> m_output_view; | ||||
|     RefPtr<Web::Element> m_output_container; | ||||
|     RefPtr<Web::DOM::Element> m_output_container; | ||||
|     WeakPtr<JS::Interpreter> m_interpreter; | ||||
|     OwnPtr<BrowserConsoleClient> m_console_client; | ||||
| }; | ||||
|  |  | |||
|  | @ -38,11 +38,11 @@ | |||
| 
 | ||||
| namespace Browser { | ||||
| 
 | ||||
| void InspectorWidget::set_inspected_node(Web::Node* node) | ||||
| void InspectorWidget::set_inspected_node(Web::DOM::Node* node) | ||||
| { | ||||
|     m_document->set_inspected_node(node); | ||||
|     if (node && node->is_element()) { | ||||
|         auto& element = downcast<Web::Element>(*node); | ||||
|         auto& element = downcast<Web::DOM::Element>(*node); | ||||
|         if (element.resolved_style()) { | ||||
|             m_style_table_view->set_model(Web::StylePropertiesModel::create(*element.resolved_style())); | ||||
|             m_computed_style_table_view->set_model(Web::StylePropertiesModel::create(*element.computed_style())); | ||||
|  | @ -62,7 +62,7 @@ InspectorWidget::InspectorWidget() | |||
| 
 | ||||
|     m_dom_tree_view = top_tab_widget.add_tab<GUI::TreeView>("DOM"); | ||||
|     m_dom_tree_view->on_selection = [this](auto& index) { | ||||
|         auto* node = static_cast<Web::Node*>(index.internal_data()); | ||||
|         auto* node = static_cast<Web::DOM::Node*>(index.internal_data()); | ||||
|         set_inspected_node(node); | ||||
|     }; | ||||
| 
 | ||||
|  | @ -82,7 +82,7 @@ InspectorWidget::~InspectorWidget() | |||
| { | ||||
| } | ||||
| 
 | ||||
| void InspectorWidget::set_document(Web::Document* document) | ||||
| void InspectorWidget::set_document(Web::DOM::Document* document) | ||||
| { | ||||
|     if (m_document == document) | ||||
|         return; | ||||
|  |  | |||
|  | @ -36,18 +36,18 @@ class InspectorWidget final : public GUI::Widget { | |||
| public: | ||||
|     virtual ~InspectorWidget(); | ||||
| 
 | ||||
|     void set_document(Web::Document*); | ||||
|     void set_document(Web::DOM::Document*); | ||||
| 
 | ||||
| private: | ||||
|     InspectorWidget(); | ||||
| 
 | ||||
|     void set_inspected_node(Web::Node*); | ||||
|     void set_inspected_node(Web::DOM::Node*); | ||||
| 
 | ||||
|     RefPtr<GUI::TreeView> m_dom_tree_view; | ||||
|     RefPtr<GUI::TreeView> m_layout_tree_view; | ||||
|     RefPtr<GUI::TableView> m_style_table_view; | ||||
|     RefPtr<GUI::TableView> m_computed_style_table_view; | ||||
|     RefPtr<Web::Document> m_document; | ||||
|     RefPtr<Web::DOM::Document> m_document; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -40,14 +40,14 @@ NonnullRefPtr<IRCLogBuffer> IRCLogBuffer::create() | |||
| 
 | ||||
| IRCLogBuffer::IRCLogBuffer() | ||||
| { | ||||
|     m_document = adopt(*new Web::Document); | ||||
|     m_document->append_child(adopt(*new Web::DocumentType(document()))); | ||||
|     m_document = adopt(*new Web::DOM::Document); | ||||
|     m_document->append_child(adopt(*new Web::DOM::DocumentType(document()))); | ||||
|     auto html_element = create_element(document(), "html"); | ||||
|     m_document->append_child(html_element); | ||||
|     auto head_element = create_element(document(), "head"); | ||||
|     html_element->append_child(head_element); | ||||
|     auto style_element = create_element(document(), "style"); | ||||
|     style_element->append_child(adopt(*new Web::Text(document(), "div { font-family: Csilla; font-weight: lighter; }"))); | ||||
|     style_element->append_child(adopt(*new Web::DOM::Text(document(), "div { font-family: Csilla; font-weight: lighter; }"))); | ||||
|     head_element->append_child(style_element); | ||||
|     auto body_element = create_element(document(), "body"); | ||||
|     html_element->append_child(body_element); | ||||
|  | @ -76,7 +76,7 @@ void IRCLogBuffer::add_message(char prefix, const String& name, const String& te | |||
|         escape_html_entities(nick_string).characters(), | ||||
|         escape_html_entities(text).characters()); | ||||
| 
 | ||||
|     auto wrapper = Web::create_element(*m_document, Web::HTML::TagNames::div); | ||||
|     auto wrapper = Web::DOM::create_element(*m_document, Web::HTML::TagNames::div); | ||||
|     wrapper->set_attribute(Web::HTML::AttributeNames::style, String::format("color: %s", color.to_string().characters())); | ||||
|     wrapper->set_inner_html(html); | ||||
|     m_container_element->append_child(wrapper); | ||||
|  | @ -90,7 +90,7 @@ void IRCLogBuffer::add_message(const String& text, Color color) | |||
|         "<span>%s</span>", | ||||
|         timestamp_string().characters(), | ||||
|         escape_html_entities(text).characters()); | ||||
|     auto wrapper = Web::create_element(*m_document, Web::HTML::TagNames::div); | ||||
|     auto wrapper = Web::DOM::create_element(*m_document, Web::HTML::TagNames::div); | ||||
|     wrapper->set_attribute(Web::HTML::AttributeNames::style, String::format("color: %s", color.to_string().characters())); | ||||
|     wrapper->set_inner_html(html); | ||||
|     m_container_element->append_child(wrapper); | ||||
|  |  | |||
|  | @ -49,11 +49,11 @@ public: | |||
|     void add_message(const String& text, Color = Color::Black); | ||||
|     void dump() const; | ||||
| 
 | ||||
|     const Web::Document& document() const { return *m_document; } | ||||
|     Web::Document& document() { return *m_document; } | ||||
|     const Web::DOM::Document& document() const { return *m_document; } | ||||
|     Web::DOM::Document& document() { return *m_document; } | ||||
| 
 | ||||
| private: | ||||
|     IRCLogBuffer(); | ||||
|     RefPtr<Web::Document> m_document; | ||||
|     RefPtr<Web::Element> m_container_element; | ||||
|     RefPtr<Web::DOM::Document> m_document; | ||||
|     RefPtr<Web::DOM::Element> m_container_element; | ||||
| }; | ||||
|  |  | |||
|  | @ -214,7 +214,7 @@ IRCWindow::~IRCWindow() | |||
| void IRCWindow::set_log_buffer(const IRCLogBuffer& log_buffer) | ||||
| { | ||||
|     m_log_buffer = &log_buffer; | ||||
|     m_page_view->set_document(const_cast<Web::Document*>(&log_buffer.document())); | ||||
|     m_page_view->set_document(const_cast<Web::DOM::Document*>(&log_buffer.document())); | ||||
| } | ||||
| 
 | ||||
| bool IRCWindow::is_active() const | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ | |||
| namespace Web { | ||||
| namespace Bindings { | ||||
| 
 | ||||
| EventListenerWrapper::EventListenerWrapper(JS::GlobalObject& global_object, EventListener& impl) | ||||
| EventListenerWrapper::EventListenerWrapper(JS::GlobalObject& global_object, DOM::EventListener& impl) | ||||
|     : Wrapper(*global_object.object_prototype()) | ||||
|     , m_impl(impl) | ||||
| { | ||||
|  |  | |||
|  | @ -35,14 +35,14 @@ class EventListenerWrapper final : public Wrapper { | |||
|     JS_OBJECT(EventListenerWrapper, Wrapper); | ||||
| 
 | ||||
| public: | ||||
|     EventListenerWrapper(JS::GlobalObject&, EventListener&); | ||||
|     EventListenerWrapper(JS::GlobalObject&, DOM::EventListener&); | ||||
|     virtual ~EventListenerWrapper() override; | ||||
| 
 | ||||
|     EventListener& impl() { return *m_impl; } | ||||
|     const EventListener& impl() const { return *m_impl; } | ||||
|     DOM::EventListener& impl() { return *m_impl; } | ||||
|     const DOM::EventListener& impl() const { return *m_impl; } | ||||
| 
 | ||||
| private: | ||||
|     NonnullRefPtr<EventListener> m_impl; | ||||
|     NonnullRefPtr<DOM::EventListener> m_impl; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -30,10 +30,10 @@ | |||
| namespace Web { | ||||
| namespace Bindings { | ||||
| 
 | ||||
| EventWrapper* wrap(JS::GlobalObject& global_object, Event& event) | ||||
| EventWrapper* wrap(JS::GlobalObject& global_object, DOM::Event& event) | ||||
| { | ||||
|     if (event.is_mouse_event()) | ||||
|         return static_cast<MouseEventWrapper*>(wrap_impl(global_object, static_cast<MouseEvent&>(event))); | ||||
|         return static_cast<MouseEventWrapper*>(wrap_impl(global_object, static_cast<DOM::MouseEvent&>(event))); | ||||
|     return static_cast<EventWrapper*>(wrap_impl(global_object, event)); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,10 +29,8 @@ | |||
| #include <LibJS/Forward.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Bindings { | ||||
| namespace Web::Bindings { | ||||
| 
 | ||||
| EventWrapper* wrap(JS::GlobalObject&, Event&); | ||||
| EventWrapper* wrap(JS::GlobalObject&, DOM::Event&); | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -38,20 +38,20 @@ | |||
| namespace Web { | ||||
| namespace Bindings { | ||||
| 
 | ||||
| NodeWrapper* wrap(JS::GlobalObject& global_object, Node& node) | ||||
| NodeWrapper* wrap(JS::GlobalObject& global_object, DOM::Node& node) | ||||
| { | ||||
|     if (is<Document>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<Document>(node))); | ||||
|     if (is<DocumentType>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<DocumentType>(node))); | ||||
|     if (is<DOM::Document>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<DOM::Document>(node))); | ||||
|     if (is<DOM::DocumentType>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<DOM::DocumentType>(node))); | ||||
|     if (is<HTMLCanvasElement>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<HTMLCanvasElement>(node))); | ||||
|     if (is<HTMLImageElement>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<HTMLImageElement>(node))); | ||||
|     if (is<HTMLElement>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<HTMLElement>(node))); | ||||
|     if (is<Element>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<Element>(node))); | ||||
|     if (is<DOM::Element>(node)) | ||||
|         return static_cast<NodeWrapper*>(wrap_impl(global_object, downcast<DOM::Element>(node))); | ||||
|     return static_cast<NodeWrapper*>(wrap_impl(global_object, node)); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ | |||
| namespace Web { | ||||
| namespace Bindings { | ||||
| 
 | ||||
| NodeWrapper* wrap(JS::GlobalObject&, Node&); | ||||
| NodeWrapper* wrap(JS::GlobalObject&, DOM::Node&); | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ | |||
| namespace Web { | ||||
| namespace Bindings { | ||||
| 
 | ||||
| WindowObject::WindowObject(Window& impl) | ||||
| WindowObject::WindowObject(DOM::Window& impl) | ||||
|     : m_impl(impl) | ||||
| { | ||||
|     impl.set_wrapper({}, *this); | ||||
|  | @ -91,7 +91,7 @@ void WindowObject::visit_children(Visitor& visitor) | |||
|     visitor.visit(m_xhr_prototype); | ||||
| } | ||||
| 
 | ||||
| static Window* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object) | ||||
| static DOM::Window* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object) | ||||
| { | ||||
|     auto* this_object = interpreter.this_value(global_object).to_object(interpreter, global_object); | ||||
|     if (!this_object) { | ||||
|  |  | |||
|  | @ -37,12 +37,12 @@ class WindowObject final | |||
|     : public JS::GlobalObject | ||||
|     , public Weakable<WindowObject> { | ||||
| public: | ||||
|     explicit WindowObject(Window&); | ||||
|     explicit WindowObject(DOM::Window&); | ||||
|     virtual void initialize() override; | ||||
|     virtual ~WindowObject() override; | ||||
| 
 | ||||
|     Window& impl() { return *m_impl; } | ||||
|     const Window& impl() const { return *m_impl; } | ||||
|     DOM::Window& impl() { return *m_impl; } | ||||
|     const DOM::Window& impl() const { return *m_impl; } | ||||
| 
 | ||||
|     XMLHttpRequestPrototype* xhr_prototype() { return m_xhr_prototype; } | ||||
|     XMLHttpRequestConstructor* xhr_constructor() { return m_xhr_constructor; } | ||||
|  | @ -65,7 +65,7 @@ private: | |||
|     JS_DECLARE_NATIVE_FUNCTION(atob); | ||||
|     JS_DECLARE_NATIVE_FUNCTION(btoa); | ||||
| 
 | ||||
|     NonnullRefPtr<Window> m_impl; | ||||
|     NonnullRefPtr<DOM::Window> m_impl; | ||||
| 
 | ||||
|     XMLHttpRequestConstructor* m_xhr_constructor { nullptr }; | ||||
|     XMLHttpRequestPrototype* m_xhr_prototype { nullptr }; | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ namespace Web { | |||
| 
 | ||||
| namespace SelectorEngine { | ||||
| 
 | ||||
| static bool matches_hover_pseudo_class(const Element& element) | ||||
| static bool matches_hover_pseudo_class(const DOM::Element& element) | ||||
| { | ||||
|     auto* hovered_node = element.document().hovered_node(); | ||||
|     if (!hovered_node) | ||||
|  | @ -44,7 +44,7 @@ static bool matches_hover_pseudo_class(const Element& element) | |||
|     return element.is_ancestor_of(*hovered_node); | ||||
| } | ||||
| 
 | ||||
| bool matches(const Selector::SimpleSelector& component, const Element& element) | ||||
| bool matches(const Selector::SimpleSelector& component, const DOM::Element& element) | ||||
| { | ||||
|     switch (component.pseudo_class) { | ||||
|     case Selector::SimpleSelector::PseudoClass::None: | ||||
|  | @ -76,7 +76,7 @@ bool matches(const Selector::SimpleSelector& component, const Element& element) | |||
|             return false; | ||||
|         break; | ||||
|     case Selector::SimpleSelector::PseudoClass::Empty: | ||||
|         if (element.first_child_of_type<Element>() || element.first_child_of_type<Text>()) | ||||
|         if (element.first_child_of_type<DOM::Element>() || element.first_child_of_type<DOM::Text>()) | ||||
|             return false; | ||||
|         break; | ||||
|     case Selector::SimpleSelector::PseudoClass::Root: | ||||
|  | @ -116,7 +116,7 @@ bool matches(const Selector::SimpleSelector& component, const Element& element) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| bool matches(const Selector& selector, int component_list_index, const Element& element) | ||||
| bool matches(const Selector& selector, int component_list_index, const DOM::Element& element) | ||||
| { | ||||
|     auto& component_list = selector.complex_selectors()[component_list_index]; | ||||
|     for (auto& component : component_list.compound_selector) { | ||||
|  | @ -129,17 +129,17 @@ bool matches(const Selector& selector, int component_list_index, const Element& | |||
|     case Selector::ComplexSelector::Relation::Descendant: | ||||
|         ASSERT(component_list_index != 0); | ||||
|         for (auto* ancestor = element.parent(); ancestor; ancestor = ancestor->parent()) { | ||||
|             if (!is<Element>(*ancestor)) | ||||
|             if (!is<DOM::Element>(*ancestor)) | ||||
|                 continue; | ||||
|             if (matches(selector, component_list_index - 1, downcast<Element>(*ancestor))) | ||||
|             if (matches(selector, component_list_index - 1, downcast<DOM::Element>(*ancestor))) | ||||
|                 return true; | ||||
|         } | ||||
|         return false; | ||||
|     case Selector::ComplexSelector::Relation::ImmediateChild: | ||||
|         ASSERT(component_list_index != 0); | ||||
|         if (!element.parent() || !is<Element>(*element.parent())) | ||||
|         if (!element.parent() || !is<DOM::Element>(*element.parent())) | ||||
|             return false; | ||||
|         return matches(selector, component_list_index - 1, downcast<Element>(*element.parent())); | ||||
|         return matches(selector, component_list_index - 1, downcast<DOM::Element>(*element.parent())); | ||||
|     case Selector::ComplexSelector::Relation::AdjacentSibling: | ||||
|         ASSERT(component_list_index != 0); | ||||
|         if (auto* sibling = element.previous_element_sibling()) | ||||
|  | @ -156,7 +156,7 @@ bool matches(const Selector& selector, int component_list_index, const Element& | |||
|     ASSERT_NOT_REACHED(); | ||||
| } | ||||
| 
 | ||||
| bool matches(const Selector& selector, const Element& element) | ||||
| bool matches(const Selector& selector, const DOM::Element& element) | ||||
| { | ||||
|     ASSERT(!selector.complex_selectors().is_empty()); | ||||
|     return matches(selector, selector.complex_selectors().size() - 1, element); | ||||
|  |  | |||
|  | @ -27,15 +27,10 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <LibWeb/CSS/Selector.h> | ||||
| #include <LibWeb/DOM/Element.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::SelectorEngine { | ||||
| 
 | ||||
| class Element; | ||||
| 
 | ||||
| namespace SelectorEngine { | ||||
| 
 | ||||
| bool matches(const Selector&, const Element&); | ||||
| 
 | ||||
| } | ||||
| bool matches(const Selector&, const DOM::Element&); | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ String StyleProperties::string_or_fallback(CSS::PropertyID id, const StringView& | |||
|     return value.value()->to_string(); | ||||
| } | ||||
| 
 | ||||
| Color StyleProperties::color_or_fallback(CSS::PropertyID id, const Document& document, Color fallback) const | ||||
| Color StyleProperties::color_or_fallback(CSS::PropertyID id, const DOM::Document& document, Color fallback) const | ||||
| { | ||||
|     auto value = property(id); | ||||
|     if (!value.has_value()) | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ public: | |||
|     Length length_or_fallback(CSS::PropertyID, const Length& fallback) const; | ||||
|     LengthBox length_box(CSS::PropertyID left_id, CSS::PropertyID top_id, CSS::PropertyID right_id, CSS::PropertyID bottom_id) const; | ||||
|     String string_or_fallback(CSS::PropertyID, const StringView& fallback) const; | ||||
|     Color color_or_fallback(CSS::PropertyID, const Document&, Color fallback) const; | ||||
|     Color color_or_fallback(CSS::PropertyID, const DOM::Document&, Color fallback) const; | ||||
|     CSS::TextAlign text_align() const; | ||||
|     CSS::Display display() const; | ||||
|     Optional<CSS::Float> float_() const; | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| StyleResolver::StyleResolver(Document& document) | ||||
| StyleResolver::StyleResolver(DOM::Document& document) | ||||
|     : m_document(document) | ||||
| { | ||||
| } | ||||
|  | @ -66,7 +66,7 @@ void StyleResolver::for_each_stylesheet(Callback callback) const | |||
|     } | ||||
| } | ||||
| 
 | ||||
| Vector<MatchingRule> StyleResolver::collect_matching_rules(const Element& element) const | ||||
| Vector<MatchingRule> StyleResolver::collect_matching_rules(const DOM::Element& element) const | ||||
| { | ||||
|     Vector<MatchingRule> matching_rules; | ||||
| 
 | ||||
|  | @ -203,7 +203,7 @@ static inline void set_property_border_style(StyleProperties& style, const Style | |||
|         style.set_property(CSS::PropertyID::BorderLeftStyle, value); | ||||
| } | ||||
| 
 | ||||
| static void set_property_expanding_shorthands(StyleProperties& style, CSS::PropertyID property_id, const StyleValue& value, Document& document) | ||||
| static void set_property_expanding_shorthands(StyleProperties& style, CSS::PropertyID property_id, const StyleValue& value, DOM::Document& document) | ||||
| { | ||||
|     CSS::ParsingContext context(document); | ||||
| 
 | ||||
|  | @ -519,7 +519,7 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope | |||
|     style.set_property(property_id, value); | ||||
| } | ||||
| 
 | ||||
| NonnullRefPtr<StyleProperties> StyleResolver::resolve_style(const Element& element, const StyleProperties* parent_style) const | ||||
| NonnullRefPtr<StyleProperties> StyleResolver::resolve_style(const DOM::Element& element, const StyleProperties* parent_style) const | ||||
| { | ||||
|     auto style = StyleProperties::create(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,15 +29,10 @@ | |||
| #include <AK/NonnullRefPtrVector.h> | ||||
| #include <AK/OwnPtr.h> | ||||
| #include <LibWeb/CSS/StyleProperties.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| class Document; | ||||
| class Element; | ||||
| class ParentNode; | ||||
| class StyleRule; | ||||
| class StyleSheet; | ||||
| 
 | ||||
| struct MatchingRule { | ||||
|     RefPtr<StyleRule> rule; | ||||
|     size_t style_sheet_index { 0 }; | ||||
|  | @ -47,15 +42,15 @@ struct MatchingRule { | |||
| 
 | ||||
| class StyleResolver { | ||||
| public: | ||||
|     explicit StyleResolver(Document&); | ||||
|     explicit StyleResolver(DOM::Document&); | ||||
|     ~StyleResolver(); | ||||
| 
 | ||||
|     Document& document() { return m_document; } | ||||
|     const Document& document() const { return m_document; } | ||||
|     DOM::Document& document() { return m_document; } | ||||
|     const DOM::Document& document() const { return m_document; } | ||||
| 
 | ||||
|     NonnullRefPtr<StyleProperties> resolve_style(const Element&, const StyleProperties* parent_style) const; | ||||
|     NonnullRefPtr<StyleProperties> resolve_style(const DOM::Element&, const StyleProperties* parent_style) const; | ||||
| 
 | ||||
|     Vector<MatchingRule> collect_matching_rules(const Element&) const; | ||||
|     Vector<MatchingRule> collect_matching_rules(const DOM::Element&) const; | ||||
| 
 | ||||
|     static bool is_inherited_property(CSS::PropertyID); | ||||
| 
 | ||||
|  | @ -63,7 +58,7 @@ private: | |||
|     template<typename Callback> | ||||
|     void for_each_stylesheet(Callback) const; | ||||
| 
 | ||||
|     Document& m_document; | ||||
|     DOM::Document& m_document; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ void StyleSheetList::add_sheet(NonnullRefPtr<StyleSheet> sheet) | |||
|     m_sheets.append(move(sheet)); | ||||
| } | ||||
| 
 | ||||
| StyleSheetList::StyleSheetList(Document& document) | ||||
| StyleSheetList::StyleSheetList(DOM::Document& document) | ||||
|     : m_document(document) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ namespace Web::CSS { | |||
| 
 | ||||
| class StyleSheetList : public RefCounted<StyleSheetList> { | ||||
| public: | ||||
|     static NonnullRefPtr<StyleSheetList> create(Document& document) | ||||
|     static NonnullRefPtr<StyleSheetList> create(DOM::Document& document) | ||||
|     { | ||||
|         return adopt(*new StyleSheetList(document)); | ||||
|     } | ||||
|  | @ -43,9 +43,9 @@ public: | |||
|     const NonnullRefPtrVector<StyleSheet>& sheets() const { return m_sheets; } | ||||
| 
 | ||||
| private: | ||||
|     explicit StyleSheetList(Document&); | ||||
|     explicit StyleSheetList(DOM::Document&); | ||||
| 
 | ||||
|     Document& m_document; | ||||
|     DOM::Document& m_document; | ||||
|     NonnullRefPtrVector<StyleSheet> m_sheets; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ String IdentifierStyleValue::to_string() const | |||
|     } | ||||
| } | ||||
| 
 | ||||
| Color IdentifierStyleValue::to_color(const Document& document) const | ||||
| Color IdentifierStyleValue::to_color(const DOM::Document& document) const | ||||
| { | ||||
|     if (id() == CSS::ValueID::VendorSpecificLink) | ||||
|         return document.link_color(); | ||||
|  | @ -287,7 +287,7 @@ Color IdentifierStyleValue::to_color(const Document& document) const | |||
|     } | ||||
| } | ||||
| 
 | ||||
| ImageStyleValue::ImageStyleValue(const URL& url, Document& document) | ||||
| ImageStyleValue::ImageStyleValue(const URL& url, DOM::Document& document) | ||||
|     : StyleValue(Type::Image) | ||||
|     , m_url(url) | ||||
|     , m_document(document.make_weak_ptr()) | ||||
|  |  | |||
|  | @ -182,7 +182,7 @@ public: | |||
| 
 | ||||
|     virtual String to_string() const = 0; | ||||
|     virtual Length to_length() const { return Length::make_auto(); } | ||||
|     virtual Color to_color(const Document&) const { return {}; } | ||||
|     virtual Color to_color(const DOM::Document&) const { return {}; } | ||||
| 
 | ||||
|     virtual bool is_auto() const { return false; } | ||||
| 
 | ||||
|  | @ -276,7 +276,7 @@ public: | |||
| 
 | ||||
|     Color color() const { return m_color; } | ||||
|     String to_string() const override { return m_color.to_string(); } | ||||
|     Color to_color(const Document&) const override { return m_color; } | ||||
|     Color to_color(const DOM::Document&) const override { return m_color; } | ||||
| 
 | ||||
| private: | ||||
|     explicit ColorStyleValue(Color color) | ||||
|  | @ -299,7 +299,7 @@ public: | |||
|     CSS::ValueID id() const { return m_id; } | ||||
| 
 | ||||
|     virtual String to_string() const override; | ||||
|     virtual Color to_color(const Document&) const override; | ||||
|     virtual Color to_color(const DOM::Document&) const override; | ||||
| 
 | ||||
| private: | ||||
|     explicit IdentifierStyleValue(CSS::ValueID id) | ||||
|  | @ -315,7 +315,7 @@ class ImageStyleValue final | |||
|     : public StyleValue | ||||
|     , public ImageResourceClient { | ||||
| public: | ||||
|     static NonnullRefPtr<ImageStyleValue> create(const URL& url, Document& document) { return adopt(*new ImageStyleValue(url, document)); } | ||||
|     static NonnullRefPtr<ImageStyleValue> create(const URL& url, DOM::Document& document) { return adopt(*new ImageStyleValue(url, document)); } | ||||
|     virtual ~ImageStyleValue() override { } | ||||
| 
 | ||||
|     String to_string() const override { return String::format("Image{%s}", m_url.to_string().characters()); } | ||||
|  | @ -323,13 +323,13 @@ public: | |||
|     const Gfx::Bitmap* bitmap() const { return m_bitmap; } | ||||
| 
 | ||||
| private: | ||||
|     ImageStyleValue(const URL&, Document&); | ||||
|     ImageStyleValue(const URL&, DOM::Document&); | ||||
| 
 | ||||
|     // ^ResourceClient
 | ||||
|     virtual void resource_did_load() override; | ||||
| 
 | ||||
|     URL m_url; | ||||
|     WeakPtr<Document> m_document; | ||||
|     WeakPtr<DOM::Document> m_document; | ||||
|     RefPtr<Gfx::Bitmap> m_bitmap; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ | |||
| 
 | ||||
| #include <AK/ByteBuffer.h> | ||||
| #include <AK/HashMap.h> | ||||
| #include <AK/LexicalPath.h> | ||||
| #include <AK/StringBuilder.h> | ||||
| #include <LibCore/ArgsParser.h> | ||||
| #include <LibCore/File.h> | ||||
|  | @ -108,6 +109,7 @@ struct Interface { | |||
|     // Added for convenience after parsing
 | ||||
|     String wrapper_class; | ||||
|     String wrapper_base_class; | ||||
|     String fully_qualified_name; | ||||
| }; | ||||
| 
 | ||||
| OwnPtr<Interface> parse_interface(const StringView& input) | ||||
|  | @ -312,6 +314,9 @@ int main(int argc, char** argv) | |||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     LexicalPath lexical_path(path); | ||||
|     auto namespace_ = lexical_path.parts().at(lexical_path.parts().size() - 2); | ||||
| 
 | ||||
|     auto data = file_or_error.value()->read_all(); | ||||
|     auto interface = IDL::parse_interface(data); | ||||
| 
 | ||||
|  | @ -320,6 +325,17 @@ int main(int argc, char** argv) | |||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     if (namespace_ == "DOM") { | ||||
|         StringBuilder builder; | ||||
|         builder.append(namespace_); | ||||
|         builder.append("::"); | ||||
|         builder.append(interface->name); | ||||
|         interface->fully_qualified_name = builder.to_string(); | ||||
|     } else { | ||||
|         interface->fully_qualified_name = interface->name; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| #if 0 | ||||
|     dbg() << "Attributes:"; | ||||
|     for (auto& attribute : interface->attributes) { | ||||
|  | @ -402,22 +418,21 @@ static void generate_header(const IDL::Interface& interface) | |||
|     if (wrapper_base_class != "Wrapper") | ||||
|         out() << "#include <LibWeb/Bindings/" << wrapper_base_class << ".h>"; | ||||
| 
 | ||||
|     out() << "namespace Web {"; | ||||
|     out() << "namespace Bindings {"; | ||||
|     out() << "namespace Web::Bindings {"; | ||||
| 
 | ||||
|     out() << "class " << wrapper_class << " : public " << wrapper_base_class << " {"; | ||||
|     out() << "    JS_OBJECT(" << wrapper_class << ", " << wrapper_base_class << ");"; | ||||
|     out() << "public:"; | ||||
|     out() << "    " << wrapper_class << "(JS::GlobalObject&, " << interface.name << "&);"; | ||||
|     out() << "    " << wrapper_class << "(JS::GlobalObject&, " << interface.fully_qualified_name << "&);"; | ||||
|     out() << "    virtual void initialize(JS::GlobalObject&) override;"; | ||||
|     out() << "    virtual ~" << wrapper_class << "() override;"; | ||||
| 
 | ||||
|     if (wrapper_base_class == "Wrapper") { | ||||
|         out() << "    " << interface.name << "& impl() { return *m_impl; }"; | ||||
|         out() << "    const " << interface.name << "& impl() const { return *m_impl; }"; | ||||
|         out() << "    " << interface.fully_qualified_name << "& impl() { return *m_impl; }"; | ||||
|         out() << "    const " << interface.fully_qualified_name << "& impl() const { return *m_impl; }"; | ||||
|     } else { | ||||
|         out() << "    " << interface.name << "& impl() { return static_cast<" << interface.name << "&>(" << wrapper_base_class << "::impl()); }"; | ||||
|         out() << "    const " << interface.name << "& impl() const { return static_cast<const " << interface.name << "&>(" << wrapper_base_class << "::impl()); }"; | ||||
|         out() << "    " << interface.fully_qualified_name << "& impl() { return static_cast<" << interface.fully_qualified_name << "&>(" << wrapper_base_class << "::impl()); }"; | ||||
|         out() << "    const " << interface.fully_qualified_name << "& impl() const { return static_cast<const " << interface.fully_qualified_name << "&>(" << wrapper_base_class << "::impl()); }"; | ||||
|     } | ||||
| 
 | ||||
|     auto is_foo_wrapper_name = snake_name(String::format("Is%s", wrapper_class.characters())); | ||||
|  | @ -436,17 +451,16 @@ static void generate_header(const IDL::Interface& interface) | |||
|     } | ||||
| 
 | ||||
|     if (wrapper_base_class == "Wrapper") { | ||||
|         out() << "    NonnullRefPtr<" << interface.name << "> m_impl;"; | ||||
|         out() << "    NonnullRefPtr<" << interface.fully_qualified_name << "> m_impl;"; | ||||
|     } | ||||
| 
 | ||||
|     out() << "};"; | ||||
| 
 | ||||
|     if (should_emit_wrapper_factory(interface)) { | ||||
|         out() << wrapper_class << "* wrap(JS::GlobalObject&, " << interface.name << "&);"; | ||||
|         out() << wrapper_class << "* wrap(JS::GlobalObject&, " << interface.fully_qualified_name << "&);"; | ||||
|     } | ||||
| 
 | ||||
|     out() << "}"; | ||||
|     out() << "}"; | ||||
| } | ||||
| 
 | ||||
| void generate_implementation(const IDL::Interface& interface) | ||||
|  | @ -473,11 +487,17 @@ void generate_implementation(const IDL::Interface& interface) | |||
|     out() << "#include <LibWeb/Bindings/ImageDataWrapper.h>"; | ||||
|     out() << "#include <LibWeb/Bindings/CanvasRenderingContext2DWrapper.h>"; | ||||
| 
 | ||||
|     out() << "namespace Web {"; | ||||
|     out() << "namespace Bindings {"; | ||||
|     // FIXME: This is a total hack until we can figure out the namespace for a given type somehow.
 | ||||
|     out() << "using Web::DOM::Node;"; | ||||
|     out() << "using Web::DOM::Document;"; | ||||
|     out() << "using Web::DOM::DocumentType;"; | ||||
|     out() << "using Web::DOM::Element;"; | ||||
|     out() << "using Web::DOM::EventListener;"; | ||||
| 
 | ||||
|     out() << "namespace Web::Bindings {"; | ||||
| 
 | ||||
|     // Implementation: Wrapper constructor
 | ||||
|     out() << wrapper_class << "::" << wrapper_class << "(JS::GlobalObject& global_object, " << interface.name << "& impl)"; | ||||
|     out() << wrapper_class << "::" << wrapper_class << "(JS::GlobalObject& global_object, " << interface.fully_qualified_name << "& impl)"; | ||||
|     if (wrapper_base_class == "Wrapper") { | ||||
|         out() << "    : Wrapper(*global_object.object_prototype())"; | ||||
|         out() << "    , m_impl(impl)"; | ||||
|  | @ -510,13 +530,13 @@ void generate_implementation(const IDL::Interface& interface) | |||
| 
 | ||||
|     // Implementation: impl_from()
 | ||||
|     if (!interface.attributes.is_empty() || !interface.functions.is_empty()) { | ||||
|         out() << "static " << interface.name << "* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object)"; | ||||
|         out() << "static " << interface.fully_qualified_name << "* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object)"; | ||||
|         out() << "{"; | ||||
|         out() << "    auto* this_object = interpreter.this_value(global_object).to_object(interpreter, global_object);"; | ||||
|         out() << "    if (!this_object)"; | ||||
|         out() << "        return {};"; | ||||
|         out() << "    if (!this_object->inherits(\"" << wrapper_class << "\")) {"; | ||||
|         out() << "        interpreter.throw_exception<JS::TypeError>(JS::ErrorType::NotA, \"" << interface.name << "\");"; | ||||
|         out() << "        interpreter.throw_exception<JS::TypeError>(JS::ErrorType::NotA, \"" << interface.fully_qualified_name << "\");"; | ||||
|         out() << "        return nullptr;"; | ||||
|         out() << "    }"; | ||||
|         out() << "    return &static_cast<" << wrapper_class << "*>(this_object)->impl();"; | ||||
|  | @ -676,12 +696,11 @@ void generate_implementation(const IDL::Interface& interface) | |||
| 
 | ||||
|     // Implementation: Wrapper factory
 | ||||
|     if (should_emit_wrapper_factory(interface)) { | ||||
|         out() << wrapper_class << "* wrap(JS::GlobalObject& global_object, " << interface.name << "& impl)"; | ||||
|         out() << wrapper_class << "* wrap(JS::GlobalObject& global_object, " << interface.fully_qualified_name << "& impl)"; | ||||
|         out() << "{"; | ||||
|         out() << "    return static_cast<" << wrapper_class << "*>(wrap_impl(global_object, impl));"; | ||||
|         out() << "}"; | ||||
|     } | ||||
| 
 | ||||
|     out() << "}"; | ||||
|     out() << "}"; | ||||
| } | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/CharacterData.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| CharacterData::CharacterData(Document& document, NodeType type, const String& data) | ||||
|     : Node(document, type) | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| #include <AK/String.h> | ||||
| #include <LibWeb/DOM/Node.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class CharacterData : public Node { | ||||
| public: | ||||
|  | @ -49,6 +49,6 @@ private: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::CharacterData) | ||||
| static bool is_type(const Web::Node& node) { return node.is_character_data(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::CharacterData) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_character_data(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ | |||
| #include <LibWeb/DOM/Comment.h> | ||||
| #include <LibWeb/Layout/LayoutText.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| Comment::Comment(Document& document, const String& data) | ||||
|     : CharacterData(document, NodeType::COMMENT_NODE, data) | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| #include <AK/FlyString.h> | ||||
| #include <LibWeb/DOM/CharacterData.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Comment final : public CharacterData { | ||||
| public: | ||||
|  | @ -41,6 +41,6 @@ public: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::Comment) | ||||
| static bool is_type(const Web::Node& node) { return node.is_comment(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::Comment) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_comment(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ | |||
| #include <LibWeb/SVG/TagNames.h> | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| Document::Document(const URL& url) | ||||
|     : ParentNode(*this, NodeType::DOCUMENT_NODE) | ||||
|  | @ -433,7 +433,7 @@ JS::Value Document::run_javascript(const StringView& source) | |||
| 
 | ||||
| NonnullRefPtr<Element> Document::create_element(const String& tag_name) | ||||
| { | ||||
|     return Web::create_element(*this, tag_name); | ||||
|     return DOM::create_element(*this, tag_name); | ||||
| } | ||||
| 
 | ||||
| NonnullRefPtr<Text> Document::create_text_node(const String& data) | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ | |||
| #include <LibWeb/DOM/NonElementParentNode.h> | ||||
| #include <LibWeb/DOM/ParentNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| enum class QuirksMode { | ||||
|     No, | ||||
|  | @ -190,7 +190,6 @@ private: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::Document) | ||||
| static bool is_type(const Web::Node& node) { return node.is_document(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::Document) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_document(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| #include <LibWeb/DOM/NonElementParentNode.h> | ||||
| #include <LibWeb/DOM/ParentNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class DocumentFragment | ||||
|     : public ParentNode | ||||
|  | @ -46,6 +46,6 @@ public: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DocumentFragment) | ||||
| static bool is_type(const Web::Node& node) { return node.is_document_fragment(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::DocumentFragment) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_document_fragment(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/DocumentType.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| DocumentType::DocumentType(Document& document) | ||||
|     : Node(document, NodeType::DOCUMENT_TYPE_NODE) | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| #include <AK/FlyString.h> | ||||
| #include <LibWeb/DOM/Node.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class DocumentType final : public Node { | ||||
| public: | ||||
|  | @ -57,6 +57,6 @@ private: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DocumentType) | ||||
| static bool is_type(const Web::Node& node) { return node.type() == Web::NodeType::DOCUMENT_TYPE_NODE; } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::DocumentType) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.type() == Web::DOM::NodeType::DOCUMENT_TYPE_NODE; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ | |||
| #include <LibWeb/Layout/LayoutTreeBuilder.h> | ||||
| #include <LibWeb/Parser/HTMLDocumentParser.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| Element::Element(Document& document, const FlyString& tag_name) | ||||
|     : ParentNode(document, NodeType::ELEMENT_NODE) | ||||
|  |  | |||
|  | @ -34,9 +34,7 @@ | |||
| #include <LibWeb/DOM/TagNames.h> | ||||
| #include <LibWeb/Layout/LayoutNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| class LayoutNodeWithStyle; | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Element : public ParentNode { | ||||
| public: | ||||
|  | @ -101,6 +99,6 @@ private: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::Element) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::Element) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -51,7 +51,7 @@ | |||
| #include <LibWeb/SVG/SVGSVGElement.h> | ||||
| #include <LibWeb/SVG/TagNames.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| NonnullRefPtr<Element> create_element(Document& document, const FlyString& tag_name) | ||||
| { | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/Element.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| NonnullRefPtr<Element> create_element(Document&, const FlyString& tag_name); | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| #include <AK/FlyString.h> | ||||
| #include <LibWeb/Bindings/Wrappable.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Event | ||||
|     : public RefCounted<Event> | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ | |||
| #include <LibJS/Runtime/Function.h> | ||||
| #include <LibWeb/DOM/EventListener.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| JS::Function& EventListener::function() | ||||
| { | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| #include <LibJS/Heap/Handle.h> | ||||
| #include <LibWeb/Bindings/Wrappable.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class EventListener | ||||
|     : public RefCounted<EventListener> | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ | |||
| #include <LibWeb/DOM/EventListener.h> | ||||
| #include <LibWeb/DOM/EventTarget.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| EventTarget::EventTarget() | ||||
| { | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| #include <AK/Vector.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class EventTarget { | ||||
|     AK_MAKE_NONCOPYABLE(EventTarget); | ||||
|  |  | |||
|  | @ -28,9 +28,9 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/Event.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class MouseEvent final : public Event { | ||||
| class MouseEvent final : public DOM::Event { | ||||
| public: | ||||
|     using WrapperType = Bindings::MouseEventWrapper; | ||||
| 
 | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ | |||
| 
 | ||||
| //#define EVENT_DEBUG
 | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| Node::Node(Document& document, NodeType type) | ||||
|     : m_document(&document) | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ | |||
| #include <LibWeb/DOM/EventTarget.h> | ||||
| #include <LibWeb/TreeNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| enum class NodeType : unsigned { | ||||
|     INVALID = 0, | ||||
|  | @ -47,15 +47,6 @@ enum class NodeType : unsigned { | |||
|     DOCUMENT_FRAGMENT_NODE = 11, | ||||
| }; | ||||
| 
 | ||||
| class Document; | ||||
| class Element; | ||||
| class HTMLElement; | ||||
| class HTMLAnchorElement; | ||||
| class ParentNode; | ||||
| class LayoutNode; | ||||
| class StyleResolver; | ||||
| class StyleProperties; | ||||
| 
 | ||||
| class Node | ||||
|     : public TreeNode<Node> | ||||
|     , public EventTarget | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| #include <LibWeb/Forward.h> | ||||
| #include <LibWeb/TreeNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| template<typename NodeType> | ||||
| class NonElementParentNode { | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/ParentNode.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| void ParentNode::remove_all_children() | ||||
| { | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| #include <LibWeb/DOM/Node.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class ParentNode : public Node { | ||||
| public: | ||||
|  | @ -60,6 +60,6 @@ inline void ParentNode::for_each_child(Callback callback) | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::ParentNode) | ||||
| static bool is_type(const Web::Node& node) { return node.is_parent_node(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::ParentNode) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_parent_node(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ | |||
| #include <LibWeb/DOM/Text.h> | ||||
| #include <LibWeb/Layout/LayoutText.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| Text::Text(Document& document, const String& data) | ||||
|     : CharacterData(document, NodeType::TEXT_NODE, data) | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| #include <AK/String.h> | ||||
| #include <LibWeb/DOM/CharacterData.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Text final : public CharacterData { | ||||
| public: | ||||
|  | @ -45,6 +45,6 @@ private: | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::Text) | ||||
| static bool is_type(const Web::Node& node) { return node.is_text(); } | ||||
| AK_BEGIN_TYPE_TRAITS(Web::DOM::Text) | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_text(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| #include <LibWeb/DOM/Timer.h> | ||||
| #include <LibWeb/DOM/Window.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| NonnullRefPtr<Timer> Timer::create_interval(Window& window, int milliseconds, JS::Function& callback) | ||||
| { | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| #include <LibJS/Heap/Handle.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Timer final : public RefCounted<Timer> { | ||||
| public: | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ | |||
| #include <LibWeb/Frame/Frame.h> | ||||
| #include <LibWeb/PageView.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| NonnullRefPtr<Window> Window::create_with_document(Document& document) | ||||
| { | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ | |||
| #include <LibWeb/Bindings/WindowObject.h> | ||||
| #include <LibWeb/Bindings/Wrappable.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Web::DOM { | ||||
| 
 | ||||
| class Window : public RefCounted<Window> { | ||||
| public: | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| XMLHttpRequest::XMLHttpRequest(Window& window) | ||||
| XMLHttpRequest::XMLHttpRequest(DOM::Window& window) | ||||
|     : m_window(window) | ||||
| { | ||||
| } | ||||
|  | @ -78,22 +78,22 @@ void XMLHttpRequest::send() | |||
|                 return; | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).m_response = data; | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).set_ready_state(ReadyState::Done); | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).dispatch_event(Event::create("load")); | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).dispatch_event(DOM::Event::create("load")); | ||||
|         }, | ||||
|         [weak_this = make_weak_ptr()](auto& error) { | ||||
|             if (!weak_this) | ||||
|                 return; | ||||
|             dbg() << "XHR failed to load: " << error; | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).set_ready_state(ReadyState::Done); | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).dispatch_event(Event::create("error")); | ||||
|             const_cast<XMLHttpRequest&>(*weak_this).dispatch_event(DOM::Event::create("error")); | ||||
|         }); | ||||
| } | ||||
| 
 | ||||
| void XMLHttpRequest::dispatch_event(NonnullRefPtr<Event> event) | ||||
| void XMLHttpRequest::dispatch_event(NonnullRefPtr<DOM::Event> event) | ||||
| { | ||||
|     for (auto& listener : listeners()) { | ||||
|         if (listener.event_name == event->type()) { | ||||
|             auto& function = const_cast<EventListener&>(*listener.listener).function(); | ||||
|             auto& function = const_cast<DOM::EventListener&>(*listener.listener).function(); | ||||
|             auto& global_object = function.global_object(); | ||||
|             auto* this_value = wrap(global_object, *this); | ||||
|             JS::MarkedValueList arguments(global_object.heap()); | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ namespace Web { | |||
| class XMLHttpRequest final | ||||
|     : public RefCounted<XMLHttpRequest> | ||||
|     , public Weakable<XMLHttpRequest> | ||||
|     , public EventTarget | ||||
|     , public DOM::EventTarget | ||||
|     , public Bindings::Wrappable { | ||||
| public: | ||||
|     enum class ReadyState { | ||||
|  | @ -50,7 +50,7 @@ public: | |||
| 
 | ||||
|     using WrapperType = Bindings::XMLHttpRequestWrapper; | ||||
| 
 | ||||
|     static NonnullRefPtr<XMLHttpRequest> create(Window& window) { return adopt(*new XMLHttpRequest(window)); } | ||||
|     static NonnullRefPtr<XMLHttpRequest> create(DOM::Window& window) { return adopt(*new XMLHttpRequest(window)); } | ||||
| 
 | ||||
|     virtual ~XMLHttpRequest() override; | ||||
| 
 | ||||
|  | @ -65,13 +65,13 @@ public: | |||
| private: | ||||
|     virtual void ref_event_target() override { ref(); } | ||||
|     virtual void unref_event_target() override { unref(); } | ||||
|     virtual void dispatch_event(NonnullRefPtr<Event>) override; | ||||
|     virtual void dispatch_event(NonnullRefPtr<DOM::Event>) override; | ||||
| 
 | ||||
|     void set_ready_state(ReadyState); | ||||
| 
 | ||||
|     explicit XMLHttpRequest(Window&); | ||||
|     explicit XMLHttpRequest(DOM::Window&); | ||||
| 
 | ||||
|     NonnullRefPtr<Window> m_window; | ||||
|     NonnullRefPtr<DOM::Window> m_window; | ||||
| 
 | ||||
|     ReadyState m_ready_state { ReadyState::Unsent }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| DOMTreeModel::DOMTreeModel(Document& document) | ||||
| DOMTreeModel::DOMTreeModel(DOM::Document& document) | ||||
|     : m_document(document) | ||||
| { | ||||
|     m_document_icon.set_bitmap_for_size(16, Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-html.png")); | ||||
|  | @ -51,7 +51,7 @@ GUI::ModelIndex DOMTreeModel::index(int row, int column, const GUI::ModelIndex& | |||
|     if (!parent.is_valid()) { | ||||
|         return create_index(row, column, m_document.ptr()); | ||||
|     } | ||||
|     auto& parent_node = *static_cast<Node*>(parent.internal_data()); | ||||
|     auto& parent_node = *static_cast<DOM::Node*>(parent.internal_data()); | ||||
|     return create_index(row, column, parent_node.child_at_index(row)); | ||||
| } | ||||
| 
 | ||||
|  | @ -59,7 +59,7 @@ GUI::ModelIndex DOMTreeModel::parent_index(const GUI::ModelIndex& index) const | |||
| { | ||||
|     if (!index.is_valid()) | ||||
|         return {}; | ||||
|     auto& node = *static_cast<Node*>(index.internal_data()); | ||||
|     auto& node = *static_cast<DOM::Node*>(index.internal_data()); | ||||
|     if (!node.parent()) | ||||
|         return {}; | ||||
| 
 | ||||
|  | @ -85,7 +85,7 @@ int DOMTreeModel::row_count(const GUI::ModelIndex& index) const | |||
| { | ||||
|     if (!index.is_valid()) | ||||
|         return 1; | ||||
|     auto& node = *static_cast<Node*>(index.internal_data()); | ||||
|     auto& node = *static_cast<DOM::Node*>(index.internal_data()); | ||||
|     return node.child_count(); | ||||
| } | ||||
| 
 | ||||
|  | @ -117,7 +117,7 @@ static String with_whitespace_collapsed(const StringView& string) | |||
| 
 | ||||
| GUI::Variant DOMTreeModel::data(const GUI::ModelIndex& index, Role role) const | ||||
| { | ||||
|     auto& node = *static_cast<Node*>(index.internal_data()); | ||||
|     auto& node = *static_cast<DOM::Node*>(index.internal_data()); | ||||
|     if (role == Role::Icon) { | ||||
|         if (node.is_document()) | ||||
|             return m_document_icon; | ||||
|  | @ -128,10 +128,10 @@ GUI::Variant DOMTreeModel::data(const GUI::ModelIndex& index, Role role) const | |||
|     } | ||||
|     if (role == Role::Display) { | ||||
|         if (node.is_text()) | ||||
|             return String::format("%s", with_whitespace_collapsed(downcast<Text>(node).data()).characters()); | ||||
|             return String::format("%s", with_whitespace_collapsed(downcast<DOM::Text>(node).data()).characters()); | ||||
|         if (!node.is_element()) | ||||
|             return node.node_name(); | ||||
|         auto& element = downcast<Element>(node); | ||||
|         auto& element = downcast<DOM::Element>(node); | ||||
|         StringBuilder builder; | ||||
|         builder.append('<'); | ||||
|         builder.append(element.local_name()); | ||||
|  |  | |||
|  | @ -27,14 +27,13 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <LibGUI/Model.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| class Document; | ||||
| 
 | ||||
| class DOMTreeModel final : public GUI::Model { | ||||
| public: | ||||
|     static NonnullRefPtr<DOMTreeModel> create(Document& document) | ||||
|     static NonnullRefPtr<DOMTreeModel> create(DOM::Document& document) | ||||
|     { | ||||
|         return adopt(*new DOMTreeModel(document)); | ||||
|     } | ||||
|  | @ -49,9 +48,9 @@ public: | |||
|     virtual void update() override; | ||||
| 
 | ||||
| private: | ||||
|     explicit DOMTreeModel(Document&); | ||||
|     explicit DOMTreeModel(DOM::Document&); | ||||
| 
 | ||||
|     NonnullRefPtr<Document> m_document; | ||||
|     NonnullRefPtr<DOM::Document> m_document; | ||||
| 
 | ||||
|     GUI::Icon m_document_icon; | ||||
|     GUI::Icon m_element_icon; | ||||
|  |  | |||
|  | @ -43,31 +43,31 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| void dump_tree(const Node& node) | ||||
| void dump_tree(const DOM::Node& node) | ||||
| { | ||||
|     static int indent = 0; | ||||
|     for (int i = 0; i < indent; ++i) | ||||
|         dbgprintf("  "); | ||||
|     if (is<Document>(node)) { | ||||
|     if (is<DOM::Document>(node)) { | ||||
|         dbgprintf("*Document*\n"); | ||||
|     } else if (is<Element>(node)) { | ||||
|         dbgprintf("<%s", downcast<Element>(node).local_name().characters()); | ||||
|         downcast<Element>(node).for_each_attribute([](auto& name, auto& value) { | ||||
|     } else if (is<DOM::Element>(node)) { | ||||
|         dbgprintf("<%s", downcast<DOM::Element>(node).local_name().characters()); | ||||
|         downcast<DOM::Element>(node).for_each_attribute([](auto& name, auto& value) { | ||||
|             dbgprintf(" %s=%s", name.characters(), value.characters()); | ||||
|         }); | ||||
|         dbgprintf(">\n"); | ||||
|     } else if (is<Text>(node)) { | ||||
|         dbgprintf("\"%s\"\n", static_cast<const Text&>(node).data().characters()); | ||||
|     } else if (is<DocumentType>(node)) { | ||||
|     } else if (is<DOM::Text>(node)) { | ||||
|         dbgprintf("\"%s\"\n", downcast<DOM::Text>(node).data().characters()); | ||||
|     } else if (is<DOM::DocumentType>(node)) { | ||||
|         dbgprintf("<!DOCTYPE html>\n"); | ||||
|     } else if (is<Comment>(node)) { | ||||
|         dbgprintf("<!--%s-->\n", downcast<Comment>(node).data().characters()); | ||||
|     } else if (is<DocumentFragment>(node)) { | ||||
|     } else if (is<DOM::Comment>(node)) { | ||||
|         dbgprintf("<!--%s-->\n", downcast<DOM::Comment>(node).data().characters()); | ||||
|     } else if (is<DOM::DocumentFragment>(node)) { | ||||
|         dbgprintf("#document-fragment\n"); | ||||
|     } | ||||
|     ++indent; | ||||
|     if (is<ParentNode>(node)) { | ||||
|         static_cast<const ParentNode&>(node).for_each_child([](auto& child) { | ||||
|     if (is<DOM::ParentNode>(node)) { | ||||
|         static_cast<const DOM::ParentNode&>(node).for_each_child([](auto& child) { | ||||
|             dump_tree(child); | ||||
|         }); | ||||
|     } | ||||
|  | @ -83,18 +83,18 @@ void dump_tree(const LayoutNode& layout_node) | |||
|     FlyString tag_name; | ||||
|     if (layout_node.is_anonymous()) | ||||
|         tag_name = "(anonymous)"; | ||||
|     else if (is<Text>(layout_node.node())) | ||||
|     else if (is<DOM::Text>(layout_node.node())) | ||||
|         tag_name = "#text"; | ||||
|     else if (is<Document>(layout_node.node())) | ||||
|     else if (is<DOM::Document>(layout_node.node())) | ||||
|         tag_name = "#document"; | ||||
|     else if (is<Element>(layout_node.node())) | ||||
|         tag_name = downcast<Element>(*layout_node.node()).local_name(); | ||||
|     else if (is<DOM::Element>(layout_node.node())) | ||||
|         tag_name = downcast<DOM::Element>(*layout_node.node()).local_name(); | ||||
|     else | ||||
|         tag_name = "???"; | ||||
| 
 | ||||
|     String identifier = ""; | ||||
|     if (layout_node.node() && is<Element>(*layout_node.node())) { | ||||
|         auto& element = downcast<Element>(*layout_node.node()); | ||||
|     if (layout_node.node() && is<DOM::Element>(*layout_node.node())) { | ||||
|         auto& element = downcast<DOM::Element>(*layout_node.node()); | ||||
|         StringBuilder builder; | ||||
|         auto id = element.attribute(HTML::AttributeNames::id); | ||||
|         if (!id.is_empty()) { | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| void dump_tree(const Node&); | ||||
| void dump_tree(const DOM::Node&); | ||||
| void dump_tree(const LayoutNode&); | ||||
| void dump_sheet(const StyleSheet&); | ||||
| void dump_rule(const StyleRule&); | ||||
|  |  | |||
|  | @ -26,9 +26,7 @@ | |||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| class CanvasRenderingContext2D; | ||||
| namespace Web::DOM { | ||||
| class Document; | ||||
| class DocumentType; | ||||
| class Element; | ||||
|  | @ -36,7 +34,19 @@ class Event; | |||
| class EventHandler; | ||||
| class EventListener; | ||||
| class EventTarget; | ||||
| class MouseEvent; | ||||
| class Node; | ||||
| class ParentNode; | ||||
| class Text; | ||||
| class Timer; | ||||
| class Window; | ||||
| enum class QuirksMode; | ||||
| } | ||||
| 
 | ||||
| namespace Web { | ||||
| class CanvasRenderingContext2D; | ||||
| class Frame; | ||||
| class HTMLAnchorElement; | ||||
| class HTMLBodyElement; | ||||
| class HTMLCanvasElement; | ||||
| class HTMLDocumentParser; | ||||
|  | @ -46,35 +56,29 @@ class HTMLHeadElement; | |||
| class HTMLHtmlElement; | ||||
| class HTMLImageElement; | ||||
| class HTMLScriptElement; | ||||
| class PageView; | ||||
| class ImageData; | ||||
| class LineBox; | ||||
| class LineBoxFragment; | ||||
| class LayoutBlock; | ||||
| class LayoutDocument; | ||||
| class LayoutNode; | ||||
| class LayoutNodeWithStyle; | ||||
| class LayoutReplaced; | ||||
| class LineBox; | ||||
| class LineBoxFragment; | ||||
| class LoadRequest; | ||||
| class MouseEvent; | ||||
| class Node; | ||||
| class Origin; | ||||
| class Page; | ||||
| class PageClient; | ||||
| class PageView; | ||||
| class PaintContext; | ||||
| class Resource; | ||||
| class ResourceLoader; | ||||
| class Selector; | ||||
| class StackingContext; | ||||
| class StyleProperties; | ||||
| class StyleResolver; | ||||
| class StyleRule; | ||||
| class StyleSheet; | ||||
| class Text; | ||||
| class Timer; | ||||
| class Window; | ||||
| class XMLHttpRequest; | ||||
| enum class QuirksMode; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| namespace Web::Bindings { | ||||
|  |  | |||
|  | @ -78,14 +78,14 @@ bool EventHandler::handle_mouseup(const Gfx::IntPoint& position, unsigned button | |||
| 
 | ||||
|     auto result = layout_root()->hit_test(position); | ||||
|     if (result.layout_node && result.layout_node->node()) { | ||||
|         RefPtr<Node> node = result.layout_node->node(); | ||||
|         RefPtr<DOM::Node> node = result.layout_node->node(); | ||||
|         if (is<HTMLIFrameElement>(*node)) { | ||||
|             if (auto* subframe = downcast<HTMLIFrameElement>(*node).hosted_frame()) | ||||
|                 return subframe->event_handler().handle_mouseup(position.translated(compute_mouse_event_offset({}, *result.layout_node)), button, modifiers); | ||||
|             return false; | ||||
|         } | ||||
|         auto offset = compute_mouse_event_offset(position, *result.layout_node); | ||||
|         node->dispatch_event(MouseEvent::create("mouseup", offset.x(), offset.y())); | ||||
|         node->dispatch_event(DOM::MouseEvent::create("mouseup", offset.x(), offset.y())); | ||||
|         handled_event = true; | ||||
|     } | ||||
| 
 | ||||
|  | @ -107,7 +107,7 @@ bool EventHandler::handle_mousedown(const Gfx::IntPoint& position, unsigned butt | |||
|     if (!result.layout_node) | ||||
|         return false; | ||||
| 
 | ||||
|     RefPtr<Node> node = result.layout_node->node(); | ||||
|     RefPtr<DOM::Node> node = result.layout_node->node(); | ||||
|     document->set_hovered_node(node); | ||||
|     if (!node) | ||||
|         return false; | ||||
|  | @ -119,7 +119,7 @@ bool EventHandler::handle_mousedown(const Gfx::IntPoint& position, unsigned butt | |||
|     } | ||||
| 
 | ||||
|     auto offset = compute_mouse_event_offset(position, *result.layout_node); | ||||
|     node->dispatch_event(MouseEvent::create("mousedown", offset.x(), offset.y())); | ||||
|     node->dispatch_event(DOM::MouseEvent::create("mousedown", offset.x(), offset.y())); | ||||
|     if (!layout_root()) | ||||
|         return true; | ||||
| 
 | ||||
|  | @ -173,7 +173,7 @@ bool EventHandler::handle_mousemove(const Gfx::IntPoint& position, unsigned butt | |||
|     auto result = layout_root()->hit_test(position); | ||||
|     const HTMLAnchorElement* hovered_link_element = nullptr; | ||||
|     if (result.layout_node) { | ||||
|         RefPtr<Node> node = result.layout_node->node(); | ||||
|         RefPtr<DOM::Node> node = result.layout_node->node(); | ||||
| 
 | ||||
|         if (node && is<HTMLIFrameElement>(*node)) { | ||||
|             if (auto* subframe = downcast<HTMLIFrameElement>(*node).hosted_frame()) | ||||
|  | @ -192,7 +192,7 @@ bool EventHandler::handle_mousemove(const Gfx::IntPoint& position, unsigned butt | |||
|                 is_hovering_link = true; | ||||
|             } | ||||
|             auto offset = compute_mouse_event_offset(position, *result.layout_node); | ||||
|             node->dispatch_event(MouseEvent::create("mousemove", offset.x(), offset.y())); | ||||
|             node->dispatch_event(DOM::MouseEvent::create("mousemove", offset.x(), offset.y())); | ||||
|             if (!layout_root()) | ||||
|                 return true; | ||||
|         } | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| Frame::Frame(Element& host_element, Frame& main_frame) | ||||
| Frame::Frame(DOM::Element& host_element, Frame& main_frame) | ||||
|     : m_page(main_frame.page()) | ||||
|     , m_main_frame(main_frame) | ||||
|     , m_loader(*this) | ||||
|  | @ -54,7 +54,7 @@ Frame::~Frame() | |||
| { | ||||
| } | ||||
| 
 | ||||
| void Frame::set_document(Document* document) | ||||
| void Frame::set_document(DOM::Document* document) | ||||
| { | ||||
|     if (m_document == document) | ||||
|         return; | ||||
|  |  | |||
|  | @ -41,16 +41,16 @@ namespace Web { | |||
| 
 | ||||
| class Frame : public TreeNode<Frame> { | ||||
| public: | ||||
|     static NonnullRefPtr<Frame> create_subframe(Element& host_element, Frame& main_frame) { return adopt(*new Frame(host_element, main_frame)); } | ||||
|     static NonnullRefPtr<Frame> create_subframe(DOM::Element& host_element, Frame& main_frame) { return adopt(*new Frame(host_element, main_frame)); } | ||||
|     static NonnullRefPtr<Frame> create(Page& page) { return adopt(*new Frame(page)); } | ||||
|     ~Frame(); | ||||
| 
 | ||||
|     bool is_main_frame() const { return this == &m_main_frame; } | ||||
| 
 | ||||
|     const Document* document() const { return m_document; } | ||||
|     Document* document() { return m_document; } | ||||
|     const DOM::Document* document() const { return m_document; } | ||||
|     DOM::Document* document() { return m_document; } | ||||
| 
 | ||||
|     void set_document(Document*); | ||||
|     void set_document(DOM::Document*); | ||||
| 
 | ||||
|     Page& page() { return m_page; } | ||||
|     const Page& page() const { return m_page; } | ||||
|  | @ -77,15 +77,15 @@ public: | |||
|     Frame& main_frame() { return m_main_frame; } | ||||
|     const Frame& main_frame() const { return m_main_frame; } | ||||
| 
 | ||||
|     Element* host_element() { return m_host_element; } | ||||
|     const Element* host_element() const { return m_host_element; } | ||||
|     DOM::Element* host_element() { return m_host_element; } | ||||
|     const DOM::Element* host_element() const { return m_host_element; } | ||||
| 
 | ||||
|     Gfx::IntPoint to_main_frame_position(const Gfx::IntPoint&); | ||||
|     Gfx::IntRect to_main_frame_rect(const Gfx::IntRect&); | ||||
| 
 | ||||
| 
 | ||||
| private: | ||||
|     explicit Frame(Element& host_element, Frame& main_frame); | ||||
|     explicit Frame(DOM::Element& host_element, Frame& main_frame); | ||||
|     explicit Frame(Page&); | ||||
| 
 | ||||
|     Page& m_page; | ||||
|  | @ -94,8 +94,8 @@ private: | |||
|     FrameLoader m_loader; | ||||
|     EventHandler m_event_handler; | ||||
| 
 | ||||
|     WeakPtr<Element> m_host_element; | ||||
|     RefPtr<Document> m_document; | ||||
|     WeakPtr<DOM::Element> m_host_element; | ||||
|     RefPtr<DOM::Document> m_document; | ||||
|     Gfx::IntSize m_size; | ||||
|     Gfx::IntRect m_viewport_rect; | ||||
| }; | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLAnchorElement::HTMLAnchorElement(Document& document, const FlyString& tag_name) | ||||
| HTMLAnchorElement::HTMLAnchorElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLAnchorElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLAnchorElement(Document&, const FlyString& local_name); | ||||
|     HTMLAnchorElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLAnchorElement() override; | ||||
| 
 | ||||
|     String href() const { return attribute(HTML::AttributeNames::href); } | ||||
|  | @ -42,5 +42,5 @@ public: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLAnchorElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::a; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::a; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLBRElement::HTMLBRElement(Document& document, const FlyString& tag_name) | ||||
| HTMLBRElement::HTMLBRElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLBRElement final : public HTMLElement { | ||||
| public: | ||||
|     HTMLBRElement(Document&, const FlyString& local_name); | ||||
|     HTMLBRElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLBRElement() override; | ||||
| 
 | ||||
|     virtual RefPtr<LayoutNode> create_layout_node(const StyleProperties* parent_style) override; | ||||
|  | @ -41,5 +41,5 @@ public: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLBRElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::br; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::br; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLBlinkElement::HTMLBlinkElement(Document& document, const FlyString& tag_name) | ||||
| HTMLBlinkElement::HTMLBlinkElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
|     , m_timer(Core::Timer::construct()) | ||||
| { | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLBlinkElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLBlinkElement(Document&, const FlyString& local_name); | ||||
|     HTMLBlinkElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLBlinkElement() override; | ||||
| 
 | ||||
| private: | ||||
|  | @ -45,5 +45,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLBlinkElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::blink; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::blink; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLBodyElement::HTMLBodyElement(Document& document, const FlyString& tag_name) | ||||
| HTMLBodyElement::HTMLBodyElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  | @ -74,7 +74,7 @@ void HTMLBodyElement::parse_attribute(const FlyString& name, const String& value | |||
|         if (color.has_value()) | ||||
|             document().set_visited_link_color(color.value()); | ||||
|     } else if (name.equals_ignoring_case("background")) { | ||||
|         m_background_style_value = ImageStyleValue::create(document().complete_url(value), const_cast<Document&>(document())); | ||||
|         m_background_style_value = ImageStyleValue::create(document().complete_url(value), const_cast<DOM::Document&>(document())); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLBodyElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLBodyElement(Document&, const FlyString& local_name); | ||||
|     HTMLBodyElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLBodyElement() override; | ||||
| 
 | ||||
|     virtual void parse_attribute(const FlyString&, const String&) override; | ||||
|  | @ -45,5 +45,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLBodyElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::body; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::body; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ namespace Web { | |||
| 
 | ||||
| static constexpr auto max_canvas_area = 16384 * 16384; | ||||
| 
 | ||||
| HTMLCanvasElement::HTMLCanvasElement(Document& document, const FlyString& tag_name) | ||||
| HTMLCanvasElement::HTMLCanvasElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ class HTMLCanvasElement : public HTMLElement { | |||
| public: | ||||
|     using WrapperType = Bindings::HTMLCanvasElementWrapper; | ||||
| 
 | ||||
|     HTMLCanvasElement(Document&, const FlyString& local_name); | ||||
|     HTMLCanvasElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLCanvasElement() override; | ||||
| 
 | ||||
|     const Gfx::Bitmap* bitmap() const { return m_bitmap; } | ||||
|  | @ -60,5 +60,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLCanvasElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::canvas; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::canvas; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLElement::HTMLElement(Document& document, const FlyString& tag_name) | ||||
| HTMLElement::HTMLElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : Element(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -30,11 +30,11 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| class HTMLElement : public Element { | ||||
| class HTMLElement : public DOM::Element { | ||||
| public: | ||||
|     using WrapperType = Bindings::HTMLElementWrapper; | ||||
| 
 | ||||
|     HTMLElement(Document&, const FlyString& local_name); | ||||
|     HTMLElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLElement() override; | ||||
| 
 | ||||
|     String title() const { return attribute(HTML::AttributeNames::title); } | ||||
|  | @ -46,5 +46,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element(); } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element(); } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLFontElement::HTMLFontElement(Document& document, const FlyString& tag_name) | ||||
| HTMLFontElement::HTMLFontElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLFontElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLFontElement(Document&, const FlyString& local_name); | ||||
|     HTMLFontElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLFontElement() override; | ||||
| 
 | ||||
|     virtual void apply_presentational_hints(StyleProperties&) const override; | ||||
|  | @ -41,5 +41,5 @@ public: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLFontElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::font; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::font; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLFormElement::HTMLFormElement(Document& document, const FlyString& tag_name) | ||||
| HTMLFormElement::HTMLFormElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLFormElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLFormElement(Document&, const FlyString& local_name); | ||||
|     HTMLFormElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLFormElement() override; | ||||
| 
 | ||||
|     String action() const { return attribute(HTML::AttributeNames::action); } | ||||
|  | @ -45,5 +45,5 @@ public: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLFormElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::form; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::form; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLHRElement::HTMLHRElement(Document& document, const FlyString& tag_name) | ||||
| HTMLHRElement::HTMLHRElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,12 +32,12 @@ namespace Web { | |||
| 
 | ||||
| class HTMLHRElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLHRElement(Document&, const FlyString& local_name); | ||||
|     HTMLHRElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLHRElement() override; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLHRElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::hr; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::hr; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLHeadElement::HTMLHeadElement(Document& document, const FlyString& tag_name) | ||||
| HTMLHeadElement::HTMLHeadElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,12 +32,12 @@ namespace Web { | |||
| 
 | ||||
| class HTMLHeadElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLHeadElement(Document&, const FlyString& local_name); | ||||
|     HTMLHeadElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLHeadElement() override; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLHeadElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::head; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::head; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLHeadingElement::HTMLHeadingElement(Document& document, const FlyString& tag_name) | ||||
| HTMLHeadingElement::HTMLHeadingElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLHeadingElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLHeadingElement(Document&, const FlyString& local_name); | ||||
|     HTMLHeadingElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLHeadingElement() override; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLHtmlElement::HTMLHtmlElement(Document& document, const FlyString& tag_name) | ||||
| HTMLHtmlElement::HTMLHtmlElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -32,12 +32,12 @@ namespace Web { | |||
| 
 | ||||
| class HTMLHtmlElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLHtmlElement(Document&, const FlyString& local_name); | ||||
|     HTMLHtmlElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLHtmlElement() override; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLHtmlElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::html; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::html; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLIFrameElement::HTMLIFrameElement(Document& document, const FlyString& tag_name) | ||||
| HTMLIFrameElement::HTMLIFrameElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  | @ -82,7 +82,7 @@ void HTMLIFrameElement::load_src(const String& value) | |||
|     m_hosted_frame->loader().load(url, FrameLoader::Type::IFrame); | ||||
| } | ||||
| 
 | ||||
| const Document* HTMLIFrameElement::hosted_document() const | ||||
| const DOM::Document* HTMLIFrameElement::hosted_document() const | ||||
| { | ||||
|     return m_hosted_frame ? m_hosted_frame->document() : nullptr; | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLIFrameElement final : public HTMLElement { | ||||
| public: | ||||
|     HTMLIFrameElement(Document&, const FlyString& local_name); | ||||
|     HTMLIFrameElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLIFrameElement() override; | ||||
| 
 | ||||
|     virtual RefPtr<LayoutNode> create_layout_node(const StyleProperties* parent_style) override; | ||||
|  | @ -40,7 +40,7 @@ public: | |||
|     Frame* hosted_frame() { return m_hosted_frame; } | ||||
|     const Frame* hosted_frame() const { return m_hosted_frame; } | ||||
| 
 | ||||
|     const Document* hosted_document() const; | ||||
|     const DOM::Document* hosted_document() const; | ||||
| 
 | ||||
| private: | ||||
|     virtual void document_did_attach_to_frame(Frame&) override; | ||||
|  | @ -54,5 +54,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLIFrameElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::iframe; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::iframe; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -37,18 +37,18 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLImageElement::HTMLImageElement(Document& document, const FlyString& tag_name) | ||||
| HTMLImageElement::HTMLImageElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
|     m_image_loader.on_load = [this] { | ||||
|         this->document().update_layout(); | ||||
|         dispatch_event(Event::create("load")); | ||||
|         dispatch_event(DOM::Event::create("load")); | ||||
|     }; | ||||
| 
 | ||||
|     m_image_loader.on_fail = [this] { | ||||
|         dbg() << "HTMLImageElement: Resource did fail: " << this->src(); | ||||
|         this->document().update_layout(); | ||||
|         dispatch_event(Event::create("error")); | ||||
|         dispatch_event(DOM::Event::create("error")); | ||||
|     }; | ||||
| 
 | ||||
|     m_image_loader.on_animate = [this] { | ||||
|  |  | |||
|  | @ -40,7 +40,7 @@ class HTMLImageElement final : public HTMLElement { | |||
| public: | ||||
|     using WrapperType = Bindings::HTMLImageElementWrapper; | ||||
| 
 | ||||
|     HTMLImageElement(Document&, const FlyString& local_name); | ||||
|     HTMLImageElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLImageElement() override; | ||||
| 
 | ||||
|     virtual void parse_attribute(const FlyString& name, const String& value) override; | ||||
|  | @ -63,5 +63,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLImageElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::img; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::img; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLInputElement::HTMLInputElement(Document& document, const FlyString& tag_name) | ||||
| HTMLInputElement::HTMLInputElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  | @ -76,7 +76,7 @@ RefPtr<LayoutNode> HTMLInputElement::create_layout_node(const StyleProperties* p | |||
|         int text_width = Gfx::Font::default_font().width(value()); | ||||
|         button.set_relative_rect(0, 0, text_width + 20, 20); | ||||
|         button.on_click = [this](auto) { | ||||
|             const_cast<HTMLInputElement*>(this)->dispatch_event(Event::create("click")); | ||||
|             const_cast<HTMLInputElement*>(this)->dispatch_event(DOM::Event::create("click")); | ||||
|         }; | ||||
|         widget = button; | ||||
|     } else { | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ namespace Web { | |||
| 
 | ||||
| class HTMLInputElement : public HTMLElement { | ||||
| public: | ||||
|     HTMLInputElement(Document&, const FlyString& local_name); | ||||
|     HTMLInputElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLInputElement() override; | ||||
| 
 | ||||
|     virtual RefPtr<LayoutNode> create_layout_node(const StyleProperties* parent_style) override; | ||||
|  | @ -45,5 +45,5 @@ public: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLInputElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::input; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::input; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLLinkElement::HTMLLinkElement(Document& document, const FlyString& tag_name) | ||||
| HTMLLinkElement::HTMLLinkElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ class HTMLLinkElement final | |||
|     : public HTMLElement | ||||
|     , public ResourceClient { | ||||
| public: | ||||
|     HTMLLinkElement(Document&, const FlyString& local_name); | ||||
|     HTMLLinkElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLLinkElement() override; | ||||
| 
 | ||||
|     virtual void inserted_into(Node&) override; | ||||
|  | @ -67,5 +67,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLLinkElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::link; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_html_element() && downcast<Web::HTMLElement>(node).local_name() == Web::HTML::TagNames::link; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ | |||
| 
 | ||||
| namespace Web { | ||||
| 
 | ||||
| HTMLObjectElement::HTMLObjectElement(Document& document, const FlyString& tag_name) | ||||
| HTMLObjectElement::HTMLObjectElement(DOM::Document& document, const FlyString& tag_name) | ||||
|     : HTMLElement(document, tag_name) | ||||
| { | ||||
|     m_image_loader.on_load = [this] { | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ class LayoutDocument; | |||
| 
 | ||||
| class HTMLObjectElement final : public HTMLElement { | ||||
| public: | ||||
|     HTMLObjectElement(Document&, const FlyString& local_name); | ||||
|     HTMLObjectElement(DOM::Document&, const FlyString& local_name); | ||||
|     virtual ~HTMLObjectElement() override; | ||||
| 
 | ||||
|     virtual void parse_attribute(const FlyString& name, const String& value) override; | ||||
|  | @ -55,5 +55,5 @@ private: | |||
| } | ||||
| 
 | ||||
| AK_BEGIN_TYPE_TRAITS(Web::HTMLObjectElement) | ||||
| static bool is_type(const Web::Node& node) { return node.is_element() && downcast<Web::Element>(node).local_name() == Web::HTML::TagNames::object; } | ||||
| static bool is_type(const Web::DOM::Node& node) { return node.is_element() && downcast<Web::DOM::Element>(node).local_name() == Web::HTML::TagNames::object; } | ||||
| AK_END_TYPE_TRAITS() | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling