Merge: annotations: introduce `example` annotation
[nit.git] / src / web / api_model.nit
index 328eff9..0de4806 100644 (file)
@@ -15,7 +15,7 @@
 module api_model
 
 import web_base
-import highlight
+import htmlight
 import uml
 import model::model_index
 
@@ -70,10 +70,19 @@ class APIList
                return mentities
        end
 
+       # Filter mentities based on the config view filters
+       fun filter_mentities(req: HttpRequest, mentities: Array[MEntity]): Array[MEntity] do
+               var res = new Array[MEntity]
+               for mentity in mentities do
+                       if config.view.filter.accept_mentity(mentity) then res.add mentity
+               end
+               return res
+       end
+
        # Sort mentities by lexicographic order
        #
        # TODO choose order from request
-       fun sort_mentities(req: HttpRequest, mentities: Array[MEntity]) : Array[MEntity] do
+       fun sort_mentities(req: HttpRequest, mentities: Array[MEntity]): Array[MEntity] do
                var sorted = mentities.to_a
                var sorter = new MEntityNameSorter
                sorter.sort(sorted)
@@ -135,6 +144,7 @@ class APIRandom
 
        redef fun get(req, res) do
                var mentities = list_mentities(req)
+               mentities = filter_mentities(req, mentities)
                mentities = randomize_mentities(req, mentities)
                mentities = limit_mentities(req, mentities)
                res.json new JsonArray.from(mentities)
@@ -150,7 +160,7 @@ class APIEntity
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
                if mentity == null then return
-               res.raw_json mentity.to_full_json
+               res.raw_json mentity.to_full_json(config.view.mainmodule)
        end
 end
 
@@ -216,25 +226,26 @@ class APIEntityDefs
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
                if mentity == null then return
-               var mentities: Array[MEntity]
+               var mentities = new Array[MEntity]
                if mentity isa MPackage then
-                       mentities = mentity.mgroups.to_a
+                       mentities.add_all mentity.collect_mgroups(config.view)
+                       mentities.add_all mentity.collect_mmodules(config.view)
                else if mentity isa MGroup then
-                       mentities = new Array[MEntity]
-                       mentities.add_all mentity.in_nesting.direct_smallers
-                       mentities.add_all mentity.mmodules
+                       mentities.add_all mentity.collect_mgroups(config.view)
+                       mentities.add_all mentity.collect_mmodules(config.view)
                else if mentity isa MModule then
-                       mentities = mentity.mclassdefs
+                       mentities.add_all mentity.collect_local_mclassdefs(config.view)
                else if mentity isa MClass then
-                       mentities = mentity.mclassdefs
+                       mentities.add_all mentity.collect_mclassdefs(config.view)
                else if mentity isa MClassDef then
-                       mentities = mentity.mpropdefs
+                       mentities.add_all mentity.collect_mpropdefs(config.view)
                else if mentity isa MProperty then
-                       mentities = mentity.mpropdefs
+                       mentities.add_all mentity.collect_mpropdefs(config.view)
                else
                        res.api_error(404, "No definition list for mentity `{mentity.full_name}`")
                        return
                end
+               mentities = filter_mentities(req, mentities)
                mentities = sort_mentities(req, mentities)
                mentities = limit_mentities(req, mentities)
                res.json new JsonArray.from(mentities)
@@ -300,8 +311,8 @@ class APIEntityCode
        private fun render_source(mentity: MEntity): nullable HTMLTag do
                var node = config.modelbuilder.mentity2node(mentity)
                if node == null then return null
-               var hl = new HighlightVisitor
-               hl.enter_visit node
+               var hl = new HtmlightVisitor
+               hl.highlight_node node
                return hl.html
        end
 end