1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Nitcorn actions used by the nitweb server.
20 # Display the tree of all loaded mentities.
24 redef fun answer
(request
, url
) do
25 var model
= init_model_view
(request
)
26 var view
= new HtmlHomePage(model
.model
)
27 return render_view
(view
)
31 # Display the list of mentities matching `namespace`.
35 # TODO handle more than full namespaces.
36 redef fun answer
(request
, url
) do
37 var namespace
= request
.param
("namespace")
38 if namespace
== null or namespace
.is_empty
then
39 return render_error
(400, "Missing :namespace.")
41 var model
= init_model_view
(request
)
42 var mentities
= model
.mentities_by_namespace
(namespace
)
43 if request
.is_json_asked
then
44 var json
= new JsonArray
45 for mentity
in mentities
do
46 json
.add mentity
.to_json
48 return render_json
(json
)
50 var view
= new HtmlResultPage(namespace
, mentities
)
51 return render_view
(view
)
55 # Display a MEntity source code.
59 # Modelbuilder used to access sources.
60 var modelbuilder
: ModelBuilder
62 # TODO handle more than full namespaces.
63 redef fun answer
(request
, url
) do
64 var namespace
= request
.param
("namespace")
65 if namespace
== null or namespace
.is_empty
then
66 return render_error
(400, "Missing :namespace.")
68 var model
= init_model_view
(request
)
69 var mentities
= model
.mentities_by_namespace
(namespace
)
70 if mentities
.is_empty
then
71 return render_error
(404, "No mentity matching this namespace.")
73 var view
= new HtmlSourcePage(modelbuilder
, mentities
.first
)
74 return render_view
(view
)
78 # Display the doc of a MEntity.
82 # Modelbuilder used to access sources.
83 var modelbuilder
: ModelBuilder
85 # TODO handle more than full namespaces.
86 redef fun answer
(request
, url
) do
87 var namespace
= request
.param
("namespace")
88 if namespace
== null or namespace
.is_empty
then
89 return render_error
(400, "Missing :namespace.")
91 var model
= init_model_view
(request
)
92 var mentities
= model
.mentities_by_namespace
(namespace
)
93 if mentities
.is_empty
then
94 return render_error
(404, "No mentity matching this namespace.")
96 var view
= new HtmlDocPage(modelbuilder
, mentities
.first
)
97 return render_view
(view
)
101 # Return a random list of MEntities.
105 # TODO handle more than full namespaces.
106 redef fun answer
(request
, url
) do
107 var n
= request
.int_arg
("n") or else 10
108 var k
= request
.string_arg
("k") or else "modules"
109 var model
= init_model_view
(request
)
110 var mentities
: Array[MEntity]
111 if k
== "modules" then
112 mentities
= model
.mmodules
.to_a
113 else if k
== "classdefs" then
114 mentities
= model
.mclassdefs
.to_a
116 mentities
= model
.mpropdefs
.to_a
119 mentities
= mentities
.sub
(0, n
)
120 if request
.is_json_asked
then
121 var json
= new JsonArray
122 for mentity
in mentities
do
123 json
.add mentity
.to_json
125 return render_json
(json
)
127 var view
= new HtmlResultPage("random", mentities
)
128 return render_view
(view
)
134 # Return `self` as a JsonObject.
135 fun to_json
: JsonObject do
136 var obj
= new JsonObject
137 obj
["name"] = html_name
138 obj
["namespace"] = html_raw_namespace
141 obj
["synopsis"] = mdoc
.content
.first
.html_escape
142 obj
["mdoc"] = mdoc
.content
.join
("\n").html_escape