X-Git-Url: http://nitlanguage.org diff --git a/src/web/web_base.nit b/src/web/web_base.nit index 0bdf0ad..c535936 100644 --- a/src/web/web_base.nit +++ b/src/web/web_base.nit @@ -19,10 +19,11 @@ import model::model_views import model::model_json import doc_down import popcorn +import popcorn::pop_config -# Specific nitcorn Action that uses a Model -class ModelHandler - super Handler +# Nitweb config file. +class NitwebConfig + super AppConfig # Model to use. var model: Model @@ -30,6 +31,17 @@ class ModelHandler # MModule used to flatten model. var mainmodule: MModule + # Modelbuilder used to access sources. + var modelbuilder: ModelBuilder +end + +# Specific nitcorn Action that uses a Model +class ModelHandler + super Handler + + # App config. + var config: NitwebConfig + # Find the MEntity ` with `full_name`. fun find_mentity(model: ModelView, full_name: nullable String): nullable MEntity do if full_name == null then return null @@ -38,7 +50,7 @@ class ModelHandler # Init the model view from the `req` uri parameters. fun init_model_view(req: HttpRequest): ModelView do - var view = new ModelView(model) + var view = new ModelView(config.model) var show_private = req.bool_arg("private") or else false if not show_private then view.min_visibility = protected_visibility @@ -59,7 +71,7 @@ abstract class APIHandler # # So we can cache the model view. var view: ModelView is lazy do - var view = new ModelView(model) + var view = new ModelView(config.model) view.min_visibility = private_visibility view.include_fictive = true view.include_empty_doc = true @@ -87,21 +99,18 @@ abstract class APIHandler end end -# A NitView is rendered by an action. -interface NitView - # Renders this view and returns something that can be written to a HTTP response. - fun render: Writable is abstract -end +# A Rooter dedicated to APIHandlers. +class APIRouter + super Router -redef class HttpResponse - # Render a NitView as response. - fun send_view(view: NitView, status: nullable Int) do send(view.render, status) + # App config. + var config: NitwebConfig end redef class MEntity # URL to `self` within the web interface. - fun web_url: String is abstract + fun web_url: String do return "/doc/" / full_name # URL to `self` within the JSON api. fun api_url: String do return "/api/entity/" / full_name @@ -131,6 +140,16 @@ redef class MEntityRef modifiers.add modifier end obj["modifiers"] = modifiers + var mentity = self.mentity + if mentity isa MMethod then + obj["msignature"] = mentity.intro.msignature + else if mentity isa MMethodDef then + obj["msignature"] = mentity.msignature + else if mentity isa MVirtualTypeProp then + obj["bound"] = to_mentity_ref(mentity.intro.bound) + else if mentity isa MVirtualTypeDef then + obj["bound"] = to_mentity_ref(mentity.bound) + end return obj end end @@ -150,17 +169,7 @@ redef class MDoc end end -redef class MPackage - redef var web_url = "/package/{full_name}" is lazy -end - -redef class MGroup - redef var web_url = "/group/{full_name}" is lazy -end - redef class MModule - redef var web_url = "/module/{full_name}" is lazy - redef fun api_json(handler) do var obj = super obj["intro_mclassdefs"] = to_mentity_refs(collect_intro_mclassdefs(private_view)) @@ -171,8 +180,6 @@ redef class MModule end redef class MClass - redef var web_url = "/class/{full_name}" is lazy - redef fun api_json(handler) do var obj = super obj["all_mproperties"] = to_mentity_refs(collect_accessible_mproperties(private_view)) @@ -184,8 +191,6 @@ redef class MClass end redef class MClassDef - redef var web_url = "/classdef/{full_name}" is lazy - redef fun json do var obj = super obj["intro"] = to_mentity_ref(mclass.intro) @@ -202,8 +207,6 @@ redef class MClassDef end redef class MProperty - redef var web_url = "/property/{full_name}" is lazy - redef fun json do var obj = super obj["intro_mclass"] = to_mentity_ref(intro_mclassdef.mclass) @@ -213,8 +216,6 @@ redef class MProperty end redef class MPropDef - redef var web_url = "/propdef/{full_name}" is lazy - redef fun json do var obj = super obj["intro"] = to_mentity_ref(mproperty.intro)