- # Insert the subtitle part
- add("h1").text(mclass.name)
- open("div").add_class("subtitle")
- if mclass.visibility is none_visibility then subtitle += "private "
- subtitle += "{mclass.kind} <a href=\"{mclass.public_owner.name}.html\">{mclass.public_owner.name}</a>::{mclass.name}"
- add_html(subtitle)
- close("div")
- add_html("<div style=\"float: right;\"><a id=\"lblDiffCommit\"></a></div>")
- # We add the class description
- open("section").add_class("description")
- if not stdclassdef is null and not stdclassdef.comment.is_empty then add_html("<pre class=\"text_label\" title=\"122\" name=\"\" tag=\"{mclass.mclassdefs.first.location.to_s}\" type=\"2\">{stdclassdef.comment} </pre><textarea id=\"fileContent\" class=\"edit\" cols=\"76\" rows=\"1\" style=\"display: none;\"></textarea><a id=\"cancelBtn\" style=\"display: none;\">Cancel</a><a id=\"commitBtn\" style=\"display: none;\">Commit</a><pre id=\"preSave\" class=\"text_label\" type=\"2\"></pre>")
- close("section")
- open("section").add_class("concerns")
- add("h2").add_class("section-header").text("Concerns")
- open("ul")
- for owner, childs in mclass.concerns do
- open("li")
- add_html("<a href=\"#MOD_{owner.name}\">{owner.name}</a>: {owner.amodule.short_comment}")
- if not childs is null then
- open("ul")
- for child in childs.as(not null) do add_html("<li><a href=\"#MOD_{child.name}\">{child.name}</a>: {child.amodule.short_comment} </li>")
- close("ul")
+ # virtual and formal types
+ var local_vtypes = new Array[MVirtualTypeDef]
+ for vt in vtypes do if not inherited.has(vt) then local_vtypes.add(vt)
+ if local_vtypes.length > 0 or mclass.arity > 0 then
+ append("<section class='types'>")
+ append("<h2>Formal and Virtual Types</h2>")
+ # formal types
+ if mclass.arity > 0 and nclass isa AStdClassdef then
+ for ft, bound in mclass.parameter_types do
+ append("<article id='FT_{ft}'>")
+ append("<h3 class='signature' data-untyped-signature='{ft.to_s}'><span>{ft}: ")
+ bound.html_link(self)
+ append("</span></h3>")
+ append("<div class=\"info\">formal generic type</div>")
+ append("</article>")
+ end
+ end
+ # virtual types
+ prop_sorter.sort(local_vtypes)
+ for prop in local_vtypes do prop.html_full_desc(self)
+ append("</section>")
+ end
+ # constructors
+ var local_consts = new Array[MMethodDef]
+ for const in consts do if not inherited.has(const) then local_consts.add(const)
+ prop_sorter.sort(local_consts)
+ if local_consts.length > 0 then
+ append("<section class='constructors'>")
+ append("<h2 class='section-header'>Constructors</h2>")
+ for prop in local_consts do prop.html_full_desc(self)
+ append("</section>")
+ end
+ # methods
+ if not concern2meths.is_empty then
+ append("<section class='methods'>")
+ append("<h2 class='section-header'>Methods</h2>")
+ for owner, mmodules in sections do
+ append("<a id=\"{owner.anchor}\"></a>")
+ if owner != mclass.intro_mmodule and owner != mclass.public_owner then
+ var nowner = ctx.mbuilder.mmodule2nmodule[owner]
+ append("<h3 class=\"concern-toplevel\">Methods refined in ")
+ owner.html_link(self)
+ append("</h3>")
+ append("<p class=\"concern-doc\">")
+ owner.html_link(self)
+ if not nowner.short_comment.is_empty then
+ append(": {nowner.short_comment}")
+ end
+ append("</p>")
+ end
+ if concern2meths.has_key(owner) then
+ var mmethods = concern2meths[owner]
+ prop_sorter.sort(mmethods)
+ for prop in mmethods do prop.html_full_desc(self)
+ end
+ for mmodule in mmodules do
+ append("<a id=\"{mmodule.anchor}\"></a>")
+ var nmodule = ctx.mbuilder.mmodule2nmodule[mmodule]
+ if mmodule != mclass.intro_mmodule and mmodule != mclass.public_owner then
+ append("<p class=\"concern-doc\">")
+ mmodule.html_link(self)
+ if not nmodule.short_comment.is_empty then
+ append(": {nmodule.short_comment}")
+ end
+ append("</p>")
+ end
+ var mmethods = concern2meths[mmodule]
+ prop_sorter.sort(mmethods)
+ for prop in mmethods do prop.html_full_desc(self)
+ end
+ end
+ end
+ # inherited properties
+ if inherited.length > 0 then
+ var sorted_inherited = new Array[MPropDef]
+ sorted_inherited.add_all(inherited)
+ ctx.mainmodule.linearize_mpropdefs(sorted_inherited)
+ var classes = new ArrayMap[MClass, Array[MPropDef]]
+ for mmethod in sorted_inherited.reversed do
+ var mclass = mmethod.mclassdef.mclass
+ if not classes.has_key(mclass) then classes[mclass] = new Array[MPropDef]
+ classes[mclass].add(mmethod)
+ end
+ append("<h3>Inherited Properties</h3>")
+ for c, mmethods in classes do
+ prop_sorter.sort(mmethods)
+ append("<p>Defined in ")
+ c.html_link(self)
+ append(": ")
+ for i in [0..mmethods.length[ do
+ var mmethod = mmethods[i]
+ mmethod.html_link(self)
+ if i <= mmethods.length - 1 then append(", ")
+ end
+ append("</p>")