nodebb-theme-persona 13.3.2 → 13.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/package.json +1 -1
  2. package/templates/account/blocks.tpl +4 -4
  3. package/templates/account/categories.tpl +6 -6
  4. package/templates/account/topics.tpl +3 -3
  5. package/templates/flags/detail.tpl +10 -10
  6. package/templates/flags/list.tpl +3 -3
  7. package/templates/notifications.tpl +4 -4
  8. package/templates/partials/account/menu.tpl +32 -32
  9. package/templates/partials/category/filter-dropdown-content.tpl +3 -3
  10. package/templates/partials/category/selector-dropdown-content.tpl +3 -3
  11. package/templates/partials/category/sort.tpl +7 -7
  12. package/templates/partials/category/tools.tpl +15 -15
  13. package/templates/partials/category/watch.tpl +6 -7
  14. package/templates/partials/flags/filters.tpl +6 -6
  15. package/templates/partials/groups/admin.tpl +8 -8
  16. package/templates/partials/groups/filter-dropdown-content.tpl +3 -3
  17. package/templates/partials/header/chats.tpl +2 -2
  18. package/templates/partials/header/notifications.tpl +2 -2
  19. package/templates/partials/header/search.tpl +3 -3
  20. package/templates/partials/header/user-menu.tpl +17 -17
  21. package/templates/partials/menu.tpl +1 -1
  22. package/templates/partials/paginator.tpl +11 -11
  23. package/templates/partials/search-filters.tpl +14 -14
  24. package/templates/partials/tags/filter-dropdown-content.tpl +3 -3
  25. package/templates/partials/tags/watch.tpl +4 -4
  26. package/templates/partials/topic/navigator.tpl +1 -1
  27. package/templates/partials/topic/post-menu-list.tpl +18 -18
  28. package/templates/partials/topic/post-menu.tpl +1 -1
  29. package/templates/partials/topic/reply-button.tpl +2 -2
  30. package/templates/partials/topic/sort.tpl +5 -5
  31. package/templates/partials/topic/tools.tpl +2 -2
  32. package/templates/partials/topic/topic-menu-list.tpl +58 -16
  33. package/templates/partials/topic/watch.tpl +5 -5
  34. package/templates/partials/topic-filters.tpl +2 -2
  35. package/templates/partials/topic-terms.tpl +2 -2
  36. package/templates/partials/users/filter-dropdown-content.tpl +3 -3
  37. package/templates/register.tpl +5 -7
  38. package/templates/topic.tpl +6 -1
@@ -4,12 +4,12 @@
4
4
  <i class="fa fa-clock-o"></i> [[groups:details.pending]]
5
5
  <!-- IF group.pending.length -->
6
6
  <div class="btn-group float-end">
7
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
7
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
8
8
  [[global:more]] <span class="caret"></span>
9
9
  </button>
10
10
  <ul class="dropdown-menu" role="menu">
11
- <li><a class="dropdown-item" href="#" data-ajaxify="false" data-action="acceptAll">[[groups:pending.accept-all]]</a></li>
12
- <li><a class="dropdown-item" href="#" data-ajaxify="false" data-action="rejectAll">[[groups:pending.reject-all]]</a></li>
11
+ <li><a class="dropdown-item" href="#" data-action="acceptAll" role="menuitem">[[groups:pending.accept-all]]</a></li>
12
+ <li><a class="dropdown-item" href="#" data-action="rejectAll" role="menuitem">[[groups:pending.reject-all]]</a></li>
13
13
  </ul>
14
14
  </div>
15
15
  <!-- ENDIF group.pending.length -->
@@ -30,12 +30,12 @@
30
30
  </td>
31
31
  <td class="p-2">
32
32
  <div class="btn-group float-end">
33
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
33
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
34
34
  [[global:more]] <span class="caret"></span>
35
35
  </button>
36
36
  <ul class="dropdown-menu" role="menu">
37
- <li><a class="dropdown-item" href="#" data-ajaxify="false" data-action="accept">[[groups:pending.accept]]</a></li>
38
- <li><a class="dropdown-item" href="#" data-ajaxify="false" data-action="reject">[[groups:pending.reject]]</a></li>
37
+ <li><a class="dropdown-item" href="#" data-action="accept" role="menuitem">[[groups:pending.accept]]</a></li>
38
+ <li><a class="dropdown-item" href="#" data-action="reject" role="menuitem">[[groups:pending.reject]]</a></li>
39
39
  </ul>
40
40
  </div>
41
41
  </td>
@@ -78,11 +78,11 @@
78
78
  </td>
79
79
  <td class="p-2">
80
80
  <div class="btn-group float-end">
