Branch

main.js

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()
}