import doc_phases::doc_graphs
import doc_phases::doc_intros_redefs
import doc_phases::doc_lin
+import doc_phases::doc_readme
+intrude import doc_down
# Renders the page as HTML.
redef class DocPage
addn "<script src='{vendors}/jquery/jquery-1.11.1.min.js'></script>"
addn "<script src='{vendors}/jquery/jquery-ui-1.10.4.custom.min.js'></script>"
addn "<script src='{vendors}/bootstrap/js/bootstrap.min.js'></script>"
- addn "<script data-main='{js}/nitdoc' src='{js}/lib/require.js'></script>"
+ addn "<script src='{js}/lib/utils.js'></script>"
+ addn "<script src='{js}/plugins/filtering.js'></script>"
+ addn "<script src='quicksearch-list.js'></script>"
+ addn "<script src='{js}/plugins/quicksearch.js'></script>"
for script in scripts do add script
addn """<script>
$(function () {
# 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
if html_title != null then
var header = new Header(hlvl, html_title.write_to_string)
header.css_classes.add "signature"
- if hlvl == 2 then header.css_classes.add "well well-sm"
addn header
end
if html_subtitle != null then
# Level <hX> for HTML heading.
private fun hlvl: Int do return depth
- # Is `self` not displayed in the page.
- #
- # By default, empty elements are hidden.
- fun is_hidden: Bool do return is_empty
-
# 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
end
+redef class DocRoot
+ redef fun rendering do
+ for child in children do addn child.write_to_string
+ end
+end
+
redef class DocSection
super BSComponent
+ redef fun css_classes do return new Array[String]
+
redef fun rendering do
if is_hidden then
addn "<a id=\"{html_id}\"></a>"
redef class DocArticle
super BSComponent
+ redef fun css_classes do return new Array[String]
+
redef fun rendering do
if is_hidden then return
addn "<article{render_css_classes} id=\"{html_id}\">"
var tabs = new DocTabs("{html_id}.tabs", "")
for child in children do
if child.is_hidden then continue
- tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+ 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
redef class PanelGroup
redef var html_title = null
- redef var toc_title is lazy do return group_title
+ redef var toc_title is lazy do return title or else ""
redef var is_toc_hidden = true
end
redef class IndexArticle
redef var html_title = "Index"
- redef fun is_empty do
- return mmodules.is_empty and mclasses.is_empty and mprops.is_empty
- end
redef fun render_body do
addn "<div class='container-fluid'>"
end
end
-redef class ProjectsSection
- redef var html_title = "Projects"
-end
-
redef class MEntityComposite
redef var html_title is lazy do return mentity.nitdoc_name
end
redef var html_subtitle is lazy do return mentity.html_declaration
end
-redef class ConstructorsSection
- redef var html_title = "Constructors"
- redef var html_subtitle = null
- redef fun is_toc_hidden do return is_empty
-end
-
redef class ConcernSection
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_title is lazy do return "Dependencies"
-end
-
-redef class InheritanceListSection
- redef var html_title is lazy do return "Inheritance"
end
redef class IntroArticle
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
+ var comment = mentity.html_documentation
+ if mentity isa MPackage then
+ comment = mentity.html_synopsis
+ end
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
- tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+ 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
redef class ConcernsArticle
redef var html_title = "Concerns"
- redef fun is_hidden do return concerns.is_empty
redef fun render_body do add concerns.html_list
end
end
redef var html_subtitle is lazy do return mentity.html_namespace
- redef var toc_title is lazy do return mentity.html_name
+ redef var html_toc_title is lazy do return mentity.html_name
end
redef class DefinitionArticle
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?
#
var tabs = new DocTabs("{html_id}.tabs", "")
if not is_no_body then
var comment
- if is_short_comment then
- comment = mentity.html_short_comment
+ if is_short_comment or mentity isa MPackage then
+ comment = mentity.html_synopsis
else
- comment = mentity.html_comment
+ comment = mentity.html_documentation
end
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
- tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+ 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
end
end
-redef class HierarchyListArticle
- redef var html_title is lazy do return list_title
- redef fun is_empty do return mentities.is_empty
- redef var is_toc_hidden = true
-
+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
- end
-end
-
-redef class IntrosRedefsSection
- redef var toc_title do return "Intros / Redefs"
- redef var html_title = null
- redef var html_subtitle = null
- redef var is_toc_hidden = true
-end
-
-redef class IntrosRedefsListArticle
- 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 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
- end
add lst
end
end
redef class DefinitionLinArticle
- redef var html_title is lazy do return "Linearization"
- redef fun is_hidden do return mentities.is_empty
- redef var is_toc_hidden = true
-
redef fun render_body do
var lst = new UnorderedList
lst.css_classes.add "list-unstyled list-labeled"
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
+ var comment = mentity.mclassdef.html_synopsis
if comment != null then
tpl.add ": "
tpl.add comment
redef class GraphArticle
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.
+ # Graph in SVG with clickable map.
#
# This attribute is set by the `doc_render` phase who knows the context.
- var map: String is noinit, writable
+ var svg: nullable String = null is writable
redef fun render_body do
addn "<div class=\"text-center\">"
- addn " <img src='{graph_id}.png' usemap='#{graph_id}' style='margin:auto'"
- addn " alt='{graph_title}'/>"
- add map
+ var svg = self.svg
+ if svg != null then add svg
addn "</div>"
end
end
+
+redef class ReadmeSection
+ redef var html_id is lazy do
+ return markdown_processor.decorator.strip_id(html_title.as(not null).to_s)
+ end
+
+ redef var html_title is lazy do
+ return markdown_processor.process(title.as(not null))
+ end
+end
+
+redef class ReadmeArticle
+ redef var html_id = ""
+ redef var html_title = null
+ redef var is_toc_hidden = true
+
+ redef fun render_body do
+ add markdown_processor.process(md.trim.write_to_string)
+ end
+end
+
+redef class DocumentationArticle
+ redef var html_title is lazy do
+ var synopsis = mentity.html_synopsis
+ if synopsis == null then return mentity.html_link
+ return "{mentity.html_link.write_to_string} – {synopsis.write_to_string}"
+ end
+
+ redef var html_subtitle is lazy do return null
+ redef var html_toc_title is lazy do return mentity.html_name
+ redef var is_toc_hidden is lazy do return depth > 3
+
+ redef fun render_body do
+ var tabs = new DocTabs("{html_id}.tabs", "")
+ var comment = mentity.html_comment
+ 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
+ addn tabs
+ end
+end