Files snapshot from common-html-page-wrapper

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
668454 Tucker McKnight
7f8822 Tucker McKnight
7f8822 Tucker McKnight
7f8822 Tucker McKnight
ec91a0 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
7bbc3b Tucker McKnight
7f8822 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b 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
7f8822 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
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
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
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
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
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
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
668454 Tucker McKnight
668454 Tucker McKnight
668454 Tucker McKnight
668454 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
668454 Tucker McKnight
7bbc3b Tucker McKnight
7bbc3b Tucker McKnight
668454 Tucker McKnight
668454 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
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
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
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 branchesListItems from './branchesListItems.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 branch: Repository['branches'][0] = data.currentBranch

  const slugify = eleventyConfig.getFilter("slugify")
  const nav = NavHelper(reposConfig, slugify, repo.name, branch.name)

  const branchesWithHrefs = repo.branches.map((branch) => {
    return {
      name: branch.name,
      href: nav.repoBranchHome(branch.name) + '/' + data.nav.path,
      date: repo.commits.get(branch.head).date.toISOString(),
    }
  })

  return {
    rootPath: nav.rootPath(),
    pageTitle: repo.name,
    additionalHeadContent: [
      m('script', m.trust(`
        window.branchesWithHrefs = ${JSON.stringify(branchesWithHrefs)};
        window.defaultBranch = "${repo.defaultBranch}";
        window.currentBranch = "${branch.name}";
        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"}, [
      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.repoCurrentBranchHome()
          }, repo.name)
        ),
        m('li', {class: "nav-item"}, [
          m('span', {class: "nav-link d-inline-block"}, 'Branch:'),
          m('div', {class: "branch-selector dropdown-center d-inline-block"}, [
            m('button', {
              class: "branches nav-link d-inline-block btn btn-bg dropdown-toggle",
              'data-bs-toggle': "dropdown",
              'data-bs-auto-close': "outside",
              'aria-expanded': "false"
            }, branch.name),
            m('div', {class: "dropdown-menu"}, [
              m('form', {class: "mx-3 my-1"}, [
                m('input', {type: "text", class: "form-control", id: "dropdownBranchSearch", placeholder: "Search branches..."}),
                m('div', [
                  m('div', {class: "row mt-3"},
                    m('div', {class: "col"},
                      m('label', {class: "form-label"}, 'Sort by:')
                    )
                  ),
                  m('div', {class: "sortRadioButtons"}, [
                    m('div', {class: "sortRadioButton pe-1"}, [
                      m('input', {class: "form-check-input sort-filter", type: "radio", name: "branchSort", value: 'date', id: "branchSortByDate", checked: true}),
                      m('label', {class: "form-check-label", for: "branchSortByDate"}, 'Last commit')
                    ]),
                    m('div', {class: "sortRadioButton ps-1"}, [
                      m('input', {class: "form-check-input sort-filter", type: "radio", name: "branchSort", value: 'name', id: "branchSortByName"}),
                      m('label', {class: "form-check-label", for: "branchSortByName"}, 'Name')
                    ])
                  ])
                ])
              ]),
              m('div', {class: "dropdown-divider"}),
              m('div', {id: "dropdown-branches-results", class: "dropdown-branches"},
                branchesListItems(branchesWithHrefs, repo.defaultBranch, branch.name, 'date')
              )
            ])
          ])
        ])
      ])
    ]),
    pageContent: [
      m('div', {class: "row"},
        m('div', {class: "col"},
          m('nav', {class: "navbar navbar-expand"},
            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.repoCurrentBranchHome()}, 'Home')
              ),
              m('li', {class: "nav-item"},
                m('a', {class: `nav-link ${data.navTab === 'files' ? 'active' : ''}`, href: nav.repoCurrentBranchFiles()}, 'Files')
              ),
              m('li', {class: "nav-item"},
                m('a', {class: `nav-link ${data.navTab === 'commits' ? 'active' : ''}`, href: nav.repoCurrentBranchCommits()}, 'Commits')
              ),
              m('li', {class: "nav-item"},
                m('a', {class: `nav-link ${data.navTab === 'branches' ? 'active' : ''}`, href: nav.repoCurrentBranchBranches()}, 'Branches')
              )
            ])
          )
        )
      ),
      m('div', {class: "row"},
        m('div', {class: "col-12"},
          await pageContent
        )
      ),
    ]
  }
}