aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2022-03-29 11:21:30 +0800
committerGitHub <noreply@github.com>2022-03-29 05:21:30 +0200
commitd4c789dfc1c341413b77a2f21fe7339982102bed (patch)
tree1ab6fddbe6cbd1f14b939b54c5fd7f2ca7255bd6 /web_src/js
parent90e0a402c1185827fd3d5352ca915c531ce1e7b1 (diff)
downloadgitea-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.js64
-rw-r--r--web_src/js/features/repo-legacy.js4
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();