1 | -- pages/download.lua |
2 | -- Download page builder |
3 |
|
4 | -- Copyright (c) 2020 Joshua 'joshuas3' Stockin |
5 | -- <https://joshstock.in> |
6 |
|
7 | local utils = require("utils/utils") |
8 | local git = require("git/git_commands") |
9 |
|
10 | local builder = require("utils/builder") |
11 | local tabulate = require("utils/tabulate") |
12 | local nav = require("utils/nav") |
13 |
|
14 | local _M = function(repo, repo_dir, branch) |
15 | local build = builder:new() |
16 |
|
17 | -- Breadcrumb navigation and repository description |
18 | local breadcrumb_nav = { |
19 | {string.format("/%s", repo.name), repo.name}, |
20 | {string.format("/%s/download", repo.name), "download"}, |
21 | } |
22 | build:add("<h2>"..nav(breadcrumb_nav, " / ").."</h2>") |
23 | build:add("<p>"..repo.description.."</p>") |
24 |
|
25 | -- Navigation links |
26 | local navlinks = { |
27 | {string.format("/%s/download", repo.name), "<b>Download</b>"}, |
28 | {string.format("/%s/refs", repo.name), "Refs"}, |
29 | {string.format("/%s/log/%s", repo.name, branch.name), "Commit Log"}, |
30 | {string.format("/%s/tree/%s", repo.name, branch.name), "Files"} |
31 | } |
32 |
|
33 | for _, special in pairs(repo.specialfiles) do -- create nav items for special files |
34 | local split = string.split(special, " ") |
35 | table.insert(navlinks, { |
36 | string.format("/%s/blob/%s/%s", repo.name, branch.name, split[2]), |
37 | split[1] |
38 | }) |
39 | end |
40 |
|
41 | build:add([[<div class="nav">]]) |
42 | build:add(nav(navlinks)) |
43 | build:add("</div>") |
44 |
|
45 | -- Download URLs |
46 | build:add("<h3>Download URLs</h3>") |
47 |
|
48 | local urls = {} |
49 | urls.class = "download-urls" |
50 | urls.headers = { |
51 | {"protocol", "Protocol"}, |
52 | {"url", "URL"} |
53 | } |
54 | urls.rows = {} |
55 |
|
56 | for _, url in pairs(repo.download) do |
57 | local split = string.split(url, " ") |
58 | table.insert(urls.rows, {split[1], string.format([[<a href="%s">%s</a>]], split[2], split[2])}) |
59 | end |
60 |
|
61 | build:add(tabulate(urls)) |
62 |
|
63 | -- Websites |
64 | build:add("<h3>Websites</h3>") |
65 |
|
66 | local sites = {} |
67 | sites.class = "websites" |
68 | sites.headers = { |
69 | {"name", "Website"}, |
70 | {"url", "URL"} |
71 | } |
72 | sites.rows = {} |
73 |
|
74 | for _, site in pairs(repo.urls) do |
75 | local split = string.split(site, " ") |
76 | table.insert(sites.rows, {split[1], string.format([[<a href="%s">%s</a>]], split[2], split[2])}) |
77 | end |
78 |
|
79 | build:add(tabulate(sites)) |
80 |
|
81 | return build |
82 | end |
83 |
|
84 | return _M |
85 |
|