c9e402afdc
Modifies forms: - (new) org team - (new) repo webhook - (new) repo protected branch The forms are not completely rewritten to semantic HTML yet. The focus of this change was on standard elements, some custom solutions were left untouched for now. - swaps the order fo permission radio buttons as per https://codeberg.org/forgejo/forgejo/issues/4983 - uses fieldsets to group related inputs - ensures consistent styling across forms - can be improved later, e.g. using horizontal lines between sections - fixes: previous font size of labels was smaller than the font size of the help text - help text are now part of the label, clicking them now also activates the input - drop unused CSS (no required checkboxes in grouped class remain) - playwright testing: - move login boilerplate to utils - automated form accessibility checking - allow defining the scope, because legacy parts of the forms are not yet accessible - assert some CSS properties that should not be overriden - the Makefile adjustment was necessary, because eslint scanned some internal files in the tests/e2e/reports directory
140 lines
7.3 KiB
Go HTML Template
140 lines
7.3 KiB
Go HTML Template
{{template "base/head" .}}
|
|
<div role="main" aria-label="{{.Title}}" class="page-content organization new team">
|
|
{{template "org/header" .}}
|
|
<div class="ui container">
|
|
<div class="ui grid">
|
|
<div class="column">
|
|
<form class="ui form" action="{{if .PageIsOrgTeamsNew}}{{.OrgLink}}/teams/new{{else}}{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/edit{{end}}" data-delete-url="{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/delete" method="post">
|
|
{{.CsrfTokenHtml}}
|
|
<h3 class="ui top attached header">
|
|
{{if .PageIsOrgTeamsNew}}{{ctx.Locale.Tr "org.create_new_team"}}{{else}}{{ctx.Locale.Tr "org.teams.settings"}}{{end}}
|
|
</h3>
|
|
<div class="ui attached segment">
|
|
{{template "base/alert" .}}
|
|
<div class="required field {{if .Err_TeamName}}error{{end}}">
|
|
<label for="team_name">{{ctx.Locale.Tr "org.team_name"}}</label>
|
|
{{if eq .Team.LowerName "owners"}}
|
|
<input type="hidden" name="team_name" value="{{.Team.Name}}">
|
|
{{end}}
|
|
<input id="team_name" name="team_name" value="{{.Team.Name}}" required {{if eq .Team.LowerName "owners"}}disabled{{end}} autofocus>
|
|
<span class="help">{{ctx.Locale.Tr "org.team_name_helper"}}</span>
|
|
</div>
|
|
<div class="field {{if .Err_Description}}error{{end}}">
|
|
<label for="description">{{ctx.Locale.Tr "org.team_desc"}}</label>
|
|
<input id="description" name="description" value="{{.Team.Description}}">
|
|
<span class="help">{{ctx.Locale.Tr "org.team_desc_helper"}}</span>
|
|
</div>
|
|
{{if not (eq .Team.LowerName "owners")}}
|
|
<fieldset>
|
|
<legend>{{ctx.Locale.Tr "org.team_access_desc"}}</legend>
|
|
<label>
|
|
<input type="radio" name="repo_access" value="specific" {{if not .Team.IncludesAllRepositories}}checked{{end}}>
|
|
{{ctx.Locale.Tr "org.teams.specific_repositories"}}
|
|
<span class="help">{{ctx.Locale.Tr "org.teams.specific_repositories_helper"}}</span>
|
|
</label>
|
|
<label>
|
|
<input type="radio" name="repo_access" value="all" {{if .Team.IncludesAllRepositories}}checked{{end}}>
|
|
{{ctx.Locale.Tr "org.teams.all_repositories"}}
|
|
<span class="help">{{ctx.Locale.Tr "org.teams.all_repositories_helper"}}</span>
|
|
</label>
|
|
|
|
<label>
|
|
<input name="can_create_org_repo" type="checkbox" {{if .Team.CanCreateOrgRepo}}checked{{end}}>
|
|
{{ctx.Locale.Tr "org.teams.can_create_org_repo"}}
|
|
<span class="help">{{ctx.Locale.Tr "org.teams.can_create_org_repo_helper"}}</span>
|
|
</label>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ctx.Locale.Tr "org.team_permission_desc"}}</legend>
|
|
<label>
|
|
<input type="radio" name="permission" value="admin" {{if eq .Team.AccessMode 3}}checked{{end}}>
|
|
{{ctx.Locale.Tr "org.teams.admin_access"}}
|
|
<span class="help">{{ctx.Locale.Tr "org.teams.admin_access_helper"}}</span>
|
|
</label>
|
|
<label>
|
|
<input type="radio" name="permission" value="read" {{if or .PageIsOrgTeamsNew (eq .Team.AccessMode 1) (eq .Team.AccessMode 2)}}checked{{end}}>
|
|
{{ctx.Locale.Tr "org.teams.general_access"}}
|
|
<span class="help">{{ctx.Locale.Tr "org.teams.general_access_helper"}}</span>
|
|
</label>
|
|
</fieldset>
|
|
|
|
<div class="team-units required field {{if eq .Team.AccessMode 3}}tw-hidden{{end}}">
|
|
<label>{{ctx.Locale.Tr "org.team_unit_desc"}}</label>
|
|
<table class="ui celled table">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ctx.Locale.Tr "units.unit"}}</th>
|
|
<th class="center aligned">{{ctx.Locale.Tr "org.teams.none_access"}}
|
|
<span class="tw-align-middle" data-tooltip-content="{{ctx.Locale.Tr "org.teams.none_access_helper"}}">{{svg "octicon-question" 16 "tw-ml-1"}}</span></th>
|
|
<th class="center aligned">{{ctx.Locale.Tr "org.teams.read_access"}}
|
|
<span class="tw-align-middle" data-tooltip-content="{{ctx.Locale.Tr "org.teams.read_access_helper"}}">{{svg "octicon-question" 16 "tw-ml-1"}}</span></th>
|
|
<th class="center aligned">{{ctx.Locale.Tr "org.teams.write_access"}}
|
|
<span class="tw-align-middle" data-tooltip-content="{{ctx.Locale.Tr "org.teams.write_access_helper"}}">{{svg "octicon-question" 16 "tw-ml-1"}}</span></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range $t, $unit := $.Units}}
|
|
{{if ge $unit.MaxPerm 2}}
|
|
<tr>
|
|
<td>
|
|
<label {{if $unit.Type.UnitGlobalDisabled}} data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
|
|
{{ctx.Locale.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{ctx.Locale.Tr "org.team_unit_disabled"}}{{end}}
|
|
<span class="help">{{ctx.Locale.Tr $unit.DescKey}}</span>
|
|
</label>
|
|
</td>
|
|
<td class="center aligned">
|
|
<input type="radio" name="unit_{{$unit.Type.Value}}" value="0"{{if or ($unit.Type.UnitGlobalDisabled) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 0)}} checked{{end}} title="{{ctx.Locale.Tr "org.teams.none_access"}}">
|
|
</td>
|
|
<td class="center aligned">
|
|
<input type="radio" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.read_access"}}">
|
|
</td>
|
|
<td class="center aligned">
|
|
<input type="radio" name="unit_{{$unit.Type.Value}}" value="2"{{if (ge ($.Team.UnitAccessMode $.Context $unit.Type) 2)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.write_access"}}">
|
|
</td>
|
|
</tr>
|
|
{{end}}
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
<fieldset>
|
|
{{range $t, $unit := $.Units}}
|
|
{{if lt $unit.MaxPerm 2}}
|
|
<label {{if $unit.Type.UnitGlobalDisabled}}data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
|
|
<input type="checkbox" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}}>
|
|
{{ctx.Locale.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{ctx.Locale.Tr "org.team_unit_disabled"}}{{end}}
|
|
<span class="help">{{ctx.Locale.Tr $unit.DescKey}}</span>
|
|
</label>
|
|
{{end}}
|
|
{{end}}
|
|
</fieldset>
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="field">
|
|
{{if .PageIsOrgTeamsNew}}
|
|
<button class="ui primary button">{{ctx.Locale.Tr "org.create_team"}}</button>
|
|
{{else}}
|
|
<button class="ui primary button">{{ctx.Locale.Tr "org.teams.update_settings"}}</button>
|
|
{{if not (eq .Team.LowerName "owners")}}
|
|
<button class="ui red button delete-button" data-url="{{.OrgLink}}/teams/{{.Team.Name | PathEscape}}/delete">{{ctx.Locale.Tr "org.teams.delete_team"}}</button>
|
|
{{end}}
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ui g-modal-confirm delete modal">
|
|
<div class="header">
|
|
{{svg "octicon-trash"}}
|
|
{{ctx.Locale.Tr "org.teams.delete_team_title"}}
|
|
</div>
|
|
<div class="content">
|
|
<p>{{ctx.Locale.Tr "org.teams.delete_team_desc"}}</p>
|
|
</div>
|
|
{{template "base/modal_actions_confirm" .}}
|
|
</div>
|
|
{{template "base/footer" .}}
|