81
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
81
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
82
82
  [[global:more]] <span class="caret"></span>
83
83
  </button>
84
84
  <ul class="dropdown-menu" role="menu">
85
- <li><a class="dropdown-item" href="#" data-ajaxify="false" data-action="rescindInvite">[[groups:invited.uninvite]]</a></li>
85
+ <li><a class="dropdown-item" href="#" data-action="rescindInvite" role="menuitem">[[groups:invited.uninvite]]</a></li>
86
86
  </ul>
87
87
  </div>
88
88
  </td>
@@ -1,5 +1,5 @@
1
1
  <div class="dropdown bottom-sheet">
2
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown">
2
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
3
  {{{ if selectedGroup }}}
4
4
  <span class="fw-semibold">{selectedGroup.displayName}</span>
5
5
  {{{ else }}}
@@ -8,14 +8,14 @@
8
8
  </button>
9
9
  <ul class="dropdown-menu text-sm" role="menu">
10
10
  <li role="presentation" class="user {{{ if !selectedGroup}}}selected{{{end}}}">
11
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menu-item" href="{config.relative_path}/{allGroupsUrl}">
11
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{allGroupsUrl}">
12
12
  <div class="flex-grow-1">[[groups:all-groups]]</div>
13
13
  <i class="flex-shrink-0 fa fa-fw {{{ if !selectedGroup }}}fa-check{{{ end }}}"></i>
14
14
  </a>
15
15
  </li>
16
16
  {{{ each groups }}}
17
17
  <li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
18
- <a class="dropdown-item d-flex align-items-center gap-2" role="menu-item" href="{config.relative_path}/{./url}">
18
+ <a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{./url}">
19
19
  <div class="flex-grow-1 d-inline-flex gap-1 align-items-center">{./displayName}</div>
20
20
  <i class="flex-shrink-0 fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
21
21
  </a>
@@ -1,7 +1,7 @@
1
- <a class="nav-link" data-bs-toggle="dropdown" href="{relative_path}/user/{user.userslug}/chats" id="chat_dropdown" component="chat/dropdown" data-ajaxify="false" role="button">
1
+ <a class="nav-link" data-bs-toggle="dropdown" href="{relative_path}/user/{user.userslug}/chats" data-ajaxify="false" id="chat_dropdown" component="chat/dropdown" role="button" aria-haspopup="true" aria-expanded="false">
2
2
  <i component="chat/icon" class="fa {{{ if unreadCount.chat}}}fa-comment{{{ else }}}fa-comment-o{{{ end }}} fa-fw unread-count" data-content="{unreadCount.chat}"></i> <span class="d-inline d-sm-none">[[global:header.chats]]</span>
3
3
  </a>
4
- <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="chat_dropdown" style="min-width: 300px; width: 300px;">
4
+ <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="chat_dropdown" style="min-width: 300px; width: 300px;" role="menu">
5
5
  <li>
6
6
  <ul component="chat/list" class="chat-list chats-list">
7
7
  <li class="loading-text">
@@ -1,7 +1,7 @@
1
- <a href="{relative_path}/notifications" class="nav-link" data-bs-toggle="dropdown" id="notif_dropdown" data-ajaxify="false" role="button">
1
+ <a href="{relative_path}/notifications" class="nav-link" data-bs-toggle="dropdown" id="notif_dropdown" data-ajaxify="false" role="button" aria-haspopup="true" aria-expanded="false">
2
2
  <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
3
3
  </a>
4
- <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="notif_dropdown" >
4
+ <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="notif_dropdown" role="menu">
5
5
  <li>
6
6
  <ul component="notifications/list" class="notification-list">
7
7
  <li class="loading-text">
@@ -3,9 +3,9 @@
3
3
  <div class="input-group flex-nowrap">
4
4
  <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
5
5
 
6
- <button href="#" class="btn btn-outline-secondary">
7
- <i class="fa fa-gears fa-fw advanced-search-link"></i>
8
- </button>
6
+ <a href="{config.relative_path}/search" class="btn btn-outline-secondary" aria-label="[[search:type-to-search]]">
7
+ <i class="fa fa-gears fa-fw"></i>
8
+ </a>
9
9
  </div>
10
10
 
11
11
  <div id="quick-search-container" class="quick-search-container dropdown-menu d-block mt-2 hidden">
@@ -1,50 +1,50 @@
1
1
  <li id="user_label" class="nav-item dropdown" title="[[global:header.profile]]">
