diff --git a/lib/window_browser.rb b/lib/window_browser.rb new file mode 100644 index 0000000..e6c3d15 --- /dev/null +++ b/lib/window_browser.rb @@ -0,0 +1,2 @@ +module WindowBrowser +end diff --git a/lib/window_browser/dom.rb b/lib/window_browser/dom.rb new file mode 100644 index 0000000..f216771 --- /dev/null +++ b/lib/window_browser/dom.rb @@ -0,0 +1,45 @@ +require_relative 'node_types/text' +require_relative 'node_types/element' + +module WindowBrowser + class Dom + attr_reader :root_node + + def initialize(node) + @root_node = node + end + + def self.text_node(string) + NodeTypes::Text.new(string: string) + end + + def self.element_node(tag_name:, attributes: {}, children: []) + NodeTypes::Element.new( + tag_name: tag_name, + attributes: attributes, + children: children + ) + end + end +end + +dom = WindowBrowser::Dom.new( + WindowBrowser::Dom.element_node( + tag_name: 'div', + children: [ + WindowBrowser::Dom.element_node(tag_name: 'div'), + WindowBrowser::Dom.element_node(tag_name: 'span'), + WindowBrowser::Dom.element_node(tag_name: 'p'), + WindowBrowser::Dom.element_node( + tag_name: 'div', + children: [ + WindowBrowser::Dom.element_node(tag_name: 'div'), + WindowBrowser::Dom.element_node(tag_name: 'span'), + WindowBrowser::Dom.element_node(tag_name: 'p') + ] + ) + ] + ) +) + +puts dom.root_node.children.count diff --git a/lib/window_browser/node.rb b/lib/window_browser/node.rb new file mode 100644 index 0000000..17867d3 --- /dev/null +++ b/lib/window_browser/node.rb @@ -0,0 +1,22 @@ +module WindowBrowser + class Node + attr_accessor :children + + def initialize(children: []) + @children = children + end + + def first_child + children.first + end + + def children? + children.any? + end + + def type + self.class + end + end +end + diff --git a/lib/window_browser/node_types/element.rb b/lib/window_browser/node_types/element.rb new file mode 100644 index 0000000..0102718 --- /dev/null +++ b/lib/window_browser/node_types/element.rb @@ -0,0 +1,16 @@ +require_relative '../node' + +module WindowBrowser + module NodeTypes + class Element < Node + attr_reader :tag_name, :attributes + + def initialize(tag_name:, attributes: {}, children: []) + @tag_name = tag_name + @attributes = attributes + + super(children: children) + end + end + end +end diff --git a/lib/window_browser/node_types/text.rb b/lib/window_browser/node_types/text.rb new file mode 100644 index 0000000..87d7412 --- /dev/null +++ b/lib/window_browser/node_types/text.rb @@ -0,0 +1,15 @@ +require_relative '../node' + +module WindowBrowser + module NodeTypes + class Text < Node + attr_accessor :string + + def initialize(string:, children: []) + @string = string + + super(children: children) + end + end + end +end