From cde765b17d9a07117a92a1587e185d3d88c7a0e2 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 26 Jun 2013 15:19:18 -0400 Subject: [PATCH] remove socket listeners in admin/users/search --- public/src/forum/admin/users.js | 188 ++++++++++++++++++------------- public/templates/admin/index.tpl | 26 +---- src/user.js | 5 + 3 files changed, 114 insertions(+), 105 deletions(-) diff --git a/public/src/forum/admin/users.js b/public/src/forum/admin/users.js index 7451f883af..37204dfbec 100644 --- a/public/src/forum/admin/users.js +++ b/public/src/forum/admin/users.js @@ -1,84 +1,82 @@ - - -function initUsers() { - - - function isUserAdmin(element) { - var parent = $(element).parents('.users-box'); - return (parent.attr('data-admin') !== "0"); - } - - function getUID(element) { - var parent = $(element).parents('.users-box'); - return parent.attr('data-uid'); - } - - jQuery('.admin-btn').each(function(index, element) { - var adminBtn = $(element); - var isAdmin = isUserAdmin(adminBtn); - - if(isAdmin) - adminBtn.addClass('btn-success'); - else - adminBtn.removeClass('btn-success'); - - }); - - jQuery('.delete-btn').each(function(index, element) { - var deleteBtn = $(element); - var isAdmin = isUserAdmin(deleteBtn); - - if(isAdmin) - deleteBtn.addClass('disabled'); - else - deleteBtn.show(); - }); - - jQuery('.admin-btn').on('click', function() { - var adminBtn = $(this); - var isAdmin = isUserAdmin(adminBtn); - var parent = adminBtn.parents('.users-box'); - var uid = getUID(adminBtn); - - if(isAdmin) { - socket.emit('api:admin.user.removeAdmin', uid); - adminBtn.removeClass('btn-success'); - parent.find('.delete-btn').removeClass('disabled'); - parent.attr('data-admin', 0); - } - else { - bootbox.confirm('Do you really want to make "' + parent.attr('data-username') +'" an admin?', function(confirm) { - if(confirm) { - socket.emit('api:admin.user.makeAdmin', uid); - adminBtn.addClass('btn-success'); - parent.find('.delete-btn').addClass('disabled'); - parent.attr('data-admin', 1); - } - }); - } - - return false; - }); - - jQuery('.delete-btn').on('click', function() { - var deleteBtn = $(this); - var isAdmin = isUserAdmin(deleteBtn); - var parent = deleteBtn.parents('.users-box'); - var uid = getUID(deleteBtn); - - if(!isAdmin) { - bootbox.confirm('Do you really want to delete "' + parent.attr('data-username') +'"?', function(confirm) { - socket.emit('api:admin.user.deleteUser', uid); - }); - } - - return false; - }); -} - - (function() { + + function initUsers() { + + function isUserAdmin(element) { + var parent = $(element).parents('.users-box'); + return (parent.attr('data-admin') !== "0"); + } + + function getUID(element) { + var parent = $(element).parents('.users-box'); + return parent.attr('data-uid'); + } + + jQuery('.admin-btn').each(function(index, element) { + var adminBtn = $(element); + var isAdmin = isUserAdmin(adminBtn); + + if(isAdmin) + adminBtn.addClass('btn-success'); + else + adminBtn.removeClass('btn-success'); + + }); + + jQuery('.delete-btn').each(function(index, element) { + var deleteBtn = $(element); + var isAdmin = isUserAdmin(deleteBtn); + + if(isAdmin) + deleteBtn.addClass('disabled'); + else + deleteBtn.show(); + }); + + jQuery('.admin-btn').on('click', function() { + var adminBtn = $(this); + var isAdmin = isUserAdmin(adminBtn); + var parent = adminBtn.parents('.users-box'); + var uid = getUID(adminBtn); + + if(isAdmin) { + socket.emit('api:admin.user.removeAdmin', uid); + adminBtn.removeClass('btn-success'); + parent.find('.delete-btn').removeClass('disabled'); + parent.attr('data-admin', 0); + } + else { + bootbox.confirm('Do you really want to make "' + parent.attr('data-username') +'" an admin?', function(confirm) { + if(confirm) { + socket.emit('api:admin.user.makeAdmin', uid); + adminBtn.addClass('btn-success'); + parent.find('.delete-btn').addClass('disabled'); + parent.attr('data-admin', 1); + } + }); + } + + return false; + }); + + jQuery('.delete-btn').on('click', function() { + var deleteBtn = $(this); + var isAdmin = isUserAdmin(deleteBtn); + var parent = deleteBtn.parents('.users-box'); + var uid = getUID(deleteBtn); + + if(!isAdmin) { + bootbox.confirm('Do you really want to delete "' + parent.attr('data-username') +'"?', function(confirm) { + socket.emit('api:admin.user.deleteUser', uid); + }); + } + + return false; + }); + } + + jQuery('document').ready(function() { var yourid = templates.get('yourid'); @@ -103,13 +101,43 @@ function initUsers() { } timeoutId = setTimeout(function() { + var username = $('#search-user').val(); + jQuery('.icon-spinner').removeClass('none'); - socket.emit('api:admin.user.search', $('#search-user').val()); + socket.emit('api:admin.user.search', username); + }, 250); }); initUsers(); + socket.removeAllListeners('api:admin.user.search'); + + socket.on('api:admin.user.search', function(data) { + + var html = templates.prepare(templates['admin/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'); + } + + initUsers(); + }); }); diff --git a/public/templates/admin/index.tpl b/public/templates/admin/index.tpl index c33b5bda4a..788ae1746b 100644 --- a/public/templates/admin/index.tpl +++ b/public/templates/admin/index.tpl @@ -42,30 +42,6 @@ app.enter_room('admin'); socket.emit('api:get_all_rooms'); - socket.on('api:admin.user.search', function(data) { - console.log('move this into user.js but it should execute only once'); - var html = templates.prepare(templates['admin/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'); - } - - user.initUsers(); - }); + \ No newline at end of file diff --git a/src/user.js b/src/user.js index 8a89fa604f..ae5862e2d3 100644 --- a/src/user.js +++ b/src/user.js @@ -254,6 +254,11 @@ var utils = require('./../public/src/utils.js'), } User.search = function(username, callback) { + if(!username) { + callback([]); + return; + } + RDB.keys('username:*'+ username + '*:uid', function(err, keys) { if(err === null) { if(keys && keys.length) {