mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Refactor repo clone button and repo clone links, fix JS error on empty repo page (#19208)
The last PR about clone buttons introduced an JS error when visiting an empty repo page: * https://github.com/go-gitea/gitea/pull/19028 * `Uncaught ReferenceError: isSSH is not defined`, because the variables are scoped and doesn't share between sub templates. This: 1. Simplify `templates/repo/clone_buttons.tmpl` and make code clear 2. Move most JS code into `initRepoCloneLink` 3. Remove unused `CloneLink.Git` 4. Remove `ctx.Data["DisableSSH"] / ctx.Data["ExposeAnonSSH"] / ctx.Data["DisableHTTP"]`, and only set them when is is needed (eg: deploy keys / ssh keys) 5. Introduce `Data["CloneButton*"]` to provide data for clone buttons and links 6. Introduce `Data["RepoCloneLink"]` for the repo clone link (not the wiki) 7. Remove most `ctx.Data["PageIsWiki"]` because it has been set in the `/wiki` middleware 8. Remove incorrect `quickstart` class in `migrating.tmpl`
This commit is contained in:
		| @@ -43,26 +43,56 @@ export function initRepoArchiveLinks() { | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export function initRepoClone() { | ||||
|   // Quick start and repository home | ||||
|   $('#repo-clone-ssh').on('click', function () { | ||||
|     $('.clone-url').text($(this).data('link')); | ||||
|     $('#repo-clone-url').val($(this).data('link')); | ||||
|     $(this).addClass('primary'); | ||||
|     $('#repo-clone-https').removeClass('primary'); | ||||
|     localStorage.setItem('repo-clone-protocol', 'ssh'); | ||||
|   }); | ||||
|   $('#repo-clone-https').on('click', function () { | ||||
|     $('.clone-url').text($(this).data('link')); | ||||
|     $('#repo-clone-url').val($(this).data('link')); | ||||
|     $(this).addClass('primary'); | ||||
|     if ($('#repo-clone-ssh').length > 0) { | ||||
|       $('#repo-clone-ssh').removeClass('primary'); | ||||
|       localStorage.setItem('repo-clone-protocol', 'https'); | ||||
| export function initRepoCloneLink() { | ||||
|   const defaultGitProtocol = 'https'; // ssh or https | ||||
|  | ||||
|   const $repoCloneSsh = $('#repo-clone-ssh'); | ||||
|   const $repoCloneHttps = $('#repo-clone-https'); | ||||
|   const $inputLink = $('#repo-clone-url'); | ||||
|  | ||||
|   if ((!$repoCloneSsh.length && !$repoCloneHttps.length) || !$inputLink.length) { | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   const updateUi = () => { | ||||
|     let isSSH = (localStorage.getItem('repo-clone-protocol') || defaultGitProtocol) === 'ssh'; | ||||
|     // there must be at least one clone button (by context/repo.go). if no ssh, then there must be https. | ||||
|     if (isSSH && $repoCloneSsh.length === 0) { | ||||
|       isSSH = false; | ||||
|     } else if (!isSSH && $repoCloneHttps.length === 0) { | ||||
|       isSSH = true; | ||||
|     } | ||||
|     const cloneLink = (isSSH ? $repoCloneSsh : $repoCloneHttps).attr('data-link'); | ||||
|     $inputLink.val(cloneLink); | ||||
|     if (isSSH) { | ||||
|       $repoCloneSsh.addClass('primary'); | ||||
|       $repoCloneHttps.removeClass('primary'); | ||||
|     } else { | ||||
|       $repoCloneSsh.removeClass('primary'); | ||||
|       $repoCloneHttps.addClass('primary'); | ||||
|     } | ||||
|     // the empty repo guide | ||||
|     $('.quickstart .empty-repo-guide .clone-url').text(cloneLink); | ||||
|   }; | ||||
|   updateUi(); | ||||
|  | ||||
|   setTimeout(() => { | ||||
|     // restore animation after first init | ||||
|     $repoCloneSsh.removeClass('no-transition'); | ||||
|     $repoCloneHttps.removeClass('no-transition'); | ||||
|   }, 100); | ||||
|  | ||||
|   $repoCloneSsh.on('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'ssh'); | ||||
|     updateUi(); | ||||
|   }); | ||||
|   $('#repo-clone-url').on('click', function () { | ||||
|     $(this).select(); | ||||
|   $repoCloneHttps.on('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'https'); | ||||
|     updateUi(); | ||||
|   }); | ||||
|  | ||||
|   $inputLink.on('click', () => { | ||||
|     $inputLink.select(); | ||||
|   }); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -16,7 +16,7 @@ import {svg} from '../svg.js'; | ||||
| import {htmlEscape} from 'escape-goat'; | ||||
| import {initRepoBranchTagDropdown} from '../components/RepoBranchTagDropdown.js'; | ||||
| import { | ||||
|   initRepoClone, | ||||
|   initRepoCloneLink, | ||||
|   initRepoCommonBranchOrTagDropdown, | ||||
|   initRepoCommonFilterSearchDropdown, | ||||
|   initRepoCommonLanguageStats, | ||||
| @@ -498,7 +498,7 @@ export function initRepository() { | ||||
|     initRepoCommonFilterSearchDropdown('.choose.branch .dropdown'); | ||||
|   } | ||||
|  | ||||
|   initRepoClone(); | ||||
|   initRepoCloneLink(); | ||||
|   initRepoCommonLanguageStats(); | ||||
|   initRepoSettingBranches(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user