gitea源码

repo-diff-commit.ts 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
  2. import {GET} from '../modules/fetch.ts';
  3. async function loadBranchesAndTags(area: Element, loadingButton: Element) {
  4. loadingButton.classList.add('disabled');
  5. try {
  6. const res = await GET(loadingButton.getAttribute('data-fetch-url'));
  7. const data = await res.json();
  8. hideElem(loadingButton);
  9. addTags(area, data.tags);
  10. addBranches(area, data.branches, data.default_branch);
  11. showElem(area.querySelectorAll('.branch-and-tag-detail'));
  12. } finally {
  13. loadingButton.classList.remove('disabled');
  14. }
  15. }
  16. function addTags(area: Element, tags: Array<Record<string, any>>) {
  17. const tagArea = area.querySelector('.tag-area');
  18. toggleElem(tagArea.parentElement, tags.length > 0);
  19. for (const tag of tags) {
  20. addLink(tagArea, tag.web_link, tag.name);
  21. }
  22. }
  23. function addBranches(area: Element, branches: Array<Record<string, any>>, defaultBranch: string) {
  24. const defaultBranchTooltip = area.getAttribute('data-text-default-branch-tooltip');
  25. const branchArea = area.querySelector('.branch-area');
  26. toggleElem(branchArea.parentElement, branches.length > 0);
  27. for (const branch of branches) {
  28. const tooltip = defaultBranch === branch.name ? defaultBranchTooltip : null;
  29. addLink(branchArea, branch.web_link, branch.name, tooltip);
  30. }
  31. }
  32. function addLink(parent: Element, href: string, text: string, tooltip?: string) {
  33. const link = document.createElement('a');
  34. link.classList.add('muted', 'tw-px-1');
  35. link.href = href;
  36. link.textContent = text;
  37. if (tooltip) {
  38. link.classList.add('tw-border', 'tw-border-secondary', 'tw-rounded');
  39. link.setAttribute('data-tooltip-content', tooltip);
  40. }
  41. parent.append(link);
  42. }
  43. export function initRepoDiffCommitBranchesAndTags() {
  44. for (const area of document.querySelectorAll('.branch-and-tag-area')) {
  45. const btn = area.querySelector('.load-branches-and-tags');
  46. btn.addEventListener('click', () => loadBranchesAndTags(area, btn));
  47. }
  48. }