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:
wxiaoguang 2022-03-29 11:21:30 +08:00 committed by GitHub
parent 90e0a402c1
commit d4c789dfc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 100 additions and 82 deletions

View file

@ -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();
});
}