2
- <label for="user-control-list-check" class="" data-bs-toggle="dropdown" id="user_dropdown" role="button" component="header/avatar">
2
+ <a href="#" for="user-control-list-check" data-bs-toggle="dropdown" id="user_dropdown" role="button" component="header/avatar" aria-haspopup="true" aria-expanded="false">
3
3
  {buildAvatar(user, "32px", true)}
4
4
  <span id="user-header-name" class="d-block d-sm-none">{user.username}</span>
5
- </label>
5
+ </a>
6
6
  <input type="checkbox" class="hidden" id="user-control-list-check" aria-hidden="true">
7
- <ul id="user-control-list" component="header/usercontrol" class="dropdown-menu dropdown-menu-end" aria-labelledby="user_dropdown">
7
+ <ul id="user-control-list" component="header/usercontrol" class="dropdown-menu dropdown-menu-end" aria-labelledby="user_dropdown" role="menu">
8
8
  <li>
9
- <a class="dropdown-item" component="header/profilelink" href="{relative_path}/user/{user.userslug}">
9
+ <a class="dropdown-item" component="header/profilelink" href="{relative_path}/user/{user.userslug}" role="menuitem">
10
10
  <i component="user/status" class="fa fa-fw fa-circle status {user.status}"></i> <span component="header/username">{user.username}</span>
11
11
  </a>
12
12
  </li>
13
13
  <li role="presentation" class="dropdown-divider"></li>
14
14
  <li><h6 class="dropdown-header">[[global:status]]</h6></li>
15
15
  <li>
16
- <a href="#" class="dropdown-item user-status {{{ if user.online }}}selected{{{ end }}}" data-status="online">
16
+ <a href="#" class="dropdown-item user-status {{{ if user.online }}}selected{{{ end }}}" data-status="online" role="menuitem">
17
17
  <i class="fa fa-fw fa-circle status online"></i><span> [[global:online]]</span>
18
18
  </a>
19
19
  </li>
20
20
  <li>
21
- <a href="#" class="dropdown-item user-status {{{ if user.away }}}selected{{{ end }}}" data-status="away">
21
+ <a href="#" class="dropdown-item user-status {{{ if user.away }}}selected{{{ end }}}" data-status="away" role="menuitem">
22
22
  <i class="fa fa-fw fa-circle status away"></i><span> [[global:away]]</span>
23
23
  </a>
24
24
  </li>
25
25
  <li>
26
- <a href="#" class="dropdown-item user-status {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd">
26
+ <a href="#" class="dropdown-item user-status {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd" role="menuitem">
27
27
  <i class="fa fa-fw fa-circle status dnd"></i><span> [[global:dnd]]</span>
28
28
  </a>
29
29
  </li>
30
30
  <li>
31
- <a href="#" class="dropdown-item user-status {{{ if user.offline }}}selected{{{ end }}}" data-status="offline">
31
+ <a href="#" class="dropdown-item user-status {{{ if user.offline }}}selected{{{ end }}}" data-status="offline" role="menuitem">
32
32
  <i class="fa fa-fw fa-circle status offline"></i><span> [[global:invisible]]</span>
33
33
  </a>
34
34
  </li>
35
35
  <li role="presentation" class="dropdown-divider"></li>
36
36
  <li>
37
- <a class="dropdown-item" href="{relative_path}/user/{user.userslug}/bookmarks">
37
+ <a class="dropdown-item" href="{relative_path}/user/{user.userslug}/bookmarks" role="menuitem">
38
38
  <i class="fa fa-fw fa-bookmark"></i> <span>[[user:bookmarks]]</span>
39
39
  </a>
40
40
  </li>
41
41
  <li>
42
- <a class="dropdown-item" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit">
42
+ <a class="dropdown-item" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit" role="menuitem">
43
43
  <i class="fa fa-fw fa-edit"></i> <span>[[user:edit-profile]]</span>
44
44
  </a>
45
45
  </li>
46
46
  <li>
47
- <a class="dropdown-item" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings">
47
+ <a class="dropdown-item" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
48
48
  <i class="fa fa-fw fa-gear"></i> <span>[[user:settings]]</span>
49
49
  </a>
50
50
  </li>
@@ -52,31 +52,31 @@
52
52
  <li role="presentation" class="dropdown-divider"></li>
53
53
  <li><h6 class="dropdown-header">[[pages:moderator-tools]]</h6></li>
54
54
  <li>
55
- <a class="dropdown-item" href="{relative_path}/flags">
55
+ <a class="dropdown-item" href="{relative_path}/flags" role="menuitem">
56
56
  <i class="fa fa-fw fa-flag"></i> <span>[[pages:flagged-content]]</span>
57
57
  </a>
58
58
  </li>
59
59
  <li>
