nodebb-theme-harmony 0.0.1 → 0.0.3
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/languages/en-GB/harmony.json +5 -0
- package/library.js +101 -26
- package/package.json +5 -2
- package/plugin.json +14 -2
- package/public/harmony.js +101 -0
- package/scss/account.scss +38 -0
- package/scss/chats.scss +72 -0
- package/scss/common.scss +65 -0
- package/scss/fonts.scss +17 -0
- package/scss/groups.scss +30 -0
- package/scss/harmony.scss +23 -3
- package/scss/header.scss +16 -0
- package/scss/mixins.scss +183 -0
- package/scss/modals.scss +4 -0
- package/scss/modules/bottom-sheet.scss +52 -0
- package/scss/modules/breadcrumbs.scss +16 -0
- package/scss/modules/composer.scss +21 -0
- package/scss/modules/cover.scss +115 -0
- package/scss/modules/tags.scss +6 -0
- package/scss/modules/topic-navigator.scss +61 -0
- package/scss/modules/topics-list.scss +20 -0
- package/scss/modules/user-menu.scss +5 -0
- package/scss/overrides.scss +65 -0
- package/scss/sidebar.scss +125 -0
- package/scss/skins.scss +13 -0
- package/scss/status.scss +25 -0
- package/scss/topic.scss +128 -0
- package/templates/account/best.tpl +0 -2
- package/templates/account/blocks.tpl +31 -26
- package/templates/account/bookmarks.tpl +0 -2
- package/templates/account/categories.tpl +1 -3
- package/templates/account/controversial.tpl +0 -2
- package/templates/account/downvoted.tpl +0 -2
- package/templates/account/followers.tpl +14 -10
- package/templates/account/following.tpl +14 -10
- package/templates/account/groups.tpl +13 -11
- package/templates/account/ignored.tpl +0 -2
- package/templates/account/posts.tpl +29 -10
- package/templates/account/profile.tpl +76 -159
- package/templates/account/topics.tpl +32 -21
- package/templates/account/uploads.tpl +38 -35
- package/templates/account/upvoted.tpl +0 -2
- package/templates/account/watched.tpl +0 -2
- package/templates/admin/plugins/harmony.tpl +17 -0
- package/templates/categories.tpl +5 -5
- package/templates/category.tpl +26 -26
- package/templates/chat.tpl +9 -9
- package/templates/chats.tpl +5 -7
- package/templates/footer.tpl +11 -7
- package/templates/groups/details.tpl +74 -64
- package/templates/groups/list.tpl +19 -14
- package/templates/header.tpl +34 -21
- package/templates/login.tpl +51 -45
- package/templates/partials/account/admin-menu.tpl +36 -0
- package/templates/partials/account/category-item.tpl +17 -17
- package/templates/partials/account/header.tpl +77 -35
- package/templates/partials/account/sidebar-left.tpl +82 -0
- package/templates/partials/breadcrumbs.tpl +4 -12
- package/templates/partials/categories/item.tpl +48 -44
- package/templates/partials/categories/lastpost.tpl +17 -19
- package/templates/partials/categories/link.tpl +5 -13
- package/templates/partials/category/sort.tpl +4 -7
- package/templates/partials/category/subcategory.tpl +4 -4
- package/templates/partials/category/tools.tpl +6 -9
- package/templates/partials/category/watch.tpl +7 -11
- package/templates/partials/category-filter-content.tpl +5 -6
- package/templates/partials/category-filter.tpl +0 -2
- package/templates/partials/category-selector-content.tpl +4 -5
- package/templates/partials/category-selector.tpl +0 -2
- package/templates/partials/chats/dropdown.tpl +24 -32
- package/templates/partials/chats/message-window.tpl +7 -7
- package/templates/partials/chats/message.tpl +34 -34
- package/templates/partials/chats/recent_room.tpl +16 -29
- package/templates/partials/chats/system-message.tpl +4 -4
- package/templates/partials/chats/user.tpl +1 -3
- package/templates/partials/groups/admin.tpl +82 -183
- package/templates/partials/groups/badge.tpl +1 -3
- package/templates/partials/groups/invited.tpl +33 -0
- package/templates/partials/groups/list.tpl +14 -21
- package/templates/partials/groups/memberlist.tpl +28 -24
- package/templates/partials/groups/pending.tpl +30 -0
- package/templates/partials/groups/sidebar-left.tpl +27 -0
- package/templates/partials/mobile-footer.tpl +70 -0
- package/templates/partials/notifications_list.tpl +19 -27
- package/templates/partials/paginator.tpl +22 -24
- package/templates/partials/post_bar.tpl +23 -18
- package/templates/partials/posts_list.tpl +0 -2
- package/templates/partials/posts_list_item.tpl +14 -29
- package/templates/partials/quick-search-results.tpl +36 -25
- package/templates/partials/search-results.tpl +4 -1
- package/templates/partials/sidebar/chats.tpl +53 -0
- package/templates/partials/sidebar/drafts.tpl +41 -0
- package/templates/partials/sidebar/logged-out-menu.tpl +38 -0
- package/templates/partials/sidebar/notifications.tpl +28 -0
- package/templates/partials/sidebar/search-mobile.tpl +29 -0
- package/templates/partials/sidebar/search.tpl +30 -0
- package/templates/partials/sidebar/user-menu.tpl +87 -0
- package/templates/partials/sidebar-left.tpl +40 -0
- package/templates/partials/sidebar-right.tpl +41 -0
- package/templates/partials/skin-switcher.tpl +35 -0
- package/templates/partials/tags_list.tpl +0 -2
- package/templates/partials/toast.tpl +6 -8
- package/templates/partials/topic/event.tpl +4 -20
- package/templates/partials/topic/navigator.tpl +20 -41
- package/templates/partials/topic/necro-post.tpl +5 -4
- package/templates/partials/topic/post-menu.tpl +23 -2
- package/templates/partials/topic/post-placeholder.tpl +15 -0
- package/templates/partials/topic/post.tpl +67 -64
- package/templates/partials/topic/quickreply.tpl +12 -14
- package/templates/partials/topic/reactions.tpl +0 -2
- package/templates/partials/topic/reply-button.tpl +16 -20
- package/templates/partials/topic/selection-tooltip.tpl +0 -2
- package/templates/partials/topic/sort.tpl +8 -6
- package/templates/partials/topic/stats.tpl +15 -14
- package/templates/partials/topic/tag.tpl +1 -3
- package/templates/partials/topic/tags.tpl +1 -5
- package/templates/partials/topic/tools.tpl +13 -0
- package/templates/partials/topic/watch.tpl +15 -13
- package/templates/partials/topic-filters.tpl +4 -5
- package/templates/partials/topic-list-bar.tpl +54 -0
- package/templates/partials/topic-terms.tpl +4 -5
- package/templates/partials/topics_list.tpl +109 -100
- package/templates/partials/users/item.tpl +7 -0
- package/templates/partials/users_list.tpl +11 -60
- package/templates/partials/users_list_menu.tpl +10 -18
- package/templates/popular.tpl +1 -18
- package/templates/recent.tpl +8 -24
- package/templates/register.tpl +74 -60
- package/templates/tag.tpl +3 -15
- package/templates/tags.tpl +3 -4
- package/templates/top.tpl +1 -18
- package/templates/topic.tpl +39 -43
- package/templates/unread.tpl +1 -22
- package/templates/users.tpl +17 -17
- package/templates/admin/plugins/persona.tpl +0 -29
- package/templates/partials/account/menu.tpl +0 -103
- package/templates/partials/header/user-menu.tpl +0 -87
- package/templates/partials/menu.tpl +0 -188
- package/templates/partials/thread_tools.tpl +0 -10
package/library.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const meta = require.main.require('./src/meta');
|
|
4
|
+
const _ = require.main.require('lodash');
|
|
5
|
+
const user = require.main.require('./src/user');
|
|
6
|
+
|
|
3
7
|
const controllers = require('./lib/controllers');
|
|
4
8
|
|
|
5
9
|
const library = module.exports;
|
|
@@ -21,31 +25,102 @@ library.addAdminNavigation = async function (header) {
|
|
|
21
25
|
};
|
|
22
26
|
|
|
23
27
|
library.defineWidgetAreas = async function (areas) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
28
|
+
const locations = ['header', 'sidebar', 'footer'];
|
|
29
|
+
const templates = [
|
|
30
|
+
'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
|
|
31
|
+
'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl',
|
|
32
|
+
'login.tpl', 'register.tpl',
|
|
33
|
+
];
|
|
34
|
+
function capitalizeFirst(str) {
|
|
35
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
36
|
+
}
|
|
37
|
+
templates.forEach((template) => {
|
|
38
|
+
locations.forEach((location) => {
|
|
39
|
+
areas.push({
|
|
40
|
+
name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`,
|
|
41
|
+
template: template,
|
|
42
|
+
location: location,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
areas = areas.concat([
|
|
48
|
+
{
|
|
49
|
+
name: 'Sidebar Footer',
|
|
50
|
+
template: 'global',
|
|
51
|
+
location: 'sidebar-footer',
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
|
|
50
55
|
return areas;
|
|
51
56
|
};
|
|
57
|
+
|
|
58
|
+
library.getThemeConfig = async function (config) {
|
|
59
|
+
const { enableQuickReply, centerHeaderElements } = await meta.settings.get('harmony');
|
|
60
|
+
config.enableQuickReply = enableQuickReply === 'on';
|
|
61
|
+
config.centerHeaderElements = centerHeaderElements === 'on';
|
|
62
|
+
return config;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
library.addUserToTopic = async function (hookData) {
|
|
66
|
+
const { enableQuickReply } = await meta.settings.get('harmony');
|
|
67
|
+
if (enableQuickReply === 'on') {
|
|
68
|
+
if (hookData.req.user) {
|
|
69
|
+
const userData = await user.getUserData(hookData.req.user.uid);
|
|
70
|
+
hookData.templateData.loggedInUser = userData;
|
|
71
|
+
} else {
|
|
72
|
+
hookData.templateData.loggedInUser = {
|
|
73
|
+
uid: 0,
|
|
74
|
+
username: '[[global:guest]]',
|
|
75
|
+
picture: user.getDefaultAvatar(),
|
|
76
|
+
'icon:text': '?',
|
|
77
|
+
'icon:bgColor': '#aaa',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return hookData;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
library.filterMiddlewareRenderHeader = async function (hookData) {
|
|
85
|
+
const userSettings = await user.getSettings(hookData.req.uid);
|
|
86
|
+
|
|
87
|
+
const lightSkins = [
|
|
88
|
+
'default', 'cerulean', 'cosmo', 'flatly', 'journal', 'litera',
|
|
89
|
+
'lumen', 'lux', 'materia', 'minty', 'morph', 'pulse', 'quartz', 'sandstone',
|
|
90
|
+
'simplex', 'sketchy', 'spacelab', 'united', 'yeti', 'zephyr',
|
|
91
|
+
];
|
|
92
|
+
const darkSkins = [
|
|
93
|
+
'cyborg', 'darkly', 'slate', 'solar', 'superhero', 'vapor',
|
|
94
|
+
];
|
|
95
|
+
function parseSkins(skins) {
|
|
96
|
+
skins = skins.map(skin => ({
|
|
97
|
+
name: _.capitalize(skin),
|
|
98
|
+
value: skin === 'default' ? '' : skin,
|
|
99
|
+
}));
|
|
100
|
+
skins.forEach((skin) => {
|
|
101
|
+
skin.selected = skin.value === userSettings.bootswatchSkin;
|
|
102
|
+
});
|
|
103
|
+
return skins;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
hookData.templateData.bootswatchSkinOptions = {
|
|
107
|
+
light: parseSkins(lightSkins),
|
|
108
|
+
dark: parseSkins(darkSkins),
|
|
109
|
+
};
|
|
110
|
+
hookData.templateData.currentBSSkin = _.capitalize(hookData.templateData.bootswatchSkin);
|
|
111
|
+
return hookData;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
library.removeFinalBreadcrumb = async (hookData) => {
|
|
115
|
+
const { templateData } = hookData;
|
|
116
|
+
const { breadcrumbs } = templateData;
|
|
117
|
+
|
|
118
|
+
const applyTo = ['category', 'topic'];
|
|
119
|
+
|
|
120
|
+
// Remove the last breadcrumb (the current page) as it is not part of Harmony's design
|
|
121
|
+
if (applyTo.includes(hookData.templateData.template.name) && breadcrumbs && breadcrumbs.length) {
|
|
122
|
+
breadcrumbs.pop();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return hookData;
|
|
126
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodebb-theme-harmony",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"nbbpm": {
|
|
5
5
|
"compatibility": "^3.0.0"
|
|
6
6
|
},
|
|
@@ -36,7 +36,10 @@
|
|
|
36
36
|
"bugs": {
|
|
37
37
|
"url": "https://github.com/NodeBB/nodebb-theme-harmony/issues"
|
|
38
38
|
},
|
|
39
|
-
"dependencies": {
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@fontsource/inter": "^4.5.14",
|
|
41
|
+
"@fontsource/poppins": "^4.5.10"
|
|
42
|
+
},
|
|
40
43
|
"devDependencies": {
|
|
41
44
|
"eslint": "^8.0.0",
|
|
42
45
|
"eslint-config-nodebb": "^0.2.0",
|
package/plugin.json
CHANGED
|
@@ -3,9 +3,21 @@
|
|
|
3
3
|
"hooks": [
|
|
4
4
|
{ "hook": "static:app.load", "method": "init" },
|
|
5
5
|
{ "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
|
|
6
|
-
{ "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" }
|
|
6
|
+
{ "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" },
|
|
7
|
+
{ "hook": "filter:config.get", "method": "getThemeConfig" },
|
|
8
|
+
{ "hook": "filter:topic.build", "method": "addUserToTopic" },
|
|
9
|
+
{ "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" },
|
|
10
|
+
{ "hook": "filter:middleware.render", "method": "removeFinalBreadcrumb" }
|
|
11
|
+
],
|
|
12
|
+
"scripts": [
|
|
13
|
+
"public/harmony.js"
|
|
7
14
|
],
|
|
8
15
|
"modules": {
|
|
9
16
|
"../admin/plugins/harmony.js": "public/admin.js"
|
|
10
|
-
}
|
|
17
|
+
},
|
|
18
|
+
"staticDirs": {
|
|
19
|
+
"inter": "node_modules/@fontsource/inter/files",
|
|
20
|
+
"poppins": "node_modules/@fontsource/poppins/files"
|
|
21
|
+
},
|
|
22
|
+
"languages": "languages"
|
|
11
23
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
$(document).ready(function () {
|
|
4
|
+
setupMobileMenu();
|
|
5
|
+
setupSearch();
|
|
6
|
+
setupDrafts();
|
|
7
|
+
|
|
8
|
+
$('[component="skinSwitcher"]').on('click', '.dropdown-item', function () {
|
|
9
|
+
const skin = $(this).attr('data-value');
|
|
10
|
+
$('[component="skinSwitcher"] .dropdown-item .fa-check').addClass('invisible');
|
|
11
|
+
$(this).find('.fa-check').removeClass('invisible');
|
|
12
|
+
require(['forum/account/settings'], function (accountSettings) {
|
|
13
|
+
$('[component="skinSwitcher"] [component="skinSwitcher/icon"]').addClass('fa-fade');
|
|
14
|
+
accountSettings.changeSkin(skin);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
require(['hooks'], function (hooks) {
|
|
19
|
+
hooks.on('action:skin.change', function () {
|
|
20
|
+
$('[component="skinSwitcher"] [component="skinSwitcher/icon"]').removeClass('fa-fade');
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
$(window).on('action:composer.resize action:sidebar.toggle', function () {
|
|
24
|
+
$('[component="composer"]').css({
|
|
25
|
+
left: $('.sidebar-left').outerWidth(true),
|
|
26
|
+
width: $('#panel').width(),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function setupMobileMenu() {
|
|
32
|
+
$('[component="sidebar/toggle"]').on('click', function () {
|
|
33
|
+
$('.sidebar').toggleClass('open');
|
|
34
|
+
$(window).trigger('action:sidebar.toggle');
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function setupSearch() {
|
|
39
|
+
$('[component="sidebar/search"]').on('shown.bs.dropdown', function () {
|
|
40
|
+
$(this).find('[component="search/fields"] input[name="query"]').trigger('focus');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
function resizeResults(hookData) {
|
|
44
|
+
if (hookData && hookData.data && !hookData.data.posts.length) {
|
|
45
|
+
$('.bottombar .quick-search-results').css({ height: 'initial' });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const dropdown = $('.bottombar .search-dropdown');
|
|
49
|
+
const padY = dropdown.innerHeight() - dropdown.height();
|
|
50
|
+
const input = dropdown.find('.input-container').outerHeight(true);
|
|
51
|
+
const showMore = dropdown.find('.show-more-container').outerHeight(true);
|
|
52
|
+
const newHeight = Math.max(
|
|
53
|
+
150,
|
|
54
|
+
$(window).height() - (input + (showMore || 0) + (padY * 2) + 30)
|
|
55
|
+
);
|
|
56
|
+
$('.bottombar .quick-search-results').height(newHeight);
|
|
57
|
+
}
|
|
58
|
+
require(['hooks'], function (hooks) {
|
|
59
|
+
$(window).on('resize', resizeResults);
|
|
60
|
+
hooks.on('action:search.quick.complete', resizeResults);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function setupDrafts() {
|
|
65
|
+
require(['composer/drafts'], function (drafts) {
|
|
66
|
+
function updateBadgeCount() {
|
|
67
|
+
const count = drafts.getAvailableCount();
|
|
68
|
+
$('[component="drafts/count"]').toggleClass('hidden', count <= 0).text(count);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function renderDraftList() {
|
|
72
|
+
const draftListEl = $('[component="drafts/list"]');
|
|
73
|
+
draftListEl.find('[data-save-id]').remove();
|
|
74
|
+
|
|
75
|
+
const draftItems = drafts.listAvailable();
|
|
76
|
+
if (!draftItems.length) {
|
|
77
|
+
draftListEl.find('.no-drafts').removeClass('hidden');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const html = await app.parseAndTranslate('partials/sidebar/drafts', 'drafts', { drafts: draftItems });
|
|
81
|
+
draftListEl.find('.no-drafts').addClass('hidden');
|
|
82
|
+
draftListEl.append(html).find('.timeago').timeago();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const draftsEl = $('[component="sidebar/drafts"]');
|
|
86
|
+
draftsEl.on('shown.bs.dropdown', renderDraftList);
|
|
87
|
+
|
|
88
|
+
draftsEl.on('click', '[component="drafts/open"]', function () {
|
|
89
|
+
drafts.open($(this).attr('data-save-id'));
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
draftsEl.on('click', '[component="drafts/delete"]', function () {
|
|
93
|
+
drafts.removeDraft($(this).attr('data-save-id'));
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
$(window).on('action:composer.drafts.save', updateBadgeCount);
|
|
97
|
+
$(window).on('action:composer.drafts.remove', updateBadgeCount);
|
|
98
|
+
updateBadgeCount();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.page-user #panel {
|
|
2
|
+
margin-top: 0px!important;
|
|
3
|
+
}
|
|
4
|
+
.account {
|
|
5
|
+
margin-top: 200px;
|
|
6
|
+
width: 100%;
|
|
7
|
+
margin-left: auto;
|
|
8
|
+
margin-right: auto;
|
|
9
|
+
.breadcrumb {
|
|
10
|
+
justify-content: start!important;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.avatar-wrapper {
|
|
14
|
+
border: 4px solid white;
|
|
15
|
+
border-radius: 50%;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@include media-breakpoint-up(md) {
|
|
19
|
+
margin-top: 300px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.categories {
|
|
23
|
+
[component="categories/category"] {
|
|
24
|
+
.depth-1 {
|
|
25
|
+
padding-left: 50px;
|
|
26
|
+
}
|
|
27
|
+
.depth-2 {
|
|
28
|
+
padding-left: 100px;
|
|
29
|
+
}
|
|
30
|
+
.depth-3 {
|
|
31
|
+
padding-left: 150px;
|
|
32
|
+
}
|
|
33
|
+
.depth-4 {
|
|
34
|
+
padding-left: 150px;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/scss/chats.scss
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// chats need a bit of css
|
|
2
|
+
|
|
3
|
+
.page-user-chats #content {
|
|
4
|
+
max-width: 100%;
|
|
5
|
+
}
|
|
6
|
+
body.page-user-chats {
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Styles common to both full chat and chat modal */
|
|
11
|
+
.chats-full, .chat-modal {
|
|
12
|
+
height: calc(100vh - var(--panel-offset) - $spacer)!important;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.expanded-chat, .chat-modal {
|
|
16
|
+
// no taskbar so hide minimize button
|
|
17
|
+
[data-action="minimize"] {
|
|
18
|
+
display: none!important;
|
|
19
|
+
}
|
|
20
|
+
.chat-content .chat-message {
|
|
21
|
+
.message-body-wrapper .controls {
|
|
22
|
+
[data-action="restore"] {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
.chat-content .chat-message.deleted {
|
|
28
|
+
.message-body-wrapper .controls {
|
|
29
|
+
[data-action] {
|
|
30
|
+
display: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
[data-action="restore"] {
|
|
34
|
+
display: inline;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.message-body {
|
|
39
|
+
opacity: 0.3;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Mobile handling of chat page */
|
|
45
|
+
@include media-breakpoint-down(sm) {
|
|
46
|
+
.page-user-chats {
|
|
47
|
+
padding-bottom: 0;
|
|
48
|
+
|
|
49
|
+
[component="chat/nav-wrapper"][data-loaded="1"] {
|
|
50
|
+
display: none!important;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
[component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
|
|
54
|
+
display: none!important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[component="chat/messages"] {
|
|
58
|
+
width: calc(100vw - $grid-gutter-width);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
[data-action="pop-out"] {
|
|
63
|
+
display: none!important;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Mobile handling of chat modal */
|
|
68
|
+
@include media-breakpoint-down(sm) {
|
|
69
|
+
.chat-modal {
|
|
70
|
+
z-index: $zindex-popover + 10;
|
|
71
|
+
}
|
|
72
|
+
}
|
package/scss/common.scss
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
body {
|
|
3
|
+
overflow-y: scroll;
|
|
4
|
+
}
|
|
5
|
+
.ff-secondary {
|
|
6
|
+
font-family: $font-family-secondary;
|
|
7
|
+
}
|
|
8
|
+
.tracking-tight { letter-spacing: -0.025em; }
|
|
9
|
+
|
|
10
|
+
.text-md { font-size: 1.125rem!important; } // 18px
|
|
11
|
+
.text-sm { font-size: 0.875rem!important; } // 14px
|
|
12
|
+
.text-xs { font-size: 0.75rem!important; } // 12px
|
|
13
|
+
|
|
14
|
+
.btn-link:hover {
|
|
15
|
+
text-decoration: none;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.sticky-tools {
|
|
19
|
+
position: sticky;
|
|
20
|
+
z-index: 3;
|
|
21
|
+
top: calc($spacer * 0.5);
|
|
22
|
+
background-color: $body-bg;
|
|
23
|
+
}
|
|
24
|
+
// quartz doesn't need body-bg for tool background
|
|
25
|
+
.skin-quartz .sticky-tools {
|
|
26
|
+
background-color: initial;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.skin-noskin {
|
|
30
|
+
.sticky-tools .btn-link {
|
|
31
|
+
color: $dark;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@mixin btn-ghost-base {
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
gap: ($spacer * 0.5);
|
|
40
|
+
border-radius: $border-radius-sm;
|
|
41
|
+
border-width: 1px;
|
|
42
|
+
border-color: transparent;
|
|
43
|
+
background-color: transparent;
|
|
44
|
+
padding: ($spacer * 0.25) ($spacer * 0.5);
|
|
45
|
+
text-align: left;
|
|
46
|
+
--bs-text-opacity: 1;
|
|
47
|
+
color: inherit !important;
|
|
48
|
+
$hover-color: mix($light, $dark, 90);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
&:hover, &.active {
|
|
51
|
+
background-color: $hover-color;
|
|
52
|
+
text-decoration: none;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.btn-ghost {
|
|
57
|
+
@include btn-ghost-base();
|
|
58
|
+
line-height: 1.5rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.btn-ghost-sm {
|
|
62
|
+
@include btn-ghost-base();
|
|
63
|
+
font-size: 0.875rem;
|
|
64
|
+
line-height: 1.25rem;
|
|
65
|
+
}
|
package/scss/fonts.scss
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@use "@fontsource/inter/scss/mixins" as Inter;
|
|
2
|
+
@use "@fontsource/poppins/scss/mixins" as Poppins;
|
|
3
|
+
|
|
4
|
+
$weights: $font-weight-light, $font-weight-normal, $font-weight-semibold, $font-weight-bold;
|
|
5
|
+
|
|
6
|
+
@each $weight in $weights {
|
|
7
|
+
@include Inter.fontFace(
|
|
8
|
+
$weight: $weight,
|
|
9
|
+
$display: fallback,
|
|
10
|
+
$fontDir: "./plugins/nodebb-theme-harmony/inter"
|
|
11
|
+
);
|
|
12
|
+
@include Poppins.fontFace(
|
|
13
|
+
$weight: $weight,
|
|
14
|
+
$display: fallback,
|
|
15
|
+
$fontDir: "./plugins/nodebb-theme-harmony/poppins"
|
|
16
|
+
);
|
|
17
|
+
}
|
package/scss/groups.scss
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.template-groups-details #panel {
|
|
2
|
+
margin-top: 0px!important;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.group-hover-bg {
|
|
6
|
+
$hover-color: mix($light, $dark, 97);
|
|
7
|
+
$border-color: mix($light, $dark, 90);
|
|
8
|
+
.card-body {
|
|
9
|
+
border-color: $border-color!important;
|
|
10
|
+
}
|
|
11
|
+
&:hover {
|
|
12
|
+
background-color: $hover-color;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.groups.details {
|
|
17
|
+
margin-top: 200px;
|
|
18
|
+
|
|
19
|
+
[component="groups/members"] {
|
|
20
|
+
tbody {
|
|
21
|
+
max-height: 500px;
|
|
22
|
+
display: block;
|
|
23
|
+
overflow-y: auto;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@include media-breakpoint-up(md) {
|
|
28
|
+
margin-top: 300px;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/scss/harmony.scss
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
@import "fonts";
|
|
2
|
+
@import "mixins";
|
|
3
|
+
@import "common";
|
|
4
|
+
|
|
5
|
+
@import "header";
|
|
6
|
+
@import "topic";
|
|
7
|
+
@import "chats";
|
|
8
|
+
@import "sidebar";
|
|
9
|
+
@import "status";
|
|
10
|
+
@import "account";
|
|
11
|
+
@import "groups";
|
|
12
|
+
@import "modals";
|
|
13
|
+
|
|
14
|
+
@import "modules/breadcrumbs";
|
|
15
|
+
@import "modules/tags";
|
|
16
|
+
@import "modules/user-menu";
|
|
17
|
+
@import "modules/bottom-sheet";
|
|
18
|
+
@import "modules/topic-navigator";
|
|
19
|
+
@import "modules/composer";
|
|
20
|
+
@import "modules/topics-list";
|
|
21
|
+
@import "modules/cover";
|
|
22
|
+
|
|
23
|
+
@import "skins";
|
package/scss/header.scss
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// hide brand/title on user and group details pages so it doesnt break covers
|
|
2
|
+
.page-user, .template-groups-details {
|
|
3
|
+
.brand-container {
|
|
4
|
+
display: none;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
[component="brand/wrapper"] {
|
|
8
|
+
&:hover {
|
|
9
|
+
background-color: $card-cap-bg;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
[component="brand/logo"] {
|
|
14
|
+
max-height: 48px;
|
|
15
|
+
width: auto;
|
|
16
|
+
}
|