mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-31 19:15:58 +01:00
notifications page + ajaxify route + css styling
This commit is contained in:
3
public/language/en/notifications.json
Normal file
3
public/language/en/notifications.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Notifications"
|
||||||
|
}
|
||||||
16
public/src/forum/notifications.js
Normal file
16
public/src/forum/notifications.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
define(function() {
|
||||||
|
var Notifications = {};
|
||||||
|
|
||||||
|
Notifications.init = function() {
|
||||||
|
var listEl = $('.notifications-list');
|
||||||
|
|
||||||
|
$('span.timeago').timeago();
|
||||||
|
|
||||||
|
// Allow the user to click anywhere in the LI
|
||||||
|
listEl.on('click', 'li', function(e) {
|
||||||
|
this.querySelector('a').click();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Notifications;
|
||||||
|
});
|
||||||
14
public/templates/notifications.tpl
Normal file
14
public/templates/notifications.tpl
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<h2>[[notifications:title]]</h2>
|
||||||
|
|
||||||
|
<button type="button" class="btn btn-default">Mark All as Read</button>
|
||||||
|
|
||||||
|
<ul class="notifications-list">
|
||||||
|
<!-- BEGIN notifications -->
|
||||||
|
<li data-nid="{notifications.nid}">
|
||||||
|
<p class="timestamp">
|
||||||
|
<span class="timeago" title="{notifications.datetimeISO}"></span>
|
||||||
|
</p>
|
||||||
|
<a href="..{notifications.path}">{notifications.text}</a>
|
||||||
|
</li>
|
||||||
|
<!-- END notifications -->
|
||||||
|
</ul>
|
||||||
@@ -154,6 +154,16 @@ var user = require('./../user.js'),
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get('/notifications', function(req, res) {
|
||||||
|
if (req.user && req.user.uid) {
|
||||||
|
user.notifications.getAll(req.user.uid, null, null, function(err, notifications) {
|
||||||
|
res.json({
|
||||||
|
notifications: notifications
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else res.send(403);
|
||||||
|
});
|
||||||
|
|
||||||
app.get('/confirm/:id', function (req, res) {
|
app.get('/confirm/:id', function (req, res) {
|
||||||
user.email.confirm(req.params.id, function (data) {
|
user.email.confirm(req.params.id, function (data) {
|
||||||
if (data.status === 'ok') {
|
if (data.status === 'ok') {
|
||||||
|
|||||||
30
src/user.js
30
src/user.js
@@ -945,6 +945,36 @@ var utils = require('./../public/src/utils.js'),
|
|||||||
callback(notifications);
|
callback(notifications);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getAll: function(uid, limit, before, callback) {
|
||||||
|
var now = new Date();
|
||||||
|
|
||||||
|
if (!limit || parseInt(limit) <= 0) limit = 25;
|
||||||
|
if (before) before = new Date(parseInt(before, 10));
|
||||||
|
|
||||||
|
RDB.multi()
|
||||||
|
.zrevrangebyscore('uid:' + uid + ':notifications:read', before ? before.getTime(): now.getTime(), -Infinity, 'LIMIT', 0, limit)
|
||||||
|
.zrevrangebyscore('uid:' + uid + ':notifications:unread', before ? before.getTime(): now.getTime(), -Infinity, 'LIMIT', 0, limit)
|
||||||
|
.exec(function(err, results) {
|
||||||
|
// Merge the read and unread notifications
|
||||||
|
var nids = results[0].concat(results[1]);
|
||||||
|
|
||||||
|
async.map(nids, function(nid, next) {
|
||||||
|
notifications.get(nid, function(notif_data) {
|
||||||
|
next(null, notif_data);
|
||||||
|
});
|
||||||
|
}, function(err, notifs) {
|
||||||
|
notifs = notifs.sort(function(a, b) {
|
||||||
|
return parseInt(b.datetime, 10) - parseInt(a.datetime, 10);
|
||||||
|
}).map(function(notif) {
|
||||||
|
notif.datetimeISO = new Date(parseInt(notif.datetime, 10)).toISOString();
|
||||||
|
|
||||||
|
return notif;
|
||||||
|
});
|
||||||
|
|
||||||
|
callback(err, notifs);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
},
|
||||||
getUnreadCount: function(uid, callback) {
|
getUnreadCount: function(uid, callback) {
|
||||||
RDB.zcount('uid:' + uid + ':notifications:unread', 0, 10, callback);
|
RDB.zcount('uid:' + uid + ':notifications:unread', 0, 10, callback);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ var express = require('express'),
|
|||||||
|
|
||||||
// Basic Routes (entirely client-side parsed, goal is to move the rest of the crap in this file into this one section)
|
// Basic Routes (entirely client-side parsed, goal is to move the rest of the crap in this file into this one section)
|
||||||
(function () {
|
(function () {
|
||||||
var routes = ['login', 'register', 'account', 'recent', 'unread', 'popular', 'active', '403', '404'];
|
var routes = ['login', 'register', 'account', 'recent', 'unread', 'notifications', '403', '404'];
|
||||||
|
|
||||||
for (var i = 0, ii = routes.length; i < ii; i++) {
|
for (var i = 0, ii = routes.length; i < ii; i++) {
|
||||||
(function (route) {
|
(function (route) {
|
||||||
|
|||||||
Reference in New Issue
Block a user