60
- <a class="dropdown-item" href="{relative_path}/post-queue">
60
+ <a class="dropdown-item" href="{relative_path}/post-queue" role="menuitem">
61
61
  <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
62
62
  </a>
63
63
  </li>
64
64
  {{{ if registrationQueueEnabled }}}
65
65
  <li>
66
- <a class="dropdown-item" href="{relative_path}/registration-queue">
66
+ <a class="dropdown-item" href="{relative_path}/registration-queue" role="menuitem">
67
67
  <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:registration-queue]]</span>
68
68
  </a>
69
69
  </li>
70
70
  {{{ end }}}
71
71
  <li>
72
- <a class="dropdown-item" href="{relative_path}/ip-blacklist">
72
+ <a class="dropdown-item" href="{relative_path}/ip-blacklist" role="menuitem">
73
73
  <i class="fa fa-fw fa-ban"></i> <span>[[pages:ip-blacklist]]</span>
74
74
  </a>
75
75
  </li>
76
76
  {{{ else }}}
77
77
  {{{ if postQueueEnabled }}}
78
78
  <li>
79
- <a class="dropdown-item" href="{relative_path}/post-queue">
79
+ <a class="dropdown-item" href="{relative_path}/post-queue" role="menuitem">
80
80
  <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
81
81
  </a>
82
82
  </li>
@@ -88,7 +88,7 @@
88
88
  <form method="post" action="{relative_path}/logout">
89
89
  <input type="hidden" name="_csrf" value="{config.csrf_token}">
90
90
  <input type="hidden" name="noscript" value="true">
91
- <button type="submit" class="dropdown-item">
91
+ <button type="submit" class="dropdown-item" role="menuitem">
92
92
  <i class="fa fa-fw fa-sign-out"></i><span> [[global:logout]]</span>
93
93
  </button>
94
94
  </form>
@@ -61,7 +61,7 @@
61
61
  {{{ end }}}
62
62
  </a>
63
63
  {{{ if navigation.dropdown }}}
64
- <ul class="dropdown-menu">
64
+ <ul class="dropdown-menu" role="menu">
65
65
  {navigation.dropdownContent}
66
66
  </ul>
67
67
  {{{ end }}}
@@ -1,45 +1,45 @@
1
- <div component="pagination" class="pagination-container<!-- IF !pagination.pages.length --> hidden<!-- ENDIF !pagination.pages.length -->">
1
+ <nav component="pagination" class="pagination-container<!-- IF !pagination.pages.length --> hidden<!-- ENDIF !pagination.pages.length -->" aria-label="[[global:pagination]]">
2
2
  <ul class="pagination hidden-xs justify-content-center">
3
3
  <li class="page-item previous float-start<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
4
- <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
4
+ <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
5
5
  </li>
6
6
 
7
7
  {{{each pagination.pages}}}
8
8
  <!-- IF pagination.pages.separator -->
9
9
  <li component="pagination/select-page" class="page-item page select-page">
10
- <a class="page-link" href="#"><i class="fa fa-ellipsis-h"></i></a>
10
+ <a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]"><i class="fa fa-ellipsis-h"></i></a>
11
11
  </li>
12
12
  <!-- ELSE -->
13
13
  <li class="page-item page<!-- IF pagination.pages.active --> active<!-- ENDIF pagination.pages.active -->" >
14
- <a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
14
+ <a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}" aria-label="[[global:pagination.page-x, {./page}]]">{pagination.pages.page}</a>
15
15
  </li>
16
16
  <!-- ENDIF pagination.pages.separator -->
17
17
  {{{end}}}
18
18
 
19
19
  <li class="page-item next float-end<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
20
- <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
20
+ <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
21
21
  </li>
22
22
  </ul>
23
23
 
24
24
  <ul class="pagination hidden-sm hidden-md hidden-lg justify-content-center">
25
25
  <li class="page-item first<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
26
- <a class="page-link" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
26
+ <a class="page-link" href="?{pagination.first.qs}" data-page="1" aria-label="[[global:pagination.firstpage]]"><i class="fa fa-fast-backward"></i> </a>
27
27
  </li>
28
28
 
29
29
  <li class="page-item previous<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
30
- <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
30
+ <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
31
31
  </li>
32
32
 
33
33
  <li component="pagination/select-page" class="page-item page select-page">
34
- <a class="page-link" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
34
+ <a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]">{pagination.currentPage} / {pagination.pageCount}</a>
35
35
  </li>
36
36
 
37
37
  <li class="page-item next<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
38
- <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
38
+ <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
39
39
  </li>
40
40
 
41
41
  <li class="page-item last<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
