From 56dc29a747ec4a754e4665ccd50fe22614b75af3 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 27 Jun 2013 14:38:45 -0400 Subject: [PATCH] closes #44 --- public/src/forum/users.js | 55 ++++++++++++++++++++++++++++++++++++ public/templates/config.json | 5 ++++ public/templates/users.tpl | 52 ++++++++++++++++++++++------------ src/routes/user.js | 44 +++++++++++++++++++++++++---- 4 files changed, 133 insertions(+), 23 deletions(-) diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 36c34e58d7..87621b5d9d 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -1,6 +1,61 @@ (function() { $(document).ready(function() { + var timeoutId = 0; + + var url = window.location.href, + parts = url.split('/'), + active = parts[parts.length-1]; + + jQuery('.nav-pills li').removeClass('active'); + jQuery('.nav-pills li a').each(function() { + if (this.getAttribute('href').match(active)) { + jQuery(this.parentNode).addClass('active'); + return false; + } + }); + + jQuery('#search-user').on('keyup', function () { + if(timeoutId !== 0) { + clearTimeout(timeoutId); + timeoutId = 0; + } + + timeoutId = setTimeout(function() { + var username = $('#search-user').val(); + + jQuery('.icon-spinner').removeClass('none'); + socket.emit('api:admin.user.search', username); + console.log('sent'); + }, 250); + }); + + socket.removeAllListeners('api:admin.user.search'); + + socket.on('api:admin.user.search', function(data) { + console.log('derp'); + var html = templates.prepare(templates['users'].blocks['users']).parse({ + users: data + }), + userListEl = document.querySelector('.users'); + + userListEl.innerHTML = html; + jQuery('.icon-spinner').addClass('none'); + + if(data && data.length === 0) { + $('#user-notfound-notify').html('User not found!') + .show() + .addClass('label-important') + .removeClass('label-success'); + } + else { + $('#user-notfound-notify').html(data.length + ' user'+(data.length>1?'s':'') + ' found!') + .show() + .addClass('label-success') + .removeClass('label-important'); + } + + }); $('.reputation').each(function(index, element) { $(element).html(app.addCommas($(element).html())); diff --git a/public/templates/config.json b/public/templates/config.json index b3038f4324..9f998567ca 100644 --- a/public/templates/config.json +++ b/public/templates/config.json @@ -16,10 +16,15 @@ "install/mail/?": "install/mail", "install/social/?": "install/social", "install/privileges/?": "install/privileges", + "users/sort-posts": "users", + "users/latest": "users", + "users/sort-reputation": "users", + "users/search": "users", "users[^]*edit": "accountedit", "users[^]*following": "following", "users[^]*followers": "followers", "users/[^]*": "account", + "recent": "category", "popular": "category", "active": "category" diff --git a/public/templates/users.tpl b/public/templates/users.tpl index 3cb0de603d..4f88ac193e 100644 --- a/public/templates/users.tpl +++ b/public/templates/users.tpl @@ -1,23 +1,39 @@ -

Users

- -
- - - -
- {users.username} -
-
- {users.reputation} - -
-
- {users.postcount} - -
+ + + + + - + +
\ No newline at end of file diff --git a/src/routes/user.js b/src/routes/user.js index c6c34bbcb6..58a97547e5 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -24,9 +24,7 @@ var user = require('./../user.js'), }); app.get('/users', function(req, res) { - user.getUserList(function(data) { - res.send(app.build_header(res) + app.create_route("users", "users") + templates['footer']); - }); + res.send(app.build_header(res) + app.create_route("users", "users") + templates['footer']); }); app.get('/users/:userslug', function(req, res) { @@ -35,6 +33,13 @@ var user = require('./../user.js'), res.send("User doesn't exist!"); return; } + console.log('derp'); + console.log(req.params.userslug); + + if(req.params.userslug === "sort-posts" || req.params.userslug === "sort-reputation" || req.params.userslug === "latest" || req.params.userslug === "search") { + res.send(app.build_header(res) + app.create_route("users/"+req.params.userslug, "users") + templates['footer']); + return; + } user.get_uid_by_userslug(req.params.userslug, function(uid) { if(!uid) { @@ -240,9 +245,38 @@ var user = require('./../user.js'), var callerUID = req.user?req.user.uid : 0; if (!req.params.section && !req.params.userslug) { - user.getUserList(function(data) { - res.json({users:data}); + data = data.sort(function(a, b) { + return b.joindate - a.joindate; + }); + res.json({search_display: 'none', users:data}); + }); + } + else if (req.params.userslug == 'search') { + res.json({search_display: 'block', users: []}); + } + else if(req.params.userslug === "sort-posts") { + user.getUserList(function(data) { + data = data.sort(function(a, b) { + return b.postcount - a.postcount; + }); + res.json({search_display: 'none', users:data}); + }); + } + else if(req.params.userslug === "sort-reputation") { + user.getUserList(function(data) { + data = data.sort(function(a, b) { + return b.reputation - a.reputation; + }); + res.json({search_display: 'none', users:data}); + }); + } + else if(req.params.userslug === "latest") { + user.getUserList(function(data) { + data = data.sort(function(a, b) { + return b.joindate - a.joindate; + }); + res.json({search_display: 'none', users:data}); }); } else if(String(req.params.section).toLowerCase() === 'following') {