Files snapshot from file-caching

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
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
668454 Tucker McKnight
7f8822 Tucker McKnight
7f8822 Tucker McKnight
7f8822 Tucker McKnight
2a54fe Tucker McKnight
7f8822 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7f8822 Tucker McKnight
7bbc3b Tucker McKnight
99f634 Tucker McKnight
7f8822 Tucker McKnight
7bbc3b Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
7f8822 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
2a54fe Tucker McKnight
ebf7b0 Tucker McKnight
ebf7b0 Tucker McKnight
2a54fe Tucker McKnight
7f8822 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
d5489c Tucker McKnight
7e91e5 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
eeb992 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
eeb992 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
99f634 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
2a54fe Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
d13929 Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
d13929 Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
d13929 Tucker McKnight
eeb992 Tucker McKnight
eeb992 Tucker McKnight
d13929 Tucker McKnight
eafb15 Tucker McKnight
eafb15 Tucker McKnight
99f634 Tucker McKnight
eeb992 Tucker McKnight
668454 Tucker McKnight
eeb992 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7f8822 Tucker McKnight
7f8822 Tucker McKnight
import m from 'mithril'
import { type ReposConfiguration } from '../../src/configTypes.ts'
import { type Repository } from '../../src/dataTypes.ts'
import { NavHelper } from '../helpers/nav.ts'
import relDropDown from './relDropDown.ts'

export default async (reposConfig: ReposConfiguration, eleventyConfig: any, data: any, pageContent: any) => {
  // this still necessary?
  if (data.currentRepo === '') {
    return
  }

  const repo: Repository = data.currentRepo
  const ref: Repository['branches'][0] = data.currentRef

  const slugify = eleventyConfig.getFilter("slugify")
  const nav = NavHelper({
    reposConfig,
    slugify,
    currentRepoName: repo.name,
    currentRefName: ref.name,
    currentRefType: data.currentRefType,
  })

  const refObject = (ref, refType: 'branch' | 'tag') => {
    return {
      name: ref.name,
      href: nav.refHome({refName: ref.name, refType}) + '/' + data.nav.path,
      date: repo.commits.get(ref.sha).date.toISOString(),
    }
  }

  const branchesWithHrefs = {
    branches: repo.branches.map(branch => refObject(branch, 'branch')),
    tags: repo.tags.map(tag => refObject(tag, 'tag')),
  }

  return {
    rootPath: nav.rootPath(),
    pageTitle: repo.name,
    additionalHeadContent: [
      m('script', m.trust(`
        window.branchesWithHrefs = ${JSON.stringify(branchesWithHrefs)};
        window.defaultBranch = "${repo.defaultBranch}";
        window.currentRef = "${ref.name}";
        window.currentRefType = "${data.currentRefType}";
        window.cloneUrl = "${repo.cloneUrl}";
      `)),
      m('link', {
        rel: "stylesheet",
        id: "prism-theme",
        type: "text/css",
        href: `${data.reposPath}/vendor/prism.css`
      }),
    ],
    navbarContent: m('nav', {class: "navbar navbar-expand flex-wrap"}, [
      m('ul', {class: "navbar-nav flex-wrap"}, [
        m('li', {class: "nav-item"},
          m('a', {
            class: "nav-link",
            href: nav.rootPath()
          }, m.trust('❮ repos'))
        ),
        m('li', {class: "nav-item"},
          m('a', {
            class: "nav-link",
            href: nav.refHome()
          }, repo.name)
        ),
        m('li', {class: "nav-item me-4 mb-1"}, [
          m('span', {class: "nav-link d-inline-block"}, 'ref:'),
          relDropDown(ref, data.currentRefType, repo, branchesWithHrefs),
        ]),
        m('ul', {class: "main-nav navbar-nav flex-wrap"}, [
          m('li', {class: "nav-item"},
            m('a', {class: `nav-link ${data.navTab === 'home' ? 'active' : ''}`, 'aria-current': "page", href: nav.refHome()}, 'Home')
          ),
          m('li', {class: "nav-item"},
            m('a', {class: `nav-link ${data.navTab === 'files' ? 'active' : ''}`, href: nav.files()}, 'Files')
          ),
          m('li', {class: "nav-item"},
            m('a', {class: `nav-link ${data.navTab === 'commits' ? 'active' : ''}`, href: nav.commits()}, 'Commits')
          ),
          m('li', {class: "nav-item"},
            m('a', {class: `nav-link ${data.navTab === 'branches' ? 'active' : ''}`, href: nav.branches()}, 'Branches')
              ),
              m('li', {class: "nav-item"},
                m('a', {class: `nav-link ${data.navTab === 'tags' ? 'active' : ''}`, href: nav.tags()}, 'Tags')
          )
        ])
      ]),
    ]),
    pageContent: [
      m('div', {class: "row"},
        m('div', {class: "col-12"},
          await pageContent
        )
      ),
    ]
  }
}