nitc :: Catalog :: generate_page
# Generate a full HTML page for a package
fun generate_page(mpackage: MPackage): Writable
do
var res = new_page("..")
var name = mpackage.name.html_escape
res.more_head.add """<title>{{{name}}}</title>"""
res.add """<div class="content">"""
var mdoc = mpackage.mdoc_or_fallback
if mdoc == null then
res.add """<h1 class="package-name">{{{name}}}</h1>"""
else
res.add """
<div style="float: left">
<h1 class="package-name">{{{name}}} - </h1>
</div>
"""
res.add mdoc.html_documentation
end
res.add "<h2>Content</h2>"
var ot = new OrderedTree[MConcern]
for g in mpackage.mgroups do
var pa = g.parent
if g.is_interesting then
ot.add(pa, g)
pa = g
end
for mp in g.mmodules do
ot.add(pa, mp)
end
end
ot.sort_with(alpha_comparator)
gen_content_level(ot, ot.roots, res)
res.add """
</div>
<div class="sidebar">
<ul class="box">
"""
var tryit = mpackage.metadata.metadata("upstream.tryit")
if tryit != null then
var e = tryit.html_escape
res.add "<li><a href=\"{e}\">Try<span style=\"color:white\">n</span>it!</a></li>\n"
end
var apk = mpackage.metadata.metadata("upstream.apk")
if apk != null then
var e = apk.html_escape
res.add "<li><a href=\"{e}\">Android apk</a></li>\n"
end
res.add """</ul>\n<ul class="box">\n"""
var homepage = mpackage.metadata.metadata("upstream.homepage")
if homepage != null then
var e = homepage.html_escape
res.add "<li><a href=\"{e}\">{e}</a></li>\n"
end
for maintainer in mpackage.metadata.maintainers do
res.add "<li>{maintainer.to_html}</li>"
end
var license = mpackage.metadata.metadata("package.license")
if license != null then
var e = license.html_escape
res.add "<li><a href=\"http://opensource.org/licenses/{e}\">{e}</a> license</li>\n"
end
res.add "</ul>\n"
res.add "<h3>Source Code</h3>\n<ul class=\"box\">\n"
var browse = mpackage.metadata.metadata("upstream.browse")
if browse != null then
var e = browse.html_escape
res.add "<li><a href=\"{e}\">{e}</a></li>\n"
end
var git = mpackage.metadata.metadata("upstream.git")
if git != null then
var e = git.html_escape
res.add "<li><tt>{e}</tt></li>\n"
end
var last_date = mpackage.metadata.last_date
if last_date != null then
var e = last_date.html_escape
res.add "<li>most recent commit: {e}</li>\n"
end
var first_date = mpackage.metadata.first_date
if first_date != null then
var e = first_date.html_escape
res.add "<li>oldest commit: {e}</li>\n"
end
var commits = commits[mpackage]
if commits != 0 then
res.add "<li>{commits} commits</li>\n"
end
res.add "</ul>\n"
res.add "<h3>Quality</h3>\n<ul class=\"box\">\n"
var errors = errors[mpackage]
if errors > 0 then
res.add "<li>{errors} errors</li>\n"
end
res.add "<li>{warnings[mpackage]} warnings ({warnings_per_kloc[mpackage]}/kloc)</li>\n"
res.add "<li>{documentation_score[mpackage]}% documented</li>\n"
res.add "</ul>\n"
res.add "<h3>Tags</h3>\n"
var ts2 = new Array[String]
for t in mpackage.metadata.tags do
t = t.html_escape
ts2.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
end
res.add_list(ts2, ", ", ", ")
if deps.vertices.has(mpackage) then
var reqs = deps.get_all_successors(mpackage)
reqs.remove(mpackage)
alpha_comparator.sort(reqs)
res.add "<h3>Requirements</h3>\n"
if reqs.is_empty then
res.add "none"
else
var list = new Array[String]
for r in reqs do
var direct = deps.has_arc(mpackage, r)
var s = "<a href=\"{r}.html\">"
if direct then s += "<strong>"
s += r.to_s
if direct then s += "</strong>"
s += "</a>"
list.add s
end
res.add_list(list, ", ", " and ")
end
reqs = deps.get_all_predecessors(mpackage)
reqs.remove(mpackage)
alpha_comparator.sort(reqs)
res.add "<h3>Clients</h3>\n"
if reqs.is_empty then
res.add "none"
else
var list = new Array[String]
for r in reqs do
var direct = deps.has_arc(r, mpackage)
var s = "<a href=\"{r}.html\">"
if direct then s += "<strong>"
s += r.to_s
if direct then s += "</strong>"
s += "</a>"
list.add s
end
res.add_list(list, ", ", " and ")
end
end
var contributors = mpackage.metadata.contributors
if not contributors.is_empty then
res.add "<h3>Contributors</h3>\n<ul class=\"box\">"
for c in contributors do
res.add "<li>{c.to_html}</li>"
end
res.add "</ul>"
end
res.add """
<h3>Stats</h3>
<ul class="box">
<li>{{{mmodules[mpackage]}}} modules</li>
<li>{{{mclasses[mpackage]}}} classes</li>
<li>{{{mmethods[mpackage]}}} methods</li>
<li>{{{loc[mpackage]}}} lines of code</li>
</ul>
"""
res.add """
</div>
"""
return res
end
src/nitcatalog.nit:229,2--408,4