loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Convert `<div class="button">` to `<button class="button">` (#23337)

This improves a lot of accessibility shortcomings.
Every possible instance of `<div class="button">` matching the command
`ag '<[^ab].*?class=.*?[" ]button[ "]' templates/ | grep -v 'dropdown'`
has been converted when possible.
divs with the `dropdown` class and their children were omitted as
1. more analysis must be conducted whether the dropdowns still work as
intended when they are a `button` instead of a `div`.
2. most dropdowns have `div`s as children. The HTML standard disallows
`div`s inside `button`s.
3. When a dropdown child that's part of the displayed text content is
converted to a `button`, the dropdown can be focused twice

Further changes include that all "gitea-managed" buttons with JS code
received an `e.preventDefault()` so that they don't accidentally submit
an underlying form, which would execute instead of cancel the action.
Lastly, some minor issues were fixed as well during the refactoring.

## Future improvements

As mentioned in
https://github.com/go-gitea/gitea/pull/23337#discussion_r1127277391,
`<a>`s without `href` attribute are not focusable.
They should later on be converted to `<button>`s.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>

authored by

delvh
wxiaoguang
silverwind
techknowlogick
Lunny Xiao
and committed by
GitHub
81fe5d61 605fd15a

+173 -283
+1
public/img/svg/fontawesome-save.svg
··· 1 + <svg viewBox="0 0 448 512" class="svg fontawesome-save" width="16" height="16" aria-hidden="true"><path d="m434 130-84-84a48 48 0 0 0-33.9-14H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V163.9a48 48 0 0 0-14-34zM224 416a64 64 0 1 1 0-128 64 64 0 0 1 0 128zm96-304.5V212a12 12 0 0 1-12 12H76a12 12 0 0 1-12-12V108a12 12 0 0 1 12-12h228.5a12 12 0 0 1 8.5 3.5l3.5 3.5a12 12 0 0 1 3.5 8.5z"/></svg>
+1 -1
templates/admin/auth/edit.tmpl
··· 433 433 434 434 <div class="field"> 435 435 <button class="ui green button">{{.locale.Tr "admin.auths.update"}}</button> 436 - <div class="ui red button delete-button" data-url="{{$.Link}}/delete" data-id="{{.Source.ID}}">{{.locale.Tr "admin.auths.delete"}}</div> 436 + <button class="ui red button delete-button" data-url="{{$.Link}}/delete" data-id="{{.Source.ID}}">{{.locale.Tr "admin.auths.delete"}}</button> 437 437 </div> 438 438 </form> 439 439 </div>
+3 -5
templates/admin/emails/list.tmpl
··· 78 78 {{.locale.Tr "admin.emails.change_email_header"}} 79 79 </div> 80 80 <div class="content center"> 81 - <p>{{.locale.Tr "admin.emails.change_email_text"}}</p> 81 + <p class="center">{{.locale.Tr "admin.emails.change_email_text"}}</p> 82 82 83 83 <form class="ui form" id="email-action-form" action="{{AppSubUrl}}/admin/emails/activate" method="post"> 84 84 {{$.CsrfTokenHtml}} ··· 93 93 <input type="hidden" id="form-primary" name="primary" value="" required> 94 94 <input type="hidden" id="form-activate" name="activate" value="" required> 95 95 96 - <div class="center actions"> 97 - <div class="ui basic cancel inverted button">{{$.locale.Tr "settings.cancel"}}</div> 98 - <button class="ui basic inverted yellow button">{{$.locale.Tr "modal.yes"}}</button> 96 + <div class="center"> 97 + {{template "base/delete_modal_actions" .}} 99 98 </div> 100 - 101 99 </form> 102 100 </div> 103 101 </div>
+8 -10
templates/admin/notice.tmpl
··· 23 23 <tr> 24 24 <td class="collapsing"> 25 25 <div class="ui fitted checkbox" data-id="{{.ID}}"> 26 - <input type="checkbox"> <label></label> 26 + <input type="checkbox"> 27 27 </div> 28 28 </td> 29 29 <td>{{.ID}}</td> ··· 39 39 <tr> 40 40 <th></th> 41 41 <th colspan="5"> 42 - <div class="ui right"> 43 - <form method="post" action="{{AppSubUrl}}/admin/notices/empty"> 44 - {{.CsrfTokenHtml}} 45 - <button type="submit" class="ui red small button">{{.locale.Tr "admin.notices.delete_all"}}</button> 46 - </form> 47 - </div> 48 - <div class="ui floating upward dropdown small button"> 42 + <form class="ui right" method="post" action="{{AppSubUrl}}/admin/notices/empty"> 43 + {{.CsrfTokenHtml}} 44 + <button type="submit" class="ui red small button">{{.locale.Tr "admin.notices.delete_all"}}</button> 45 + </form> 46 + <div class="ui floating upward dropdown small button">{{/* TODO: Make this dropdown accessible */}} 49 47 <span class="text">{{.locale.Tr "admin.notices.operations"}}</span> 50 48 <div class="menu"> 51 49 <div class="item select action" data-action="select-all"> ··· 59 57 </div> 60 58 </div> 61 59 </div> 62 - <div class="ui small teal button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="{{.Link}}?page={{.Page.Paginater.Current}}"> 60 + <button class="ui small teal button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="{{.Link}}?page={{.Page.Paginater.Current}}"> 63 61 {{.locale.Tr "admin.notices.delete_selected"}} 64 - </div> 62 + </button> 65 63 </th> 66 64 </tr> 67 65 </tfoot>
+2 -20
templates/admin/repo/unadopted.tmpl
··· 43 43 <input type="hidden" name="action" value="adopt"> 44 44 <input type="hidden" name="q" value="{{$.Keyword}}"> 45 45 <input type="hidden" name="page" value="{{$.CurrentPage}}"> 46 - <div class="actions"> 47 - <div class="ui red basic inverted cancel button"> 48 - {{svg "octicon-trash" 16 "gt-mr-2"}} 49 - {{$.locale.Tr "modal.no"}} 50 - </div> 51 - <button class="ui green basic inverted ok button"> 52 - {{svg "octicon-check" 16 "gt-mr-2"}} 53 - {{$.locale.Tr "modal.yes"}} 54 - </button> 55 - </div> 46 + {{template "base/delete_modal_actions" .}} 56 47 </form> 57 48 </div> 58 49 <button class="ui button submit tiny red delete show-modal" data-modal="#delete-unadopted-modal-{{$dirI}}"><span class="icon">{{svg "octicon-x"}}</span><span class="label">{{$.locale.Tr "repo.delete_preexisting_label"}}</span></button> ··· 70 61 <input type="hidden" name="action" value="delete"> 71 62 <input type="hidden" name="q" value="{{$.Keyword}}"> 72 63 <input type="hidden" name="page" value="{{$.CurrentPage}}"> 73 - <div class="actions"> 74 - <div class="ui red basic inverted cancel button"> 75 - {{svg "octicon-trash" 16 "gt-mr-2"}} 76 - {{$.locale.Tr "modal.no"}} 77 - </div> 78 - <button class="ui green basic inverted ok button"> 79 - {{svg "octicon-check" 16 "gt-mr-2"}} 80 - {{$.locale.Tr "modal.yes"}} 81 - </button> 82 - </div> 64 + {{template "base/delete_modal_actions" .}} 83 65 </form> 84 66 </div> 85 67 </div>
+3 -12
templates/admin/user/edit.tmpl
··· 151 151 152 152 <div class="field"> 153 153 <button class="ui green button">{{.locale.Tr "admin.users.update_profile"}}</button> 154 - <div class="ui red button show-modal" data-modal="#delete-user-modal">{{.locale.Tr "admin.users.delete_account"}}</div> 154 + <button class="ui red button show-modal" data-modal="#delete-user-modal">{{.locale.Tr "admin.users.delete_account"}}</button> 155 155 </div> 156 156 </form> 157 157 </div> ··· 189 189 190 190 <div class="field"> 191 191 <button class="ui green button">{{$.locale.Tr "settings.update_avatar"}}</button> 192 - <a class="ui red button delete-post" data-request-url="{{.Link}}/avatar/delete" data-done-url="{{.Link}}">{{$.locale.Tr "settings.delete_current_avatar"}}</a> 192 + <a class="ui red button delete-post" data-request-url="{{.Link}}/avatar/delete" data-done-url="{{.Link}}">{{$.locale.Tr "settings.delete_current_avatar"}}</a>{{/* TODO: Convert links without href to buttons for a11y */}} 193 193 </div> 194 194 </form> 195 195 </div> ··· 213 213 </div> 214 214 <p class="help">{{.locale.Tr "admin.users.purge_help"}}</p> 215 215 </div> 216 - <div class="actions"> 217 - <div class="ui red basic inverted cancel button"> 218 - {{svg "octicon-x"}} 219 - {{.locale.Tr "modal.no"}} 220 - </div> 221 - <button class="ui green basic inverted ok button"> 222 - {{svg "octicon-check"}} 223 - {{.locale.Tr "modal.yes"}} 224 - </button> 225 - </div> 216 + {{template "base/delete_modal_actions" .}} 226 217 </form> 227 218 </div> 228 219 {{template "base/footer" .}}
+4 -4
templates/base/delete_modal_actions.tmpl
··· 1 1 <div class="actions"> 2 - <div class="ui red basic inverted cancel button"> 2 + <button class="ui red basic inverted cancel button"> 3 3 {{svg "octicon-x"}} 4 4 {{.locale.Tr "modal.no"}} 5 - </div> 6 - <div class="ui green basic inverted ok button"> 5 + </button> 6 + <button class="ui green basic inverted ok button"> 7 7 {{svg "octicon-check"}} 8 8 {{.locale.Tr "modal.yes"}} 9 - </div> 9 + </button> 10 10 </div>
+2 -2
templates/org/settings/delete.tmpl
··· 19 19 <label for="org_name">{{.locale.Tr "org.org_name_holder"}}</label> 20 20 <input id="org_name" name="org_name" value="" autocomplete="off" autofocus required> 21 21 </div> 22 - <div class="ui red button delete-button" data-type="form" data-form="#delete-form"> 22 + <button class="ui red button delete-button" data-type="form" data-form="#delete-form"> 23 23 {{.locale.Tr "org.settings.confirm_delete_account"}} 24 - </div> 24 + </button> 25 25 </form> 26 26 </div> 27 27 </div>
+1 -1
templates/org/settings/labels.tmpl
··· 11 11 </div> 12 12 <div class="right floated three wide column"> 13 13 <div class="ui right"> 14 - <div class="ui green new-label button">{{.locale.Tr "repo.issues.new_label"}}</div> 14 + <button class="ui green new-label button">{{.locale.Tr "repo.issues.new_label"}}</button> 15 15 </div> 16 16 </div> 17 17 </div>
+1 -4
templates/package/settings.tmpl
··· 57 57 <form class="ui form" action="{{.Link}}" method="post"> 58 58 {{.CsrfTokenHtml}} 59 59 <input type="hidden" name="action" value="delete"> 60 - <div class="text right actions"> 61 - <div class="ui cancel button">{{.locale.Tr "cancel"}}</div> 62 - <button class="ui red button">{{.locale.Tr "ok"}}</button> 63 - </div> 60 + {{template "base/delete_modal_actions" .}} 64 61 </form> 65 62 </div> 66 63 </div>
+1 -10
templates/projects/list.tmpl
··· 84 84 <div class="content"> 85 85 <p>{{.locale.Tr "repo.projects.deletion_desc"}}</p> 86 86 </div> 87 - <div class="actions"> 88 - <div class="ui red basic inverted cancel button"> 89 - <i class="remove icon"></i> 90 - {{.locale.Tr "modal.no"}} 91 - </div> 92 - <div class="ui green basic inverted ok button"> 93 - <i class="checkmark icon"></i> 94 - {{.locale.Tr "modal.yes"}} 95 - </div> 96 - </div> 87 + {{template "base/delete_modal_actions" .}} 97 88 </div> 98 89 {{end}}
+6 -15
templates/projects/view.tmpl
··· 29 29 </div> 30 30 31 31 <div class="text right actions"> 32 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 32 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 33 33 <button data-url="{{$.Link}}" class="ui primary button" id="new_board_submit">{{$.locale.Tr "repo.projects.column.new_submit"}}</button> 34 34 </div> 35 35 </form> ··· 127 127 </div> 128 128 129 129 <div class="text right actions"> 130 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 130 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 131 131 <button data-url="{{$.Link}}/{{.ID}}" class="ui primary button edit-column-button">{{$.locale.Tr "repo.projects.column.edit"}}</button> 132 132 </div> 133 133 </form> ··· 144 144 </label> 145 145 </div> 146 146 <div class="text right actions"> 147 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 147 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 148 148 <button class="ui primary button set-default-project-board" data-url="{{$.Link}}/{{.ID}}/default">{{$.locale.Tr "repo.projects.column.set_default"}}</button> 149 149 </div> 150 150 </div> ··· 158 158 {{$.locale.Tr "repo.projects.column.deletion_desc"}} 159 159 </label> 160 160 </div> 161 - <div class="text right actions"> 162 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 161 + <div class="text right actions">{{/* TODO: convert to base/delete_modal_actions.tmpl */}} 162 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 163 163 <button class="ui red button delete-project-board" data-url="{{$.Link}}/{{.ID}}">{{$.locale.Tr "repo.projects.column.delete"}}</button> 164 164 </div> 165 165 </div> ··· 265 265 <div class="content"> 266 266 <p>{{.locale.Tr "repo.projects.deletion_desc"}}</p> 267 267 </div> 268 - <div class="actions"> 269 - <div class="ui red basic inverted cancel button"> 270 - <i class="remove icon"></i> 271 - {{.locale.Tr "modal.no"}} 272 - </div> 273 - <div class="ui green basic inverted ok button"> 274 - <i class="checkmark icon"></i> 275 - {{.locale.Tr "modal.yes"}} 276 - </div> 277 - </div> 268 + {{template "base/delete_modal_actions" .}} 278 269 </div> 279 270 {{end}}
+1 -1
templates/repo/branch/list.tmpl
··· 176 176 </div> 177 177 178 178 <div class="text right actions"> 179 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 179 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 180 180 <button class="ui green button">{{.locale.Tr "repo.branch.confirm_create_branch"}}</button> 181 181 </div> 182 182 </form>
+2 -2
templates/repo/cite/cite_modal.tmpl
··· 15 15 </div> 16 16 </div> 17 17 <div class="actions"> 18 - <div class="ui black deny button"> 18 + <button class="ui black cancel button"> 19 19 {{.locale.Tr "cancel"}} 20 - </div> 20 + </button> 21 21 </div> 22 22 </div>
+2 -2
templates/repo/commit_page.tmpl
··· 96 96 </div> 97 97 98 98 <div class="text right actions"> 99 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 99 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 100 100 <button class="ui green button">{{.locale.Tr "repo.branch.confirm_create_branch"}}</button> 101 101 </div> 102 102 </form> ··· 121 121 </div> 122 122 123 123 <div class="text right actions"> 124 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 124 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 125 125 <button class="ui green button">{{.locale.Tr "repo.tag.confirm_create_tag"}}</button> 126 126 </div> 127 127 </form>
+4 -4
templates/repo/diff/box.tmpl
··· 107 107 <div class="diff-file-header-actions gt-df gt-ac"> 108 108 {{if $showFileViewToggle}} 109 109 <div class="ui compact icon buttons"> 110 - <span class="ui tiny basic button tooltip file-view-toggle" data-toggle-selector="#diff-source-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_source"}}" data-position="bottom center">{{svg "octicon-code"}}</span> 111 - <span class="ui tiny basic button tooltip file-view-toggle active" data-toggle-selector="#diff-rendered-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_rendered"}}" data-position="bottom center">{{svg "octicon-file"}}</span> 110 + <button class="ui tiny basic button tooltip file-view-toggle" data-toggle-selector="#diff-source-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_source"}}" data-position="bottom center">{{svg "octicon-code"}}</button> 111 + <button class="ui tiny basic button tooltip file-view-toggle active" data-toggle-selector="#diff-rendered-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_rendered"}}" data-position="bottom center">{{svg "octicon-file"}}</button> 112 112 </div> 113 113 {{end}} 114 114 {{if $file.IsProtected}} ··· 200 200 {{$.locale.Tr "loading"}} 201 201 </div> 202 202 <div class="text right edit buttons"> 203 - <div class="ui basic primary cancel button" tabindex="3">{{.locale.Tr "repo.issues.cancel"}}</div> 204 - <div class="ui green save button" tabindex="2">{{.locale.Tr "repo.issues.save"}}</div> 203 + <button class="ui basic primary cancel button" tabindex="3">{{.locale.Tr "repo.issues.cancel"}}</button> 204 + <button class="ui green save button" tabindex="2">{{.locale.Tr "repo.issues.save"}}</button> 205 205 </div> 206 206 </div> 207 207 </div>
+4 -4
templates/repo/editor/edit.tmpl
··· 65 65 <p>{{.locale.Tr "repo.editor.commit_empty_file_text"}}</p> 66 66 </div> 67 67 <div class="actions"> 68 - <div class="ui red basic cancel inverted button"> 68 + <button class="ui red basic cancel inverted button"> 69 69 <i class="remove icon"></i> 70 70 {{.locale.Tr "repo.editor.cancel"}} 71 - </div> 72 - <div class="ui green basic ok inverted button"> 71 + </button> 72 + <button class="ui green basic ok inverted button"> 73 73 <i class="save icon"></i> 74 74 {{.locale.Tr "repo.editor.commit_changes"}} 75 - </div> 75 + </button> 76 76 </div> 77 77 </div> 78 78
+6 -6
templates/repo/editor/patch.tmpl
··· 45 45 <p>{{.locale.Tr "repo.editor.commit_empty_file_text"}}</p> 46 46 </div> 47 47 <div class="actions"> 48 - <div class="ui red basic cancel inverted button"> 49 - <i class="remove icon"></i> 48 + <button class="ui red basic inverted cancel button"> 49 + {{svg "octicon-x"}} 50 50 {{.locale.Tr "repo.editor.cancel"}} 51 - </div> 52 - <div class="ui green basic ok inverted button"> 53 - <i class="save icon"></i> 51 + </button> 52 + <button class="ui green basic inverted ok button"> 53 + {{svg "fontawesome-save"}} 54 54 {{.locale.Tr "repo.editor.commit_changes"}} 55 - </div> 55 + </button> 56 56 </div> 57 57 </div> 58 58 </div>
+1 -1
templates/repo/issue/labels.tmpl
··· 6 6 {{template "repo/issue/navbar" .}} 7 7 {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}} 8 8 <div class="ui right"> 9 - <div class="ui green new-label button">{{.locale.Tr "repo.issues.new_label"}}</div> 9 + <button class="ui green new-label button">{{.locale.Tr "repo.issues.new_label"}}</button> 10 10 </div> 11 11 {{end}} 12 12 </div>
+7 -14
templates/repo/issue/labels/edit_delete_label.tmpl
··· 6 6 <div class="content"> 7 7 <p>{{.locale.Tr "repo.issues.label_deletion_desc"}}</p> 8 8 </div> 9 - <div class="actions"> 10 - <div class="ui red basic inverted cancel button"> 11 - <i class="remove icon"></i> 12 - {{.locale.Tr "modal.no"}} 13 - </div> 14 - <div class="ui green basic inverted ok button"> 15 - <i class="checkmark icon"></i> 16 - {{.locale.Tr "modal.yes"}} 17 - </div> 18 - </div> 9 + {{template "base/delete_modal_actions" .}} 19 10 </div> 20 11 21 12 <div class="ui small edit-label modal"> ··· 61 52 </form> 62 53 </div> 63 54 <div class="actions"> 64 - <div class="ui secondary small basic cancel button"> 55 + <button class="ui secondary small basic cancel button"> 56 + {{svg "octicon-x"}} 65 57 {{.locale.Tr "cancel"}} 66 - </div> 67 - <div class="ui primary small approve button"> 58 + </button> 59 + <button class="ui primary small approve button"> 60 + <i class="save icon"></i> 68 61 {{.locale.Tr "save"}} 69 - </div> 62 + </button> 70 63 </div> 71 64 </div>
+7 -4
templates/repo/issue/labels/label_new.tmpl
··· 36 36 </div> 37 37 </form> 38 38 </div> 39 + 39 40 <div class="actions"> 40 - <div class="ui secondary small basic cancel button"> 41 + <button class="ui red basic inverted cancel button"> 42 + {{svg "octicon-x"}} 41 43 {{.locale.Tr "cancel"}} 42 - </div> 43 - <div class="ui primary small approve button"> 44 + </button> 45 + <button class="ui green basic inverted ok button"> 46 + {{svg "octicon-check"}} 44 47 {{.locale.Tr "repo.issues.create_label"}} 45 - </div> 48 + </button> 46 49 </div> 47 50 </div>
+2 -2
templates/repo/issue/list.tmpl
··· 213 213 {{if not .Repository.IsArchived}} 214 214 <!-- Action Button --> 215 215 {{if .IsShowClosed}} 216 - <div class="ui green active basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_open"}}</div> 216 + <button class="ui green active basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_open"}}</button> 217 217 {{else}} 218 - <div class="ui red active basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_close"}}</div> 218 + <button class="ui red active basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_close"}}</button> 219 219 {{end}} 220 220 <!-- Labels --> 221 221 <div class="ui {{if not .Labels}}disabled{{end}} dropdown jump item">
+2 -2
templates/repo/issue/milestone_issues.tmpl
··· 149 149 <div class="ui secondary filter stackable menu"> 150 150 <!-- Action Button --> 151 151 {{if .IsShowClosed}} 152 - <div class="ui green active basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_open"}}</div> 152 + <button class="ui green active basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_open"}}</button> 153 153 {{else}} 154 - <div class="ui red active basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_close"}}</div> 154 + <button class="ui red active basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status" style="margin-left: auto">{{.locale.Tr "repo.issues.action_close"}}</button> 155 155 {{end}} 156 156 <!-- Labels --> 157 157 <div class="ui {{if not .Labels}}disabled{{end}} dropdown jump item">
+1 -10
templates/repo/issue/milestones.tmpl
··· 124 124 <div class="content"> 125 125 <p>{{.locale.Tr "repo.milestones.deletion_desc"}}</p> 126 126 </div> 127 - <div class="actions"> 128 - <div class="ui red basic inverted cancel button"> 129 - <i class="remove icon"></i> 130 - {{.locale.Tr "modal.no"}} 131 - </div> 132 - <div class="ui green basic inverted ok button"> 133 - <i class="checkmark icon"></i> 134 - {{.locale.Tr "modal.yes"}} 135 - </div> 136 - </div> 127 + {{template "base/delete_modal_actions" .}} 137 128 </div> 138 129 {{end}} 139 130 {{template "base/footer" .}}
+10 -10
templates/repo/issue/view_content.tmpl
··· 112 112 <div class="text right"> 113 113 {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .DisableStatusChange)}} 114 114 {{if .Issue.IsClosed}} 115 - <div id="status-button" class="ui green basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen"> 115 + <button id="status-button" class="ui green basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen"> 116 116 {{.locale.Tr "repo.issues.reopen_issue"}} 117 - </div> 117 + </button> 118 118 {{else}} 119 - <div id="status-button" class="ui red basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.close_comment_issue"}}" data-status-val="close"> 119 + <button id="status-button" class="ui red basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.close_comment_issue"}}" data-status-val="close"> 120 120 {{.locale.Tr "repo.issues.close_issue"}} 121 - </div> 121 + </button> 122 122 {{end}} 123 123 {{end}} 124 124 <button class="ui green button loading-button" tabindex="5"> ··· 163 163 <div class="text right"> 164 164 {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .DisableStatusChange)}} 165 165 {{if .Issue.IsClosed}} 166 - <div id="status-button" class="ui green basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen"> 166 + <button id="status-button" class="ui green basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen"> 167 167 {{.locale.Tr "repo.issues.reopen_issue"}} 168 - </div> 168 + </button> 169 169 {{else}} 170 - <div id="status-button" class="ui red basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.close_comment_issue"}}" data-status-val="close"> 170 + <button id="status-button" class="ui red basic button" tabindex="6" data-status="{{.locale.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.locale.Tr "repo.issues.close_comment_issue"}}" data-status-val="close"> 171 171 {{.locale.Tr "repo.issues.close_issue"}} 172 - </div> 172 + </button> 173 173 {{end}} 174 174 {{end}} 175 175 <button class="ui green button loading-button" tabindex="5"> ··· 215 215 {{end}} 216 216 <div class="field footer"> 217 217 <div class="text right edit"> 218 - <div class="ui basic secondary cancel button" tabindex="3">{{.locale.Tr "repo.issues.cancel"}}</div> 219 - <div class="ui primary save button" tabindex="2">{{.locale.Tr "repo.issues.save"}}</div> 218 + <button class="ui basic secondary cancel button" tabindex="3">{{.locale.Tr "repo.issues.cancel"}}</button> 219 + <button class="ui primary save button" tabindex="2">{{.locale.Tr "repo.issues.save"}}</button> 220 220 </div> 221 221 </div> 222 222 </div>
+1 -4
templates/repo/issue/view_content/comments_delete_time.tmpl
··· 7 7 {{.ctxData.CsrfTokenHtml}} 8 8 </form> 9 9 <div class="header">{{.ctxData.locale.Tr "repo.issues.del_time"}}</div> 10 - <div class="actions"> 11 - <div class="ui red approve button">{{.ctxData.locale.Tr "repo.issues.context.delete"}}</div> 12 - <div class="ui cancel button">{{.ctxData.locale.Tr "repo.issues.add_time_cancel"}}</div> 13 - </div> 10 + {{template "base/delete_modal_actions" .}} 14 11 </div> 15 12 <button class="ui icon button compact mini issue-delete-time tooltip" data-id="{{.comment.Time.ID}}" data-content="{{.ctxData.locale.Tr "repo.issues.del_time"}}" data-position="top right"> 16 13 {{svg "octicon-trash"}}
+1 -1
templates/repo/issue/view_content/pull.tmpl
··· 58 58 <input id="message" name="message"> 59 59 </div> 60 60 <div class="text right actions"> 61 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 61 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 62 62 <button class="ui red button" type="submit">{{$.locale.Tr "ok"}}</button> 63 63 </div> 64 64 </form>
+8 -8
templates/repo/issue/view_content/sidebar.tmpl
··· 346 346 </form> 347 347 </div> 348 348 <div class="actions"> 349 - <div class="ui green approve button">{{.locale.Tr "repo.issues.add_time_short"}}</div> 350 - <div class="ui red cancel button">{{.locale.Tr "repo.issues.add_time_cancel"}}</div> 349 + <button class="ui green approve button">{{.locale.Tr "repo.issues.add_time_short"}}</button> 350 + <button class="ui red cancel button">{{.locale.Tr "repo.issues.add_time_cancel"}}</button> 351 351 </div> 352 352 </div> 353 353 <button class="ui fluid button green tooltip issue-add-time gt-mt-3" data-content='{{.locale.Tr "repo.issues.add_time"}}' data-position="top center">{{.locale.Tr "repo.issues.add_time_short"}}</button> ··· 532 532 {{end}}</p> 533 533 </div> 534 534 <div class="actions"> 535 - <div class="ui red cancel inverted button"> 535 + <button class="ui red cancel inverted button"> 536 536 {{svg "octicon-x"}} 537 537 {{.locale.Tr "repo.issues.dependency.cancel"}} 538 - </div> 539 - <div class="ui green ok inverted button"> 538 + </button> 539 + <button class="ui green ok inverted button"> 540 540 {{svg "octicon-check"}} 541 541 {{.locale.Tr "repo.issues.dependency.remove"}} 542 - </div> 542 + </button> 543 543 </div> 544 544 </div> 545 545 {{end}} ··· 619 619 {{end}} 620 620 621 621 <div class="text right actions"> 622 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 622 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 623 623 <button class="ui red button"> 624 624 {{if .Issue.IsLocked}} 625 625 {{.locale.Tr "repo.issues.unlock_confirm"}} ··· 655 655 <form action="{{.Issue.Link}}/delete" method="post"> 656 656 {{.CsrfTokenHtml}} 657 657 <div class="center actions"> 658 - <div class="ui basic cancel inverted button">{{.locale.Tr "settings.cancel"}}</div> 658 + <button class="ui basic cancel inverted button">{{.locale.Tr "settings.cancel"}}</button> 659 659 <button class="ui basic red inverted button">{{.locale.Tr "modal.yes"}}</button> 660 660 </div> 661 661 </form>
+2 -2
templates/repo/issue/view_content/update_branch_by_merge.tmpl
··· 19 19 <div class="ui dropdown icon button no-text"> 20 20 {{svg "octicon-triangle-down" 14 "dropdown icon"}} 21 21 <div class="menu"> 22 - <div class="item active selected" data-do="{{.Link}}/update">{{$.locale.Tr "repo.pulls.update_branch"}}</div> 23 - <div class="item" data-do="{{.Link}}/update?style=rebase">{{$.locale.Tr "repo.pulls.update_branch_rebase"}}</div> 22 + <a class="item active selected" data-do="{{.Link}}/update">{{$.locale.Tr "repo.pulls.update_branch"}}</a> 23 + <a class="item" data-do="{{.Link}}/update?style=rebase">{{$.locale.Tr "repo.pulls.update_branch_rebase"}}</a> 24 24 </div> 25 25 </div> 26 26 </div>
+1 -3
templates/repo/issue/view_title.tmpl
··· 1 1 <div class="sixteen wide column title"> 2 2 <div class="issue-title" id="issue-title-wrapper"> 3 3 {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} 4 - <div class="edit-button"> 5 - <button id="edit-title" class="ui basic button secondary not-in-edit">{{.locale.Tr "repo.issues.edit"}}</button> 6 - </div> 4 + <button id="edit-title" class="ui basic button secondary edit-button not-in-edit">{{.locale.Tr "repo.issues.edit"}}</button> 7 5 {{end}} 8 6 <h1> 9 7 <span id="issue-title">{{RenderIssueTitle $.Context .Issue.Title $.RepoLink $.Repository.ComposeMetas | RenderCodeBlock}}</span>
+1 -1
templates/repo/migrate/migrating.tmpl
··· 72 72 </div> 73 73 74 74 <div class="text right actions"> 75 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 75 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 76 76 <button class="ui red button">{{.locale.Tr "repo.settings.confirm_delete"}}</button> 77 77 </div> 78 78 </form>
+1 -10
templates/repo/projects/list.tmpl
··· 86 86 <div class="content"> 87 87 <p>{{.locale.Tr "repo.projects.deletion_desc"}}</p> 88 88 </div> 89 - <div class="actions"> 90 - <div class="ui red basic inverted cancel button"> 91 - <i class="remove icon"></i> 92 - {{.locale.Tr "modal.no"}} 93 - </div> 94 - <div class="ui green basic inverted ok button"> 95 - <i class="checkmark icon"></i> 96 - {{.locale.Tr "modal.yes"}} 97 - </div> 98 - </div> 89 + {{template "base/delete_modal_actions" .}} 99 90 </div> 100 91 {{end}} 101 92 {{template "base/footer" .}}
+6 -15
templates/repo/projects/view.tmpl
··· 33 33 </div> 34 34 35 35 <div class="text right actions"> 36 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 36 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 37 37 <button data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}" class="ui primary button" id="new_board_submit">{{$.locale.Tr "repo.projects.column.new_submit"}}</button> 38 38 </div> 39 39 </form> ··· 131 131 </div> 132 132 133 133 <div class="text right actions"> 134 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 134 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 135 135 <button data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}" class="ui primary button">{{$.locale.Tr "repo.projects.column.edit"}}</button> 136 136 </div> 137 137 </form> ··· 148 148 </label> 149 149 </div> 150 150 <div class="text right actions"> 151 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 151 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 152 152 <button class="ui primary button set-default-project-board" data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}/default">{{$.locale.Tr "repo.projects.column.set_default"}}</button> 153 153 </div> 154 154 </div> ··· 162 162 {{$.locale.Tr "repo.projects.column.deletion_desc"}} 163 163 </label> 164 164 </div> 165 - <div class="text right actions"> 166 - <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div> 165 + <div class="text right actions">{{/* TODO: Convert to base/delete_modal_actions.tmpl? */}} 166 + <button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button> 167 167 <button class="ui red button delete-project-board" data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}">{{$.locale.Tr "repo.projects.column.delete"}}</button> 168 168 </div> 169 169 </div> ··· 276 276 <div class="content"> 277 277 <p>{{.locale.Tr "repo.projects.deletion_desc"}}</p> 278 278 </div> 279 - <div class="actions"> 280 - <div class="ui red basic inverted cancel button"> 281 - <i class="remove icon"></i> 282 - {{.locale.Tr "modal.no"}} 283 - </div> 284 - <div class="ui green basic inverted ok button"> 285 - <i class="checkmark icon"></i> 286 - {{.locale.Tr "modal.yes"}} 287 - </div> 288 - </div> 279 + {{template "base/delete_modal_actions" .}} 289 280 </div> 290 281 {{end}} 291 282
+3 -3
templates/repo/release/new.tmpl
··· 114 114 {{$.locale.Tr "repo.release.delete_release"}} 115 115 </a> 116 116 {{if .IsDraft}} 117 - <input class="ui button" type="submit" name="draft" value="{{.locale.Tr "repo.release.save_draft"}}"/> 117 + <button class="ui button" type="submit" name="draft" value="{{.locale.Tr "repo.release.save_draft"}}">{{.locale.Tr "repo.release.save_draft"}}</button> 118 118 <button class="ui primary button"> 119 119 {{.locale.Tr "repo.release.publish"}} 120 120 </button> ··· 125 125 {{end}} 126 126 {{else}} 127 127 {{if not .tag_name}} 128 - <input class="ui grey button" type="submit" name="tag_only" value="{{.locale.Tr "repo.release.add_tag"}}"/> 128 + <button class="ui grey button" type="submit" name="tag_only" value="{{.locale.Tr "repo.release.add_tag"}}">{{.locale.Tr "repo.release.add_tag"}}</button> 129 129 {{end}} 130 - <input class="ui button" type="submit" name="draft" value="{{.locale.Tr "repo.release.save_draft"}}"/> 130 + <button class="ui button" type="submit" name="draft" value="{{.locale.Tr "repo.release.save_draft"}}">{{.locale.Tr "repo.release.save_draft"}}</button> 131 131 <button class="ui primary button"> 132 132 {{.locale.Tr "repo.release.publish"}} 133 133 </button>
+3 -12
templates/repo/settings/deploy_keys.tmpl
··· 8 8 {{.locale.Tr "repo.settings.deploy_keys"}} 9 9 <div class="ui right"> 10 10 {{if not .DisableSSH}} 11 - <div class="ui primary tiny show-panel button" data-panel="#add-deploy-key-panel">{{.locale.Tr "repo.settings.add_deploy_key"}}</div> 11 + <button class="ui primary tiny show-panel button" data-panel="#add-deploy-key-panel">{{.locale.Tr "repo.settings.add_deploy_key"}}</button> 12 12 {{else}} 13 - <div class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</div> 13 + <button class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</button> 14 14 {{end}} 15 15 </div> 16 16 </h4> ··· 85 85 <div class="content"> 86 86 <p>{{.locale.Tr "repo.settings.deploy_key_deletion_desc"}}</p> 87 87 </div> 88 - <div class="actions"> 89 - <div class="ui red basic inverted cancel button"> 90 - <i class="remove icon"></i> 91 - {{.locale.Tr "modal.no"}} 92 - </div> 93 - <div class="ui green basic inverted ok button"> 94 - <i class="checkmark icon"></i> 95 - {{.locale.Tr "modal.yes"}} 96 - </div> 97 - </div> 88 + {{template "base/delete_modal_actions" .}} 98 89 </div> 99 90 {{template "base/footer" .}}
+2 -2
templates/repo/settings/lfs.tmpl
··· 50 50 </p> 51 51 <form class="ui form" action="{{$.Link}}/delete/{{.Oid}}" method="post"> 52 52 {{$.CsrfTokenHtml}} 53 - <div class="center actions"> 54 - <div class="ui basic cancel inverted button">{{$.locale.Tr "settings.cancel"}}</div> 53 + <div class="center actions">{{/* TODO: Convert to base/delete_modal_actions */}} 54 + <button class="ui basic cancel inverted button">{{$.locale.Tr "settings.cancel"}}</button> 55 55 <button class="ui basic inverted yellow button">{{$.locale.Tr "modal.yes"}}</button> 56 56 </div> 57 57 </form>
+2 -2
templates/repo/settings/lfs_pointers.tmpl
··· 49 49 {{ShortSha .Oid}} 50 50 </a> 51 51 {{else}} 52 - <span class="ui detail icon button brown disabled truncate"> 52 + <button class="ui detail icon button brown disabled truncate"> 53 53 {{ShortSha .Oid}} 54 - </span> 54 + </button> 55 55 {{end}} 56 56 </span> 57 57 </td>
+6 -9
templates/repo/settings/options.tmpl
··· 825 825 </div> 826 826 827 827 <div class="text right actions"> 828 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 828 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 829 829 <button class="ui red button">{{.locale.Tr "repo.settings.convert_confirm"}}</button> 830 830 </div> 831 831 </form> ··· 856 856 </div> 857 857 858 858 <div class="text right actions"> 859 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 859 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 860 860 <button class="ui red button">{{.locale.Tr "repo.settings.convert_fork_confirm"}}</button> 861 861 </div> 862 862 </form> ··· 892 892 </div> 893 893 894 894 <div class="text right actions"> 895 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 895 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 896 896 <button class="ui red button">{{.locale.Tr "repo.settings.transfer_perform"}}</button> 897 897 </div> 898 898 </form> ··· 926 926 </div> 927 927 928 928 <div class="text right actions"> 929 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 929 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 930 930 <button class="ui red button">{{.locale.Tr "repo.settings.confirm_delete"}}</button> 931 931 </div> 932 932 </form> ··· 958 958 </div> 959 959 960 960 <div class="text right actions"> 961 - <div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> 961 + <button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button> 962 962 <button class="ui red button">{{.locale.Tr "repo.settings.confirm_wiki_delete"}}</button> 963 963 </div> 964 964 </form> ··· 988 988 {{.CsrfTokenHtml}} 989 989 <input type="hidden" name="action" value="{{if .Repository.IsArchived}}unarchive{{else}}archive{{end}}"> 990 990 <input type="hidden" name="repo_id" value="{{.Repository.ID}}"> 991 - <div class="center actions"> 992 - <div class="ui basic cancel inverted button">{{.locale.Tr "settings.cancel"}}</div> 993 - <button class="ui basic inverted yellow button">{{.locale.Tr "modal.yes"}}</button> 994 - </div> 991 + {{template "base/delete_modal_actions" .}} 995 992 </form> 996 993 </div> 997 994 {{end}}
+1 -10
templates/repo/settings/webhook/delete_modal.tmpl
··· 6 6 <div class="content"> 7 7 <p>{{.locale.Tr "repo.settings.webhook_deletion_desc"}}</p> 8 8 </div> 9 - <div class="actions"> 10 - <div class="ui red basic inverted cancel button"> 11 - <i class="remove icon"></i> 12 - {{.locale.Tr "modal.no"}} 13 - </div> 14 - <div class="ui green basic inverted ok button"> 15 - <i class="checkmark icon"></i> 16 - {{.locale.Tr "modal.yes"}} 17 - </div> 18 - </div> 9 + {{template "base/delete_modal_actions" .}} 19 10 </div>
+2 -2
templates/repo/unicode_escape_prompt.tmpl
··· 1 1 {{if .EscapeStatus}} 2 2 {{if .EscapeStatus.HasInvisible}} 3 3 <div class="ui error message unicode-escape-prompt gt-tl"> 4 - <span class="close icon hide-panel button" data-panel-closest=".message">{{svg "octicon-x" 16 "close inside"}}</span> 4 + <button class="close icon hide-panel button" data-panel-closest=".message">{{svg "octicon-x" 16 "close inside"}}</button> 5 5 <div class="header"> 6 6 {{$.root.locale.Tr "repo.invisible_runes_header"}} 7 7 </div> ··· 12 12 </div> 13 13 {{else if .EscapeStatus.HasAmbiguous}} 14 14 <div class="ui warning message unicode-escape-prompt gt-tl"> 15 - <span class="close icon hide-panel button" data-panel-closest=".message">{{svg "octicon-x" 16 "close inside"}}</span> 15 + <button class="close icon hide-panel button" data-panel-closest=".message">{{svg "octicon-x" 16 "close inside"}}</button> 16 16 <div class="header"> 17 17 {{$.root.locale.Tr "repo.ambiguous_runes_header"}} 18 18 </div>
+2 -2
templates/shared/actions/runner_list.tmpl
··· 20 20 </div> 21 21 <div class="ui input"> 22 22 <input type="text" value="{{.RegistrationToken}}"> 23 - <div class="ui basic label button" data-clipboard-text="{{.RegistrationToken}}"> 23 + <button class="ui basic label button" aria-label="{{.locale.Tr "copy"}}" data-clipboard-text="{{.RegistrationToken}}"> 24 24 {{svg "octicon-copy" 14}} 25 - </div> 25 + </button> 26 26 </div> 27 27 <div class="divider"></div> 28 28 <div class="item">
+1 -1
templates/shared/secrets/add_list.tmpl
··· 1 1 <h4 class="ui top attached header"> 2 2 {{.locale.Tr "secrets.secrets"}} 3 3 <div class="ui right"> 4 - <div class="ui primary tiny show-panel button" data-panel="#add-secret-panel">{{.locale.Tr "secrets.creation"}}</div> 4 + <button class="ui primary tiny show-panel button" data-panel="#add-secret-panel">{{.locale.Tr "secrets.creation"}}</button> 5 5 </div> 6 6 </h4> 7 7 <div class="ui attached segment">
+1 -1
templates/user/auth/grant.tmpl
··· 23 23 <input type="hidden" name="scope" value="{{.Scope}}"> 24 24 <input type="hidden" name="nonce" value="{{.Nonce}}"> 25 25 <input type="hidden" name="redirect_uri" value="{{.RedirectURI}}"> 26 - <input type="submit" id="authorize-app" value="{{.locale.Tr "auth.authorize_application"}}" class="ui red inline button"/> 26 + <button type="submit" id="authorize-app" value="{{.locale.Tr "auth.authorize_application"}}" class="ui red inline button">{{.locale.Tr "auth.authorize_application"}}</button> 27 27 <a href="{{.RedirectURI}}" class="ui basic primary inline button">Cancel</a> 28 28 </form> 29 29 </div>
+1 -1
templates/user/auth/webauthn_error.tmpl
··· 17 17 </div> 18 18 <div class="actions"> 19 19 <button onclick="window.location.reload()" class="success ui button gt-hidden webauthn_error_timeout">{{.locale.Tr "webauthn_reload"}}</button> 20 - <div class="ui cancel button">{{.locale.Tr "cancel"}}</div> 20 + <button class="ui cancel button">{{.locale.Tr "cancel"}}</button> 21 21 </div> 22 22 </div>
+2 -2
templates/user/settings/account.tmpl
··· 151 151 <input id="password-confirmation" name="password" type="password" autocomplete="off" required> 152 152 </div> 153 153 <div class="field"> 154 - <div class="ui red button delete-button" data-modal-id="delete-account" data-type="form" data-form="#delete-form"> 154 + <button class="ui red button delete-button" data-modal-id="delete-account" data-type="form" data-form="#delete-form"> 155 155 {{.locale.Tr "settings.confirm_delete_account"}} 156 - </div> 156 + </button> 157 157 <a href="{{AppSubUrl}}/user/forgot_password?email={{.Email}}">{{.locale.Tr "auth.forgot_password"}}</a> 158 158 </div> 159 159 </form>
+8 -7
templates/user/settings/applications.tmpl
··· 276 276 <div class="content"> 277 277 <p>{{.locale.Tr "settings.access_token_deletion_desc"}}</p> 278 278 </div> 279 - <div class="actions"> 280 - <div class="ui cancel button"> 281 - <i class="remove icon"></i> 279 + 280 + <div class="actions">{{/* TODO: Convert to base/delete_modal_actions.tmpl */}} 281 + <button class="ui green basic inverted cancel button"> 282 + {{svg "octicon-x"}} 282 283 {{.locale.Tr "settings.access_token_deletion_cancel_action"}} 283 - </div> 284 - <div class="ui red basic inverted ok button"> 285 - <i class="checkmark icon"></i> 284 + </button> 285 + <button class="ui red basic inverted ok button"> 286 + {{svg "octicon-check"}} 286 287 {{.locale.Tr "settings.access_token_deletion_confirm_action"}} 287 - </div> 288 + </button> 288 289 </div> 289 290 </div> 290 291
+1 -1
templates/user/settings/keys_gpg.tmpl
··· 1 1 <h4 class="ui top attached header"> 2 2 {{.locale.Tr "settings.manage_gpg_keys"}} 3 3 <div class="ui right"> 4 - <div class="ui primary tiny show-panel button" data-panel="#add-gpg-key-panel">{{.locale.Tr "settings.add_key"}}</div> 4 + <button class="ui primary tiny show-panel button" data-panel="#add-gpg-key-panel">{{.locale.Tr "settings.add_key"}}</button> 5 5 </div> 6 6 </h4> 7 7 <div class="ui attached segment">
+2 -2
templates/user/settings/keys_principal.tmpl
··· 3 3 {{.locale.Tr "settings.manage_ssh_principals"}} 4 4 <div class="ui right"> 5 5 {{if not .DisableSSH}} 6 - <div class="ui primary tiny show-panel button" data-panel="#add-ssh-principal-panel">{{.locale.Tr "settings.add_new_principal"}}</div> 6 + <button class="ui primary tiny show-panel button" data-panel="#add-ssh-principal-panel">{{.locale.Tr "settings.add_new_principal"}}</button> 7 7 {{else}} 8 - <div class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</div> 8 + <button class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</button> 9 9 {{end}} 10 10 </div> 11 11 </h4>
+3 -3
templates/user/settings/keys_ssh.tmpl
··· 2 2 {{.locale.Tr "settings.manage_ssh_keys"}} 3 3 <div class="ui right"> 4 4 {{if not .DisableSSH}} 5 - <div id="add-ssh-button" class="ui primary tiny show-panel button" data-panel="#add-ssh-key-panel"> 5 + <button id="add-ssh-button" class="ui primary tiny show-panel button" data-panel="#add-ssh-key-panel"> 6 6 {{.locale.Tr "settings.add_key"}} 7 - </div> 7 + </button> 8 8 {{else}} 9 - <div class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</div> 9 + <button class="ui primary tiny button disabled">{{.locale.Tr "settings.ssh_disabled"}}</button> 10 10 {{end}} 11 11 </div> 12 12 </h4>
+2 -20
templates/user/settings/repos.tmpl
··· 50 50 {{$.CsrfTokenHtml}} 51 51 <input type="hidden" name="id" value="{{$dir}}"> 52 52 <input type="hidden" name="action" value="adopt"> 53 - <div class="actions"> 54 - <div class="ui red basic inverted cancel button"> 55 - <i class="remove icon"></i> 56 - {{$.locale.Tr "modal.no"}} 57 - </div> 58 - <button class="ui green basic inverted ok button"> 59 - <i class="checkmark icon"></i> 60 - {{$.locale.Tr "modal.yes"}} 61 - </button> 62 - </div> 53 + {{template "base/delete_modal_actions" .}} 63 54 </form> 64 55 </div> 65 56 {{end}} ··· 77 68 {{$.CsrfTokenHtml}} 78 69 <input type="hidden" name="id" value="{{$dir}}"> 79 70 <input type="hidden" name="action" value="delete"> 80 - <div class="actions"> 81 - <div class="ui red basic inverted cancel button"> 82 - <i class="remove icon"></i> 83 - {{$.locale.Tr "modal.no"}} 84 - </div> 85 - <button class="ui green basic inverted ok button"> 86 - <i class="checkmark icon"></i> 87 - {{$.locale.Tr "modal.yes"}} 88 - </button> 89 - </div> 71 + {{template "base/delete_modal_actions" .}} 90 72 </form> 91 73 </div> 92 74 {{end}}
+1 -1
templates/user/settings/security/twofa.tmpl
··· 13 13 <form class="ui form" action="{{AppSubUrl}}/user/settings/security/two_factor/disable" method="post" enctype="multipart/form-data" id="disable-form"> 14 14 {{.CsrfTokenHtml}} 15 15 <p>{{.locale.Tr "settings.twofa_disable_note"}}</p> 16 - <div class="ui red button delete-button" data-modal-id="disable-twofa" data-type="form" data-form="#disable-form">{{$.locale.Tr "settings.twofa_disable"}}</div> 16 + <button class="ui red button delete-button" data-modal-id="disable-twofa" data-type="form" data-form="#disable-form">{{$.locale.Tr "settings.twofa_disable"}}</button> 17 17 </form> 18 18 {{else}} 19 19 <p>{{.locale.Tr "settings.twofa_not_enrolled"}}</p>
+2 -1
web_src/js/features/admin/common.js
··· 198 198 break; 199 199 } 200 200 }); 201 - $('#delete-selection').on('click', function () { 201 + $('#delete-selection').on('click', function (e) { 202 + e.preventDefault(); 202 203 const $this = $(this); 203 204 $this.addClass('loading disabled'); 204 205 const ids = [];
+19 -9
web_src/js/features/common-global.js
··· 202 202 } 203 203 204 204 export function initGlobalLinkActions() { 205 - function showDeletePopup() { 205 + function showDeletePopup(e) { 206 + e.preventDefault(); 206 207 const $this = $(this); 207 208 const dataArray = $this.data(); 208 209 let filter = ''; ··· 243 244 }); 244 245 } 245 246 }).modal('show'); 246 - return false; 247 247 } 248 248 249 - function showAddAllPopup() { 249 + function showAddAllPopup(e) { 250 + e.preventDefault(); 250 251 const $this = $(this); 251 252 let filter = ''; 252 253 if ($this.attr('id')) { ··· 272 273 }); 273 274 } 274 275 }).modal('show'); 275 - return false; 276 276 } 277 277 278 278 function linkAction(e) { ··· 318 318 } 319 319 320 320 export function initGlobalButtons() { 321 - $('.show-panel.button').on('click', function () { 321 + // There are many "cancel button" elements in modal dialogs, Fomantic UI expects they are button-like elements but never submit a form. 322 + // However, Gitea misuses the modal dialog and put the cancel buttons inside forms, so we must prevent the form submission. 323 + // There are a few cancel buttons in non-modal forms, and there are some dynamically created forms (eg: the "Edit Issue Content") 324 + $(document).on('click', 'form .ui.cancel.button', (e) => { 325 + e.preventDefault(); 326 + }); 327 + 328 + $('.show-panel.button').on('click', function (e) { 329 + e.preventDefault(); 322 330 showElem($(this).data('panel')); 323 331 }); 324 332 325 - $('.hide-panel.button').on('click', function (event) { 333 + $('.hide-panel.button').on('click', function (e) { 326 334 // a `.hide-panel.button` can hide a panel, by `data-panel="selector"` or `data-panel-closest="selector"` 327 - event.preventDefault(); 335 + e.preventDefault(); 328 336 let sel = $(this).attr('data-panel'); 329 337 if (sel) { 330 338 hideElem($(sel)); ··· 339 347 alert('Nothing to hide'); 340 348 }); 341 349 342 - $('.show-modal').on('click', function () { 350 + $('.show-modal').on('click', function (e) { 351 + e.preventDefault(); 343 352 const modalDiv = $($(this).attr('data-modal')); 344 353 for (const attrib of this.attributes) { 345 354 if (!attrib.name.startsWith('data-modal-')) { ··· 360 369 } 361 370 }); 362 371 363 - $('.delete-post.button').on('click', function () { 372 + $('.delete-post.button').on('click', function (e) { 373 + e.preventDefault(); 364 374 const $this = $(this); 365 375 $.post($this.attr('data-request-url'), { 366 376 _csrf: csrfToken
+1
web_src/js/features/common-issue.js
··· 34 34 }); 35 35 36 36 $('.issue-action').on('click', async function (e) { 37 + e.preventDefault(); 37 38 let action = this.getAttribute('data-action'); 38 39 let elementId = this.getAttribute('data-element-id'); 39 40 const url = this.getAttribute('data-url');
+2 -1
web_src/js/features/repo-issue.js
··· 230 230 const value = easyMDE?.value() || $(this).val(); 231 231 $statusButton.text($statusButton.data(value.length === 0 ? 'status' : 'status-and-comment')); 232 232 }); 233 - $statusButton.on('click', () => { 233 + $statusButton.on('click', (e) => { 234 + e.preventDefault(); 234 235 $('#status').val($statusButton.data('status-val')); 235 236 $('#comment-form').trigger('submit'); 236 237 });
+2 -1
web_src/js/features/repo-legacy.js
··· 412 412 $saveButton.trigger('click'); 413 413 }); 414 414 415 - $editContentZone.find('.cancel.button').on('click', () => { 415 + $editContentZone.find('.cancel.button').on('click', (e) => { 416 + e.preventDefault(); 416 417 showElem($renderContent); 417 418 hideElem($editContentZone); 418 419 if (dz) {
+1
web_src/svg/fontawesome-save.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 448 512"><path d="m434 130-84-84a48 48 0 0 0-33.9-14H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V163.9a48 48 0 0 0-14-34zM224 416a64 64 0 1 1 0-128 64 64 0 0 1 0 128zm96-304.5V212a12 12 0 0 1-12 12H76a12 12 0 0 1-12-12V108a12 12 0 0 1 12-12h228.5a12 12 0 0 1 8.5 3.5l3.5 3.5a12 12 0 0 1 3.5 8.5z"/></svg>