# 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>
# 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>"""
if cat == null then cat = t
tag2proj[t].add mpackage
t = t.html_escape
- ts2.add "<a href=\"index.html#tag_{t}\">{t}</a>"
+ ts2.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
end
res.add_list(ts2, ", ", ", ")
end
var t = "none"
cat = t
tag2proj[t].add mpackage
- res.add "<a href=\"index.html#tag_{t}\">{t}</a>"
+ res.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
end
if cat != null then cat2proj[cat].add mpackage
score += ts2.length.score
- var reqs = deps[mpackage].greaters.to_a
- 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_direct_edge(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
+ if deps.has(mpackage) then
+ var reqs = deps[mpackage].greaters.to_a
+ 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_direct_edge(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
- res.add_list(list, ", ", " and ")
- end
- reqs = deps[mpackage].smallers.to_a
- 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_direct_edge(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
+ reqs = deps[mpackage].smallers.to_a
+ 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_direct_edge(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
- res.add_list(list, ", ", " and ")
- end
- score += deps[mpackage].greaters.length.score
- score += deps[mpackage].direct_greaters.length.score
- score += deps[mpackage].smallers.length.score
- score += deps[mpackage].direct_smallers.length.score
+ score += deps[mpackage].greaters.length.score
+ score += deps[mpackage].direct_greaters.length.score
+ score += deps[mpackage].smallers.length.score
+ score += deps[mpackage].direct_smallers.length.score
+ end
var contributors = mpackage.contributors
if not contributors.is_empty 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 "<th data-field=\"name\" data-sortable=\"true\">name</th>\n"
res.add "<th data-field=\"maint\" data-sortable=\"true\">maint</th>\n"
res.add "<th data-field=\"contrib\" data-sortable=\"true\">contrib</th>\n"
- res.add "<th data-field=\"reqs\" data-sortable=\"true\">reqs</th>\n"
- res.add "<th data-field=\"dreqs\" data-sortable=\"true\">direct<br>reqs</th>\n"
- res.add "<th data-field=\"cli\" data-sortable=\"true\">clients</th>\n"
- res.add "<th data-field=\"dcli\" data-sortable=\"true\">direct<br>clients</th>\n"
+ if deps.not_empty then
+ res.add "<th data-field=\"reqs\" data-sortable=\"true\">reqs</th>\n"
+ res.add "<th data-field=\"dreqs\" data-sortable=\"true\">direct<br>reqs</th>\n"
+ res.add "<th data-field=\"cli\" data-sortable=\"true\">clients</th>\n"
+ res.add "<th data-field=\"dcli\" data-sortable=\"true\">direct<br>clients</th>\n"
+ end
res.add "<th data-field=\"mod\" data-sortable=\"true\">modules</th>\n"
res.add "<th data-field=\"cla\" data-sortable=\"true\">classes</th>\n"
res.add "<th data-field=\"met\" data-sortable=\"true\">methods</th>\n"
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>"
res.add "<td>{p.contributors.length}</td>"
- res.add "<td>{deps[p].greaters.length-1}</td>"
- res.add "<td>{deps[p].direct_greaters.length}</td>"
- res.add "<td>{deps[p].smallers.length-1}</td>"
- res.add "<td>{deps[p].direct_smallers.length}</td>"
+ if deps.not_empty then
+ res.add "<td>{deps[p].greaters.length-1}</td>"
+ res.add "<td>{deps[p].direct_greaters.length}</td>"
+ res.add "<td>{deps[p].smallers.length-1}</td>"
+ res.add "<td>{deps[p].direct_smallers.length}</td>"
+ end
res.add "<td>{mmodules[p]}</td>"
res.add "<td>{mclasses[p]}</td>"
res.add "<td>{mmethods[p]}</td>"
end
end
-if not opt_no_git.value then for p in model.mprojects do
+if not opt_no_git.value then for p in model.mpackages do
catalog.git_info(p)
end
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 """
index.add "<h2>Highlighted Packages</h2>\n"
index.add catalog.list_best(catalog.score)
-index.add "<h2>Most Required</h2>\n"
-var reqs = new Counter[MPackage]
-for p in model.mpackages do
- reqs[p] = catalog.deps[p].smallers.length - 1
+if catalog.deps.not_empty then
+ index.add "<h2>Most Required</h2>\n"
+ var reqs = new Counter[MPackage]
+ for p in model.mpackages do
+ reqs[p] = catalog.deps[p].smallers.length - 1
+ end
+ index.add catalog.list_best(reqs)
end
-index.add catalog.list_best(reqs)
index.add "<h2>By First Tag</h2>\n"
index.add catalog.list_by(catalog.cat2proj, "cat_")
# 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"