42
- <a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
42
+ <a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}" aria-label="[[global:pagination.lastpage]]"><i class="fa fa-fast-forward"></i> </a>
43
43
  </li>
44
44
  </ul>
45
- </div>
45
+ </nav>
@@ -2,12 +2,12 @@
2
2
  <!-- category filter -->
3
3
  <div class="post-search-item">
4
4
  <div component="category/filter" class="dropdown" data-filter-name="category">
5
- <a component="category/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.categories.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
5
+ <a component="category/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.categories.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
6
6
  <span class="filter-label">{{{ if filters.categories.active }}}{filters.categories.label}{{{ else }}}[[search:categories]]{{{ end }}}</span>
7
7
  <span class="caret"></span>
8
8
  </a>
9
9
 
10
- <ul class="dropdown-menu p-1 text-sm">
10
+ <ul class="dropdown-menu p-1 text-sm" role="menu">
11
11
  <li class="px-3 py-1 mb-2 d-flex flex-column gap-2">
12
12
  <div component="category-selector-search">
13
13
  <input type="text" class="form-control" component="category/filter/search" placeholder="[[search:type-a-category]]">
@@ -28,12 +28,12 @@
28
28
  <!-- tag filter -->
29
29
  <div class="post-search-item">
30
30
  <div component="tag/filter" class="dropdown" data-filter-name="tag">
31
- <a component="tag/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.tags.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
31
+ <a component="tag/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.tags.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
32
32
  <span class="filter-label">{{{ if filters.tags.active }}}{filters.tags.label}{{{ else }}}[[search:tags]]{{{ end }}}</span>
33
33
  <span class="caret"></span>
34
34
  </a>
35
35
 
36
- <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
36
+ <ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
37
37
  <li class="px-3 py-1 d-flex flex-column gap-2">
38
38
  <input type="text" class="form-control" component="tag/filter/search" placeholder="[[search:type-a-tag]]">
39
39
  <div component="tag/filter/selected" class="d-flex flex-wrap gap-2">
@@ -58,12 +58,12 @@
58
58
  <!-- user name filter -->
59
59
  <div class="post-search-item">
60
60
  <div component="user/filter" class="dropdown" data-filter-name="user">
61
- <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.users.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
61
+ <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.users.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
62
62
  <span class="filter-label">{{{ if filters.users.active }}}{filters.users.label}{{{ else }}}[[search:posted-by]]{{{ end }}}</span>
63
63
  <span class="caret"></span>
64
64
  </a>
65
65
 
66
- <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
66
+ <ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
67
67
  <li class="px-3 py-1 d-flex flex-column gap-2">
68
68
  <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
69
69
  <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
@@ -89,12 +89,12 @@
89
89
  <!-- reply count filter -->
90
90
  <div class="post-search-item">
91
91
  <div class="dropdown" data-filter-name="replies">
92
- <a id="reply-count-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.replies.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
92
+ <a id="reply-count-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.replies.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
93
93
  <span class="filter-label">{{{ if filters.replies.active }}}{filters.replies.label}{{{ else }}}[[search:replies]]{{{ end }}}</span>
94
94
  <span class="caret"></span>
95
95
  </a>
96
96
 
97
- <ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
97
+ <ul class="dropdown-menu p-1 text-sm" style="width: 300px;" role="menu">
98
98
  <li class="px-3 py-1 d-flex flex-nowrap gap-2">
99
99
  <select id="reply-count-filter" class="form-select py-2 ps-2 pe-3">
100
100
  <option value="atleast">[[search:at-least]]</option>
@@ -109,12 +109,12 @@
109
109
  <!-- time filter -->
110
110
  <div class="post-search-item">
111
111
  <div class="dropdown" data-filter-name="time">
112
- <a id="post-time-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.time.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
112
+ <a id="post-time-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.time.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
113
113
  <span class="filter-label">{{{ if filters.time.active }}}{filters.time.label}{{{ else }}}[[search:time]]{{{ end }}}</span>
114
114
  <span class="caret"></span>
115
115
  </a>
116
116
 
117
- <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
117
+ <ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
118
118
  <li class="px-3 py-1 d-flex flex-nowrap gap-2">
119
119
  <select id="post-time-filter" class="form-select py-2 ps-2 pe-3">
120
120
  <option value="newer">[[search:newer-than]]</option>
@@ -138,12 +138,12 @@
138
138
  <!-- sort filter -->
139
139
  <div class="post-search-item">
140
140
  <div class="dropdown" data-filter-name="sort">
141
- <a id="sort-by-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.sort.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
141
+ <a id="sort-by-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.sort.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
142
142
  <span class="filter-label">{{{ if filters.sort.active }}}{filters.sort.label}{{{ else }}}[[search:sort]]{{{ end }}}</span>
