nodebb-theme-harmony 2.0.0-pre.4 → 2.0.0-pre.41

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 (87) hide show
  1. package/README.md +3 -0
  2. package/library.js +1 -7
  3. package/package.json +2 -2
  4. package/plugin.json +1 -2
  5. package/public/harmony.js +17 -20
  6. package/scss/common.scss +2 -8
  7. package/scss/harmony.scss +0 -1
  8. package/scss/header.scss +1 -1
  9. package/scss/mixins.scss +12 -5
  10. package/scss/modules/topics-list.scss +1 -1
  11. package/scss/overrides.scss +2 -0
  12. package/scss/topic.scss +3 -11
  13. package/templates/account/blocks.tpl +18 -7
  14. package/templates/account/categories.tpl +1 -1
  15. package/templates/account/consent.tpl +2 -2
  16. package/templates/account/edit/password.tpl +8 -8
  17. package/templates/account/edit/username.tpl +2 -3
  18. package/templates/account/edit.tpl +24 -4
  19. package/templates/account/info.tpl +142 -73
  20. package/templates/account/posts.tpl +7 -7
  21. package/templates/account/profile.tpl +16 -1
  22. package/templates/account/read.tpl +1 -0
  23. package/templates/account/settings.tpl +5 -5
  24. package/templates/account/topics.tpl +6 -5
  25. package/templates/admin/plugins/harmony.tpl +1 -0
  26. package/templates/footer.tpl +1 -1
  27. package/templates/groups/list.tpl +6 -6
  28. package/templates/notifications.tpl +1 -1
  29. package/templates/partials/account/header.tpl +6 -6
  30. package/templates/partials/account/sidebar-left.tpl +21 -16
  31. package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
  32. package/templates/partials/buttons/newTopic.tpl +1 -1
  33. package/templates/partials/categories/item.tpl +3 -3
  34. package/templates/partials/category/subcategory.tpl +1 -1
  35. package/templates/partials/groups/memberlist.tpl +1 -1
  36. package/templates/partials/groups/sidebar-left.tpl +5 -5
  37. package/templates/partials/header/brand.tpl +3 -1
  38. package/templates/partials/mobile-footer.tpl +3 -6
  39. package/templates/partials/notifications_list.tpl +2 -2
  40. package/templates/partials/post_bar.tpl +3 -5
  41. package/templates/partials/posts_list_item.tpl +1 -1
  42. package/templates/partials/quick-search-results.tpl +4 -4
  43. package/templates/partials/search-filters.tpl +2 -2
  44. package/templates/partials/search-results.tpl +1 -1
  45. package/templates/partials/sidebar/chats.tpl +2 -2
  46. package/templates/partials/sidebar/drafts.tpl +1 -1
  47. package/templates/partials/sidebar/notifications.tpl +2 -2
  48. package/templates/partials/sidebar/search.tpl +2 -2
  49. package/templates/partials/sidebar-left.tpl +2 -5
  50. package/templates/partials/tags_list.tpl +3 -3
  51. package/templates/partials/topic/event.tpl +1 -1
  52. package/templates/partials/topic/navigator.tpl +2 -2
  53. package/templates/partials/topic/post-menu-list.tpl +25 -1
  54. package/templates/partials/topic/post-menu.tpl +3 -29
  55. package/templates/partials/topic/post.tpl +109 -102
  56. package/templates/partials/topic/quickreply.tpl +2 -2
  57. package/templates/partials/topic/reply-button.tpl +4 -2
  58. package/templates/partials/topic/sort.tpl +1 -1
  59. package/templates/partials/topic/tools.tpl +2 -6
  60. package/templates/partials/topic/watch.tpl +1 -1
  61. package/templates/partials/topic-filters.tpl +1 -1
  62. package/templates/partials/topic-list-bar.tpl +7 -7
  63. package/templates/partials/topic-terms.tpl +1 -1
  64. package/templates/partials/topics_list.tpl +10 -2
  65. package/templates/partials/users/item.tpl +2 -2
  66. package/templates/partials/users_list_menu.tpl +5 -5
  67. package/templates/post-queue.tpl +6 -2
  68. package/templates/topic.tpl +81 -88
  69. package/templates/users.tpl +1 -1
  70. package/templates/world.tpl +21 -0
  71. package/scss/modules/bottom-sheet.scss +0 -52
  72. package/templates/flags/detail.tpl +0 -179
  73. package/templates/flags/list.tpl +0 -6
  74. package/templates/login.tpl +0 -102
  75. package/templates/partials/category/filter-dropdown-content.tpl +0 -37
  76. package/templates/partials/category/selector-dropdown-content.tpl +0 -35
  77. package/templates/partials/category/sort.tpl +0 -39
  78. package/templates/partials/category/tools.tpl +0 -89
  79. package/templates/partials/category/watch.tpl +0 -67
  80. package/templates/partials/flags/bulk-actions.tpl +0 -9
  81. package/templates/partials/flags/filters.tpl +0 -186
  82. package/templates/partials/flags/results.tpl +0 -38
  83. package/templates/partials/groups/filter-dropdown-content.tpl +0 -25
  84. package/templates/partials/tags/filter-dropdown-content.tpl +0 -34
  85. package/templates/partials/tags/watch.tpl +0 -42
  86. package/templates/partials/users/filter-dropdown-content.tpl +0 -23
  87. package/templates/register.tpl +0 -104
