diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2022-03-29 11:21:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 05:21:30 +0200 |
commit | d4c789dfc1c341413b77a2f21fe7339982102bed (patch) | |
tree | 1ab6fddbe6cbd1f14b939b54c5fd7f2ca7255bd6 /web_src/js | |
parent | 90e0a402c1185827fd3d5352ca915c531ce1e7b1 (diff) | |
download | gitea-d4c789dfc1c341413b77a2f21fe7339982102bed.tar.gz gitea-d4c789dfc1c341413b77a2f21fe7339982102bed.zip |
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`
Diffstat (limited to 'web_src/js')
-rw-r--r-- | web_src/js/features/repo-common.js | 64 | ||||
-rw-r--r-- | web_src/js/features/repo-legacy.js | 4 |
2 files changed, 49 insertions, 19 deletions
diff --git a/web_src/js/features/repo-common.js b/web_src/js/features/repo-common.js index 9479fa78e4..89dae26277 100644 --- a/web_src/js/features/repo-common.js +++ b/web_src/js/features/repo-common.js @@ -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'); +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-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'); - } + $repoCloneHttps.on('click', () => { + localStorage.setItem('repo-clone-protocol', 'https'); + updateUi(); }); - $('#repo-clone-url').on('click', function () { - $(this).select(); + + $inputLink.on('click', () => { + $inputLink.select(); }); } diff --git a/web_src/js/features/repo-legacy.js b/web_src/js/features/repo-legacy.js index d51dfe185c..185a0014fa 100644 --- a/web_src/js/features/repo-legacy.js +++ b/web_src/js/features/repo-legacy.js @@ -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(); |