gitea源码

repo-migration.ts 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
  2. import {sanitizeRepoName} from './repo-common.ts';
  3. const service = document.querySelector<HTMLInputElement>('#service_type');
  4. const user = document.querySelector<HTMLInputElement>('#auth_username');
  5. const pass = document.querySelector<HTMLInputElement>('#auth_password');
  6. const token = document.querySelector<HTMLInputElement>('#auth_token');
  7. const mirror = document.querySelector<HTMLInputElement>('#mirror');
  8. const lfs = document.querySelector<HTMLInputElement>('#lfs');
  9. const lfsSettings = document.querySelector<HTMLElement>('#lfs_settings');
  10. const lfsEndpoint = document.querySelector<HTMLElement>('#lfs_endpoint');
  11. const items = document.querySelectorAll<HTMLInputElement>('#migrate_items input[type=checkbox]');
  12. export function initRepoMigration() {
  13. checkAuth();
  14. setLFSSettingsVisibility();
  15. user?.addEventListener('input', () => {checkItems(false)});
  16. pass?.addEventListener('input', () => {checkItems(false)});
  17. token?.addEventListener('input', () => {checkItems(true)});
  18. mirror?.addEventListener('change', () => {checkItems(true)});
  19. document.querySelector('#lfs_settings_show')?.addEventListener('click', (e) => {
  20. e.preventDefault();
  21. e.stopPropagation();
  22. showElem(lfsEndpoint);
  23. });
  24. lfs?.addEventListener('change', setLFSSettingsVisibility);
  25. const elCloneAddr = document.querySelector<HTMLInputElement>('#clone_addr');
  26. const elRepoName = document.querySelector<HTMLInputElement>('#repo_name');
  27. if (elCloneAddr && elRepoName) {
  28. let repoNameChanged = false;
  29. elRepoName.addEventListener('input', () => {repoNameChanged = true});
  30. elCloneAddr.addEventListener('input', () => {
  31. if (repoNameChanged) return;
  32. let repoNameFromUrl = elCloneAddr.value.split(/[?#]/)[0];
  33. const parts = /^(.*\/)?((.+?)\/?)$/.exec(repoNameFromUrl);
  34. if (!parts || parts.length < 4) {
  35. elRepoName.value = '';
  36. return;
  37. }
  38. repoNameFromUrl = parts[3].split(/[?#]/)[0];
  39. elRepoName.value = sanitizeRepoName(repoNameFromUrl);
  40. });
  41. }
  42. }
  43. function checkAuth() {
  44. if (!service) return;
  45. const serviceType = Number(service.value);
  46. checkItems(serviceType !== 1);
  47. }
  48. function checkItems(tokenAuth: boolean) {
  49. let enableItems = false;
  50. if (tokenAuth) {
  51. enableItems = token?.value !== '';
  52. } else {
  53. enableItems = user?.value !== '' || pass?.value !== '';
  54. }
  55. if (enableItems && Number(service?.value) > 1) {
  56. if (mirror?.checked) {
  57. for (const item of items) {
  58. item.disabled = item.name !== 'wiki';
  59. }
  60. return;
  61. }
  62. for (const item of items) item.disabled = false;
  63. } else {
  64. for (const item of items) item.disabled = true;
  65. }
  66. }
  67. function setLFSSettingsVisibility() {
  68. if (!lfs) return;
  69. const visible = lfs.checked;
  70. toggleElem(lfsSettings, visible);
  71. hideElem(lfsEndpoint);
  72. }