Tucker McKnight <tucker.mcknight@gmail.com> | Tue Sep 02 2025
Add patch.njk page Fix some references to static files that weren't using the reposPath variable. Put main.css in the vendors folder, which should be renamed at some point, but for now it gets main.css into a dist/ location that can be used by the virutal templates. Change the way the light/dark theme switcher works; just replace "prism.css" or "prism_dark.css" instead of replacing the full path. This avoids having to know the reposPath variable in a JS file.
31 32 33 34 35 36 37
}
const link: any = document.getElementById("prism-theme")
const preferred = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
const stylesheet = window['currentTheme'] === 'dark' || (window['currentTheme'] === 'auto' && preferred === 'dark') ? "/vendor/prism_dark.css" : "/vendor/prism.css"
link.href = stylesheet
}
window['toggleDarkMode'] = (button) => {
const clickedOption = button.dataset.themePref31 32 33 34 35 36 37
}
const link: any = document.getElementById("prism-theme")
const preferred = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
const stylesheet = window['currentTheme'] === 'dark' || (window['currentTheme'] === 'auto' && preferred === 'dark') ? "prism_dark.css" : "prism.css"
link.href = link.href.split("/").slice(0, -1).concat(stylesheet).join("/")
}
window['toggleDarkMode'] = (button) => {
const clickedOption = button.dataset.themePref3 4 5 6 7
import repos from './src/repos.ts'
import branches from './src/branches.ts'
import flatFiles from './src/flatFiles.ts'
import paginatedPatches from './src/paginatedPatches.ts'
import {getLocation} from './src/helpers.ts'
import repoOperations from './src/vcses/operations.ts'3 4 5 6 7 8
import repos from './src/repos.ts'
import branches from './src/branches.ts'
import flatFiles from './src/flatFiles.ts'
import flatPatches from './src/flatPatches.ts'
import paginatedPatches from './src/paginatedPatches.ts'
import {getLocation} from './src/helpers.ts'
import repoOperations from './src/vcses/operations.ts'33 34 35 36 37 38 39
const frontend = `${__dirname}/frontend`
eleventyConfig.addPassthroughCopy({
[vendor]: "vendor",
[frontend]: "frontend"
})
eleventyConfig.on(33 34 35 36 37 38 39
const frontend = `${__dirname}/frontend`
eleventyConfig.addPassthroughCopy({
[vendor]: `${reposPath}/vendor`,
[frontend]: `${reposPath}/frontend`,
})
eleventyConfig.on(176 177 178 179 180 181 182 183 184
return res.stdout
})
eleventyConfig.addAsyncFilter("getReadMe", async (repoName, branchName) => {
console.log("getreadme")
console.log(branchName)
console.log(repoName)
const location = getLocation(reposConfiguration, branchName, repoName)
const config = reposConfiguration.repos[repoName]
let command = ''176 177 178 179 180 181 182 183 184 185 186 187 188 189
return res.stdout
})
eleventyConfig.addFilter("pagesJustForBranch", (pages, repoName, branchName) => {
return pages.filter(page => page.repoName === repoName && page.branchName === branchName)
})
eleventyConfig.addFilter("date", (dateString) => {
return new Date(dateString).toDateString()
})
eleventyConfig.addAsyncFilter("getReadMe", async (repoName, branchName) => {
const location = getLocation(reposConfiguration, branchName, repoName)
const config = reposConfiguration.repos[repoName]
let command = ''303 304 305 306 307 308
size: 1,
alias: "branch",
},
branches: branchesData,
permalink: (data) => {
const repoName = data.branch.repoName
const branchName = data.branch.branchName303 304 305 306 307
size: 1,
alias: "branch",
},
permalink: (data) => {
const repoName = data.branch.repoName
const branchName = data.branch.branchName324 325 326 327 328 329
const paginatedPatchesData = await paginatedPatches(reposData)
eleventyConfig.addTemplate(
`repos/patches.njk`,
topLayoutPartial + repoTemplate + bottomLayoutPartial,
{
pagination: {
data: "paginatedPatches",324 325 326 327 328 329
const paginatedPatchesData = await paginatedPatches(reposData)
eleventyConfig.addTemplate(
`repos/patches.njk`,
topLayoutPartial + patchesTemplate + bottomLayoutPartial,
{
pagination: {
data: "paginatedPatches",335 336 337 338 339 340
permalink: (data) => {
const repoName = data.patchPage.repoName
const branchName = data.patchPage.branchName
return `${reposPath}/${eleventyConfig.getFilter("slugify")(repoName)}/branches/${eleventyConfig.getFilter("slugify")(branchName)}/patches/page${data.patchPage.pageNumber}`
},
eleventyComputed: {
nav: {335 336 337 338 339 340
permalink: (data) => {
const repoName = data.patchPage.repoName
const branchName = data.patchPage.branchName
return `${reposPath}/${eleventyConfig.getFilter("slugify")(repoName)}/branches/${eleventyConfig.getFilter("slugify")(branchName)}/patches/page${data.patchPage.pageNumber}/`
},
eleventyComputed: {
nav: {20 21 22 23 24 25 26 27
const selectBranch = (e) => {
const values = e.value.split(",")
window.location = `/repos/${values[0]}/branches/${values[1]}/${values[2]}`
}
</script>
<script src="/frontend/main.js"></script>
</body>
</html>20 21 22 23 24 25 26 27
const selectBranch = (e) => {
const values = e.value.split(",")
window.location = `{{reposPath}}/${values[0]}/branches/${values[1]}/${values[2]}`
}
</script>
<script src="{{reposPath}}/frontend/main.js"></script>
</body>
</html>28 29 30 31 32 33 34 35 36 37 38
{% endif %}
</script>
<script src="/frontend/top.js"></script>
<link rel="stylesheet" id="prism-theme" type="text/css" href="/vendor/prism.css" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js" integrity="sha384-j1CDi7MgGQ12Z7Qab0qlWQ/Qqz24Gc6BM0thvEMVjHnfYGF0rmFCozFSxQBxwHKO" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="/static/main.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
28 29 30 31 32 33 34 35 36 37 38
{% endif %}
</script>
<script src="{{reposPath}}/frontend/top.js"></script>
<link rel="stylesheet" id="prism-theme" type="text/css" href="{{reposPath}}/vendor/prism.css" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js" integrity="sha384-j1CDi7MgGQ12Z7Qab0qlWQ/Qqz24Gc6BM0thvEMVjHnfYGF0rmFCozFSxQBxwHKO" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="{{reposPath}}/vendor/main.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
136 137 138 139 140 141
}
const getLocation = (reposConfig: any, branchName: string, repoName: string): string => {
console.log(repoName)
const config = reposConfig.repos[repoName]
if (config._type === "darcs") {
return config.branches[branchName].location136 137 138 139 140
}
const getLocation = (reposConfig: any, branchName: string, repoName: string): string => {
const config = reposConfig.repos[repoName]
if (config._type === "darcs") {
return config.branches[branchName].location11 12 13 14 15 16
{% for patch in patchPage.patches %}
<li class="patch">
<div>
<span class="patch-name"><a href="/repos/{{patchPage.repoName | slugify}}/branches/{{patchPage.branchName | slugify}}/patches/{{patch.hash}}">{{patch.name}}</a></span>
<br />
<span>{{patch.date | date}}</span>
<br />11 12 13 14 15 16
{% for patch in patchPage.patches %}
<li class="patch">
<div>
<span class="patch-name"><a href="{{reposPath}}/{{patchPage.repoName | slugify}}/branches/{{patchPage.branchName | slugify}}/patches/{{patch.hash}}">{{patch.name}}</a></span>
<br />
<span>{{patch.date | date}}</span>
<br />26 27 28 29 30 31
<ul class="pagination">
{% for pageObj in (paginatedPatches | pagesJustForBranch(patchPage.repoName, patchPage.branchName)) %}
<li class="page-item">
<a class="page-link {% if pageObj.pageNumber == patchPage.pageNumber %}active{% endif %}" href="/repos/{{patchPage.repoName | slugify}}/branches/{{patchPage.branchName}}/patches/page{{pageObj.pageNumber}}">{{ pageObj.pageNumber }}</a>
</li>
{% endfor %}
</ul>26 27 28 29 30 31
<ul class="pagination">
{% for pageObj in (paginatedPatches | pagesJustForBranch(patchPage.repoName, patchPage.branchName)) %}
<li class="page-item">
<a class="page-link {% if pageObj.pageNumber == patchPage.pageNumber %}active{% endif %}" href="{{reposPath}}/{{patchPage.repoName | slugify}}/branches/{{patchPage.branchName}}/patches/page{{pageObj.pageNumber}}">{{ pageObj.pageNumber }}</a>
</li>
{% endfor %}
</ul>
-1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
pre {
font-size: 14px !important;
}
code {
white-space: pre;
}
blockquote {
margin-left: 0.25rem;
padding-left: 0.5rem;
border-left: 3px solid royalblue;
background: rgba(125, 125, 125, 0.07);
overflow: hidden;
}
blockquote p {
margin: 0.5rem;
}
.hunk {
box-sizing: border-box;
margin-bottom: 25px;
}
[data-type=before] mark {
background-color: rgba(252, 78, 78, .15);
}
[data-type=after] mark {
background-color: rgba(151, 247, 203, .4);
}
[data-bs-theme=dark] [data-type=after] mark {
background-color: rgba(51, 247, 160, .1); /* different green for dark mode; looks better */
}
.unified .diff {
flex-wrap: wrap;
}
.diff-left, .diff-right {
flex: 1;
overflow: hidden;
}
.unified .diff-left, .unified .diff-right {
flex-basis: 100%;
}
.patch {
margin: 12px 0;
}
.patch-name {
font-size: 18px;
font-weight: bold;
}
.patch-hash {
font-size: 14px;
margin: 6px 0;
}
.clone {
font-family: monospace;
font-size: 12px;
}
.popover {
max-width: 100%;
}