mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08: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();
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user