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
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
523feb Tucker McKnight
523feb Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
600ca7 Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
79d4a6 Tucker McKnight
523feb Tucker McKnight
738e52 Tucker McKnight
738e52 Tucker McKnight
import {branchesListItems} from '../dist/js_templates/repo.js'
const setCheckbox = window.setCheckbox
const currentTheme = window.currentTheme
setCheckbox(currentTheme, document.getElementById('dark-mode-switch'))
const copyCommand = (event) => {
const elem = event.target
const cloneText = elem.dataset.cloneUrl
const originalInnerText = elem.innerText
navigator.clipboard.writeText(cloneText).then(() => {
elem.innerText = "Copied"
})
window.setTimeout(() => {
elem.innerText = originalInnerText
}, 5000)
}
const createClonePopover = () => {
const div = document.createElement('div')
div.id = "clone-popover"
div.innerHTML = `
<label class='form-label'>HTTPS URL</label>
<div class='input-group d-flex flex-nowrap'>
<span class='clone overflow-hidden input-group-text'>${window.cloneUrl}</span>
<button data-clone-url='${window.cloneUrl}' class='btn btn-primary shadow-none text-white' id='clone-button'>Copy</button>
</div>`
const popoverBtn = document.getElementById("clone-popover-btn")
const bsPopover = new bootstrap.Popover(popoverBtn, {
sanitize: false,
html: true,
content: div,
title: 'Clone',
placement: 'bottom',
container: 'body',
})
div.querySelector("#clone-button").addEventListener('click', copyCommand)
document.body.addEventListener('click', (event) => {
const target = event.target
// If they didn't click the #clone-popover-btn or if we're not inside of
// popover, or if we *are* inside of a popover but a different one than the
// current one, then close the popover.
const parentPopover = target.closest(".popover")
if (
target.id !== "clone-popover-btn"
&& (
parentPopover === null
|| parentPopover !== bsPopover.tip)
) {
bsPopover.hide()
}
})
}
const toggleLastTouch = (event) => {
const isOn = event.target.checked
const annotations = document.getElementById("annotations")
if (isOn) {
annotations.classList.remove("d-none")
} else {
annotations.classList.add("d-none")
}
}
document.getElementById("showLastTouch")?.addEventListener('click', toggleLastTouch)
const copyPull = (event) => {
const hash = event.target.dataset.hash
const copiedAlert = document.createElement('span')
copiedAlert.innerText = "Copied"
navigator.clipboard.writeText(hash).then(() => {
event.target.parentElement.appendChild(copiedAlert)
})
window.setTimeout(() => {
copiedAlert.remove()
}, 5000)
}
document.querySelectorAll(".copy-btn").forEach((element) => {
element.addEventListener("click", copyPull)
})
const dropdownBranchesResults = document.getElementById('dropdown-branches-results')
document.getElementById('dropdownBranchSearch')?.addEventListener('input', (event) => {
const searchTerm = event.target.value
console.log(searchTerm)
let branches = window.branchesWithHrefs.filter((branch) => {
return branch.name.includes(searchTerm)
})
dropdownBranchesResults.innerHTML = branchesListItems(branches, window.defaultBranch)
})
const bootstrap = window.bootstrap
const jsVars = window.jsVars
if (document.getElementById('clone-popover-btn')) {
createClonePopover()
}