import doc_phases::doc_hierarchies
import doc_phases::doc_graphs
import doc_phases::doc_intros_redefs
+import doc_phases::doc_lin
# Renders the page as HTML.
redef class DocPage
super Template
# HTML anchor id
- var html_id: String is noinit, writable
+ var html_id: String is writable, lazy do return id
# Title to display if any.
#
# This title can be decorated with HTML.
- var html_title: nullable Writable is noinit, writable
+ var html_title: nullable Writable is writable, lazy do return title
# Subtitle to display if any.
var html_subtitle: nullable Writable is noinit, writable
end
# Level <hX> for HTML heading.
- private fun hlvl: Int do
- if parent == null then return 0
- return parent.hlvl + 1
- end
-
- # Is `self` not displayed in the page.
- #
- # By default, empty elements are hidden.
- fun is_hidden: Bool do return is_empty
+ private fun hlvl: Int do return depth
# A short, undecorated title that goes in the table of contents.
#
# By default, returns `html_title.to_s`, subclasses should redefine it.
- var toc_title: String is lazy, writable do return html_title.to_s
-
- # Is `self` hidden in the table of content?
- var is_toc_hidden = false is writable
+ var html_toc_title: nullable String is lazy, writable do
+ if html_title == null then return toc_title
+ return html_title.write_to_string
+ end
# Render this element in a table of contents.
private fun render_toc_item(lst: UnorderedList) do
- if is_toc_hidden then return
+ if is_toc_hidden or html_toc_title == null then return
var content = new Template
- content.add new Link("#{html_id}", toc_title)
-
+ content.add new Link("#{html_id}", html_toc_title.to_s)
if not children.is_empty then
var sublst = new UnorderedList
sublst.css_classes.add "nav"
end
lst.add_li new ListItem(content)
end
+
+ # ID used in HTML tab labels.
+ #
+ # We sanitize it for Boostrap JS panels that do not like ":" and "." in ids.
+ var html_tab_id: String is lazy do
+ var id = html_id.replace(":", "")
+ id = id.replace(".", "")
+ return "{id}-tab"
+ end
+end
+
+redef class DocRoot
+ redef fun rendering do
+ for child in children do addn child.write_to_string
+ end
end
redef class DocSection
end
end
+redef class TabbedGroup
+ redef fun render_body do
+ var tabs = new DocTabs("{html_id}.tabs", "")
+ for child in children do
+ if child.is_hidden then continue
+ var title = child.html_toc_title or else child.toc_title or else ""
+ tabs.add_panel new DocTabPanel(child.html_tab_id, title, child)
+ end
+ addn tabs
+ end
+end
+
+redef class PanelGroup
+ redef var html_title = null
+ redef var toc_title is lazy do return title or else ""
+ redef var is_toc_hidden = true
+end
+
redef class HomeArticle
- redef var html_id = "intro"
redef var html_title = "Overview"
# HTML content to display on the home page.
end
end
-redef class ProjectsSection
- redef var html_id = "projects"
- redef var html_title = "Projects"
+redef class IndexArticle
+ redef var html_title = "Index"
+
+ redef fun render_body do
+ addn "<div class='container-fluid'>"
+ addn " <div class='row'>"
+ render_list("Modules", mmodules)
+ render_list("Classes", mclasses)
+ render_list("Properties", mprops)
+ addn "</div>"
+ addn "</div>"
+ end
+
+ # Displays a list from the content of `mentities`.
+ private fun render_list(title: String, mentities: Array[MEntity]) do
+ if mentities.is_empty then return
+ addn "<div class='col-xs-4'>"
+ addn new Header(3, title)
+ var lst = new UnorderedList
+ for mentity in mentities do
+ if mentity isa MProperty then
+ var tpl = new Template
+ tpl.add mentity.intro.html_link
+ tpl.add " ("
+ tpl.add mentity.intro.mclassdef.mclass.html_link
+ tpl.add ")"
+ lst.add_li new ListItem(tpl)
+ else
+ lst.add_li new ListItem(mentity.html_link)
+ end
+ end
+ addn lst
+ addn "</div>"
+ end
end
redef class MEntityComposite
- redef var html_id is lazy do return mentity.nitdoc_id
redef var html_title is lazy do return mentity.nitdoc_name
end
redef class MEntitySection
- redef var html_id is lazy do return "section_{mentity.nitdoc_name}"
redef var html_title is lazy do return mentity.html_name
redef var html_subtitle is lazy do return mentity.html_declaration
end
redef class ConcernSection
- redef var html_id is lazy do return "section_concerns_{mentity.nitdoc_id}"
redef var html_title is lazy do return "in {mentity.nitdoc_name}"
- redef fun is_toc_hidden do return is_empty
-end
-
-redef class ImportationListSection
- redef var html_id is lazy do return "section_dependancies_{mentity.nitdoc_id}"
- redef var html_title is lazy do return "Dependencies"
-end
-
-redef class InheritanceListSection
- redef var html_id is lazy do return "section_inheritance_{mentity.nitdoc_id}"
- redef var html_title is lazy do return "Inheritance"
end
redef class IntroArticle
- redef var html_id is lazy do return "article_intro_{mentity.nitdoc_id}"
redef var html_title = null
- redef var is_hidden = false
- redef var is_toc_hidden = true
+
+ # Link to source to display if any.
+ var html_source_link: nullable Writable is noinit, writable
redef fun render_body do
+ var tabs = new DocTabs("{html_id}.tabs", "")
var comment = mentity.html_comment
- if comment != null then addn comment
- super
+ if comment != null then
+ tabs.add_panel new DocTabPanel("{html_tab_id}-comment", "Comment", comment)
+ end
+ for child in children do
+ if child.is_hidden then continue
+ var title = child.html_toc_title or else child.toc_title or else ""
+ tabs.add_panel new DocTabPanel(child.html_tab_id, title, child)
+ end
+ var lnk = html_source_link
+ if lnk != null then
+ tabs.drop_list.items.add new ListItem(lnk)
+ end
+ addn tabs
end
end
redef class ConcernsArticle
- redef var html_id is lazy do return "article_concerns_{mentity.nitdoc_id}"
redef var html_title = "Concerns"
- redef fun is_hidden do return concerns.is_empty
redef fun render_body do add concerns.html_list
end
+redef class DefinitionListArticle
+ redef var html_title is lazy do
+ var title = new Template
+ title.add mentity.html_icon
+ title.add mentity.html_link
+ return title
+ end
+
+ redef var html_subtitle is lazy do return mentity.html_namespace
+ redef var html_toc_title is lazy do return mentity.html_name
+end
+
redef class DefinitionArticle
- redef var html_id is lazy do return "article_definition_{mentity.nitdoc_id}"
redef var html_title is lazy do return mentity.html_name
redef var html_subtitle is lazy do return mentity.html_declaration
- redef var is_hidden = false
# Does `self` display only it's title and no body?
#
# FIXME diff hack
var is_short_comment: Bool = false is writable
+ # Link to source to display if any.
+ var html_source_link: nullable Writable is noinit, writable
+
redef fun render_body do
+ var tabs = new DocTabs("{html_id}.tabs", "")
if not is_no_body then
var comment
if is_short_comment then
else
comment = mentity.html_comment
end
- if comment != null then addn comment
+ if comment != null then
+ tabs.add_panel new DocTabPanel("{html_tab_id}-comment", "Comment", comment)
+ end
end
- super
+ for child in children do
+ if child.is_hidden then continue
+ var title = child.html_toc_title or else child.toc_title or else ""
+ tabs.add_panel new DocTabPanel(child.html_tab_id, title, child)
+ end
+ var lnk = html_source_link
+ if lnk != null then
+ tabs.drop_list.items.add new ListItem(lnk)
+ end
+ addn tabs
end
end
-redef class HierarchyListArticle
- redef var html_id is lazy do return "article_hierarchy_{list_title}_{mentity.nitdoc_id}"
- redef var html_title is lazy do return list_title
- redef fun is_empty do return mentities.is_empty
- redef fun is_toc_hidden do return mentities.is_empty
-
+redef class MEntitiesListArticle
redef fun render_body do
var lst = new UnorderedList
lst.css_classes.add "list-unstyled list-definition"
for mentity in mentities do
lst.add_li mentity.html_list_item
end
- addn lst
+ add lst
end
end
-redef class IntrosRedefsListArticle
- redef var html_id is lazy do return "article_intros_redefs_{mentity.nitdoc_id}"
- redef var html_title is lazy do return list_title
- redef fun is_hidden do return mentities.is_empty
- redef var is_toc_hidden = true
-
+redef class DefinitionLinArticle
redef fun render_body do
var lst = new UnorderedList
lst.css_classes.add "list-unstyled list-labeled"
for mentity in mentities do
- lst.add_li mentity.html_list_item
+ if not mentity isa MPropDef then continue # TODO handle all mentities
+ var tpl = new Template
+ tpl.add mentity.mclassdef.html_namespace
+ var comment = mentity.mclassdef.html_short_comment
+ if comment != null then
+ tpl.add ": "
+ tpl.add comment
+ end
+ var li = new ListItem(tpl)
+ li.css_classes.add "signature"
+ lst.add_li li
end
add lst
end
end
redef class GraphArticle
- redef var html_id is lazy do return "article_graph_{mentity.nitdoc_id}"
redef var html_title = null
- redef var toc_title do return "Graph"
- redef var is_hidden = false
- redef var is_toc_hidden = true
# HTML map used to display link.
#
redef fun render_body do
addn "<div class=\"text-center\">"
- addn " <img src='{id}.png' usemap='#{id}' style='margin:auto'"
- addn " alt='{graph_title}'/>"
+ addn " <img src='{graph_id}.png' usemap='#{graph_id}' style='margin:auto'"
+ addn " alt='{title or else ""}'/>"
add map
addn "</div>"
end