X-Git-Url: http://nitlanguage.org diff --git a/src/doc/html_templates/html_templates.nit b/src/doc/html_templates/html_templates.nit index 9b2cddb..8849fb3 100644 --- a/src/doc/html_templates/html_templates.nit +++ b/src/doc/html_templates/html_templates.nit @@ -21,6 +21,7 @@ import doc_phases::doc_structure 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 @@ -246,12 +247,12 @@ redef class DocComposite 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 @@ -283,31 +284,22 @@ redef class DocComposite end # Level 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" @@ -318,6 +310,21 @@ redef class DocComposite 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 @@ -347,8 +354,25 @@ redef class DocArticle 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. @@ -364,11 +388,7 @@ redef class HomeArticle end redef class IndexArticle - redef var html_id = "index" 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 "
" @@ -403,63 +423,64 @@ redef class IndexArticle end end -redef class ProjectsSection - redef var html_id = "projects" - redef var html_title = "Projects" -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? # @@ -471,7 +492,11 @@ redef class DefinitionArticle # 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 @@ -479,50 +504,57 @@ redef class DefinitionArticle 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. # @@ -531,8 +563,8 @@ redef class GraphArticle redef fun render_body do addn "
" - addn " {graph_title}" + addn " {title or else ""}" add map addn "
" end