tests: add engine `nitg-sg` for --semi-global
[nit.git] / lib / html.nit
index 515a871..4fc8530 100644 (file)
@@ -96,8 +96,8 @@ class HTMLTag
 
        # Is the HTML element a void element?
        #
-       #     assert new HTMLTag("img").is_void    == true
-       #     assert new HTMLTag("p").is_void      == false
+       #     assert (new HTMLTag("img")).is_void    == true
+       #     assert (new HTMLTag("p")).is_void      == false
        var is_void: Bool
 
        init with_attrs(tag: String, attrs: Map[String, String]) do
@@ -167,11 +167,52 @@ class HTMLTag
                return css_props[prop]
        end
 
+       # Replace `self` by `parent`.
+       #
+       #     var elem = new HTMLTag("li")
+       #     elem.add_outer(new HTMLTag("ul"))
+       #     assert elem.write_to_string == "<ul><li></li></ul>"
+       fun add_outer(parent: HTMLTag) do
+               # copy self in new object
+                var child = new HTMLTag(self.tag)
+                child.attrs = self.attrs
+                child.classes = self.classes
+                child.css_props = self.css_props
+                child.children = self.children
+                # add copy in parent children elements
+                parent.children.add(child)
+                # replace self by parent
+                self.tag = parent.tag
+                self.attrs = parent.attrs
+                self.classes = parent.classes
+                self.css_props = parent.css_props
+                self.is_void = parent.is_void
+                self.children = parent.children
+        end
+
        # Add a HTML 'child' to self
        #     var ul = new HTMLTag("ul")
        #     ul.add(new HTMLTag("li"))
        #     assert ul.write_to_string    == "<ul><li></li></ul>"
-       fun add(child: HTMLTag) do children.add(child)
+       # returns `self` for fluent programming
+       fun add(child: HTMLTag): HTMLTag
+       do
+               children.add(child)
+               return self
+       end
+
+       # Create a new HTMLTag child and return it
+       #
+       #     var ul = new HTMLTag("ul")
+       #     ul.open("li").append("1").append("2")
+       #     ul.open("li").append("3").append("4")
+       #     assert ul.write_to_string    == "<ul><li>12</li><li>34</li></ul>"
+       fun open(tag: String): HTMLTag
+       do
+               var res = new HTMLTag(tag)
+               add(res)
+               return res
+       end
 
        # List of children HTML elements
        var children: Set[HTMLTag] = new HashSet[HTMLTag]
@@ -201,11 +242,13 @@ class HTMLTag
        end
 
        # Append raw HTML to element
+       #
        #     var p = new HTMLTag("p")
        #     p.append("Hello")
-       #     p.add_raw_html("<bla/>")
-       #     p.html #- "<p>Hello<bla/></p>"
-       # Note: the HTML in insered as it, no verification is done
+       #     p.add_raw_html("<bla/>foo")
+       #     assert p.write_to_string   == "<p>Hello<bla/>foo</p>"
+       #
+       # Note: the HTML in insered as it, no verification is done.
        fun add_raw_html(txt: String): HTMLTag do
                add(new HTMLRaw(txt))
                return self