143
143
  <span class="caret"></span>
144
144
  </a>
145
145
 
146
- <ul class="dropdown-menu p-1 text-sm" style="width: 250px;">
146
+ <ul class="dropdown-menu p-1 text-sm" style="width: 250px;" role="menu">
147
147
  <li class="px-3 py-1 d-flex flex-column gap-2">
148
148
  <select id="post-sort-by" class="form-select py-2 ps-2 pe-3">
149
149
  <option value="relevance">[[search:relevance]]</option>
@@ -170,10 +170,10 @@
170
170
  <!-- save & reset preferences -->
171
171
  <div class="post-search-item">
172
172
  <div class="dropdown">
173
- <a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">[[search:save]] <span class="caret"></span>
173
+ <a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[search:save]] <span class="caret"></span>
174
174
  </a>
175
175
 
176
- <ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
176
+ <ul class="dropdown-menu p-1 text-sm" style="width: 300px;" role="menu">
177
177
  <li class="px-3 py-1 d-flex flex-column gap-2">
178
178
  <button id="save-preferences" class="btn btn-primary">[[search:save-preferences]]</button>
179
179
  <button id="clear-preferences" class="btn btn-ghost border">[[search:clear-preferences]]</button>
@@ -1,4 +1,4 @@
1
- <button type="button" class="btn btn-outline-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn btn-outline-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
2
  {{{ if selectedTag }}}
3
3
  <span class="d-inline-flex align-items-center gap-1">
4
4
  <i class="fa fa-fw fa-tags text-primary"></i>
@@ -14,14 +14,14 @@
14
14
  </div>
15
15
  <ul component="tag/filter/list" class="dropdown-menu overflow-auto" role="menu" style="max-height: 500px;">
16
16
  <li role="presentation" data-tag="">
17
- <a class="dropdown-item d-flex align-items-center gap-2" role="menu-item" href="#">
17
+ <a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="#">
18
18
  <span class="flex-grow-1">[[tags:all-tags]]</span>
19
19
  <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedTag }}}invisible{{{ end }}}"></i>
20
20
  </a>
21
21
  </li>
22
22
  {{{ each tagItems }}}
23
23
  <li role="presentation" data-tag="{./valueEscaped}">
24
- <a class="dropdown-item d-flex align-items-center gap-2" role="menu-item" href="#">
24
+ <a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="#">
25
25
  <span component="tag-markup" class="flex-grow-1">
26
26
  <div class="d-inline-flex align-items-center gap-1">
27
27
  {./valueEscaped}
@@ -1,7 +1,7 @@
1
1
  {{{ if config.loggedIn }}}
2
2
  <div class="btn-group bottom-sheet" component="tag/watch"
3
3
  data-bs-toggle="tooltip">
4
- <button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
+ <button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
5
5
  <span component="tag/following/menu" {{{ if !isFollowing }}}class="hidden"{{{ end }}}>
6
6
  <i class="fa fa-fw fa-bell-o"></i>
7
7
  <span class="d-none d-md-inline">[[tags:watching]]</span>
@@ -11,9 +11,9 @@ data-bs-toggle="tooltip">
11
11
  <span class="d-none d-md-inline">[[tags:not-watching]]</span>
12
12
  </span>
13
13
  </button>
14
- <ul class="dropdown-menu dropdown-menu-end">
14
+ <ul class="dropdown-menu dropdown-menu-end" role="menu">
15
15
  <li>
16
- <a class="dropdown-item d-flex" href="#" component="tag/following">
16
+ <a class="dropdown-item d-flex" href="#" component="tag/following" role="menuitem">
17
17
  <span><i component="tag/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
18
18
  <div class="d-flex flex-column">
19
19
  <span><i class="fa fa-fw fa-bell-o"></i> [[tags:watching]]</span>
@@ -23,7 +23,7 @@ data-bs-toggle="tooltip">
23
23
  </li>
24
24
 
25
25
  <li>
26
- <a class="dropdown-item d-flex" href="#" component="tag/not-following">
26
+ <a class="dropdown-item d-flex" href="#" component="tag/not-following" role="menuitem">
27
27
  <span><i component="tag/not-following/check" class="fa fa-fw {{{ if !isFollowing }}}fa-check{{{ end }}}"></i></span>
28
28
  <div class="d-flex flex-column">
29
29
  <span><i class="fa fa-fw fa-bell-slash-o"></i> [[tags:not-watching]]</span>
@@ -3,7 +3,7 @@
3
3
  <div class="wrapper dropup">