@@ -1,35 +0,0 @@
1
- <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
- <span component="category-selector-selected">
3
- {{{ if (selectedCategory && !showCategorySelectLabel) }}}
4
- <span class="category-item d-inline-flex align-items-center gap-1">
5
- {buildCategoryIcon(selectedCategory, "24px", "rounded-circle")}
6
- <span class="fw-semibold">{selectedCategory.name}</span>
7
- </span>
8
- {{{ else }}}
9
- <i class="fa fa-fw {{{ if selectCategoryIcon }}}{selectCategoryIcon}{{{ else }}}fa-list{{{ end }}} text-primary"></i>
10
- <span class="visible-md-inline visible-lg-inline fw-semibold">{{{ if selectCategoryLabel }}}{selectCategoryLabel}{{{ else }}}[[topic:thread-tools.select-category]]{{{ end }}}</span>
11
- {{{ end }}}
12
- </span>
13
- </button>
14
- <div component="category-selector-search" class="hidden position-absolute">
15
- <input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
16
- </div>
17
- <ul component="category/list" class="dropdown-menu p-1 text-sm category-dropdown-menu" role="menu">
18
- <li component="category/no-matches" role="presentation" class="category hidden">
19
- <a class="dropdown-item rounded-1" role="menuitem">[[search:no-matches]]</a>
20
- </li>
21
- {{{ each categoryItems }}}
22
- <li role="presentation" class="category {{{ if ./disabledClass }}}disabled {{{ end }}}" data-cid="{./cid}" data-name="{./name}" data-parent-cid="{./parentCid}">
23
- <a class="dropdown-item rounded-1 {{{ if ./disabledClass }}}disabled{{{ end }}}" role="menuitem" href="#">{./level}
24
- <span component="category-markup" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
25
- <div class="category-item d-inline-flex align-items-center gap-1">
26
- {{{ if ./icon }}}
27
- {buildCategoryIcon(@value, "24px", "rounded-circle")}
28
- {{{ end }}}
29
- {./name}
30
- </div>
31
- </span>
32
- </a>
33
- </li>
34
- {{{ end }}}
35
- </ul>
@@ -1,39 +0,0 @@
1
- <div class="btn-group bottom-sheet" component="thread/sort">
2
- <button class="btn-ghost-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false" aria-label="[[aria:topic-sort-option, {sortOptionLabel}]]">
3
- <i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
4
- <span class="d-none d-md-inline fw-semibold">{sortOptionLabel}</span>
5
- </button>
6
-
7
- <ul class="dropdown-menu p-1 text-sm" role="menu">
8
- <li>
9
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="recently_replied" role="menuitem">
10
- <span class="flex-grow-1">[[topic:recently-replied]]</span>
11
- <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
12
- </a>
13
- </li>
14
- <li>
15
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="recently_created" role="menuitem">
16
- <span class="flex-grow-1">[[topic:recently-created]]</span>
17
- <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
18
- </a>
19
- </li>
20
- <li>
21
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_posts" role="menuitem">
22
- <span class="flex-grow-1">[[topic:most-posts]]</span>
23
- <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
24
- </a>
25
- </li>
26
- <li>
27
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_votes" role="menuitem">
28
- <span class="flex-grow-1">[[topic:most-votes]]</span>
29
- <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
30
- </a>
31
- </li>
32
- <li>
33
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_views" role="menuitem">
34
- <span class="flex-grow-1">[[topic:most-views]]</span>
35
- <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
36
- </a>
37
- </li>
38
- </ul>
39
- </div>
@@ -1,89 +0,0 @@
1
- {{{ if showTopicTools }}}
2
- <div class="btn-group thread-tools bottom-sheet">
3
- <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
4
- <i class="fa fa-fw fa-gear text-primary"></i>
5
- <span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:thread-tools.title]]</span>
6
- <span component="topic/selected/badge" class="badge rounded-pill bg-secondary"></span>
7
- </button>
8
- <ul class="dropdown-menu p-1 text-sm" role="menu">
9
- <li>
10
- <a component="topic/mark-unread-for-all" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
11
- <i class="fa fa-fw fa-inbox text-secondary"></i> [[topic:thread-tools.markAsUnreadForAll]]
12
- </a>
13
- </li>
14
- <li>
15
- <a component="topic/pin" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
16
- <i class="fa fa-fw fa-thumb-tack text-secondary"></i> [[topic:thread-tools.pin]]
17
- </a>
18
- </li>
19
- <li>
20
- <a component="topic/unpin" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
21
- <i class="fa fa-fw fa-thumb-tack fa-rotate-90 text-secondary"></i> [[topic:thread-tools.unpin]]
22
- </a>
23
- </li>
24
-
25
- <li>
26
- <a component="topic/lock" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
27
- <i class="fa fa-fw fa-lock text-secondary"></i> [[topic:thread-tools.lock]]
28
- </a>
29
- </li>
30
- <li>
31
- <a component="topic/unlock" href="#" class="hidden dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
32
- <i class="fa fa-fw fa-unlock text-secondary"></i> [[topic:thread-tools.unlock]]
33
- </a>
34
- </li>
35
-
36
- <li class="dropdown-divider"></li>
37
-
38
- <li>
39
- <a component="topic/move" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
40
- <i class="fa fa-fw fa-arrows text-secondary"></i> [[topic:thread-tools.move]]
41
- </a>
42
- </li>
43
- {{{if template.category}}}
44
- <li>
45
- <a component="topic/move-all" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
46
- <i class="fa fa-fw fa-arrows text-secondary"></i> [[topic:thread-tools.move-all]]
47
- </a>
48
- </li>
49
- {{{end}}}
50
- <li>
51
- <a component="topic/merge" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
52
- <i class="fa fa-fw fa-code-fork text-secondary"></i> [[topic:thread-tools.merge]]
53
- </a>
54
- </li>
55
-
56
- <li>
57
- <a component="topic/tag" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
58
- <i class="fa fa-fw fa-tag text-secondary"></i> [[topic:thread-tools.tag]]
59
- </a>
60
- </li>
61
-
62
- <li class="dropdown-divider"></li>
63
-
64
- <li>
65
- <a component="topic/delete" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
66
- <i class="fa fa-fw fa-trash-o text-secondary"></i> [[topic:thread-tools.delete]]
67
- </a>
68
- </li>
69
- <li>
70
- <a component="topic/restore" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
71
- <i class="fa fa-fw fa-history text-secondary"></i> [[topic:thread-tools.restore]]
72
- </a>
73
- </li>
74
- <li>
75
- <a component="topic/purge" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
76
- <i class="fa fa-fw fa-eraser text-secondary"></i> [[topic:thread-tools.purge]]
77
- </a>
78
- </li>
79
-
80
- {{{each thread_tools}}}
81
- <li>
82
- <a href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {thread_tools.class}" role="menuitem">
83
- <i class="fa fa-fw {thread_tools.icon} text-secondary"></i>
84
- {thread_tools.title}</a>
85
- </li>
86
- {{{end}}}
87
- </ul>
88
- </div>
89
- {{{ end }}}
@@ -1,67 +0,0 @@
1
- {{{ if config.loggedIn }}}
2
- <div class="btn-group bottom-sheet" component="topic/watch">
3
- <button class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
4
- <span component="category/watching/menu" class="d-flex gap-2 align-items-center {{{ if !./isWatched }}} hidden{{{ end }}}"><i class="fa fa-fw fa-bell-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:watching]]</span></span>
5
-
6
- <span component="category/tracking/menu" class="d-flex gap-2 align-items-center {{{ if !./isTracked }}} hidden{{{ end }}}"><i class="fa fa-fw fa-inbox text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:tracking]]</span></span>
7
-
8
- <span component="category/notwatching/menu" class="d-flex gap-2 align-items-center {{{ if !./isNotWatched }}} hidden{{{ end }}}"><i class="fa fa-fw fa-clock-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:not-watching]]</span></span>
9
-
10
- <span component="category/ignoring/menu" class="d-flex gap-2 align-items-center {{{ if !./isIgnored }}} hidden{{{ end }}}"><i class="fa fa-fw fa-eye-slash text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:ignoring]]</span></span>
11
- </button>
12
-
13
- <ul class="dropdown-menu p-1 text-sm {{{ if template.account/categories }}}dropdown-menu-end{{{ end }}}" role="menu">
14
- <li>
15
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/watching" data-state="watching" role="menuitem">
16
- <div class="flex-grow-1 d-flex flex-column">
17
- <span class="d-flex align-items-center gap-2">
18
- <i class="flex-shrink-0 fa fa-fw fa-bell-o text-secondary"></i>
19
- <span class="flex-grow-1 fw-semibold">[[category:watching]]</span>
20
- </span>
21
- <div class="help-text text-secondary text-xs">[[category:watching.description]]</div>
22
- </div>
23
- <span class="flex-shrink-0"><i component="category/watching/check" class="fa fa-fw {{{ if ./isWatched }}}fa-check{{{ end }}}"></i></span>
24
- </a>
25
- </li>
26
-
27
- <li>
28
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/tracking" data-state="tracking" role="menuitem">
29
- <div class="flex-grow-1 d-flex flex-column">
30
- <span class="d-flex align-items-center gap-2">
31
- <i class="flex-shrink-0 fa fa-fw fa-inbox text-secondary"></i>
32
- <span class="flex-grow-1 fw-semibold">[[category:tracking]]</span>
33
- </span>
34
- <div class="help-text text-secondary text-xs">[[category:tracking.description]]</div>
35
- </div>
36
- <span class="flex-shrink-0"><i component="category/tracking/check" class="fa fa-fw {{{ if ./isTracked }}}fa-check{{{ end }}}"></i></span>
37
- </a>
38
- </li>
39
-
40
- <li>
41
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/notwatching" data-state="notwatching" role="menuitem">
42
- <div class="flex-grow-1 d-flex flex-column">
43
- <span class="d-flex align-items-center gap-2">
44
- <i class="flex-shrink-0 fa fa-fw fa-clock-o text-secondary"></i>
45
- <span class="flex-grow-1 fw-semibold">[[category:not-watching]]</span>
46
- </span>
47
- <div class="help-text text-secondary text-xs">[[category:not-watching.description]]</div>
48
- </div>
49
- <span class="flex-shrink-0"><i component="category/notwatching/check" class="fa fa-fw {{{ if ./isNotWatched }}}fa-check{{{ end }}}"></i></span>
50
- </a>
51
- </li>
52
-
53
- <li>
54
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/ignoring" data-state="ignoring" role="menuitem">
55
- <div class="flex-grow-1 d-flex flex-column">
56
- <span class="d-flex align-items-center gap-2">
57
- <i class="flex-shrink-0 fa fa-fw fa-eye-slash text-secondary"></i>
58
- <span class="flex-grow-1 fw-semibold">[[category:ignoring]]</span>
59
- </span>
60
- <div class="help-text text-secondary text-xs">[[category:ignoring.description]]</div>
61
- </div>
62
- <span class="flex-shrink-0"><i component="category/ignoring/check" class="fa fa-fw {{{ if ./isIgnored }}}fa-check{{{ end }}}"></i></span>
63
- </a>
64
- </li>
65
- </ul>
66
- </div>
67
- {{{ end }}}
@@ -1,9 +0,0 @@
1
- <div class="dropdown" component="flags/bulk-actions">
2
- <button class="filter-btn btn btn-light btn-sm border" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
3
- <span class="filter-label">[[flags:bulk-actions]]</span>
4
- </button>
5
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
6
- <li><a href="#" class="dropdown-item rounded-1" data-action="bulk-assign" role="menuitem">[[flags:assign-to-me]]</a></li>
7
- <li><a href="#" class="dropdown-item rounded-1" data-action="bulk-mark-resolved" role="menuitem">[[flags:bulk-resolve]]</a></li>
8
- </ul>
9
- </div>
@@ -1,186 +0,0 @@
1
- <div component="flags/filters" class="d-flex flex-wrap gap-2 pb-3 border-bottom">
2
- <div class="btn-group bottom-sheet">
3
- <a class="filter-btn btn btn-light btn-sm border {{{ if filters.quick }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
4
- <span class="filter-label">{{{ if filters.quick }}}[[flags:filter-quick-{./filters.quick}]]{{{ else }}}[[flags:quick-filters]]{{{ end }}}</span>
5
- <span class="caret text-primary opacity-75"></span>
6
- </a>
7
- <ul class="dropdown-menu p-1 text-sm" role="menu">
8
- <li>
9
- <a class="dropdown-item rounded-1" href="{config.relative_path}/flags?quick=mine" role="menuitem">[[flags:filter-quick-mine]]</a>
10
- </li>
11
- </ul>
12
- </div>
13
-
14
-
15
- <div component="category/dropdown" class="btn-group category-dropdown-container bottom-sheet">
16
- <button type="button" class="filter-btn btn btn-light btn-sm border d-flex gap-2 dropdown-toggle {{{ if filters.cid }}}active-filter{{{ end }}}" data-bs-toggle="dropdown">
17
- {{{ if selectedCategory }}}
18
- <span class="category-item d-inline-flex align-items-center gap-1">
19
- {buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
20
- <span class="visible-md-inline visible-lg-inline">{selectedCategory.name}</span>
21
- </span>
22
- {{{ else }}}
23
- <span class="visible-md-inline visible-lg-inline">[[unread:all-categories]]</span>
24
- {{{ end }}}
25
- <span class="caret text-primary opacity-75"></span>
26
- </button>
27
- <div component="category-selector-search" class="hidden position-absolute">
28
- <input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
29
- </div>
30
- <ul component="category/list" class="dropdown-menu p-1 text-sm category-dropdown-menu" role="menu">
31
- {{{each categoryItems}}}
32
- <li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
33
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
34
- {../level}
35
- <span component="category-markup" class="flex-grow-1" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
36
- <div class="category-item d-inline-flex align-items-center gap-1">
37
- {{{ if ./icon }}}
38
- {buildCategoryIcon(@value, "24px", "rounded-circle")}
39
- {{{ end }}}
40
- {./name}
41
- </div>
42
- </span>
43
- <i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
44
- </a>
45
- </li>
46
- {{{end}}}
47
- </ul>
48
- </div>
49
-
50
- <div class="btn-group bottom-sheet">
51
- <a class="filter-btn btn btn-light btn-sm border {{{ if (sort != "newest") }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
52
- <span class="filter-label">{{{ if (sort != "newest") }}}[[flags:sort-{./sort}]]{{{ else }}}[[flags:sort]]{{{ end }}}</span>
53
- <span class="caret text-primary opacity-75"></span>
54
- </a>
55
- <ul class="dropdown-menu p-1 text-sm" role="menu">
56
- <li><h6 class="dropdown-header">[[flags:sort-all]]</h6></li>
57
- <li class="dropdown-item rounded-1" data-name="sort" data-value="newest" role="menuitem">[[flags:sort-newest]]</li>
58
- <li class="dropdown-item rounded-1" data-name="sort" data-value="oldest" role="menuitem">[[flags:sort-oldest]]</li>
59
- <li class="dropdown-item rounded-1" data-name="sort" data-value="reports" role="menuitem">[[flags:sort-reports]]</li>
60
- <li><h6 class="dropdown-header">[[flags:sort-posts-only]]</h6></li>
61
- <li class="dropdown-item rounded-1" data-name="sort" data-value="downvotes" role="menuitem">[[flags:sort-downvotes]]</li>
62
- <li class="dropdown-item rounded-1" data-name="sort" data-value="upvotes" role="menuitem">[[flags:sort-upvotes]]</li>
63
- <li class="dropdown-item rounded-1" data-name="sort" data-value="replies" role="menuitem">[[flags:sort-replies]]</li>
64
- </ul>
65
- </div>
66
-
67
- <div class="btn-group bottom-sheet">
68
- <a class="filter-btn btn btn-light btn-sm border {{{ if filters.state }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
69
- <span class="filter-label">{{{ if filters.state }}}[[flags:state-{./filters.state}]]{{{ else }}}[[flags:filter-state]]{{{ end }}}</span>
70
- <span class="caret text-primary opacity-75"></span>
71
- </a>
72
- <ul class="dropdown-menu p-1 text-sm" role="menu">
73
- <li class="dropdown-item rounded-1" data-name="state" data-value="open" role="menuitem">[[flags:state-open]]</li>
74
- <li class="dropdown-item rounded-1" data-name="state" data-value="wip" role="menuitem">[[flags:state-wip]]</li>
75
- <li class="dropdown-item rounded-1" data-name="state" data-value="resolved" role="menuitem">[[flags:state-resolved]]</li>
76
- <li class="dropdown-item rounded-1" data-name="state" data-value="rejected" role="menuitem">[[flags:state-rejected]]</li>
77
- </ul>
78
- </div>
79
-
80
- <div class="btn-group bottom-sheet">
81
- <a class="filter-btn btn btn-light btn-sm border {{{ if filters.type }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
82
- <span class="filter-label">{{{ if filters.type }}}[[flags:filter-type-{./filters.type}]]{{{ else }}}[[flags:filter-type]]{{{ end }}}</span>
83
- <span class="caret text-primary opacity-75"></span>
84
- </a>
85
- <ul class="dropdown-menu p-1 text-sm" role="menu">
86
- <li class="dropdown-item rounded-1" data-name="type" data-value="all" role="menuitem">[[flags:filter-type-all]]</li>
87
- <li class="dropdown-item rounded-1" data-name="type" data-value="post" role="menuitem">[[flags:filter-type-post]]</li>
88
- <li class="dropdown-item rounded-1" data-name="type" data-value="user" role="menuitem">[[flags:filter-type-user]]</li>
89
- </ul>
90
- </div>
91
-
92
- <div component="flags/filter/assignee" class="dropdown bottom-sheet" data-filter-name="assignee">
93
- <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.assignee }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
94
- <span class="filter-label">[[flags:filter-assignee]]</span>
95
- <span class="caret text-primary opacity-75"></span>
96
- </a>
97
-
98
- <ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
99
- <li class="px-3 py-1 d-flex flex-column gap-2">
100
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
101
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
102
- {{{ each selected.assignee }}}
103
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
104
- {buildAvatar(@value, "16px", true)} {./username}
105
- <button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
106
- </div>
107
- {{{ end }}}
108
- </div>
109
- <hr/>
110
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
111
- {{{ each userFilterResults }}}
112
- <button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
113
- {{{ end }}}
114
- </div>
115
- </li>
116
- </ul>
117
- </div>
118
-
119
- <div component="flags/filter/reporterId" class="dropdown bottom-sheet" data-filter-name="reporterId">
120
- <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.reporterId }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
121
- <span class="filter-label">[[flags:filter-reporterId]]</span>
122
- <span class="caret text-primary opacity-75"></span>
123
- </a>
124
-
125
- <ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
126
- <li class="px-3 py-1 d-flex flex-column gap-2">
127
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
128
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
129
- {{{ each selected.reporterId }}}
130
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
131
- {buildAvatar(@value, "16px", true)} {./username}
132
- <button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
133
- </div>
134
- {{{ end }}}
135
- </div>
136
- <hr/>
137
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
138
- {{{ each userFilterResults }}}
139
- <button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
140
- {{{ end }}}
141
- </div>
142
- </li>
143
- </ul>
144
- </div>
145
-
146
- <div component="flags/filter/targetUid" class="dropdown bottom-sheet" data-filter-name="targetUid">
147
- <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.targetUid }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
148
- <span class="filter-label">[[flags:filter-targetUid]]</span>
149
- <span class="caret text-primary opacity-75"></span>
150
- </a>
151
-
152
- <ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
153
- <li class="px-3 py-1 d-flex flex-column">
154
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
155
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
156
- {{{ each selected.targetUid }}}
157
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
158
- {buildAvatar(@value, "16px", true)} {./username}
159
- <button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
160
- </div>
161
- {{{ end }}}
162
- </div>
163
- <hr/>
164
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
165
- {{{ each userFilterResults }}}
166
- <button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
167
- {{{ end }}}
168
- </div>
169
- </li>
170
- </ul>
171
- </div>
172
-
173
- <div component="flags/filters/reset" class="ms-auto">
174
- <a class="filter-btn btn btn-warning btn-sm border {{{ if !hasFilter }}}btn-light disabled{{{ end }}}" href="{config.relative_path}/flags" role="button">
175
- <span class="filter-label">[[flags:filter-reset]]</span>
176
- </a>
177
- </div>
178
-
179
- <!-- IMPORT partials/flags/bulk-actions.tpl -->
180
-
181
- <form role="form">
182
- <input type="hidden" name="sort" value="{./sort}" />
183
- <input type="hidden" name="state" value="{./filters.state}" />
184
- <input type="hidden" name="type" value="{./filters.type}" />
185
- </form>
186
- </div>
@@ -1,38 +0,0 @@
1
- <div class="card card-header text-xs px-2 py-1 fw-semibold border-0 align-self-start">
2
- [[flags:x-flags-found, {count}]]
3
- </div>
4
-
5
- <table class="table table-striped table-hover" component="flags/list">
6
- <thead>
7
- <tr>
8
- <th></th>
9
- <th class="text-xs text-muted">[[flags:reports]]</th>
10
- <th class="text-xs text-muted">[[flags:first-reported]]</th>
11
- <th class="text-xs text-muted">[[flags:state]]</th>
12
- <th>
13
- <input type="checkbox" data-action="toggle-all" autocomplete="off" />
14
- </th>
15
- </tr>
16
- </thead>
17
- <tbody>
18
- {{{ each flags }}}
19
- <tr data-flag-id="{./flagId}">
20
- <td>
21
- <a class="text-reset text-decoration-underline" href="{config.relative_path}/flags/{./flagId}">
22
- {./target_readable}
23
- </a>
24
- </td>
25
- <td>
26
- {./heat}
27
- </td>
28
- <td><span class="timeago" title="{./datetimeISO}"></span></td>
29
- <td><span class="badge bg-{./labelClass}">[[flags:state-{./state}]]</span></td>
30
- <td>
31
- <input type="checkbox" autocomplete="off" />
32
- </td>
33
- </tr>
34
- {{{end}}}
35
- </tbody>
36
- </table>
37
-
38
- <!-- IMPORT partials/paginator.tpl -->
@@ -1,25 +0,0 @@
1
- <div class="dropdown bottom-sheet">
2
- <button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
- {{{ if selectedGroup }}}
4
- <span class="fw-semibold">{selectedGroup.displayName}</span>
5
- {{{ else }}}
6
- <span class="fw-semibold">[[groups:all-groups]]</span>
7
- {{{ end }}} <span class="caret text-primary opacity-75"></span>
8
- </button>
9
- <ul class="dropdown-menu p-1 text-sm" role="menu">
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="menuitem" href="{config.relative_path}/{allGroupsUrl}">
12
- <div class="flex-grow-1">[[groups:all-groups]]</div>
13
- <i class="flex-shrink-0 fa fa-fw {{{ if !selectedGroup }}}fa-check{{{ end }}}"></i>
14
- </a>
15
- </li>
16
- {{{ each groups }}}
17
- <li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
18
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{./url}">
19
- <div class="flex-grow-1 d-inline-flex gap-1 align-items-center">{./displayName}</div>
20
- <i class="flex-shrink-0 fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
21
- </a>
22
- </li>
23
- {{{end}}}
24
- </ul>
25
- </div>
@@ -1,34 +0,0 @@
1
- <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
- {{{ if selectedTag }}}
3
- <span class="d-inline-flex align-items-center gap-1">
4
- <i class="fa fa-fw fa-tags text-primary"></i>
5
- <span class="visible-md-inline visible-lg-inline fw-semibold">{selectedTag.label}</span>
6
- </span>
7
- {{{ else }}}
8
- <i class="fa fa-fw fa-tags text-primary"></i>
9
- <span class="visible-md-inline visible-lg-inline fw-semibold">[[tags:all-tags]]</span>
10
- {{{ end }}}
11
- </button>
12
- <div component="tag/filter/search" class="hidden position-absolute top-0">
13
- <input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
14
- </div>
15
- <ul component="tag/filter/list" class="dropdown-menu p-1 text-sm overflow-auto" role="menu" style="max-height: 500px;" role="menu">
16
- <li role="presentation" data-tag="">
17
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
18
- <span class="flex-grow-1">[[tags:all-tags]]</span>
19
- <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedTag }}}invisible{{{ end }}}"></i>
20
- </a>
21
- </li>
22
- {{{ each tagItems }}}
23
- <li role="presentation" data-tag="{./valueEscaped}">
24
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
25
- <span component="tag-markup" class="flex-grow-1">
26
- <div class="d-inline-flex align-items-center gap-1">
27
- {./valueEscaped}
28
- </div>
29
- </span>
30
- <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}invisible{{{ end }}}"></i>
31
- </a>
32
- </li>
33
- {{{ end }}}
34
- </ul>
@@ -1,42 +0,0 @@
1
- {{{ if config.loggedIn }}}
2
- <div class="btn-group bottom-sheet" component="tag/watch">
3
- <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
4
- <span component="tag/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
- <i class="flex-shrink-0 fa fa-fw fa-bell-o text-primary"></i>
6
- <span class="d-none d-md-inline fw-semibold">[[tags:watching]]</span>
7
- </span>
8
-
9
- <span component="tag/not-following/menu" class="d-flex gap-2 align-items-center{{{ if isFollowing}}} hidden{{{ end }}}">
10
- <i class="flex-shrink-0 fa fa-fw fa-bell-slash-o text-primary"></i>
11
- <span class="d-none d-md-inline fw-semibold">[[tags:not-watching]]</span>
12
- </span>
13
- </button>
14
- <ul class="dropdown-menu p-1 text-sm" role="menu">
15
- <li>
16
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="tag/following" role="menuitem">
17
- <div class="flex-grow-1 d-flex flex-column">
18
- <span class="d-flex align-items-center gap-2">
19
- <i class="flex-shrink-0 fa fa-fw fa-bell-o"></i>
20
- <span class="flex-grow-1 fw-semibold">[[tags:watching]]</span>
21
- </span>
22
- <div class="help-text text-muted text-xs">[[tags:watching.description]]</div>
23
- </div>
24
- <span class="flex-shrink-0"><i component="tag/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
25
- </a>
26
- </li>
27
-
28
- <li>
29
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="tag/not-following" role="menuitem">
30
- <div class="flex-grow-1 d-flex flex-column">
31
- <span class="d-flex align-items-center gap-2">
32
- <i class="flex-shrink-0 fa fa-fw fa-bell-slash-o"></i>
33
- <span class="flex-grow-1 fw-semibold">[[tags:not-watching]]</span>
34
- </span>
35
- <div class="help-text text-muted text-xs">[[tags:not-watching.description]]</div>
36
- </div>
37
- <span class="flex-shrink-0"><i component="tag/not-following/check" class="fa fa-fw {{{ if !isFollowing }}}fa-check{{{ end }}}"></i></span>
38
- </a>
39
- </li>
40
- </ul>
41
- </div>
42
- {{{ end }}}
@@ -1,23 +0,0 @@
1
- <button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
- {{{ if selectedUser }}}
3
- <span class="fw-semibold">{buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}</span>
4
- {{{ else }}}
5
- <span class="fw-semibold">[[users:all-users]]</span>
6
- {{{ end }}} <span class="caret text-primary opacity-75"></span>
7
- </button>
8
- <ul class="dropdown-menu p-1 text-sm" role="menu">
9
- <li role="presentation" class="user {{{ if !selectedUser}}}selected{{{end}}}">
10
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{allUsersUrl}">
11
- <div class="flex-grow-1">[[users:all-users]]</div>
12
- <i class="flex-shrink-0 fa fa-fw {{{ if !selectedUser }}}fa-check{{{ end }}}"></i>
13
- </a>
14
- </li>
15
- {{{ each users }}}
16
- <li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
17
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{./url}">
18
- <div class="flex-grow-1 d-inline-flex gap-1 align-items-center">{buildAvatar(@value, "24px", true, "not-responsive")} {./username}</div>
19
- <i class="flex-shrink-0 fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
20
- </a>
21
- </li>
22
- {{{end}}}
23
- </ul>