A html page

You can define subclass and override methods head and body

class MyPage
    super HTMLPage
    redef body do add("p").text("Hello World!")
end

HTMLPage use fluent interface so you can chain calls as:

add("div").attr("id", "mydiv").text("My Div")

Introduced properties

fun add(tag: String): HTMLTag

html :: HTMLPage :: add

Add a html tag to the current element
fun add_html(html: String)

html :: HTMLPage :: add_html

Add a raw html string
fun body

html :: HTMLPage :: body

Define body content
fun close(tag: String)

html :: HTMLPage :: close

Close previously opened tag
fun head

html :: HTMLPage :: head

Define head content
fun open(tag: String): HTMLTag

html :: HTMLPage :: open

Open a html tag

Redefined properties

redef type SELF: HTMLPage

html $ HTMLPage :: SELF

Type of this instance, automatically specialized in every class
redef fun write_to(stream: Writer)

html $ HTMLPage :: write_to

Write itself to a stream

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun add(tag: String): HTMLTag

html :: HTMLPage :: add

Add a html tag to the current element
fun add_html(html: String)

html :: HTMLPage :: add_html

Add a raw html string
fun body

html :: HTMLPage :: body

Define body content
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun close(tag: String)

html :: HTMLPage :: close

Close previously opened tag
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun head

html :: HTMLPage :: head

Define head content
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun open(tag: String): HTMLTag

html :: HTMLPage :: open

Open a html tag
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
abstract fun write_to(stream: Writer)

core :: Writable :: write_to

Write itself to a stream
fun write_to_bytes: Bytes

core :: Writable :: write_to_bytes

Like write_to but return a new Bytes (may be quite large)
fun write_to_file(filepath: String)

core :: Writable :: write_to_file

Like write_to but take care of creating the file
fun write_to_string: String

core :: Writable :: write_to_string

Like write_to but return a new String (may be quite large).
package_diagram html::HTMLPage HTMLPage core::Writable Writable html::HTMLPage->core::Writable core::Object Object core::Writable->core::Object ...core::Object ... ...core::Object->core::Object html::NitHomepage NitHomepage html::NitHomepage->html::HTMLPage

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

interface Writable

core :: Writable

Things that can be efficienlty written to a Writer

Children

Class definitions

html $ HTMLPage
# A html page
#
# You can define subclass and override methods head and body
#
# ~~~nitish
# class MyPage
#	super HTMLPage
#	redef body do add("p").text("Hello World!")
# end
# ~~~
#
# HTMLPage use fluent interface so you can chain calls as:
#
# ~~~nitish
# add("div").attr("id", "mydiv").text("My Div")
# ~~~
class HTMLPage
	super Writable

	# Define head content
	fun head do end
	# Define body content
	fun body do end

	private var root = new HTMLTag("html")
	private var current: HTMLTag = root
	private var stack = new List[HTMLTag]

	redef fun write_to(stream) do
		root.children.clear
		open("head")
		head
		close("head")
		open("body")
		body
		close("body")
		stream.write "<!DOCTYPE html>"
		root.write_to(stream)
	end

	# Add a html tag to the current element
	#
	# ~~~nitish
	# add("div").attr("id", "mydiv").text("My Div")
	# ~~~
	fun add(tag: String): HTMLTag do
		var node = new HTMLTag(tag)
		current.add(node)
		return node
	end

	# Add a raw html string
	#
	# ~~~nitish
	# add_html("<a href='#top'>top</a>")
	# ~~~
	fun add_html(html: String) do current.add(new HTMLRaw("", html))

	# Open a html tag
	#
	# ~~~nitish
	# open("ul")
	# add("li").text("item1")
	# add("li").text("item2")
	# close("ul")
	# ~~~
	fun open(tag: String): HTMLTag do
		stack.push(current)
		current = add(tag)
		return current
	end

	# Close previously opened tag
	# Ensure: tag = previous.tag
	fun close(tag: String) do
		if not tag == current.tag then
			print "Error: Trying to close '{tag}', last opened tag was '{current.tag}'."
			abort
		end
		current = stack.pop
	end
end
lib/html/html.nit:18,1--99,3