4
4
  <i class="fa fa-2x fa-angle-double-up pointer fa-fw pagetop"></i>
5
5
 
6
- <a href="#" class="dropdown-toggle d-inline-block text-decoration-none" data-bs-toggle="dropdown" data-bs-reference="parent">
6
+ <a href="#" class="dropdown-toggle d-inline-block text-decoration-none" data-bs-toggle="dropdown" data-bs-reference="parent" aria-haspopup="true" aria-expanded="false">
7
7
  <span class="pagination-text"></span>
8
8
  </a>
9
9
 
@@ -1,22 +1,22 @@
1
1
  <!-- IF posts.display_moderator_tools -->
2
2
  <li>
3
- <a class="dropdown-item" component="post/edit" role="menuitem" tabindex="-1" href="#">
3
+ <a class="dropdown-item" component="post/edit" role="menuitem" href="#">
4
4
  <span class="menu-icon"><i class="fa fa-fw fa-pencil"></i></span> [[topic:edit]]
5
5
  </a>
6
6
  </li>
7
7
  <li <!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->>
8
- <a class="dropdown-item" component="post/delete" role="menuitem" tabindex="-1" href="#" class="<!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->">
8
+ <a class="dropdown-item" component="post/delete" role="menuitem" href="#" class="<!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->">
9
9
  <span class="menu-icon"><i class="fa fa-fw fa-trash-o"></i><span> [[topic:delete]]
10
10
  </a>
11
11
  </li>
12
12
  <li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
13
- <a class="dropdown-item" component="post/restore" role="menuitem" tabindex="-1" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
13
+ <a class="dropdown-item" component="post/restore" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
14
14
  <span class="menu-icon"><i class="fa fa-fw fa-history"></i><span> [[topic:restore]]
15
15
  </a>
16
16
  </li>
17
17
  <!-- IF posts.display_purge_tools -->
18
18
  <li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
19
- <a class="dropdown-item" component="post/purge" role="menuitem" tabindex="-1" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
19
+ <a class="dropdown-item" component="post/purge" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
20
20
  <span class="menu-icon"><i class="fa fa-fw fa-eraser"></i></span> [[topic:purge]]
21
21
  </a>
22
22
  </li>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <!-- IF posts.display_move_tools -->
26
26
  <li>
27
- <a class="dropdown-item" component="post/move" role="menuitem" tabindex="-1" href="#">
27
+ <a class="dropdown-item" component="post/move" role="menuitem" href="#">
28
28
  <span class="menu-icon"><i class="fa fa-fw fa-arrows"></i></span> [[topic:move]]
29
29
  </a>
30
30
  </li>
@@ -32,7 +32,7 @@
32
32
 
33
33
  <!-- IF posts.display_change_owner_tools -->
34
34
  <li>
35
- <a class="dropdown-item" component="post/change-owner" role="menuitem" tabindex="-1" href="#">
35
+ <a class="dropdown-item" component="post/change-owner" role="menuitem" href="#">
36
36
  <span class="menu-icon"><i class="fa fa-fw fa-user"></i></span> [[topic:change-owner]]
37
37
  </a>
38
38
  </li>
@@ -40,13 +40,13 @@
40
40
 
41
41
  <!-- IF posts.ip -->
42
42
  <li>
43
- <a class="dropdown-item" component="post/copy-ip" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.ip}">
43
+ <a class="dropdown-item" component="post/copy-ip" role="menuitem" href="#" data-clipboard-text="{posts.ip}">
44
44
  <span class="menu-icon" ><i class="fa fa-fw fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
45
45
  </a>
46
46
  </li>
47
47
  <!-- IF posts.display_ip_ban -->
48
48
  <li>
49
- <a class="dropdown-item" component="post/ban-ip" role="menuitem" tabindex="-1" href="#" data-ip="{posts.ip}">
49
+ <a class="dropdown-item" component="post/ban-ip" role="menuitem" href="#" data-ip="{posts.ip}">
50
50
  <span class="menu-icon"><i class="fa fa-fw fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
51
51
  </a>
52
52
  </li>
@@ -56,7 +56,7 @@
56
56
 
57
57
  {{{each posts.tools}}}
58
58
  <li {{{ if ./disabled }}}class="disabled" {{{ end }}}>
59
- <a class="dropdown-item" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" tabindex="-1" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
59
+ <a class="dropdown-item" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
60
60
  <span class="menu-icon"><i class="fa fa-fw {posts.tools.icon}"></i></span> {{posts.tools.html}}
61
61
  </a>
62
62
  </li>
@@ -65,7 +65,7 @@
65
65
  <!-- IF !posts.deleted -->
66
66
  <!-- IF posts.display_history -->
67
67
  <li>
68
- <a class="dropdown-item" component="post/view-history" role="menuitem" tabindex="-1" href="#">
68
+ <a class="dropdown-item" component="post/view-history" role="menuitem" href="#">
69
69
  <span class="menu-icon"><i class="fa fa-fw fa-history"></i></span> [[topic:view-history]]
70
70
  </a>
71
71
  </li>
@@ -73,7 +73,7 @@
73
73
 
74
74
  {{{ if config.loggedIn }}}
75
75
  <li>
76
- <a class="dropdown-item" component="post/bookmark" role="menuitem" tabindex="-1" href="#" data-bookmarked="{posts.bookmarked}">
76
+ <a class="dropdown-item" component="post/bookmark" role="menuitem" href="#" data-bookmarked="{posts.bookmarked}">
77
77
  <span class="menu-icon">
78
78
  <i component="post/bookmark/on" class="fa fa-fw fa-heart <!-- IF !posts.bookmarked -->hidden<!-- ENDIF !posts.bookmarked -->"></i>
79
79
  <i component="post/bookmark/off" class="fa fa-fw fa-heart-o <!-- IF posts.bookmarked -->hidden<!-- ENDIF posts.bookmarked -->"></i>
@@ -85,7 +85,7 @@
85
85
  {{{ end }}}
86
86
 
87
87
  <li>
88
- <a class="dropdown-item" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.absolute_url}">
88
+ <a class="dropdown-item" role="menuitem" href="#" data-clipboard-text="{posts.absolute_url}">
89
89
  <i class="fa fa-fw fa-link"></i> [[topic:copy-permalink]]
90
90
  </a>
91
91
  </li>
@@ -96,7 +96,7 @@
96
96
  <!-- ENDIF postSharing.length -->
97
97
  <li class="d-flex gap-2 px-3">
98
98
  {{{ each postSharing }}}
99
- <a class="dropdown-item rounded-1 d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" tabindex="-1" href="#" title="{./name}"><i class="fa-fw text-muted {./class}"></i></a>
99
+ <a class="dropdown-item rounded-1 d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" href="#" title="{./name}"><i class="fa-fw text-muted {./class}"></i></a>
100
100
  {{{ end }}}
101
101
  </li>
102
102
  <!-- ENDIF !posts.deleted -->
@@ -105,15 +105,15 @@
105
105
  <li class="dropdown-divider"></li>
106
106
 
107
107
  <li {{{ if posts.flags.flagged }}}hidden{{{ end }}}>
108
- <a class="dropdown-item" component="post/flag" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-post]]</a>
108
+ <a class="dropdown-item" component="post/flag" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-post]]</a>
109
109
  </li>
110
110
  <li {{{ if !posts.flags.flagged }}}hidden{{{ end }}} class="disabled text-muted">
111
- <a class="dropdown-item" component="post/already-flagged" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:already-flagged]]</a>
111
+ <a class="dropdown-item" component="post/already-flagged" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:already-flagged]]</a>
112
112
  </li>
113
113
 
114
114
  {{{ if (!posts.selfPost && posts.uid) }}}
115
115
  <li>
116
- <a class="dropdown-item" component="post/flagUser" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-user]]</a>
116
+ <a class="dropdown-item" component="post/flagUser" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-user]]</a>
117
117
  </li>
118
118
  {{{ end }}}
119
119
  {{{ end }}}
@@ -121,11 +121,11 @@
121
121
  <!-- IF posts.display_moderator_tools -->
122
122
  {{{ if posts.flags.exists }}}
123
123
  <li>
124
- <a class="dropdown-item" role="menuitem" tabindex="-1" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
124
+ <a class="dropdown-item" role="menuitem" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
125
125
  </li>
126
126
  {{{ if (posts.flags.state == "open") }}}
127
127
  <li>
128
- <a class="dropdown-item" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-check"></i> [[topic:resolve-flag]]</a>
128
+ <a class="dropdown-item" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" href="#"><i class="fa fa-fw fa-check"></i> [[topic:resolve-flag]]</a>
129
129
  </li>
130
130
  {{{ end }}}
131
131
  {{{ end }}}
@@ -1,4 +1,4 @@
1
1
  <span component="post/tools" class="dropdown moderator-tools bottom-sheet d-inline-block {{{ if !posts.display_post_menu }}}hidden{{{ end }}}">
2
- <a class="dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v"></i></a>
2
+ <a class="dropdown-toggle d-block" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-fw fa-ellipsis-v"></i></a>
3
3
  <ul class="dropdown-menu dropdown-menu-end" role="menu"></ul>
4
4
  </span>