forgejo/templates/repo/migrate/pagure.tmpl
Ryan Lerch 32c187e5bb fix(ui): improve Pagure migrator private issues clarity (#9502)
Followup to https://codeberg.org/forgejo/forgejo/pulls/8513
More at https://codeberg.org/fedora/forgejo-deployment/issues/186
Related: https://codeberg.org/forgejo/forgejo/pulls/8513#issuecomment-6075304, https://codeberg.org/forgejo/forgejo/pulls/8513/files#issuecomment-6075322

Previously, users were getting confused about the token/private issues
behavior in the Pagure migrator, as the UI didn't clearly explain the
two-repository workflow or the security implications of using an API token.
This commit updates the Pagure migration template to make the behavior
clearer by:

- Adding a collapsible details section for private issues functionality to
  reduce UI clutter since this feature is not expected to be used frequently
- Replacing inline help text with proper Fomantic UI message boxes (blue
  info for description, red warning for security notice)
- Providing clear explanations of the two-step migration process (public
  content first, then private issues archive)
- Adding prominent security warnings about repository visibility when
  importing private content

The private issues section is now hidden by default in a collapsible
element, making the standard migration flow cleaner while still providing
access to advanced functionality when needed.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9502
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: Ryan Lerch <rlerch@redhat.com>
Co-committed-by: Ryan Lerch <rlerch@redhat.com>
2025-10-02 15:40:19 +02:00

129 lines
5.3 KiB
Go HTML Template

{{template "base/head" .}}
<div role="main" aria-label="{{.Title}}" class="page-content repository new migrate">
<div class="ui middle very relaxed page grid">
<div class="column">
<form class="ui form" action="{{.Link}}" method="post">
{{template "base/disable_form_autofill"}}
{{.CsrfTokenHtml}}
<h3 class="ui top attached header">
{{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}}
<input id="service_type" type="hidden" name="service" value="{{.service}}">
</h3>
<div class="ui attached segment">
{{template "base/alert" .}}
<div class="inline required field {{if .Err_CloneAddr}}error{{end}}">
<label for="clone_addr">{{ctx.Locale.Tr "migrate.pagure.project_url"}}</label>
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required autocomplete="url">
<span class="help">
{{ctx.Locale.Tr "migrate.pagure.project_example"}}
{{if .Err_CloneAddr}}
{{ctx.Locale.Tr "migrate.pagure.incorrect_url"}}
{{end}}
</span>
</div>
<div class="inline required field {{if .Err_RepoName}}error{{end}}">
<label for="repo_name">{{ctx.Locale.Tr "repo.repo_name"}}</label>
<input id="repo_name" name="repo_name" value="{{.repo_name}}" required maxlength="100">
</div>
{{template "repo/migrate/options" .}}
<div id="migrate_items">
<div class="inline field">
<label>{{ctx.Locale.Tr "repo.migrate_items"}}</label>
<div class="ui checkbox">
<input name="issues" type="checkbox" {{if .issues}}checked{{end}}>
<label>{{ctx.Locale.Tr "repo.migrate_items_issues"}}</label>
</div>
</div>
<div class="inline field">
<label></label>
<div class="ui checkbox">
<input name="pull_requests" type="checkbox" {{if .pull_requests}}checked{{end}}>
<label>{{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}</label>
</div>
</div>
<div class="inline field">
<label></label>
<div class="ui checkbox">
<input name="labels" type="checkbox" {{if .labels}}checked{{end}}>
<label>{{ctx.Locale.Tr "repo.migrate_items_labels"}}</label>
</div>
</div>
<div class="inline field">
<label></label>
<div class="ui checkbox">
<input name="milestones" type="checkbox" {{if .milestones}}checked{{end}}>
<label>{{ctx.Locale.Tr "repo.migrate_items_milestones"}}</label>
</div>
</div>
</div>
<div class="divider"></div>
<div class="inline required field {{if .Err_Owner}}error{{end}}">
<label>{{ctx.Locale.Tr "repo.owner"}}</label>
<div class="ui selection owner dropdown">
<input type="hidden" id="uid" name="uid" value="{{.ContextUser.ID}}" required>
<span class="text truncated-item-container" title="{{.ContextUser.Name}}">
{{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
<span class="truncated-item-name">{{.ContextUser.ShortName 40}}</span>
</span>
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="menu" title="{{.SignedUser.Name}}">
<div class="item truncated-item-container" data-value="{{.SignedUser.ID}}">
{{ctx.AvatarUtils.Avatar .SignedUser 28 "mini"}}
<span class="truncated-item-name">{{.SignedUser.ShortName 40}}</span>
</div>
{{range .Orgs}}
<div class="item truncated-item-container" data-value="{{.ID}}" title="{{.Name}}">
{{ctx.AvatarUtils.Avatar . 28 "mini"}}
<span class="truncated-item-name">{{.ShortName 40}}</span>
</div>
{{end}}
</div>
</div>
</div>
<div class="inline field">
<label>{{ctx.Locale.Tr "repo.visibility"}}</label>
<div class="ui checkbox">
<input name="private" type="checkbox"
{{if .IsForcedPrivate}}
checked disabled
{{else}}
{{if .private}}checked{{end}}
{{end}}>
<label>{{ctx.Locale.Tr "repo.visibility_helper"}}</label>
</div>
{{if .IsForcedPrivate}}
<span class="help">{{ctx.Locale.Tr "repo.visibility_helper_forced"}}</span>
{{end}}
<span class="help">{{ctx.Locale.Tr "repo.visibility_description"}}</span>
</div>
<div class="divider"></div>
<details class="ui optional field">
<summary class="tw-p-1">
{{ctx.Locale.Tr "migrate.pagure.private_issues.summary"}}
</summary>
<div class="tw-p-1">
<div class="ui blue message">
{{ctx.Locale.Tr "migrate.pagure.private_issues.description"}}
</div>
<div class="ui red message">
{{ctx.Locale.Tr "migrate.pagure.private_issues.warning"}}
</div>
<div class="field {{if .Err_Auth}}error{{end}}">
<label for="auth_token">{{ctx.Locale.Tr "migrate.pagure.token_label"}}</label>
<input id="auth_token" name="auth_token" value="{{.auth_token}}" placeholder="{{ctx.Locale.Tr "migrate.pagure.token.placeholder"}}" {{if not .auth_token}}data-need-clear="true"{{end}}>
</div>
</div>
</details>
<div class="divider"></div>
<div class="inline field">
<label></label>
<button class="ui primary button">
{{ctx.Locale.Tr "repo.migrate_repo"}}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
{{template "base/footer" .}}