Files snapshot from main

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
90eb8e Tucker McKnight
4f267d Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
90eb8e Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
90eb8e Tucker McKnight
c945a9 Tucker McKnight
c945a9 Tucker McKnight
c945a9 Tucker McKnight
c945a9 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
c945a9 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
0dfdda Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
99f634 Tucker McKnight
c945a9 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
4f267d Tucker McKnight
b1c071 Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
b1c071 Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
b1c071 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
7db57c Tucker McKnight
b1c071 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
eafb15 Tucker McKnight
b1c071 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
b1c071 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
99f634 Tucker McKnight
4f267d Tucker McKnight
90eb8e Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
4f267d Tucker McKnight
import { type ReposConfigurationWithDefaultsApplied } from "../../src/configTypes.ts"

/**
 * Returns links to various pages used by the default template. Will return a link
 * that assumes you want to stay on the current ref, unless you give a new ref in
 * the function argument. E.g if you are currently at /tags/v-1-0/, and you call
 * the commits() function, it'll give you /tag/v-1-0/commits, unless you pass in
 * an argument like commits({refName: 'main', refType: 'branch'}), in which case
 * it'll give you /branch/main/commits.
 */
type CurrentRefArgs = {
  reposConfig: ReposConfigurationWithDefaultsApplied,
  slugify: Function,
  currentRepoName: string,
  currentRefName: string,
  currentRefType: 'branch' | 'tag' | 'commit'
}
export const NavHelper = (args: CurrentRefArgs) => {
  const reposPath = args.reposConfig.path

  // These two aren't actually used by any pages, but they're in almost
  // every page URL. E.g. all of them start with 'repos/my-repo-name'
  // or 'repos/my-repo-name/branches.'
  const repoBasePath = `${reposPath}/${args.slugify(args.currentRepoName)}`

  const refPath = (refName, refType) => {
    if (refType === 'commit'
        || (refType === 'branch' && refName === args.reposConfig.repos[args.currentRepoName].defaultBranch)) {
      return repoBasePath
    }
    return `${repoBasePath}/${refType}/${args.slugify(refName)}`
  }

  type RefArgument = {
    refName: string,
    refType: 'branch' | 'tag'
  }

  return {
    rootPath: () => {
      if (reposPath === "") {
        return "/"
      }
      else {
        return reposPath + '/'
      }
    },
    repoHomePath: () => {
      return repoBasePath
    },
    refHome: (newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return refPath(refName, refType)
    },
    file: (filePath: string, newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/files/${filePath.split('/')
        .map((pathPart) => {
          return pathPart.split('.').map((subPart) => {
            return args.slugify(subPart)
          }).join('.')
        }).join('/')}.html`
    },
    raw: (filePath: string, newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/raw/${filePath.split('/')
        .map((filePart) => {
          return filePart.split('.').map((subPart) => {
            return args.slugify(subPart)
          }).join('.')
        }).join('/')}`
    },
    files: (newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/files`
    },
    commit: (hash: string) => {
      return `${repoBasePath}/commits/${hash}`
    },
    commits: (pageNum: number, newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/commits/page${pageNum.toString()}`
    },
    branches: (newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/branches`
    },
    tags: (newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/tags`
    },
    rssFeed: (newRef: RefArgument = null) => {
      const refName = newRef?.refName || args.currentRefName
      const refType = newRef?.refType || args.currentRefType

      return `${refPath(refName, refType)}/commits.xml`
    },
    homepageButtons: args.reposConfig.repos[args.currentRepoName].defaultTemplate.homepageButtons
  }
}