Tucker McKnight
Make repo.ts use mithril instead of just being a big string
1
1
import m from 'mithril'
import render from 'mithril-node-render'
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
return `
<div class="row">
<div class="col">
<div class="px-4 pt-3 bezel-header">
<div class="row">
<div class="col-12 col-xl-6">
<h1 class="display-3 text-white"><em>${repo.name}</em></h1>
${repo.description ? '<p class="text-white fs-4">' + repo.description + '</p>' : ''}
</div>
<div class="col-12 col-xl-6 d-flex flex-column justify-content-around">
<div class="row flex-grow-1 align-items-stretch language-percent-row">
<div class="col-12 d-flex align-items-stretch">
<div class="d-flex flex-grow-1 flex-nowrap">
${topLanguagePercentages.map((percentTuple) => `<div class='language-col flex-grow-1 overflow-hidden'><div class="language-name text-light font-monospace">${percentTuple[0]}</div><div class="language-percent" style="flex-grow: ${percentTuple[1] / largestPercent}"></div></div>`).join('')}
<div class='language-col flex-grow-1 overflow-hidden'><div class="language-name text-light font-monospace">other</div><div class="language-percent" style="flex-grow: ${otherLanguagePercent / largestPercent}"></div></div>
</div>
</div>
</div>
<div class="row align-items-center">
<div class="col-12">
<div class="header-button-container">
<button class="btn btn-info btn-lg dropdown-toggle clone-popover-btn">Clone</button>
${nav.homepageButtons.map((buttonConfig) => {
return `<a class="btn btn-outline-info btn-lg shadow-none" href="${buttonConfig.url}" ${buttonConfig.newTab ? 'target="_blank"' : ''}>${buttonConfig.text}${buttonConfig.newTab ? ' <span>⧉</span>' : ''}</a>`
}).join('')}
</div>
</div>
</div>
</div>
</div>
<noscript>
<div class="row mt-2">
<div class="col">
<p class="font-monospace text-white">
Clone URL: ${repo.cloneUrl}
</p>
</div>
</div>
</noscript>
<div class="row mt-2">
<div class="col">
<a class="btn btn-outline-info badge shadow-none me-2" href="${nav.repoCurrentBranchRssFeed()}">
<div class="d-flex">
<img src="${nav.rootPath()}frontend/img/rss-icon.svg" style="width: 11px; margin-right: 5px;" />RSS
</div>
</a>
<p class="font-monospace text-white mb-2 d-inline-block">
Latest commit: ${latestCommit.date.toDateString()} <a class="fw-bold link-info" href="${nav.repoBranchCommitsBase()}${latestCommit.hash}">${latestCommit.hash.substr(0, 6)}</a> ${latestCommitMessage}
</p>
</div>
</div>
</div>
</div>
</div>
<div class="row my-4 mx-1">
<div class="col">
${await renderContentIfAvailable(await getReadMe(repo.name, branch.name), branch.name)}
</div>
</div>
`
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
const readmeContent = await renderContentIfAvailable(await getReadMe(repo.name, branch.name), branch.name)
return render([
m('div', {class: "row"}, [
m('div', {class: "col"}, [
m('div', {class: "px-4 pt-3 bezel-header"}, [
m('div', {class: "row"}, [
m('div', {class: "col-12 col-xl-6"}, [
m('h1', {class: "display-3 text-white"},
m('em', repo.name)
),
repo.description
? m('p', {class: "text-white fs-4"}, repo.description)
: null
]),
m('div', {class: "col-12 col-xl-6 d-flex flex-column justify-content-around"}, [
m('div', {class: "row flex-grow-1 align-items-stretch language-percent-row"}, [
m('div', {class: "col-12 d-flex align-items-stretch"}, [
m('div', {class: "d-flex flex-grow-1 flex-nowrap"}, topLanguagePercentages.map((percentTuple) => {
return m('div', {class: 'language-col flex-grow-1 overflow-hidden'}, [
m('div', {class: "language-name text-light font-monospace"}, percentTuple[0]),
m('div', {class: "language-percent", style: `flex-grow: ${percentTuple[1] / largestPercent};`})
])
}).concat([m('div', {class: 'language-col flex-grow-1 overflow-hidden'},
m('div', {class: "language-name text-light font-monospace"}, 'other'),
m('div', {class: "language-percent", style: `flex-grow: ${otherLanguagePercent / largestPercent};`})
)])),
])
]),
m('div', {class: "row align-items-center"}, [
m('div', {class: "col-12"}, [
m('div', {class: "header-button-container"}, [
m('button', {class: "btn btn-info btn-lg dropdown-toggle clone-popover-btn"}, 'Clone'),
nav.homepageButtons.map((buttonConfig) => {
return m('a', {
class: "btn btn-outline-info btn-lg shadow-none",
href: buttonConfig.url,
target: buttonConfig.newTab ? "_blank" : "_self"
}, m.trust(buttonConfig.text + `${buttonConfig.newTab ? ' <span>⧉</span>' : ''}`))
})
])
])
])
])
]),
m('noscript',
m('div', {class: "row mt-2"},
m('div', {class: "col"},
m('p', {class: "font-monospace text-white"},
`Clone URL: ${repo.cloneUrl}`
)
)
)
),
m('div', {class: "row mt-2"}, [
m('div', {class: "col"}, [
m('a', {class: "btn btn-outline-info badge shadow-none me-2", href: nav.repoCurrentBranchRssFeed()}, [
m('div', {class: "d-flex"}, [
m('img', {src: `${nav.rootPath()}frontend/img/rss-icon.svg`, style: "width: 11px; margin-right: 5px;"}),
'RSS'
])
]),
m('p', {class: "font-monospace text-white mb-2 d-inline-block"}, [
`Latest commit: ${latestCommit.date.toDateString()} `,
m('a', {class: "fw-bold link-info", href: `${nav.repoBranchCommitsBase()}${latestCommit.hash}`}, latestCommit.hash.substr(0, 6)),
' ',
latestCommitMessage,
])
])
])
])
])
]),
m('div', {class: "row my-4 mx-1"},
m('div', {class: "col"}, m.trust(readmeContent))
)
])