src/doc: migrate Index page rendering to `doc_phases`
authorAlexandre Terrasa <alexandre@moz-code.org>
Tue, 24 Feb 2015 13:01:25 +0000 (14:01 +0100)
committerAlexandre Terrasa <alexandre@moz-code.org>
Tue, 5 May 2015 15:56:57 +0000 (11:56 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/doc/doc_phases/doc_html.nit
src/doc/doc_phases/doc_structure.nit
src/doc/html_templates/html_templates.nit

index 7c970d1..48763df 100644 (file)
@@ -242,57 +242,6 @@ redef class SearchPage
        end
 
        redef fun init_sidebar(v, doc) do end
-
-       # TODO this should be done in StructurePhase.
-       redef fun init_content(v, doc) do
-               var tpl = new TplSearchPage("search_all")
-               var section = new TplSection("search")
-               # title
-               tpl.title = "Index"
-               # modules list
-               for mmodule in modules_list(v, doc) do
-                       tpl.modules.add mmodule.html_link
-               end
-               # classes list
-               for mclass in classes_list(v, doc) do
-                       tpl.classes.add mclass.html_link
-               end
-               # properties list
-               for mproperty in mprops_list(v, doc) do
-                       var m = new Template
-                       m.add mproperty.intro.html_link
-                       m.add " ("
-                       m.add mproperty.intro.mclassdef.mclass.html_link
-                       m.add ")"
-                       tpl.props.add m
-               end
-               section.add_child tpl
-       end
-
-       # Extract mmodule list to display (sorted by name)
-       private fun modules_list(v: RenderHTMLPhase, doc: DocModel): Array[MModule] do
-               var sorted = new Array[MModule]
-               for mmodule in doc.model.mmodule_importation_hierarchy do
-                       if mmodule.is_fictive or mmodule.is_test_suite then continue
-                       sorted.add mmodule
-               end
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
-
-       # Extract mclass list to display (sorted by name)
-       private fun classes_list(v: RenderHTMLPhase, doc: DocModel): Array[MClass] do
-               var sorted = doc.mclasses.to_a
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
-
-       # Extract mproperty list to display (sorted by name)
-       private fun mprops_list(v: RenderHTMLPhase, doc: DocModel): Array[MProperty] do
-               var sorted = doc.mproperties.to_a
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
 end
 
 redef class MEntityPage
index 384f603..9f64395 100644 (file)
@@ -34,8 +34,6 @@ class StructurePhase
        redef fun apply do
                for page in doc.pages do page.apply_structure(self, doc)
        end
-
-       # TODO index and search page should also be structured here
 end
 
 redef class DocPage
@@ -62,6 +60,18 @@ redef class OverviewPage
        end
 end
 
+redef class SearchPage
+       redef fun apply_structure(v, doc) do
+               var mmodules = doc.mmodules.to_a
+               v.name_sorter.sort(mmodules)
+               var mclasses = doc.mclasses.to_a
+               v.name_sorter.sort(mclasses)
+               var mprops = doc.mproperties.to_a
+               v.name_sorter.sort(mprops)
+               root.add_child new IndexArticle(mmodules, mclasses, mprops)
+       end
+end
+
 redef class MGroupPage
        redef fun apply_structure(v, doc) do
                var section = new MEntitySection(mentity)
@@ -318,3 +328,17 @@ end
 class ProjectsSection
        super DocArticle
 end
+
+# An article that display an index of mmodules, mclasses and mproperties.
+class IndexArticle
+       super DocArticle
+
+       # List of mmodules to display.
+       var mmodules: Array[MModule]
+
+       # List of mclasses to display.
+       var mclasses: Array[MClass]
+
+       # List of mproperties to display.
+       var mprops: Array[MProperty]
+end
index 6ac8831..9b2cddb 100644 (file)
@@ -363,6 +363,46 @@ redef class HomeArticle
        end
 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 "<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 ProjectsSection
        redef var html_id = "projects"
        redef var html_title = "Projects"