hej @brazzerstop. thank you for this great tutorial. ober!schöne grüße, m.
murcs
Posts
-
[manual] Build a Night Mode for Harmony -
snowing theme@oplik0 said in snowing theme:
<script src="https://cdn.jsdelivr.net/gh/nextapps-de/snowflake@master/snowflake.min.js"></script>
try it in combination with nodebb-plugin-night-mode! it becomes a heartwarming winter dream.
-
[nodebb-widget-board-stats] discrepancy to dashboard count@DownPW said in [nodebb-widget-board-stats] discrepancy to dashboard count:
any news @murcs ?
i just digged a little deeper for you: „our“
/var/www/nodebb/node_modules/nodebb-widget-board-stats/library.js
looks like this'use strict'; const async = require('async'); const nconf = module.parent.require('nconf'); const db = require.main.require('./src/database'); const user = require.main.require('./src/user'); const utils = require.main.require('./src/utils'); const socketPlugins = require.main.require('./src/socket.io/plugins'); const socketRooms = require.main.require('./src/socket.io/admin/rooms'); let app; const Widget = module.exports; Widget.init = function (params, callback) { app = params.app; callback(); }; socketPlugins.boardStats = {}; socketPlugins.boardStats.get = function (socket, tid, callback) { getWidgetData(callback); }; function addDots(text) { return String(text).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1.'); }; function getWidgetData(callback) { async.parallel({ global: function (next) { db.getObjectFields('global', ['topicCount', 'postCount', 'userCount'], next); }, latestUser: getLatestUser, activeUsers: getActiveUsers, onlineUsers: Widget.updateAndGetOnlineUsers, activeWithin24h: function (next) { var now = Date.now(); db.sortedSetCount('users:online', now - 86400000, '+inf', next); }, }, function (err, results) { if (err) { return callback(err); } var data = { within24h: results.activeWithin24h, count: addDots(results.onlineUsers.onlineCount + results.onlineUsers.guestCount), members: addDots(results.onlineUsers.onlineCount), guests: addDots(results.onlineUsers.guestCount), list: joinUsers(results.activeUsers), posts: addDots(results.global.postCount ? results.global.postCount : 0), topics: addDots(results.global.topicCount ? results.global.topicCount : 0), registered: addDots(results.global.userCount ? results.global.userCount : 0), latest: joinUsers(results.latestUser), relative_path: nconf.get('relative_path'), mostUsers: { date: (new Date(parseInt(results.onlineUsers.timestamp, 10))).toDateString(), total: results.onlineUsers.total, }, }; callback(null, data); }); } function getActiveUsers(callback) { async.waterfall([ function (next) { user.getUidsFromSet('users:online', 0, 19, next); }, function (uids, next) { user.getUsersFields(uids, ['username', 'userslug', 'status'], next); }, ], function (err, data) { if (err) { return callback(err); } data = data.filter(function (a) { return a.status === 'online'; }); callback(err, data); }); } function getLatestUser(callback) { async.waterfall([ function (next) { user.getUidsFromSet('users:joindate', 0, 0, next); }, function (uids, next) { user.getUsersWithFields(uids, ['username', 'userslug'], 0, next); }, ], callback); } function joinUsers(usersData) { var str = []; for (var i = 0, ii = usersData.length; i < ii; i++) { str.push('<a href="' + nconf.get('relative_path') + '/user/' + usersData[i].userslug + '">' + usersData[i].username + '</a>'); } return str.join(', '); } Widget.updateAndGetOnlineUsers = function (callback) { callback = typeof callback === 'function' ? callback : function () {}; async.waterfall([ function (next) { next(null, socketRooms.getLocalStats().onlineRegisteredCount); }, function (onlineCount, next) { socketRooms.getTotalGuestCount(function (err, guestCount) { if (err) { return next(err); } next(null, { onlineCount: parseInt(onlineCount, 10), guestCount: parseInt(guestCount, 10), }); }); }, function (users, next) { db.getObjectFields('plugin:widget-board-stats', ['total', 'timestamp'], function (err, data) { if (err) { return next(err); } var totalUsers = users.onlineCount + users.guestCount; data.timestamp = data.timestamp || Date.now(); if (parseInt(data.total || 0, 10) <= totalUsers) { data.timestamp = Date.now(); data.total = totalUsers; db.setObject('plugin:widget-board-stats', data); } data.onlineCount = users.onlineCount; data.guestCount = users.guestCount; return next(null, data); }); }, ], callback); }; Widget.renderWidget = function (widget, callback) { getWidgetData(function (err, data) { if (err) { return callback(err); } app.render('widgets/board-stats', data, function (err, html) { if (err) { return callback(err); } widget.html = html; callback(null, widget); }); }); }; Widget.defineWidgets = function (widgets, callback) { var widget = { widget: 'board-stats', name: 'Board Stats', description: 'Classical board stats widget in real-time.', content: 'admin/board-stats', }; app.render(widget.content, {}, function (err, html) { widget.content = html; widgets.push(widget); callback(err, widgets); }); };
which corresponds with our localized version of
/var/www/nodebb/node_modules/nodebb-widget-board-stats/public/templates/widgets/board-stats.tpl
<div component="widget/board-stats" class="widget-board-stats" style="border: 1px solid #999"> <h3 style="background: #666; font-size: 15px; font-weight: 500">Folgende Nutzende sind gerade online: <a href="{config.relative_path}/users?section=online">[komplette Liste]</a></h3> <p> Davon sind aktuell <strong component="widget/board-stats/count">{count}</strong> Nutzende aktiv (<strong component="widget/board-stats/members">{members}</strong> Registrierte + <strong component="widget/board-stats/guests">{guests}</strong>Gäste).<br /> <span style="display: block; line-height: 0.5em" > </span> <span component="widget/board-stats/list">{list}</span> <span style="display: block; line-height: 0.5em" > </span> In den letzten 24 Stunden waren <strong component="widget/board-stats/within24h">{within24h}</strong> verschiedene Nutzende eingeloggt. </p> <h3 style="background: #666; font-size: 15px; font-weight: 500">Forum-Statistik</h3> <p> Unsere aktiven registrierten Mitglieder haben <strong component="widget/board-stats/posts">{posts}</strong> Beiträge zu <strong component="widget/board-stats/topics">{topics}</strong> Themen verfasst –<strong component="widget/board-stats/registered">{registered}</strong> Mitglieder sind bei <em>schoenen-dunk.de</em> registriert.<br /> <span style="display: block; line-height: 0.5em" > </span> <span component="widget/board-stats/latest">{latest}</span> ist unser neuestes Mitglied. Herzlich Willkommen!<br /> <span style="display: block; line-height: 0.5em" > </span> Am {mostUsers.date} waren <strong>{mostUsers.total}</strong> Nutzende gleichzeitig online. </p> </div>
well. i hope this helps a bit.
ober!schöne grüße,
m. -
editing in quick reply + k-keydear @baris thanks for the release of v2.8.8 ... our users a very happy!
-
nodebb-widget-board-stats Updatehi. is there any chance to get the nodebb-widget-board-stats plugin updated for v3? ober!schöne grüße, m.
-
counts for /flags and /post-queuehi.
i'm pretty new to nodeBB - it's my first thread/post. we are a group of seven enthusiasts who moved a nearly 20 year old voluntary sports-forum in germany from a proprietary internet forum software to nodeBB. first of all: we are really happy with our choice =;^) it's a great piece of software!
but there are some wishes. of course. after some investigation on the topic "counts for /flags and /post-queue" i felt asking here should be the best option.
we are using the /post-queue as a part of our spam-protection strategy. our /post-queue is in the navigation visible to moderators and admins. it would be great to have the count of posts inside as a marker on it like for /unread. the same for /flags. we would love to see the open issues marked there.
well. if you have any advice because we missed something obvious feel free to help. thank you.
ober!schöne grüße,
mrx. -
[harmony] header / footer /sidebar area inconsistency in widgetshi.
while adding some widgets in the header or footer area of
categories.tpl
orcategory.tpl
(or off some custom pages using nodebb-plugin-custom-pages) the header and footer nicely span the full width of the browser window from left to right. the same widgets give a completely different result (bound by the sidebar on the right) when placed in the header or footer area ofrecent.tpl
orunread.tpl
or even global. there are reasons for sure. but i would love to see a switch at least to decide if the sidebar spans all along from the brand header to the bottom of the page OR only just between header or footer area aside the content area.ober!schöne grüße,
m. -
login form accidentally hidden by some HTML- + JS-code in widgets:global@pitaj it worked.
-
[harmony] menu expand/collapse on both sidesthanx again for the quick fix.
-
nodebb-widget-board-stats Updateas far as i know, it’s not necessary. it’s still up and running at our site. it was a caching-problem after updating our tester. (sorry for not reporting.)
-
Nodebb 502 bad gateway error@FrankM said in Nodebb 502 bad gateway error:
Temporary workaround in this thread -> https://community.nodebb.org/topic/17040/typeerror-date-format-is-not-a-function/6
thank you for the hint. our forum is up again.
-
[harmony] clickable teaser in topic-listshej.
another feature request (and the last for today): it would be great to have the have the full
lastpost background-link-container
in topic-lists clickable. at the moment each interactive object inside the teaser area is clickable but leads to the respective linked URL. especially on mobile users expect to get to the last post of a topic when clicking the teaser area. at the moment they have to click on the smalldate
andtime
area which is linked to the last post of the topic. if they miss this sweat spot, they get the user profile of the poster or whatever link is shown in the teaser.needless to say, we have really a lot of fun with nodeBB v3 and harmony. thanx a lot!
ober!schöne grüße,
m. -
Question and Answer plugin@psychobunny said in Question and Answer plugin:
@murcs ah okay. Could you add a new issue here: https://github.com/NodeBB/nodebb-plugin-question-and-answer/issues
If you have client side errors / server side logs to paste there + info regarding your NodeBB setup (version, theme, etc.) then that would make it a lot easier to reproduce and fix. Thanks!
the easiest would be to reproduce it here. just edit my first post!
-
nodebb-widget-board-stats Update@crazycells said in nodebb-widget-board-stats Update:
@murcs you have a nice light/dark switch for v3. would you mind sharing the codes for this?
sorry for the delay. i was a bit out of order =;^) the dark mode switch for harmony was original posted by @brazzerstop – i just tweaked it to fit our needs.
-
[harmony] topic title in sticky-tools bar@Teemberland said in [harmony] sticky topic:
we are currently using this in v2. Love this! I read the title of this post and thought this was the main thread for Harmony questions because it shows 'sticky'. I just misunderstood it. I'll create a separate thread for my question.
oooh. you are absolutely right. my fault. i’ll change the topic title.