# This file is part of NIT ( http://www.nitlanguage.org ). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # HTML templates used by Nitdoc to generate API documentation # Pages are assembled using `Template` module html_components import doc_base import template import json::static ######################### # general layout elements ######################### # A sidebar template class TplSidebar super Template # Sidebar contains sidebar element templates called boxes var boxes = new Array[TplSidebarElt] # Sort boxes by order priority private fun order_boxes do var sorter = new OrderComparator sorter.sort(boxes) end redef fun rendering do if boxes.is_empty then return order_boxes addn "" end end # Comparator used to sort boxes by order private class OrderComparator super Comparator redef type COMPARED: TplSidebarElt redef fun compare(a, b) do if a.order < b.order then return -1 if a.order > b.order then return 1 return 0 end end # Something that can be put in the sidebar class TplSidebarElt super Template # Order of the box in the sidebar var order: Int = 1 init with_order(order: Int) do self.order = order end # Agenericbox that can be added to sidebar class TplSideBox super TplSidebarElt # Title of the box to display # Title is also a placeholder for the collapse link var title: String # Box HTML id # equals to `title.to_cmangle` by default # Used for collapsing var id: String is noinit # Content to display in the box # box will not be rendered if the content is null var content: nullable Writable = null is writable # Is the box opened by default # otherwise, the user will have to clic on the title to display the content var is_open = false is writable init do self.id = title.to_cmangle end init with_content(title: String, content: Writable) do init(title) self.content = content end redef fun rendering do if content == null then return var open = "" if is_open then open = "in" addn "
" addn "
" add " " add title addn " " addn "
" addn "
" add content.as(not null) addn "
" addn "
" end end # Something that can go on a summary template class TplSummaryElt super Template # Add an element to the summary fun add_child(child: TplSummaryElt) is abstract end # A summary that can go on the sidebar # If the page contains a sidebar, the summary is automatically placed # on top of the sidebarauto-generated # summary contains anchors to all sections displayed in the page class TplSummary super TplSidebarElt super TplSummaryElt # Summary elements to display var children = new Array[TplSummaryElt] redef fun add_child(child) do children.add child redef fun rendering do if children.is_empty then return addn "
" addn "
" add " " add "Summary" addn " " addn "
" addn "
" addn " " addn "
" addn "
" end end # A summary entry class TplSummaryEntry super TplSummaryElt # Text to display var text: Writable # Children of this entry # Will be displayed as a tree var children = new Array[TplSummaryElt] redef fun add_child(child) do children.add child redef fun rendering do add "
  • " add text if not children.is_empty then addn "\n" end addn "
  • " end end # Something that can go in a section # Sections are automatically collected to populate the menu class TplSectionElt super Template # HTML anchor id var id: String # Title to display if any # if both `title` and `summary_title` are null then # the section will not appear in the summary var title: nullable Writable = null is writable # Subtitle to display if any var subtitle: nullable Writable = null is writable # Title that appear in the summary # if null use `title` instead var summary_title: nullable String = null is writable # CSS classes to apply on the section element var css_classes = new Array[String] # CSS classes to apply on the title heading element var title_classes = new Array[String] # Parent article/section if any var parent: nullable TplSectionElt = null init with_title(id: String, title: Writable) do init(id) self.title = title end # Level for HTML heading protected fun hlvl: Int do if parent == null then return 1 return parent.hlvl + 1 end # Elements contained by this section var children = new Array[TplSectionElt] # Add an element in this section fun add_child(child: TplSectionElt) do child.parent = self children.add child end # Is the section empty (no content at all) fun is_empty: Bool do return children.is_empty # Render this section in the summary fun render_summary(parent: TplSummaryElt) do if is_empty then return var title = summary_title if title == null and self.title != null then title = self.title.write_to_string if title == null then return var lnk = new TplLink("#{id}", title) var entry = new TplSummaryEntry(lnk) for child in children do child.render_summary(entry) end parent.add_child entry end end # A HTML
    element class TplSection super TplSectionElt redef fun rendering do addn "
    " if title != null then var lvl = hlvl if lvl == 2 then title_classes.add "well well-sm" addn "" addn title.as(not null) addn "" end if subtitle != null then addn "
    " addn subtitle.as(not null) addn "
    " end for child in children do add child end addn "
    " end end # A page article that can go in a section class TplArticle super TplSectionElt # Content for this article var content: nullable Writable = null is writable var source_link: nullable Writable = null is writable init with_content(id: String, title: Writable, content: Writable) do with_title(id, title) self.content = content end redef fun render_summary(parent) do if is_empty then return var title = summary_title if title == null and self.title != null then title = self.title.write_to_string if title == null then return var lnk = new TplLink("#{id}", title) parent.add_child new TplSummaryEntry(lnk) end redef fun rendering do if is_empty then return addn "
    " if source_link != null then add "" end if title != null then var lvl = hlvl if lvl == 2 then title_classes.add "well well-sm" add "" add title.as(not null) addn "" end if subtitle != null then add "
    " add subtitle.as(not null) addn "
    " end if content != null then add content.as(not null) end for child in children do add child end addn """
    """ end redef fun is_empty: Bool do return title == null and subtitle == null and content == null and children.is_empty end end # A module / class / prop definition class TplDefinition super Template # Comment to display var comment: nullable Writable = null is writable # Namespace for this definition var namespace: nullable Writable = null is writable # Location link to display var location: nullable Writable = null is writable private fun render_info do addn "
    " if namespace != null then if comment == null then add "no comment for " end add namespace.as(not null) end if location != null then add " " add location.as(not null) end addn "
    " end private fun render_comment do if comment != null then add comment.as(not null) end redef fun rendering do addn "
    " render_comment render_info addn "
    " end end # Class definition class TplClassDefinition super TplDefinition var intros = new Array[TplListElt] var redefs = new Array[TplListElt] redef fun rendering do addn "
    " render_comment render_info render_list("Introduces", intros) render_list("Redefines", redefs) addn "
    " end private fun render_list(name: String, elts: Array[TplListElt]) do if elts.is_empty then return addn "
    {name.html_escape}
    " addn "" end end # Layout for Search page class TplSearchPage super TplSectionElt var modules = new Array[Writable] var classes = new Array[Writable] var props = new Array[Writable] redef fun rendering do var title = self.title if title != null then addn "

    {title.to_s.html_escape}

    " addn "
    " addn "
    " if not modules.is_empty then addn "
    " addn "

    Modules

    " addn "
      " for m in modules do add "
    • " add m addn "
    • " end addn "
    " addn "
    " end if not classes.is_empty then addn "
    " addn "

    Classes

    " addn "
      " for c in classes do add "
    • " add c addn "
    • " end addn "
    " addn "
    " end if not props.is_empty then addn "
    " addn "

    Properties

    " addn "
      " for p in props do add "
    • " add p addn "
    • " end addn "
    " addn "
    " end addn "
    " addn "
    " end end ##################### # Basiv HTML elements ##################### # A html link class TplLink super Template # Link href var href: String is writable # The raw HTML content to display in the link var text: Writable is writable # The unescaped optional title. var title: nullable String = null is writable init with_title(href, text, title: String) do init(href, text) self.title = title end redef fun rendering do add "" add text add "" end end # A