mirror of
https://codeberg.org/davrot/forgejo.git
synced 2025-07-15 13:00:03 +02: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:
parent
90e0a402c1
commit
d4c789dfc1
12 changed files with 100 additions and 82 deletions
|
@ -12,7 +12,7 @@
|
|||
<meta name="keywords" content="{{MetaKeywords}}">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
{{if .GoGetImport}}
|
||||
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">
|
||||
<meta name="go-import" content="{{.GoGetImport}} git {{.RepoCloneLink.HTTPS}}">
|
||||
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}">
|
||||
{{end}}
|
||||
{{if .FeedURL}}
|
||||
|
|
|
@ -1,42 +1,24 @@
|
|||
{{if not $.DisableHTTP}}
|
||||
<button class="ui basic clone button no-transition" id="repo-clone-https" data-link="{{if $.PageIsWiki}}{{$.WikiCloneLink.HTTPS}}{{else}}{{$.CloneLink.HTTPS}}{{end}}">
|
||||
<!-- there is always at least one button (by context/repo.go) -->
|
||||
{{if $.CloneButtonShowHTTPS}}
|
||||
<button class="ui basic clone button no-transition" id="repo-clone-https" data-link="{{$.CloneButtonOriginLink.HTTPS}}">
|
||||
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
||||
</button>
|
||||
{{end}}
|
||||
{{if and (not $.DisableSSH) (or $.IsSigned $.ExposeAnonSSH)}}
|
||||
<button class="ui basic clone button no-transition" id="repo-clone-ssh" data-link="{{if $.PageIsWiki}}{{$.WikiCloneLink.SSH}}{{else}}{{$.CloneLink.SSH}}{{end}}">
|
||||
{{if $.CloneButtonShowSSH}}
|
||||
<button class="ui basic clone button no-transition" id="repo-clone-ssh" data-link="{{$.CloneButtonOriginLink.SSH}}">
|
||||
SSH
|
||||
</button>
|
||||
{{end}}
|
||||
{{if not $.DisableHTTP}}
|
||||
<input id="repo-clone-url" value="{{if $.PageIsWiki}}{{$.WikiCloneLink.HTTPS}}{{else}}{{$.CloneLink.HTTPS}}{{end}}" readonly>
|
||||
{{else if and (not .DisableSSH) (or $.IsSigned $.ExposeAnonSSH)}}
|
||||
<input id="repo-clone-url" value="{{if $.PageIsWiki}}{{$.WikiCloneLink.SSH}}{{else}}{{$.CloneLink.SSH}}{{end}}" readonly>
|
||||
{{end}}
|
||||
{{if or (not $.DisableHTTP) (and (not $.DisableSSH) (or $.IsSigned $.ExposeAnonSSH))}}
|
||||
<button class="ui basic icon button tooltip" id="clipboard-btn" data-content="{{.i18n.Tr "copy_url"}}" data-clipboard-target="#repo-clone-url">
|
||||
{{svg "octicon-paste"}}
|
||||
</button>
|
||||
{{end}}
|
||||
{{if not (and $.DisableHTTP $.DisableSSH)}}
|
||||
<script>
|
||||
<!-- /* eslint-disable */ -->
|
||||
window.config.pageData['repoCloneButtons']= {httpsDisabled: {{$.DisableHTTP}}};
|
||||
</script>
|
||||
<script>
|
||||
(() => {
|
||||
const tmplData = window.config.pageData.repoCloneButtons;
|
||||
const isSSH = tmplData.httpsDisabled || localStorage.getItem('repo-clone-protocol') === 'ssh';
|
||||
const sshButton = document.getElementById('repo-clone-ssh');
|
||||
const httpsButton = document.getElementById('repo-clone-https');
|
||||
const input = document.getElementById('repo-clone-url');
|
||||
if (input) input.value = (isSSH ? sshButton : httpsButton).getAttribute('data-link');
|
||||
if (sshButton) sshButton.classList[isSSH ? 'add' : 'remove']('primary');
|
||||
if (httpsButton) httpsButton.classList[isSSH ? 'remove' : 'add']('primary');
|
||||
setTimeout(() => {
|
||||
if (sshButton) sshButton.classList.remove('no-transition');
|
||||
if (httpsButton) httpsButton.classList.remove('no-transition');
|
||||
}, 100);
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
<!-- the value will be updated by initRepoCloneLink, the code below is used to avoid UI flicking -->
|
||||
<input id="repo-clone-url" value="" readonly>
|
||||
<script>
|
||||
(() => {
|
||||
const proto = localStorage.getItem('repo-clone-protocol') || 'https';
|
||||
const btn = document.getElementById(`repo-clone-${proto}`);
|
||||
// it's ok if we don't find the btn here, initRepoCloneLink will take care of it
|
||||
document.getElementById('repo-clone-url').value = btn ? btn.getAttribute('data-link') : '';
|
||||
})();
|
||||
</script>
|
||||
<button class="ui basic icon button tooltip" id="clipboard-btn" data-content="{{.i18n.Tr "copy_url"}}" data-clipboard-target="#repo-clone-url">
|
||||
{{svg "octicon-paste"}}
|
||||
</button>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<h4 class="ui top attached header">
|
||||
{{.i18n.Tr "repo.quick_guide"}}
|
||||
</h4>
|
||||
<div class="ui attached guide table segment">
|
||||
<div class="ui attached guide table segment empty-repo-guide">
|
||||
<div class="item">
|
||||
<h3>{{.i18n.Tr "repo.clone_this_repo"}} <small>{{.i18n.Tr "repo.clone_helper" "http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository" | Str2html}}</small></h3>
|
||||
<div class="ui action small input">
|
||||
|
@ -37,7 +37,7 @@ git init
|
|||
{{if ne .Repository.DefaultBranch "master"}}git checkout -b {{.Repository.DefaultBranch}}{{end}}
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin <span class="clone-url">{{$.CloneLink.HTTPS}}</span>
|
||||
git remote add origin <span class="clone-url"></span>
|
||||
git push -u origin {{.Repository.DefaultBranch}}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -46,18 +46,23 @@ git push -u origin {{.Repository.DefaultBranch}}</code></pre>
|
|||
<div class="item">
|
||||
<h3>{{.i18n.Tr "repo.push_exist_repo"}}</h3>
|
||||
<div class="markup">
|
||||
<pre><code>git remote add origin <span class="clone-url">{{$.CloneLink.HTTPS}}</span>
|
||||
<pre><code>git remote add origin <span class="clone-url"></span>
|
||||
git push -u origin {{.Repository.DefaultBranch}}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<script defer>
|
||||
/* eslint-disable no-undef */
|
||||
const cloneUrls = document.getElementsByClassName('clone-url');
|
||||
if (cloneUrls) {
|
||||
for (let i = 0; i < cloneUrls.length; i++) {
|
||||
cloneUrls[i].textContent = (isSSH ? sshButton : httpsButton).getAttribute('data-link');
|
||||
<!-- the clone-url content will be updated by initRepoCloneLink, the code below is used to avoid UI flicking -->
|
||||
<script>
|
||||
(() => {
|
||||
const proto = localStorage.getItem('repo-clone-protocol') || 'https';
|
||||
const btn = document.getElementById(`repo-clone-${proto}`);
|
||||
const cloneUrls = document.getElementsByClassName('clone-url');
|
||||
// it's ok if we didn't find the btn here, initRepoCloneLink will take all the work
|
||||
if (btn) {
|
||||
for (let i = 0; i < cloneUrls.length; i++) {
|
||||
cloneUrls[i].textContent = btn.getAttribute('data-link');
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
{{else}}
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.BranchName}}.zip" rel="nofollow">{{svg "octicon-file-zip" 16 "mr-3"}}{{.i18n.Tr "repo.download_zip"}}</a>
|
||||
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.BranchName}}.tar.gz" rel="nofollow">{{svg "octicon-file-zip" 16 "mr-3"}}{{.i18n.Tr "repo.download_tar"}}</a>
|
||||
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.BranchName}}.bundle" rel="nofollow">{{svg "octicon-package" 16 "mr-3"}}{{.i18n.Tr "repo.download_bundle"}}</a>
|
||||
<a class="item" href="vscode://vscode.git/clone?url={{if $.PageIsWiki}}{{$.WikiCloneLink.HTTPS}}{{else}}{{$.CloneLink.HTTPS}}{{end}}">{{svg "gitea-vscode" 16 "mr-3"}}{{.i18n.Tr "repo.clone_in_vsc"}}</a>
|
||||
<a class="item" href="vscode://vscode.git/clone?url={{$.RepoCloneLink.HTTPS}}">{{svg "gitea-vscode" 16 "mr-3"}}{{.i18n.Tr "repo.clone_in_vsc"}}</a>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{{template "base/head" .}}
|
||||
<div class="page-content repository quickstart">
|
||||
<div class="page-content repository">
|
||||
{{template "repo/header" .}}
|
||||
<div class="ui container">
|
||||
<div class="ui grid">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue