nodebb-theme-harmony 1.2.14 → 1.2.16

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "1.2.14",
3
+ "version": "1.2.16",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.5.0"
6
6
  },
@@ -11,7 +11,7 @@ body.template-topic {
11
11
  }
12
12
  &.noreplies {
13
13
  pointer-events: none;
14
- opacity: 0.5;
14
+ cursor: none;
15
15
  }
16
16
  }
17
17
  }
@@ -31,8 +31,8 @@
31
31
  <div>
32
32
  {{{ if ./nid }}}
33
33
  <button class="mark-read btn-ghost-sm flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
34
- <i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}"></i>
35
- <i class="read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}"></i>
34
+ <i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-read]]"></i>
35
+ <i class="read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-unread]]"></i>
36
36
  </button>
37
37
  {{{ end }}}
38
38
  </div>
@@ -1,47 +1,47 @@
1
- <div component="pagination" class="pagination-container mt-3{{{ if !pagination.pages.length }}} hidden{{{ end }}}">
1
+ <nav component="pagination" class="pagination-container mt-3{{{ if !pagination.pages.length }}} hidden{{{ end }}}" aria-label="[[global:pagination]]">
2
2
  <ul class="pagination pagination-sm gap-1 hidden-xs hidden-sm justify-content-center">
3
- <li class="page-item previous float-start{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
4
- <a class="page-link rounded fw-secondary px-3" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
3
+ <li class="page-item previous {{{ if !pagination.prev.active }}} disabled{{{ end }}}">
4
+ <a class="page-link rounded fw-secondary px-3" 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
- {{{ if pagination.pages.separator }}}
8
+ {{{ if ./separator }}}
9
9
  <li component="pagination/select-page" class="page-item page select-page">
10
- <a class="page-link rounded fw-secondary px-3" href="#"><i class="fa fa-ellipsis-h"></i></a>
10
+ <a class="page-link rounded fw-secondary px-3" href="#" aria-label="[[global:pagination.go-to-page]]"><i class="fa fa-ellipsis-h"></i></a>
11
11
  </li>
12
12
  {{{ else }}}
13
- <li class="page-item page{{{ if pagination.pages.active }}} active{{{ end }}}" >
14
- <a class="page-link rounded fw-secondary px-3" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
13
+ <li class="page-item page{{{ if ./active }}} active{{{ end }}}" >
14
+ <a class="page-link rounded fw-secondary px-3" href="?{./qs}" data-page="{./page}" aria-label="[[global:pagination.page-x, {./page}]]">{./page}</a>
15
15
  </li>
16
16
  {{{ end }}}
17
17
  {{{end}}}
18
18
 
19
- <li class="page-item next float-end {{{ if !pagination.next.active }}} disabled{{{ end }}}">
20
- <a class="page-link rounded fw-secondary px-3" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
19
+ <li class="page-item next {{{ if !pagination.next.active }}} disabled{{{ end }}}">
20
+ <a class="page-link rounded fw-secondary px-3" 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
  {{{ if !template.topic }}}
25
25
  <ul class="pagination pagination-sm hidden-md hidden-lg justify-content-center">
26
26
  <li class="page-item first{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
27
- <a class="page-link fw-secondary" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
27
+ <a class="page-link fw-secondary" href="?{pagination.first.qs}" data-page="1" aria-label="[[global:pagination.firstpage]]"><i class="fa fa-fast-backward"></i> </a>
28
28
  </li>
29
29
 
30
30
  <li class="page-item previous{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
31
- <a class="page-link fw-secondary" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
31
+ <a class="page-link fw-secondary" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
32
32
  </li>
33
33
 
34
34
  <li component="pagination/select-page" class="page-item page select-page">
35
- <a class="page-link fw-secondary" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
35
+ <a class="page-link fw-secondary" href="#" aria-label="[[global:pagination.go-to-page]]">{pagination.currentPage} / {pagination.pageCount}</a>
36
36
  </li>
37
37
 
38
38
  <li class="page-item next{{{ if !pagination.next.active }}} disabled{{{ end }}}">
39
- <a class="page-link fw-secondary" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
39
+ <a class="page-link fw-secondary" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"> <i class="fa fa-chevron-right"></i></a>
40
40
  </li>
41
41
 
42
42
  <li class="page-item last{{{ if !pagination.next.active }}} disabled{{{ end }}}">
43
- <a class="page-link fw-secondary" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
43
+ <a class="page-link fw-secondary" href="?{pagination.last.qs}" data-page="{pagination.pageCount}" aria-label="[[global:pagination.lastpage]]"><i class="fa fa-fast-forward"></i> </a>
44
44
  </li>
45
45
  </ul>
46
46
  {{{ end }}}
47
- </div>
47
+ </nav>
@@ -1,7 +1,7 @@
1
1
  <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}}">
2
2
  <nav class="d-flex flex-nowrap my-2 p-0 border-0 rounded topic-main-buttons">
3
3
  <div class="d-flex flex-row p-2 text-bg-light border rounded w-100 align-items-center">
4
- <ul class="d-flex list-unstyled me-auto mb-0 gap-2 align-items-center flex-wrap">
4
+ <div class="d-flex list-unstyled me-auto mb-0 gap-2 align-items-center flex-wrap">
5
5
  {{{ if loggedIn }}}
6
6
  <button component="topic/mark-unread" class="btn-ghost-sm ff-secondary d-flex gap-2 align-items-center">
7
7
  <i class="fa fa-fw fa-inbox text-primary"></i>
@@ -22,7 +22,7 @@
22
22
  <!-- IMPORT partials/topic/browsing-users.tpl -->
23
23
  </div>
24
24
  {{{ end }}}
25
- </ul>
25
+ </div>
26
26
  <!-- IMPORT partials/topic/reply-button.tpl -->
27
27
  </div>
28
28
  </nav>
@@ -1,23 +1,23 @@
1
- <li id="user_label" class="nav-item mx-2 dropstart usermenu" title="{user.username}">
1
+ <li id="user_label" class="nav-item mx-2 dropstart usermenu" title="{user.username}" role="menuitem">
2
2
  <!-- IMPORT partials/sidebar/user-menu.tpl -->
3
3
  </li>
4
4
 
5
5
  {{{ if (config.searchEnabled && user.privileges.search:content) }}}
6
- <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]">
6
+ <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
7
7
  <!-- IMPORT partials/sidebar/search.tpl -->
8
8
  </li>
9
9
  {{{ end }}}
10
10
 
11
- <li component="notifications" class="nav-item mx-2 notifications dropstart" title="[[global:header.notifications]]">
11
+ <li component="notifications" class="nav-item mx-2 notifications dropstart" title="[[global:header.notifications]]" role="menuitem">
12
12
  <!-- IMPORT partials/sidebar/notifications.tpl -->
13
13
  </li>
14
14
 
15
15
  {{{ if canChat }}}
16
- <li class="nav-item mx-2 chats dropstart" title="[[global:header.chats]]">
16
+ <li class="nav-item mx-2 chats dropstart" title="[[global:header.chats]]" role="menuitem">
17
17
  <!-- IMPORT partials/sidebar/chats.tpl -->
18
18
  </li>
19
19
  {{{ end }}}
20
20
 
21
- <li component="sidebar/drafts" class="nav-item mx-2 drafts dropstart" title="[[global:header.drafts]]">
21
+ <li component="sidebar/drafts" class="nav-item mx-2 drafts dropstart" title="[[global:header.drafts]]" role="menuitem">
22
22
  <!-- IMPORT partials/sidebar/drafts.tpl -->
23
23
  </li>
@@ -1,5 +1,5 @@
1
1
 
2
- <li class="nav-item mx-2 order-last order-md-first" title="[[global:login]]">
2
+ <li class="nav-item mx-2 order-last order-md-first" title="[[global:login]]" role="menuitem">
3
3
  <a class="nav-link" href="{relative_path}/login">
4
4
  <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
5
5
  <span class="position-relative">
@@ -11,7 +11,7 @@
11
11
  </li>
12
12
  <hr class="my-2 mx-2 visible-open">
13
13
  {{{ if allowRegistration }}}
14
- <li class="nav-item mx-2" title="[[global:register]]">
14
+ <li class="nav-item mx-2" title="[[global:register]]" role="menuitem">
15
15
  <span class="text-xs visible-open">[[login:dont-have-account]]</span>
16
16
  <a class="nav-link" href="{relative_path}/register">
17
17
  <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
@@ -27,7 +27,7 @@
27
27
 
28
28
  {{{ if config.searchEnabled }}}
29
29
  {{{ if user.privileges.search:content }}}
30
- <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]">
30
+ <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
31
31
  <!-- IMPORT partials/sidebar/search.tpl -->
32
32
  </li>
33
33
  {{{ else }}}
@@ -35,8 +35,8 @@
35
35
  <div class="d-flex gap-2 py-1 px-2 align-items-center" title="[[themes/harmony:login-register-to-search]]">
36
36
  <i class="fa fa-fw fa-search"></i>
37
37
  <span class="nav-text visible-open text-xs">[[themes/harmony:login-register-to-search]]</span>
38
- </a>
39
- </a>
38
+ </div>
39
+ </li>
40
40
  {{{ end }}}
41
41
  {{{ end }}}
42
42
 
@@ -16,11 +16,11 @@
16
16
  </div>
17
17
 
18
18
  <div class="d-flex gap-1 input-container">
19
- <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
19
+ <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
20
20
 
21
- <div class="nav-link d-flex justify-content-center align-items-center advanced-search-link">
21
+ <a class="nav-link d-flex justify-content-center align-items-center advanced-search-link" href="{config.relative_path}/search" title="[[search:advanced-search]]">
22
22
  <i class="fa fa-gears fa-fw text-muted"></i>
23
- </div>
23
+ </a>
24
24
  </div>
25
25
 
26
26
  <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
@@ -8,11 +8,11 @@
8
8
  <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
9
9
  <div component="search/fields" class="w-100" id="search-fields">
10
10
  <div class="d-flex gap-1">
11
- <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
11
+ <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
12
12
 
13
- <div class="btn-ghost advanced-search-link">
13
+ <a class="btn-ghost advanced-search-link" href="{config.relative_path}/search" title="[[search:advanced-search]]">
14
14
  <i class="fa fa-gears fa-fw text-muted"></i>
15
- </div>
15
+ </a>
16
16
  </div>
17
17
 
18
18
  <div id="quick-search-container" class="quick-search-container d-block mt-2 hidden">
@@ -1,10 +1,10 @@
1
1
  <nav component="sidebar/right" class="{{{ if config.theme.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-right end-0 border-start vh-100 d-none d-lg-flex flex-column sticky-top">
2
2
  {{{ if config.loggedIn }}}
3
- <ul id="logged-in-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
3
+ <ul id="logged-in-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
4
4
  <!-- IMPORT partials/sidebar/logged-in-menu.tpl -->
5
5
  </ul>
6
6
  {{{ else }}}
7
- <ul id="logged-out-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
7
+ <ul id="logged-out-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
8
8
  <!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
9
9
  </ul>
10
10
  {{{ end }}}
@@ -14,7 +14,7 @@
14
14
 
15
15
  <div class="unread d-inline-block position-absolute bottom-0">
16
16
  <div class="meta small position-absolute top-50 translate-middle-y text-nowrap fw-semibold ms-2">
17
- <a class="text-decoration-none" href="{url}"></a>
17
+ <a class="text-decoration-none" href="{url}" tabindex="-1" aria-disabled="true" aria-label="[[topic:unread-posts-link]]"></a>
18
18
  </div>
19
19
  </div>
20
20
  </div>
@@ -15,7 +15,7 @@
15
15
  </div>
16
16
  <div>
17
17
  <div class="d-flex justify-content-end gap-2">
18
- <button type="submit" component="topic/quickreply/expand" class="btn-ghost-sm border"><i class="fa fa-expand"></i></button>
18
+ <button type="submit" component="topic/quickreply/expand" class="btn-ghost-sm border" title="[[topic:open-composer]]"><i class="fa fa-expand"></i></button>
19
19
  <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
20
20
  </div>
21
21
  </div>
@@ -1,6 +1,6 @@
1
1
  <div component="topic/reply/container" class="btn-group action-bar {{{ if !privileges.topics:reply }}}hidden{{{ end }}}">
2
2
  <a href="{config.relative_path}/compose?tid={tid}" class="d-flex align-items-center btn btn-sm btn-primary px-3 fw-semibold " component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-reply d-sm-block d-md-none"></i><span class="d-none d-md-block"> [[topic:reply]]</span></a>
3
- <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
+ <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:reply-options]]">
4
4
  <span class="caret"></span>
5
5
  </button>
6
6
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
@@ -1,7 +1,7 @@
1
1
  <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}} mb-3">
2
2
  <nav class="topic-list-header d-flex flex-nowrap my-2 p-0 border-0 rounded">
3
3
  <div class="d-flex flex-row p-2 text-bg-light gap-1 border rounded w-100 align-items-center">
4
- <ul component="category/controls" class="d-flex list-unstyled me-auto mb-0 gap-2 align-items-start flex-wrap">
4
+ <div component="category/controls" class="d-flex me-auto mb-0 gap-2 align-items-start flex-wrap">
5
5
  {{{ if template.category }}}
6
6
  <!-- IMPORT partials/category/watch.tpl -->
7
7
  <!-- IMPORT partials/tags/filter-dropdown-left.tpl -->
@@ -27,13 +27,13 @@
27
27
  <!-- IMPORT partials/category/tools.tpl -->
28
28
 
29
29
  {{{ if (!feeds:disableRSS && rssFeedUrl) }}}
30
- <a class="btn-ghost-sm d-none d-lg-flex align-self-stretch" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss text-primary"></i></a>
30
+ <a class="btn-ghost-sm d-none d-lg-flex align-self-stretch" target="_blank" href="{rssFeedUrl}" itemprop="item" title="[[global:rss-feed]]"><i class="fa fa-rss text-primary"></i></a>
31
31
  {{{ end }}}
32
32
 
33
33
  <a href="{config.relative_path}{{{ if template.category }}}{url}{{{ else }}}/{selectedFilter.url}{querystring}{{{ end }}}" class="btn btn-secondary fw-semibold position-absolute top-100 translate-middle-x start-50 mt-1 hide" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;" id="new-topics-alert">
34
34
  <i class="fa fa-fw fa-arrow-up"></i> [[recent:load-new-posts]]
35
35
  </a>
36
- </ul>
36
+ </div>
37
37
 
38
38
  <div class="d-flex gap-1 align-items-center">
39
39
  {{{ if template.category }}}
@@ -74,8 +74,8 @@
74
74
  {{{ end }}}
75
75
  </div>
76
76
  {{{ if ./thumbs.length }}}
77
- <a class="position-relative text-decoration-none flex-shrink-0 d-none d-xl-block" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}">
78
- <img class="topic-thumb rounded-1 bg-light" style="width:auto;max-width: 5.33rem;height: 3.33rem;object-fit: contain;" src="{./thumbs.0.url}"/>
77
+ <a class="position-relative text-decoration-none flex-shrink-0 d-none d-xl-block" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}" aria-label="[[topic:thumb-image]]">
78
+ <img class="topic-thumb rounded-1 bg-light" style="width:auto;max-width: 5.33rem;height: 3.33rem;object-fit: contain;" src="{./thumbs.0.url}" alt=""/>
79
79
  <span data-numthumbs="{./thumbs.length}" class="px-1 position-absolute top-0 start-100 translate-middle badge rounded bg-info" style="z-index: 1;">+{increment(./thumbs.length, "-1")}</span>
80
80
  </a>
81
81
  {{{ end }}}