# Placeholder to include additional things before the `</head>`.
var more_head = new Template
+ # Relative path to the root directory (with the index file).
+ #
+ # Use "" for pages in the root directory
+ # Use ".." for pages in a subdirectory
+ var rootpath: String
+
redef init
do
add """
<head>
<meta charset="utf-8">
<link rel="stylesheet" media="all" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
- <link rel="stylesheet" media="all" href="style.css">
+ <link rel="stylesheet" media="all" href="{{{rootpath / "style.css"}}}">
"""
add more_head
</div>
<div class='collapse navbar-collapse' id='topmenu-collapse'>
<ul class='nav navbar-nav'>
- <li><a href="index.html">Catalog</a></li>
+ <li><a href="{{{rootpath / "index.html"}}}">Catalog</a></li>
</ul>
</div>
</div>
end
# Recursively generate a level in the file tree of the *content* section
- private fun gen_content_level(ot: OrderedTree[Object], os: Array[Object], res: Template)
+ private fun gen_content_level(ot: OrderedTree[MConcern], os: Array[Object], res: Template)
do
res.add "<ul>\n"
for o in os do
var mdoc = o.mdoc
if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
res.add "<strong>{o.name}</strong>{d} ({o.filepath.to_s})"
- else if o isa ModulePath then
+ else if o isa MModule then
var d = ""
- var m = o.mmodule
- if m != null then
- var mdoc = m.mdoc
- if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
- end
+ var mdoc = o.mdoc
+ if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
res.add "<strong>{o.name}</strong>{d} ({o.filepath.to_s})"
else
abort
# Compute information and generate a full HTML page for a package
fun package_page(mpackage: MPackage): Writable
do
- var res = new CatalogPage
+ var res = new CatalogPage("..")
var score = score[mpackage].to_f
var name = mpackage.name.html_escape
res.more_head.add """<title>{{{name}}}</title>"""
end
res.add "<h2>Content</h2>"
- var ot = new OrderedTree[Object]
+ 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.module_paths do
+ for mp in g.mmodules do
ot.add(pa, mp)
end
end
<div class="sidebar">
<ul class="box">
"""
+ var tryit = mpackage.metadata("upstream.tryit")
+ if tryit != null then
+ score += 1.0
+ 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("upstream.apk")
+ if apk != null then
+ score += 1.0
+ 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("upstream.homepage")
if homepage != null then
score += 5.0
res.add "<h3>Tags</h3>\n"
var tags = mpackage.metadata("package.tags")
- var ts2 = new Array[String]
- var cat = null
+ var ts = new Array[String]
if tags != null then
- var ts = tags.split(",")
- for t in ts do
+ for t in tags.split(",") do
t = t.trim
if t == "" then continue
- if cat == null then cat = t
- tag2proj[t].add mpackage
- t = t.html_escape
- ts2.add "<a href=\"index.html#tag_{t}\">{t}</a>"
+ ts.add t
end
- res.add_list(ts2, ", ", ", ")
end
- if ts2.is_empty then
- var t = "none"
- cat = t
+ if ts.is_empty then ts.add "none"
+ if tryit != null then ts.add "tryit"
+ if apk != null then ts.add "apk"
+ var ts2 = new Array[String]
+ for t in ts do
tag2proj[t].add mpackage
- res.add "<a href=\"index.html#tag_{t}\">{t}</a>"
+ t = t.html_escape
+ ts2.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
end
- if cat != null then cat2proj[cat].add mpackage
- score += ts2.length.score
+ res.add_list(ts2, ", ", ", ")
+ var cat = ts.first
+ cat2proj[cat].add mpackage
+ score += ts.length.score
if deps.has(mpackage) then
var reqs = deps[mpackage].greaters.to_a
var mmethods = 0
var loc = 0
for g in mpackage.mgroups do
- mmodules += g.module_paths.length
+ mmodules += g.mmodules.length
for m in g.mmodules do
var am = modelbuilder.mmodule2node(m)
if am != null then
fun li_package(p: MPackage): String
do
var res = ""
- var f = "{p.name}.html"
+ var f = "p/{p.name}.html"
res += "<a href=\"{f}\">{p}</a>"
var d = p.mdoc_or_fallback
if d != null then res += " - {d.html_synopsis.write_to_string}"
res.add "</tr></thead>"
for p in mpackages do
res.add "<tr>"
- res.add "<td><a href=\"{p.name}.html\">{p.name}</a></td>"
+ res.add "<td><a href=\"p/{p.name}.html\">{p.name}</a></td>"
var maint = "?"
if p.maintainers.not_empty then maint = p.maintainers.first
res.add "<td>{maint}</td>"
var catalog = new Catalog(modelbuilder)
# Get files or groups
-for a in tc.option_context.rest do
- modelbuilder.get_mgroup(a)
- modelbuilder.identify_file(a)
+var args = tc.option_context.rest
+if opt_no_parse.value then
+ modelbuilder.scan_full(args)
+else
+ modelbuilder.parse_full(args)
end
# Scan packages and compute information
# Load the module to process importation information
if opt_no_parse.value then continue
- modelbuilder.parse_group(g)
catalog.deps.add_node(p)
for gg in p.mgroups do for m in gg.mmodules do
end
var out = opt_dir.value or else "catalog.out"
-out.mkdir
+(out/"p").mkdir
# Generate the css (hard coded)
var css = """
for p in model.mpackages do
# print p
- var f = "{p.name}.html"
+ var f = "p/{p.name}.html"
catalog.package_page(p).write_to_file(out/f)
end
# INDEX
-var index = new CatalogPage
+var index = new CatalogPage("")
index.more_head.add "<title>Packages in Nit</title>"
index.add """
# PEOPLE
-var page = new CatalogPage
+var page = new CatalogPage("")
page.more_head.add "<title>People of Nit</title>"
page.add """<div class="content">\n<h1>People of Nit</h1>\n"""
page.add "<h2>By Maintainer</h2>\n"
# TABLE
-page = new CatalogPage
+page = new CatalogPage("")
page.more_head.add "<title>Projets of Nit</title>"
page.add """<div class="content">\n<h1>People of Nit</h1>\n"""
page.add "<h2>Table of Projets</h2>\n"