mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	mark all notifs as read functionality. CSS tweaks...
This commit is contained in:
		| @@ -2,7 +2,8 @@ define(function() { | ||||
| 	var Notifications = {}; | ||||
|  | ||||
| 	Notifications.init = function() { | ||||
| 		var listEl = $('.notifications-list'); | ||||
| 		var listEl = $('.notifications-list'), | ||||
| 			markAllReadEl = document.getElementById('mark-all-notifs-read'); | ||||
|  | ||||
| 		$('span.timeago').timeago(); | ||||
|  | ||||
| @@ -10,6 +11,20 @@ define(function() { | ||||
| 		listEl.on('click', 'li', function(e) { | ||||
| 			this.querySelector('a').click(); | ||||
| 		}); | ||||
|  | ||||
| 		// Mark all as read button | ||||
| 		$(markAllReadEl).click(function() { | ||||
| 			socket.emit('api:notifications.mark_all_read', {}, function() { | ||||
| 				ajaxify.go('notifications'); | ||||
| 				app.alert({ | ||||
| 					alert_id: "notifications:mark_all_read", | ||||
| 					title: "All Notifications Read", | ||||
| 					message: "Successfully marked all notifications read", | ||||
| 					type: 'success', | ||||
| 					timeout: 2500 | ||||
| 				}) | ||||
| 			}); | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	return Notifications; | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| <h2>[[notifications:title]]</h2> | ||||
|  | ||||
| <button type="button" class="btn btn-default">Mark All as Read</button> | ||||
| <button type="button" class="btn btn-default" id="mark-all-notifs-read">Mark All as Read</button> | ||||
|  | ||||
| <ul class="notifications-list"> | ||||
| <!-- BEGIN notifications --> | ||||
| 	<li data-nid="{notifications.nid}"> | ||||
| 	<li data-nid="{notifications.nid}" class="{notifications.readClass}"> | ||||
| 		<p class="timestamp"> | ||||
| 			<span class="timeago" title="{notifications.datetimeISO}"></span> | ||||
| 		</p> | ||||
|   | ||||
| @@ -3,15 +3,22 @@ var RDB = require('./redis.js'), | ||||
| 	utils = require('../public/src/utils.js'), | ||||
|  | ||||
| 	notifications = { | ||||
| 		get: function(nid, callback) { | ||||
| 			RDB.hmget('notifications:' + nid, 'text', 'score', 'path', 'datetime', 'uniqueId', function(err, notification) { | ||||
| 		get: function(nid, uid, callback) { | ||||
| 			RDB.multi() | ||||
| 				.hmget('notifications:' + nid, 'text', 'score', 'path', 'datetime', 'uniqueId') | ||||
| 				.zrank('uid:' + uid + ':notifications:read', nid) | ||||
| 				.exec(function(err, results) { | ||||
| 					var	notification = results[0] | ||||
| 						readIdx = results[1]; | ||||
|  | ||||
| 					callback({ | ||||
| 						nid: nid, | ||||
| 						text: notification[0], | ||||
| 						score: notification[1], | ||||
| 						path: notification[2], | ||||
| 						datetime: notification[3], | ||||
| 					uniqueId: notification[4] | ||||
| 						uniqueId: notification[4], | ||||
| 						read: readIdx !== null ? true : false | ||||
| 					}); | ||||
| 				}); | ||||
| 		}, | ||||
| @@ -39,7 +46,7 @@ var RDB = require('./redis.js'), | ||||
| 			var numUids = uids.length, | ||||
| 				x; | ||||
|  | ||||
| 			notifications.get(nid, function(notif_data) { | ||||
| 			notifications.get(nid, null, function(notif_data) { | ||||
| 				for (x = 0; x < numUids; x++) { | ||||
| 					if (parseInt(uids[x]) > 0) { | ||||
| 						(function(uid) { | ||||
| @@ -59,7 +66,7 @@ var RDB = require('./redis.js'), | ||||
| 					RDB.zrange('uid:' + uid + ':notifications:unread', 0, -1, function(err, nids) { | ||||
| 						if (nids && nids.length > 0) { | ||||
| 							async.each(nids, function(nid, next) { | ||||
| 								notifications.get(nid, function(nid_info) { | ||||
| 								notifications.get(nid, uid, function(nid_info) { | ||||
| 									if (nid_info.uniqueId === uniqueId) RDB.zrem('uid:' + uid + ':notifications:unread', nid); | ||||
| 									next(); | ||||
| 								}); | ||||
| @@ -73,7 +80,7 @@ var RDB = require('./redis.js'), | ||||
| 					RDB.zrange('uid:' + uid + ':notifications:read', 0, -1, function(err, nids) { | ||||
| 						if (nids && nids.length > 0) { | ||||
| 							async.each(nids, function(nid, next) { | ||||
| 								notifications.get(nid, function(nid_info) { | ||||
| 								notifications.get(nid, uid, function(nid_info) { | ||||
| 									if (nid_info.uniqueId === uniqueId) RDB.zrem('uid:' + uid + ':notifications:read', nid); | ||||
| 									next(); | ||||
| 								}); | ||||
| @@ -89,7 +96,7 @@ var RDB = require('./redis.js'), | ||||
| 		}, | ||||
| 		mark_read: function(nid, uid, callback) { | ||||
| 			if (parseInt(uid) > 0) { | ||||
| 				notifications.get(nid, function(notif_data) { | ||||
| 				notifications.get(nid, uid, function(notif_data) { | ||||
| 					RDB.zrem('uid:' + uid + ':notifications:unread', nid); | ||||
| 					RDB.zadd('uid:' + uid + ':notifications:read', notif_data.datetime, nid); | ||||
| 					if (callback) callback(); | ||||
|   | ||||
| @@ -31,7 +31,7 @@ Upgrade.upgrade = function() { | ||||
| 								async.each(keys, function(key, next) { | ||||
| 									RDB.zrange(key, 0, -1, function(err, nids) { | ||||
| 										async.each(nids, function(nid, next) { | ||||
| 											notifications.get(nid, function(notif_data) { | ||||
| 											notifications.get(nid, null, function(notif_data) { | ||||
| 												RDB.zadd(key, notif_data.datetime, nid, next); | ||||
| 											}); | ||||
| 										}, next); | ||||
|   | ||||
| @@ -902,7 +902,7 @@ var utils = require('./../public/src/utils.js'), | ||||
|  | ||||
| 						if (nids && nids.length > 0) { | ||||
| 							async.eachSeries(nids, function(nid, next) { | ||||
| 								notifications.get(nid, function(notif_data) { | ||||
| 								notifications.get(nid, uid, function(notif_data) { | ||||
| 									unread.push(notif_data); | ||||
| 									next(); | ||||
| 								}); | ||||
| @@ -924,7 +924,7 @@ var utils = require('./../public/src/utils.js'), | ||||
|  | ||||
| 						if (nids && nids.length > 0) { | ||||
| 							async.eachSeries(nids, function(nid, next) { | ||||
| 								notifications.get(nid, function(notif_data) { | ||||
| 								notifications.get(nid, uid, function(notif_data) { | ||||
| 									read.push(notif_data); | ||||
| 									next(); | ||||
| 								}); | ||||
| @@ -959,7 +959,7 @@ var utils = require('./../public/src/utils.js'), | ||||
| 					var	nids = results[0].concat(results[1]); | ||||
|  | ||||
| 					async.map(nids, function(nid, next) { | ||||
| 						notifications.get(nid, function(notif_data) { | ||||
| 						notifications.get(nid, uid, function(notif_data) { | ||||
| 							next(null, notif_data); | ||||
| 						}); | ||||
| 					}, function(err, notifs) { | ||||
| @@ -967,6 +967,7 @@ var utils = require('./../public/src/utils.js'), | ||||
| 							return parseInt(b.datetime, 10) - parseInt(a.datetime, 10); | ||||
| 						}).map(function(notif) { | ||||
| 							notif.datetimeISO = new Date(parseInt(notif.datetime, 10)).toISOString(); | ||||
| 							notif.readClass = !notif.read ? 'unread' : ''; | ||||
|  | ||||
| 							return notif; | ||||
| 						}); | ||||
| @@ -981,7 +982,7 @@ var utils = require('./../public/src/utils.js'), | ||||
| 		getUnreadByUniqueId: function(uid, uniqueId, callback) { | ||||
| 			RDB.zrange('uid:' + uid + ':notifications:unread', 0, -1, function(err, nids) { | ||||
| 				async.filter(nids, function(nid, next) { | ||||
| 					notifications.get(nid, function(notifObj) { | ||||
| 					notifications.get(nid, uid, function(notifObj) { | ||||
| 						if (notifObj.uniqueId === uniqueId) next(true); | ||||
| 						else next(false); | ||||
| 					}); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user