nodebb-theme-harmony 1.0.0-beta.7 → 1.0.0-beta.70

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 (133) hide show
  1. package/languages/en-GB/harmony.json +5 -1
  2. package/library.js +21 -7
  3. package/package.json +1 -1
  4. package/public/harmony.js +148 -9
  5. package/public/settings.js +1 -0
  6. package/scss/account.scss +1 -1
  7. package/scss/chats.scss +53 -25
  8. package/scss/common.scss +60 -8
  9. package/scss/flags.scss +5 -0
  10. package/scss/harmony.scss +3 -0
  11. package/scss/mixins.scss +7 -3
  12. package/scss/modals.scss +6 -1
  13. package/scss/modules/bottom-sheet.scss +1 -1
  14. package/scss/modules/composer.scss +0 -4
  15. package/scss/modules/cover.scss +1 -11
  16. package/scss/modules/filters.scss +8 -0
  17. package/scss/modules/paginator.scss +24 -0
  18. package/scss/modules/topic-navigator.scss +14 -42
  19. package/scss/modules/topics-list.scss +6 -0
  20. package/scss/overrides.scss +4 -1
  21. package/scss/search.scss +0 -0
  22. package/scss/sidebar.scss +20 -10
  23. package/scss/topic.scss +26 -13
  24. package/templates/account/blocks.tpl +35 -41
  25. package/templates/account/categories.tpl +26 -29
  26. package/templates/account/consent.tpl +66 -10
  27. package/templates/account/edit/password.tpl +25 -30
  28. package/templates/account/edit/username.tpl +21 -26
  29. package/templates/account/edit.tpl +105 -116
  30. package/templates/account/followers.tpl +12 -19
  31. package/templates/account/following.tpl +12 -18
  32. package/templates/account/groups.tpl +12 -17
  33. package/templates/account/info.tpl +178 -206
  34. package/templates/account/posts.tpl +31 -36
  35. package/templates/account/profile.tpl +66 -73
  36. package/templates/account/sessions.tpl +8 -30
  37. package/templates/account/settings.tpl +193 -198
  38. package/templates/account/theme.tpl +34 -25
  39. package/templates/account/topics.tpl +33 -38
  40. package/templates/account/uploads.tpl +33 -40
  41. package/templates/admin/plugins/harmony.tpl +17 -3
  42. package/templates/categories.tpl +1 -1
  43. package/templates/category.tpl +12 -13
  44. package/templates/chats.tpl +7 -8
  45. package/templates/flags/detail.tpl +160 -193
  46. package/templates/flags/list.tpl +4 -70
  47. package/templates/footer.tpl +2 -2
  48. package/templates/groups/details.tpl +21 -18
  49. package/templates/groups/list.tpl +1 -1
  50. package/templates/groups/members.tpl +0 -2
  51. package/templates/header.tpl +1 -1
  52. package/templates/login.tpl +2 -2
  53. package/templates/notifications.tpl +1 -1
  54. package/templates/partials/account/category-item.tpl +4 -4
  55. package/templates/partials/account/footer.tpl +3 -0
  56. package/templates/partials/account/header.tpl +78 -81
  57. package/templates/partials/account/session-list.tpl +18 -0
  58. package/templates/partials/account/sidebar-left.tpl +6 -0
  59. package/templates/partials/breadcrumbs.tpl +6 -6
  60. package/templates/partials/categories/item.tpl +20 -19
  61. package/templates/partials/categories/lastpost.tpl +2 -2
  62. package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +8 -6
  63. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +3 -3
  64. package/templates/partials/category/subcategory.tpl +1 -1
  65. package/templates/partials/category/tags.tpl +0 -2
  66. package/templates/partials/category/watch.tpl +28 -4
  67. package/templates/partials/chats/message-window.tpl +10 -7
  68. package/templates/partials/chats/message.tpl +4 -6
  69. package/templates/partials/chats/recent_room.tpl +41 -32
  70. package/templates/partials/cookie-consent.tpl +5 -5
  71. package/templates/partials/flags/filters.tpl +142 -85
  72. package/templates/partials/flags/results.tpl +38 -0
  73. package/templates/partials/groups/admin.tpl +4 -4
  74. package/templates/partials/groups/badge.tpl +1 -1
  75. package/templates/partials/groups/memberlist.tpl +1 -1
  76. package/templates/partials/groups/sidebar-left.tpl +1 -1
  77. package/templates/partials/header/brand.tpl +1 -1
  78. package/templates/partials/mobile-footer.tpl +69 -64
  79. package/templates/partials/notifications_list.tpl +1 -1
  80. package/templates/partials/paginator.tpl +11 -9
  81. package/templates/partials/post_bar.tpl +26 -24
  82. package/templates/partials/posts_list_item.tpl +5 -5
  83. package/templates/partials/quick-search-results.tpl +3 -3
  84. package/templates/partials/search-filters.tpl +184 -0
  85. package/templates/partials/search-results.tpl +28 -32
  86. package/templates/partials/sidebar/chats.tpl +22 -33
  87. package/templates/partials/sidebar/drafts.tpl +42 -34
  88. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  89. package/templates/partials/sidebar/logged-out-menu.tpl +1 -1
  90. package/templates/partials/sidebar/notifications.tpl +29 -8
  91. package/templates/partials/sidebar/search.tpl +1 -1
  92. package/templates/partials/sidebar/user-menu.tpl +6 -6
  93. package/templates/partials/sidebar-left.tpl +13 -10
  94. package/templates/partials/sidebar-right.tpl +1 -3
  95. package/templates/partials/skin-switcher.tpl +2 -2
  96. package/templates/partials/tags/filter-dropdown-content.tpl +31 -0
  97. package/templates/partials/tags_list.tpl +4 -4
  98. package/templates/partials/topic/browsing-users.tpl +0 -2
  99. package/templates/partials/topic/event.tpl +1 -1
  100. package/templates/partials/topic/navigation-post.tpl +5 -9
  101. package/templates/partials/topic/navigator-mobile.tpl +62 -0
  102. package/templates/partials/topic/navigator.tpl +21 -17
  103. package/templates/partials/topic/post-editor.tpl +0 -2
  104. package/templates/partials/topic/post-menu-list.tpl +35 -37
  105. package/templates/partials/topic/post-menu.tpl +10 -10
  106. package/templates/partials/topic/post.tpl +31 -15
  107. package/templates/partials/topic/quickreply.tpl +6 -6
  108. package/templates/partials/topic/reply-button.tpl +1 -1
  109. package/templates/partials/topic/topic-menu-list.tpl +16 -18
  110. package/templates/partials/topic/watch.tpl +28 -4
  111. package/templates/partials/topic-list-bar.tpl +50 -46
  112. package/templates/partials/topics_list.tpl +40 -38
  113. package/templates/partials/userFilter-placeholders.tpl +5 -0
  114. package/templates/partials/users/filter-dropdown-content.tpl +20 -0
  115. package/templates/partials/users/item.tpl +24 -26
  116. package/templates/partials/users_list.tpl +1 -1
  117. package/templates/popular.tpl +3 -1
  118. package/templates/post-queue.tpl +120 -0
  119. package/templates/recent.tpl +3 -2
  120. package/templates/register.tpl +2 -2
  121. package/templates/search.tpl +39 -177
  122. package/templates/tags.tpl +3 -3
  123. package/templates/top.tpl +3 -1
  124. package/templates/topic.tpl +23 -19
  125. package/templates/unread.tpl +3 -1
  126. package/templates/users.tpl +2 -2
  127. package/templates/modules/usercard.tpl +0 -39
  128. package/templates/partials/acceptTos.tpl +0 -11
  129. package/templates/partials/category-filter-right.tpl +0 -5
  130. package/templates/partials/category-filter.tpl +0 -3
  131. package/templates/partials/category-selector-right.tpl +0 -5
  132. package/templates/partials/category-selector.tpl +0 -3
  133. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "skins": "Skins",
