gitea源码

repo-issue-sidebar.ts 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import {POST} from '../modules/fetch.ts';
  2. import {queryElems, toggleElem} from '../utils/dom.ts';
  3. import {IssueSidebarComboList} from './repo-issue-sidebar-combolist.ts';
  4. function initBranchSelector() {
  5. // TODO: RemoveIssueRef: see "repo/issue/branch_selector_field.tmpl"
  6. const elSelectBranch = document.querySelector('.ui.dropdown.select-branch.branch-selector-dropdown');
  7. if (!elSelectBranch) return;
  8. const urlUpdateIssueRef = elSelectBranch.getAttribute('data-url-update-issueref');
  9. const elBranchMenu = elSelectBranch.querySelector('.reference-list-menu');
  10. queryElems(elBranchMenu, '.item:not(.no-select)', (el) => el.addEventListener('click', async function (e) {
  11. e.preventDefault();
  12. const selectedValue = this.getAttribute('data-id'); // eg: "refs/heads/my-branch"
  13. const selectedText = this.getAttribute('data-name'); // eg: "my-branch"
  14. if (urlUpdateIssueRef) {
  15. // for existing issue, send request to update issue ref, and reload page
  16. try {
  17. await POST(urlUpdateIssueRef, {data: new URLSearchParams({ref: selectedValue})});
  18. window.location.reload();
  19. } catch (error) {
  20. console.error(error);
  21. }
  22. } else {
  23. // for new issue, only update UI&form, do not send request/reload
  24. const selectedHiddenSelector = this.getAttribute('data-id-selector');
  25. document.querySelector<HTMLInputElement>(selectedHiddenSelector).value = selectedValue;
  26. elSelectBranch.querySelector('.text-branch-name').textContent = selectedText;
  27. }
  28. }));
  29. }
  30. function initRepoIssueDue() {
  31. const form = document.querySelector<HTMLFormElement>('.issue-due-form');
  32. if (!form) return;
  33. const deadline = form.querySelector<HTMLInputElement>('input[name=deadline]');
  34. document.querySelector('.issue-due-edit')?.addEventListener('click', () => {
  35. toggleElem(form);
  36. });
  37. document.querySelector('.issue-due-remove')?.addEventListener('click', () => {
  38. deadline.value = '';
  39. form.dispatchEvent(new Event('submit', {cancelable: true, bubbles: true}));
  40. });
  41. }
  42. export function initRepoIssueSidebar() {
  43. initBranchSelector();
  44. initRepoIssueDue();
  45. // init the combo list: a dropdown for selecting items, and a list for showing selected items and related actions
  46. queryElems<HTMLElement>(document, '.issue-sidebar-combo', (el) => new IssueSidebarComboList(el).init());
  47. }