3
3
  "collapse": "Collapse",
4
+ "expand": "Expand",
4
5
  "login-register-to-search": "Login or register to search.",
5
6
  "settings.title": "Theme settings",
6
7
  "settings.enableQuickReply": "Enable quick reply",
7
8
  "settings.centerHeaderElements": "Center header elements",
8
- "settings.stickyToolbar": "Sticky toolbar"
9
+ "settings.stickyToolbar": "Sticky toolbar",
10
+ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page",
11
+ "settings.autohideBottombar": "Auto hide bottom bar",
12
+ "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down"
9
13
  }
package/library.js CHANGED
@@ -12,6 +12,7 @@ const defaults = {
12
12
  enableQuickReply: 'on',
13
13
  centerHeaderElements: 'off',
14
14
  stickyToolbar: 'on',
15
+ autohideBottombar: 'off',
15
16
  openSidebars: 'off',
16
17
  };
17
18
 
@@ -77,6 +78,16 @@ library.defineWidgetAreas = async function (areas) {
77
78
  });
78
79
 
79
80
  areas = areas.concat([
81
+ {
82
+ name: 'Main post header',
83
+ template: 'topic.tpl',
84
+ location: 'mainpost-header',
85
+ },
86
+ {
87
+ name: 'Main post footer',
88
+ template: 'topic.tpl',
89
+ location: 'mainpost-footer',
90
+ },
80
91
  {
81
92
  name: 'Sidebar Footer',
82
93
  template: 'global',
@@ -92,15 +103,18 @@ async function loadThemeConfig(uid) {
92
103
  meta.settings.get('harmony'),
93
104
  user.getSettings(uid),
94
105
  ]);
95
- return { ...defaults, ...themeConfig, ...userConfig };
106
+
107
+ const config = { ...defaults, ...themeConfig, ...(_.pick(userConfig, Object.keys(defaults))) };
108
+ config.enableQuickReply = config.enableQuickReply === 'on';
109
+ config.centerHeaderElements = config.centerHeaderElements === 'on';
110
+ config.stickyToolbar = config.stickyToolbar === 'on';
111
+ config.autohideBottombar = config.autohideBottombar === 'on';
112
+ config.openSidebars = config.openSidebars === 'on';
113
+ return config;
96
114
  }
97
115
 
98
116
  library.getThemeConfig = async function (config) {
99
- const themeConfig = await loadThemeConfig(config.uid);
100
- config.enableQuickReply = themeConfig.enableQuickReply === 'on';
101
- config.centerHeaderElements = themeConfig.centerHeaderElements === 'on';
102
- config.stickyToolbar = themeConfig.stickyToolbar === 'on';
103
- config.openSidebars = themeConfig.openSidebars === 'on';
117
+ config.theme = await loadThemeConfig(config.uid);;
104
118
  config.openDraftsOnPageLoad = false;
105
119
  return config;
106
120
  };
@@ -126,7 +140,7 @@ library.saveUserSettings = async function (hookData) {
126
140
 
127
141
  library.addUserToTopic = async function (hookData) {
128
142
  const { enableQuickReply } = await loadThemeConfig(hookData.req.uid);
129
- if (enableQuickReply === 'on') {
143
+ if (enableQuickReply) {
130
144
  if (hookData.req.user) {
131
145
  const userData = await user.getUserData(hookData.req.uid);
132
146
  hookData.templateData.loggedInUser = userData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "1.0.0-beta.7",
3
+ "version": "1.0.0-beta.70",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.0.0"
6
6
  },
package/public/harmony.js CHANGED
@@ -5,6 +5,9 @@ $(document).ready(function () {
5
5
  setupMobileMenu();
6
6
  setupSearch();
7
7
  setupDrafts();
8
+ handleMobileNavigator();
9
+ setupNavTooltips();
10
+ fixPlaceholders();
8
11
 
9
12
  $('[component="skinSwitcher"]').on('click', '.dropdown-item', function () {
10
13
  const skin = $(this).attr('data-value');
@@ -36,7 +39,7 @@ $(document).ready(function () {
36
39
  });
37
40
 
38
41
  function setupMobileMenu() {
39
- require(['api'], function (api) {
42
+ require(['hooks', 'api', 'navigator'], function (hooks, api, navigator) {
40
43
  $('[component="sidebar/toggle"]').on('click', async function () {
41
44
  const sidebarEl = $('.sidebar');
42
45
  sidebarEl.toggleClass('open');
@@ -48,6 +51,70 @@ $(document).ready(function () {
48
51
  });
49
52
  }
50
53
  $(window).trigger('action:sidebar.toggle');
54
+ if (ajaxify.data.template.topic) {
55
+ hooks.fire('action:navigator.update', { newIndex: navigator.getIndex() });
56
+ }
57
+ });
58
+
59
+ const bottomBar = $('[component="bottombar"]');
60
+ const $body = $('body');
61
+ const $window = $(window);
62
+ $body.on('shown.bs.dropdown', '.sticky-tools', function () {
63
+ bottomBar.addClass('hidden');
64
+ });
65
+ $body.on('hidden.bs.dropdown', '.sticky-tools', function () {
66
+ bottomBar.removeClass('hidden');
67
+ });
68
+
69
+ let lastScrollTop = 0;
70
+ let newPostsLoaded = false;
71
+
72
+ function onWindowScroll() {
73
+ const st = $window.scrollTop();
74
+ if (newPostsLoaded) {
75
+ newPostsLoaded = false;
76
+ lastScrollTop = st;
77
+ return;
78
+ }
79
+ if (st !== lastScrollTop && !navigator.scrollActive) {
80
+ const diff = Math.abs(st - lastScrollTop);
81
+ const scrolledDown = st > lastScrollTop;
82
+ const scrolledUp = st < lastScrollTop;
83
+ if (diff > 5) {
84
+ bottomBar.css({
85
+ bottom: !scrolledUp && scrolledDown ?
86
+ -bottomBar.find('.bottombar-nav').outerHeight(true) :
87
+ 0,
88
+ });
89
+ }
90
+ }
91
+ lastScrollTop = st;
92
+ }
93
+
94
+ const delayedScroll = utils.throttle(onWindowScroll, 250);
95
+ function enableAutohide() {
96
+ $window.off('scroll', delayedScroll);
97
+ if (config.theme.autohideBottombar) {
98
+ lastScrollTop = $window.scrollTop();
99
+ $window.on('scroll', delayedScroll);
100
+ }
101
+ }
102
+
103
+ hooks.on('action:posts.loading', function () {
104
+ $window.off('scroll', delayedScroll);
105
+ });
106
+ hooks.on('action:posts.loaded', function () {
107
+ newPostsLoaded = true;
108
+ setTimeout(enableAutohide, 250);
109
+ });
110
+ hooks.on('action:ajaxify.end', function () {
111
+ $window.off('scroll', delayedScroll);
112
+ $body.removeClass('chat-loaded');
113
+ bottomBar.css({ bottom: 0 });
114
+ setTimeout(enableAutohide, 250);
115
+ });
116
+ hooks.on('action:chat.loaded', function () {
117
+ $body.toggleClass('chat-loaded', !!(ajaxify.data.template.chats && ajaxify.data.roomId));
51
118
  });
52
119
  });
53
120
  }
@@ -59,33 +126,41 @@ $(document).ready(function () {
59
126
  }
60
127
 
61
128
  function setupDrafts() {
62
- require(['composer/drafts'], function (drafts) {
129
+ require(['composer/drafts', 'bootbox'], function (drafts, bootbox) {
130
+ const draftsEl = $('[component="sidebar/drafts"]');
131
+
63
132
  function updateBadgeCount() {
64
133
  const count = drafts.getAvailableCount();
134
+ if (count > 0) {
135
+ draftsEl.removeClass('hidden');
136
+ }
65
137
  $('[component="drafts/count"]').toggleClass('hidden', count <= 0).text(count);
66
138
  }
67
139
 
68
140
  async function renderDraftList() {
69
141
  const draftListEl = $('[component="drafts/list"]');
70
- draftListEl.children(':not(.no-drafts)').remove();
71
-
72
142
  const draftItems = drafts.listAvailable();
73
143
  if (!draftItems.length) {
74
144
  draftListEl.find('.no-drafts').removeClass('hidden');
145
+ draftListEl.find('.placeholder-wave').addClass('hidden');
146
+ draftListEl.find('.draft-item-container').html('');
75
147
  return;
76
148
  }
77
149
  draftItems.reverse().forEach((draft) => {
78
150
  if (draft) {
79
- draft.text = draft.text.replace(/(?:\r\n|\r|\n)/g, '<br>');
151
+ draft.text = utils.escapeHTML(
152
+ draft.text
153
+ ).replace(/(?:\r\n|\r|\n)/g, '<br>');
80
154
  }
81
155
  });
82
156
 
83
157
  const html = await app.parseAndTranslate('partials/sidebar/drafts', 'drafts', { drafts: draftItems });
84
158
  draftListEl.find('.no-drafts').addClass('hidden');
85
- draftListEl.append(html).find('.timeago').timeago();
159
+ draftListEl.find('.placeholder-wave').addClass('hidden');
160
+ draftListEl.find('.draft-item-container').html(html).find('.timeago').timeago();
86
161
  }
87
162
 
88
- const draftsEl = $('[component="sidebar/drafts"]');
163
+
89
164
  draftsEl.on('shown.bs.dropdown', renderDraftList);
90
165
 
91
166
  draftsEl.on('click', '[component="drafts/open"]', function () {
@@ -93,8 +168,13 @@ $(document).ready(function () {
93
168
  });
94
169
 
95
170
  draftsEl.on('click', '[component="drafts/delete"]', function () {
96
- drafts.removeDraft($(this).attr('data-save-id'));
97
- renderDraftList();
171
+ const save_id = $(this).attr('data-save-id');
172
+ bootbox.confirm('[[modules:composer.discard-draft-confirm]]', function (ok) {
173
+ if (ok) {
174
+ drafts.removeDraft(save_id);
175
+ renderDraftList();
176
+ }
177
+ });
98
178
  return false;
99
179
  });
100
180
 
@@ -103,6 +183,7 @@ $(document).ready(function () {
103
183
  updateBadgeCount();
104
184
  });
105
185
  }
186
+
106
187
  function setupNProgress() {
107
188
  require(['nprogress'], function (NProgress) {
108
189
  window.nprogress = NProgress;
@@ -117,4 +198,62 @@ $(document).ready(function () {
117
198
  }
118
199
  });
119
200
  }
201
+
202
+ function handleMobileNavigator() {
203
+ const paginationBlockEl = $('.pagination-block');
204
+ require(['hooks'], function (hooks) {
205
+ hooks.on('action:ajaxify.end', function () {
206
+ paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
207
+ });
208
+ hooks.on('filter:navigator.scroll', function (hookData) {
209
+ paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
210
+ return hookData;
211
+ });
212
+ });
213
+ }
214
+
215
+ function setupNavTooltips() {
216
+ // remove title from user icon in sidebar to prevent double tooltip
217
+ $('.sidebar [component="header/avatar"] .avatar').removeAttr('title');
218
+ const tooltipEls = $('.sidebar [title]');
219
+ tooltipEls.tooltip({
220
+ trigger: 'manual',
221
+ animation: false,
222
+ });
223
+
224
+ tooltipEls.on('mouseenter', function (ev) {
225
+ const target = $(ev.target);
226
+ const isDropdown = target.hasClass('dropdown-menu') || !!target.parents('.dropdown-menu').length;
227
+ if (!$('.sidebar').hasClass('open') && !isDropdown) {
228
+ $(this).tooltip('show');
229
+ }
230
+ });
231
+ tooltipEls.on('click mouseleave', function () {
232
+ $(this).tooltip('hide');
233
+ });
234
+ }
235
+
236
+ function fixPlaceholders() {
237
+ if (!config.loggedIn) {
238
+ return;
239
+ }
240
+ ['notifications', 'chat'].forEach((type) => {
241
+ const countEl = document.querySelector(`[component="${type}/count"]`);
242
+ if (!countEl) {
243
+ return;
244
+ }
245
+ const count = parseInt(countEl.innerText, 10);
246
+ if (count > 1) {
247
+ const listEls = document.querySelectorAll(`[component="${type}/list"]`);
248
+ listEls.forEach((listEl) => {
249
+ const placeholder = listEl.querySelector('li');
250
+
251
+ for (let x = 0; x < count - 1; x++) {
252
+ const cloneEl = placeholder.cloneNode(true);
253
+ listEl.insertBefore(cloneEl, placeholder);
254
+ }
255
+ });
256
+ }
257
+ });
258
+ }
120
259
  });
@@ -19,6 +19,7 @@ define('forum/account/theme', ['forum/account/header', 'api', 'settings', 'alert
19
19
  ...themeSettings,
20
20
  },
21
21
  });
22
+ config.theme = (await api.get('/api/config')).theme;
22
23
  alerts.success('[[success:settings-saved]]');
23
24
  });
24
25
  }
package/scss/account.scss CHANGED
@@ -1,4 +1,4 @@
1
- .page-user #panel {
1
+ .page-user.page-status-200 #panel {
2
2
  margin-top: 0px!important;
3
3
  }
4
4
  .account {
package/scss/chats.scss CHANGED
@@ -3,37 +3,64 @@
3
3
  .page-user-chats #content {
4
4
  max-width: 100%;
5
5
  }
6
+
6
7
  body.page-user-chats {
7
8
  overflow: hidden;
9
+ [data-widget-area="footer"] {
10
+ display: none;
11
+ }
12
+ height: 100%;
13
+ > .layout-container {
14
+ height: 100%;
15
+ > #panel {
16
+ height: 100%;
17
+ > .container {
18
+ height: 100%;
19
+ }
20
+ }
21
+ }
22
+ }
23
+
24
+ [component="chat/recent"] {
25
+ .active {
26
+ background-color: $btn-ghost-hover-color;
27
+ }
8
28
  }
29
+
9
30
  [component="chat/nav-wrapper"] {
10
31
  width: 300px;
11
32
  }
33
+
12
34
  .expanded-chat {
13
35
  // no taskbar so hide minimize button
14
36
  [data-action="minimize"] {
15
37
  display: none!important;
16
38
  }
17
- .chat-content .chat-message {
18
- .message-body-wrapper .controls {
19
- [data-action="restore"] {
20
- display: none;
39
+
40
+ .chat-content {
41
+ @include fix-lists;
42
+
43
+ .chat-message {
44
+ .message-body-wrapper .controls {
45
+ [data-action="restore"] {
46
+ display: none;
47
+ }
21
48
  }
22
49
  }
23
- }
24
- .chat-content .chat-message.deleted {
25
- .message-body-wrapper .controls {
26
- [data-action] {
27
- display: none;
28
- }
50
+ .chat-message.deleted {
51
+ .message-body-wrapper .controls {
52
+ [data-action] {
53
+ display: none;
54
+ }
29
55
 
30
- [data-action="restore"] {
31
- display: inline;
56
+ [data-action="restore"] {
57
+ display: inline;
58
+ }
32
59
  }
33
- }
34
60
 
35
- .message-body {
36
- opacity: 0.3;
61
+ .message-body {
62
+ opacity: 0.3;
63
+ }
37
64
  }
38
65
  }
39
66
  }
@@ -43,17 +70,18 @@ body.page-user-chats {
43
70
  [component="chat/nav-wrapper"] {
44
71
  width: 100%;
45
72
  }
46
- .page-user-chats {
47
- .chats-full {
48
- padding-bottom: 8rem!important;
49
- }
50
73
 
51
- [component="chat/nav-wrapper"][data-loaded="1"] {
52
- display: none!important;
53
- }
54
74
 
55
- [component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
56
- display: none!important;
57
- }
75
+ .page-user-chats.chat-loaded .bottombar {
76
+ display: none!important;
58
77
  }
78
+
79
+ [component="chat/nav-wrapper"][data-loaded="1"] {
80
+ display: none!important;
81
+ }
82
+
83
+ [component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
84
+ display: none!important;
85
+ }
86
+
59
87
  }
package/scss/common.scss CHANGED
@@ -2,6 +2,15 @@
2
2
  body {
3
3
  overflow-y: scroll;
4
4
  }
5
+
6
+ // fixes chrome font boosting :/ https://stackoverflow.com/questions/13430897/how-to-override-font-boosting-in-mobile-chrome
7
+ body * {
8
+ max-height:1000000px;
9
+ text-size-adjust: none;
10
+ -webkit-text-size-adjust: none;
11
+ -moz-text-size-adjust: none;
12
+ }
13
+
5
14
  .ff-base {
6
15
  font-family: $font-family-base;
7
16
  }
@@ -10,18 +19,54 @@ body {
10
19
  }
11
20
  .tracking-tight { letter-spacing: -0.025em; }
12
21
 
13
- .text-md { font-size: 1.125rem!important; } // 18px
14
- .text-sm { font-size: 0.875rem!important; } // 14px
15
- .text-xs { font-size: 0.75rem!important; } // 12px
22
+ .caret {
23
+ &::after {
24
+ border: none;
25
+ font-family: "FontAwesome";
26
+ content: "\f078";
27
+ color: tint-color($primary, 40%);
28
+ }
29
+ }
30
+
31
+ .placeholder-wave {
32
+ opacity: 0.5;
33
+ }
16
34
 
17
- .btn-link:hover {
18
- text-decoration: none;
35
+ blockquote {
36
+ background-color: $light;
37
+ font-style: normal;
38
+ border-left: 2px solid $border-color;
39
+ padding: 1rem;
40
+ p:last-child {
41
+ margin-bottom: 0;
42
+ }
43
+ }
44
+
45
+ body:not(.page-user) {
46
+ #content {
47
+ transition: opacity 150ms linear;
48
+ &.ajaxifying {
49
+ -moz-opacity: 0;
50
+ opacity: 0;
51
+ }
52
+ }
53
+ }
54
+ .page-user {
55
+ #content {
56
+ transition: opacity 150ms linear;
57
+ &.ajaxifying .account-content {
58
+ transition: opacity 150ms linear;
59
+ -moz-opacity: 0;
60
+ opacity: 0;
61
+ }
62
+ }
19
63
  }
20
64
 
21
65
  .sticky-tools {
22
66
  position: sticky;
23
67
  z-index: 3;
24
- top: calc($spacer * 0.5);
68
+ top: 0;
69
+ padding: 0.25rem 0;
25
70
  background-color: $body-bg;
26
71
  }
27
72
  // quartz doesn't need body-bg for tool background
@@ -35,6 +80,13 @@ body {
35
80
  }
36
81
  }
37
82
 
83
+ .btn-link {
84
+ &:hover, &.active {
85
+ background-color: $btn-ghost-hover-color;
86
+ text-decoration: none;
87
+ }
88
+ }
89
+
38
90
  @mixin btn-ghost-base {
39
91
  display: flex;
40
92
  align-items: center;
@@ -48,10 +100,10 @@ body {
48
100
  text-align: left;
49
101
  --bs-text-opacity: 1;
50
102
  color: inherit !important;
51
- $hover-color: mix($light, $dark, 90);
103
+ font-family: $font-family-secondary;
52
104
  cursor: pointer;
53
105
  &:hover, &.active {
54
- background-color: $hover-color;
106
+ background-color: $btn-ghost-hover-color;
55
107
  text-decoration: none;
56
108
  }
57
109
  }
@@ -0,0 +1,5 @@
1
+ .page-flags {
2
+ [component="flag/history"] {
3
+ max-height: 30rem;
4
+ }
5
+ }
package/scss/harmony.scss CHANGED
@@ -9,6 +9,7 @@
9
9
  @import "status";
10
10
  @import "account";
11
11
  @import "groups";
12
+ @import "flags";
12
13
  @import "modals";
13
14
 
14
15
  @import "modules/breadcrumbs";
@@ -20,5 +21,7 @@
20
21
  @import "modules/topics-list";
21
22
  @import "modules/cover";
22
23
  @import "modules/nprogress";
24
+ @import "modules/paginator";
25
+ @import "modules/filters";
23
26
 
24
27
  @import "skins";
package/scss/mixins.scss CHANGED
@@ -124,9 +124,13 @@
124
124
  display: none;
125
125
  }
126
126
 
127
- .timeline-event {
128
- .timeline-text.timeago {
129
- display: none;
127
+
128
+ [component="topic/event"], [component="topic/necro-post"] {
129
+ &.timeline-event {
130
+ .timeline-text {
131
+ line-height: 16px;
132
+ font-size: 0.75rem;
133
+ }
130
134
  }
131
135
  }
132
136
  }
package/scss/modals.scss CHANGED
@@ -1,4 +1,9 @@
1
1
  .tool-modal {
2
2
  bottom: $spacer * 3;
3
3
  right: $spacer * 4;
4
- }
4
+
5
+ @include media-breakpoint-down(md) {
6
+ right: $spacer;
7
+ left: $spacer;
8
+ }
9
+ }
@@ -8,7 +8,7 @@
8
8
  inset: auto 0 0 0!important;
9
9
 
10
10
  margin: 0 -1px -1px -1px;
11
- padding: 0 5px 4rem 5px!important;
11
+ padding: 0 5px!important;
12
12
  max-height: 60%;
13
13
 
14
14
  box-shadow: 0 2px 6px rgba(0,0,0,0.35);
@@ -6,10 +6,6 @@ $composer-bg: $body-bg !default;
6
6
  background-color: $bg !important;
7
7
  }
8
8
 
9
- .composer {
10
- z-index: 3 !important;
11
- }
12
-
13
9
  .skin-noskin {
14
10
  // only using colors when there is no bootswatch skin applied
15
11
  $composer-color: $secondary;
@@ -12,12 +12,11 @@
12
12
 
13
13
  &:hover {
14
14
  .controls {
15
- opacity: 0.8;
15
+ opacity: 1;
16
16
  }
17
17
  }
18
18
 
19
19
  .controls {
20
- text-align: center;
21
20
  height: 200px;
22
21
  line-height: 200px;
23
22
  opacity: 0;
@@ -28,15 +27,6 @@
28
27
  > * {
29
28
  pointer-events: all;
30
29
  }
31
-
32
- .fa {
33
- color: white;
34
- background-color: #333;
35
- opacity: 1;
36
- margin: 15px;
37
- padding: 5px;
38
- border-radius: 4px;
39
- }
40
30
  }
41
31
 
42
32
  &.active {
@@ -0,0 +1,8 @@
1
+ [component="search/filters"], [component="flags/filters"] {
2
+ .filter-btn {
3
+ border-color: $gray-300!important;
4
+ &.active-filter {
5
+ border-color: $primary!important;
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,24 @@
1
+ .skin-noskin [component="pagination"] {
2
+ .page-item.active:not(.disabled) .page-link {
3
+ color: $body-color;
4
+ background-color: $gray-300;
5
+ border-color: $gray-300;
6
+ }
7
+
8
+ .page-item:not(.disabled):hover .page-link {
9
+ color: $body-color;
10
+ }
11
+ }
12
+
13
+ [component="pagination"] {
14
+ .page-item.active:not(.disabled) .page-link {
15
+ color: $pagination-active-color;
16
+ }
17
+ .page-item:not(.disabled):hover .page-link {
18
+ color: $pagination-hover-color;
19
+ background-color: $pagination-hover-bg;
20
+ }
21
+ .page-item:not(.disabled) .page-link {
22
+ color: $body-color;
23
+ }
24
+ }