From a49aee9d3dbada3f0a8f32b5945678b7e456f18e Mon Sep 17 00:00:00 2001 From: chronize Date: Thu, 31 Jul 2014 15:20:41 -0400 Subject: [PATCH 1/4] Merge master --- package.json | 45 +++++++++++++++++++++++--------- public/src/forum/admin/groups.js | 27 ++++++++++++++++--- src/groups.js | 8 +++++- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 1f29c41593..ecc7ae2750 100644 --- a/package.json +++ b/package.json @@ -16,24 +16,33 @@ }, "dependencies": { "async": "~0.9.0", + "base64-url": "^1.0.0", "bcryptjs": "~2.0.1", + "body-parser": "^1.0.1", + "colors": "^0.6.2", + "compression": "^1.0.1", "connect-flash": "^0.1.1", + "connect-multiparty": "^1.0.1", + "cookie": "^0.1.2", + "cookie-parser": "^1.0.1", + "cookie-signature": "^1.0.4", "cron": "~1.0.4", + "csurf": "^1.1.0", + "cycle": "^1.0.3", "daemon": "~1.1.0", + "debug": "^1.0.4", + "depd": "^0.4.4", "express": "4.6.1", - "cookie-parser": "^1.0.1", - "body-parser": "^1.0.1", - "serve-favicon": "^2.0.1", "express-session": "^1.0.2", - "csurf": "^1.1.0", - "compression": "^1.0.1", - "connect-multiparty": "^1.0.1", - "morgan": "^1.0.0", + "finalhandler": "^0.1.0", "gm": "1.16.0", "gravatar": "1.0.6", "less": "~1.7.3", "mkdirp": "~0.5.0", - "nconf": "~0.6.7", + "mocha": "^1.21.3", + "morgan": "^1.0.0", + "ms": "^0.6.2", + "nconf": "^0.6.9", "nodebb-plugin-dbsearch": "0.0.13", "nodebb-plugin-markdown": "~0.5.0", "nodebb-plugin-mentions": "~0.5.0", @@ -41,24 +50,34 @@ "nodebb-theme-lavender": "~0.0.74", "nodebb-theme-vanilla": "~0.0.111", "nodebb-widget-essentials": "~0.1.0", - "npm": "^1.4.6", + "npm": "^1.4.21", "passport": "~0.2.0", "passport-local": "1.0.0", + "path-to-regexp": "^0.2.3", + "pkginfo": "^0.3.0", "prompt": "~0.2.11", + "read": "^1.0.5", + "reds": "^0.2.4", "request": "~2.38.0", + "revalidator": "^0.2.0", "rimraf": "~2.2.6", "rss": "~0.3.2", "semver": "~2.3.1", + "serve-favicon": "^2.0.1", "sitemap": "~0.7.3", "socket.io": "~0.9.16", + "socket.io-client": "^1.0.6", "socket.io-wildcard": "~0.1.1", + "stack-trace": "0.0.9", "string": "~1.9.0", - "uglify-js": "git+https://github.com/julianlam/UglifyJS2.git", + "templates.js": "0.0.8", + "uglify-js": "^2.4.15", "underscore": "~1.6.0", + "utile": "^0.2.1", + "utils-merge": "^1.0.0", "validator": "~3.16.1", - "winston": "~0.7.2", - "xregexp": "~2.0.0", - "templates.js": "0.0.8" + "winston": "^0.7.3", + "xregexp": "~2.0.0" }, "devDependencies": { "mocha": "~1.13.0" diff --git a/public/src/forum/admin/groups.js b/public/src/forum/admin/groups.js index 5e4f0c34d1..34a1b59ed0 100644 --- a/public/src/forum/admin/groups.js +++ b/public/src/forum/admin/groups.js @@ -78,14 +78,33 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { break; case 'members': socket.emit('admin.groups.get', groupName, function(err, groupObj) { - var formEl = detailsModal.find('form'); + var formEl = detailsModal.find('form').keypress(function(e) { + switch(e.keyCode) { + case 13: + detailsModalSave.click(); + break; + default: + break; + } + }), + groupLabelPreview = formEl.find('#group-label-preview'), + changeGroupUserTitle = formEl.find('#change-group-user-title'), + changeGroupLabelColor = formEl.find('#change-group-label-color'); formEl.find('#change-group-name').val(groupObj.name).prop('readonly', groupObj.system); formEl.find('#change-group-desc').val(groupObj.description); - formEl.find('#change-group-user-title').val(groupObj.userTitle); + changeGroupUserTitle.val(groupObj.userTitle).keydown(function() { + setTimeout(function() { + groupLabelPreview.text(changeGroupUserTitle.val()); + }, 0); + }); formEl.find('#group-icon').attr('class', 'fa fa-2x ' + groupObj.icon).attr('value', groupObj.icon); - formEl.find('#change-group-label-color').val(groupObj.labelColor); - formEl.find('#group-label-preview').css('background', groupObj.labelColor || '#000000').text(groupObj.userTitle); + changeGroupLabelColor.val(groupObj.labelColor).keydown(function() { + setTimeout(function() { + groupLabelPreview.css('background', changeGroupLabelColor.val() || '#000000'); + }, 0); + }); + groupLabelPreview.css('background', groupObj.labelColor || '#000000').text(groupObj.userTitle); groupMembersEl.empty(); if (groupObj.members.length > 0) { diff --git a/src/groups.js b/src/groups.js index 8164ae457c..5af818c5ec 100644 --- a/src/groups.js +++ b/src/groups.js @@ -295,7 +295,13 @@ db.rename('group:' + oldName, 'group:' + newName, next); }, function(next) { - db.rename('group:' + oldName + ':members', 'group:' + newName + ':members', next); + Groups.exists('group:' + oldName + ':members', function(err, exists) { + if (exists) { + db.rename('group:' + oldName + ':members', 'group:' + newName + ':members', next); + } else { + next(); + } + }); }, function(next) { renameGroupMember('groups', oldName, newName, next); From 4e4187417e388312b8b5a39386665707fffce435 Mon Sep 17 00:00:00 2001 From: chronize Date: Thu, 31 Jul 2014 16:25:48 -0400 Subject: [PATCH 2/4] optimize ACP groups screen, jQuery caching --- public/src/forum/admin/groups.js | 167 +++++++++++++++++-------------- src/groups.js | 5 - 2 files changed, 94 insertions(+), 78 deletions(-) diff --git a/public/src/forum/admin/groups.js b/public/src/forum/admin/groups.js index 34a1b59ed0..ee39ccf975 100644 --- a/public/src/forum/admin/groups.js +++ b/public/src/forum/admin/groups.js @@ -7,28 +7,53 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { Groups.init = function() { var yourid = ajaxify.variables.get('yourid'), createModal = $('#create-modal'), - createNameEl = $('#create-group-name'), - detailsModal = $('#group-details-modal'), - detailsSearch = detailsModal.find('#group-details-search'), - searchResults = detailsModal.find('#group-details-search-results'), - groupMembersEl = detailsModal.find('ul.current_members'), - detailsModalSave = detailsModal.find('.btn-primary'), - searchDelay, - listEl = $('#groups-list'); - - $('#create').on('click', function() { + createGroupName = $('#create-group-name'), + create = $('#create'), + createModalGo = $('#create-modal-go'), + createGroupDesc = $('#create-group-desc'), + createModalError = $('#create-modal-error'), + groupDetailsModal = $('#group-details-modal'), + groupDetailsSearch = $('#group-details-search'), + groupDetailsSearchResults = $('#group-details-search-results'), + groupMembersEl = $('ul.current_members'), + formEl = groupDetailsModal.find('form'), + detailsModalSave = $('#details-modal-save'), + groupsList = $('#groups-list'), + groupIcon = $('#group-icon'), + changeGroupIcon = $('#change-group-icon'), + changeGroupName = $('#change-group-name'), + changeGroupDesc = $('#change-group-desc'), + changeGroupUserTitle = $('#change-group-user-title'), + changeGroupLabelColor = $('#change-group-label-color'), + groupIcon = $('#group-icon'), + groupLabelPreview = $('#group-label-preview'), + searchDelay; + + // Tooltips + $('#groups-list .members li').tooltip(); + + createModal.on('keypress', function(e) { + switch(e.keyCode) { + case 13: + createModalGo.click(); + break; + default: + break; + } + }); + + create.on('click', function() { createModal.modal('show'); setTimeout(function() { - createNameEl.focus(); + createGroupName.focus(); }, 250); }); - $('#create-modal-go').on('click', function() { + createModalGo.on('click', function() { var submitObj = { - name: createNameEl.val(), - description: $('#create-group-desc').val() + name: createGroupName.val(), + description: createGroupDesc.val() }, - errorEl = $('#create-modal-error'), errorText; socket.emit('admin.groups.create', submitObj, function(err, data) { @@ -45,10 +70,10 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { break; } - errorEl.html(errorText).removeClass('hide'); + createModalError.html(errorText).removeClass('hide'); } else { - errorEl.addClass('hide'); - createNameEl.val(''); + createModalError.addClass('hide'); + createGroupName.val(''); createModal.on('hidden.bs.modal', function() { ajaxify.go('admin/groups'); }); @@ -57,7 +82,29 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { }); }); - listEl.on('click', 'button[data-action]', function() { + formEl.keypress(function(e) { + switch(e.keyCode) { + case 13: + detailsModalSave.click(); + break; + default: + break; + } + }); + + changeGroupUserTitle.keydown(function() { + setTimeout(function() { + groupLabelPreview.text(changeGroupUserTitle.val()); + }, 0); + }); + + changeGroupLabelColor.keydown(function() { + setTimeout(function() { + groupLabelPreview.css('background', changeGroupLabelColor.val() || '#000000'); + }, 0); + }); + + groupsList.on('click', 'button[data-action]', function() { var el = $(this), action = el.attr('data-action'), groupName = el.parents('li[data-groupname]').attr('data-groupname'); @@ -78,32 +125,12 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { break; case 'members': socket.emit('admin.groups.get', groupName, function(err, groupObj) { - var formEl = detailsModal.find('form').keypress(function(e) { - switch(e.keyCode) { - case 13: - detailsModalSave.click(); - break; - default: - break; - } - }), - groupLabelPreview = formEl.find('#group-label-preview'), - changeGroupUserTitle = formEl.find('#change-group-user-title'), - changeGroupLabelColor = formEl.find('#change-group-label-color'); - - formEl.find('#change-group-name').val(groupObj.name).prop('readonly', groupObj.system); - formEl.find('#change-group-desc').val(groupObj.description); - changeGroupUserTitle.val(groupObj.userTitle).keydown(function() { - setTimeout(function() { - groupLabelPreview.text(changeGroupUserTitle.val()); - }, 0); - }); - formEl.find('#group-icon').attr('class', 'fa fa-2x ' + groupObj.icon).attr('value', groupObj.icon); - changeGroupLabelColor.val(groupObj.labelColor).keydown(function() { - setTimeout(function() { - groupLabelPreview.css('background', changeGroupLabelColor.val() || '#000000'); - }, 0); - }); + + changeGroupName.val(groupObj.name).prop('readonly', groupObj.system); + changeGroupDesc.val(groupObj.description); + changeGroupUserTitle.val(groupObj.userTitle); + groupIcon.attr('class', 'fa fa-2x ' + groupObj.icon).attr('value', groupObj.icon); + changeGroupLabelColor.val(groupObj.labelColor); groupLabelPreview.css('background', groupObj.labelColor || '#000000').text(groupObj.userTitle); groupMembersEl.empty(); @@ -117,23 +144,21 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { } } - detailsModal.attr('data-groupname', groupObj.name); - detailsModal.modal('show'); + groupDetailsModal.attr('data-groupname', groupObj.name); + groupDetailsModal.modal('show'); }); break; } }); - detailsSearch.on('keyup', function() { - var searchEl = this; + groupDetailsSearch.on('keyup', function() { if (searchDelay) { clearTimeout(searchDelay); } searchDelay = setTimeout(function() { - var searchText = searchEl.value, - resultsEl = $('#group-details-search-results'), + var searchText = groupDetailsSearch.val(), foundUser; socket.emit('admin.user.search', searchText, function(err, results) { @@ -143,7 +168,7 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { numResults = 4; } - resultsEl.empty(); + groupDetailsSearchResults.empty(); for (x = 0; x < numResults; x++) { foundUser = $('
  • '); foundUser @@ -151,19 +176,19 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { .append($('').attr('src', results.users[x].picture)) .append($('').html(results.users[x].username)); - resultsEl.append(foundUser); + groupDetailsSearchResults.append(foundUser); } } else { - resultsEl.html('
  • No Users Found
  • '); + groupDetailsSearchResults.html('
  • No Users Found
  • '); } }); }, 200); }); - searchResults.on('click', 'li[data-uid]', function() { + groupDetailsSearchResults.on('click', 'li[data-uid]', function() { var userLabel = $(this), uid = parseInt(userLabel.attr('data-uid'), 10), - groupName = detailsModal.attr('data-groupname'), + groupName = groupDetailsModal.attr('data-groupname'), members = []; groupMembersEl.find('li[data-uid]').each(function() { @@ -184,7 +209,7 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { groupMembersEl.on('click', 'li[data-uid]', function() { var uid = $(this).attr('data-uid'), - groupName = detailsModal.attr('data-groupname'); + groupName = groupDetailsModal.attr('data-groupname'); socket.emit('admin.groups.get', groupName, function(err, groupObj){ if (!err){ @@ -204,38 +229,34 @@ define('forum/admin/groups', ['forum/admin/iconSelect'], function(iconSelect) { }); }); - $('#change-group-icon').on('click', function() { - iconSelect.init($('#group-icon')); + changeGroupIcon.on('click', function() { + iconSelect.init(groupIcon); }); - admin.enableColorPicker($('#change-group-label-color'), function(hsb, hex) { - $('#group-label-preview').css('background-color', '#' + hex); + admin.enableColorPicker(changeGroupLabelColor, function(hsb, hex) { + groupLabelPreview.css('background-color', '#' + hex); }); detailsModalSave.on('click', function() { - var formEl = detailsModal.find('form'); - socket.emit('admin.groups.update', { - groupName: detailsModal.attr('data-groupname'), + groupName: groupDetailsModal.attr('data-groupname'), values: { - name: formEl.find('#change-group-name').val(), - userTitle: formEl.find('#change-group-user-title').val(), - description: formEl.find('#change-group-desc').val(), - icon: formEl.find('#group-icon').attr('value'), - labelColor: formEl.find('#change-group-label-color').val() + name: changeGroupName.val(), + userTitle: changeGroupUserTitle.val(), + description: changeGroupDesc.val(), + icon: groupIcon.attr('value'), + labelColor: changeGroupLabelColor.val() } }, function(err) { if (!err) { - detailsModal.on('hidden.bs.modal', function() { + groupDetailsModal.on('hidden.bs.modal', function() { ajaxify.go('admin/groups'); }); - detailsModal.modal('hide'); + groupDetailsModal.modal('hide'); } }); }); - // Tooltips - $('#groups-list .members li').tooltip(); }; return Groups; diff --git a/src/groups.js b/src/groups.js index 35ca5a6ccf..af60b9b161 100644 --- a/src/groups.js +++ b/src/groups.js @@ -302,16 +302,11 @@ }, function(next) { Groups.exists('group:' + oldName + ':members', function(err, exists) { -<<<<<<< HEAD - if (exists) { - db.rename('group:' + oldName + ':members', 'group:' + newName + ':members', next); -======= if (err) { return next(err); } if (exists) { db.rename('group:' + oldName + ':members', 'group:' + newName + ':members', next); ->>>>>>> aa4089e6d78b6412bae1274bfa0c20bbb754c054 } else { next(); } From c4567144408dd04883b21634b0b16ed8ce96b253 Mon Sep 17 00:00:00 2001 From: chronize Date: Thu, 31 Jul 2014 18:16:27 -0400 Subject: [PATCH 3/4] revert package.json --- package.json | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index ecc7ae2750..1f29c41593 100644 --- a/package.json +++ b/package.json @@ -16,33 +16,24 @@ }, "dependencies": { "async": "~0.9.0", - "base64-url": "^1.0.0", "bcryptjs": "~2.0.1", - "body-parser": "^1.0.1", - "colors": "^0.6.2", - "compression": "^1.0.1", "connect-flash": "^0.1.1", - "connect-multiparty": "^1.0.1", - "cookie": "^0.1.2", - "cookie-parser": "^1.0.1", - "cookie-signature": "^1.0.4", "cron": "~1.0.4", - "csurf": "^1.1.0", - "cycle": "^1.0.3", "daemon": "~1.1.0", - "debug": "^1.0.4", - "depd": "^0.4.4", "express": "4.6.1", + "cookie-parser": "^1.0.1", + "body-parser": "^1.0.1", + "serve-favicon": "^2.0.1", "express-session": "^1.0.2", - "finalhandler": "^0.1.0", + "csurf": "^1.1.0", + "compression": "^1.0.1", + "connect-multiparty": "^1.0.1", + "morgan": "^1.0.0", "gm": "1.16.0", "gravatar": "1.0.6", "less": "~1.7.3", "mkdirp": "~0.5.0", - "mocha": "^1.21.3", - "morgan": "^1.0.0", - "ms": "^0.6.2", - "nconf": "^0.6.9", + "nconf": "~0.6.7", "nodebb-plugin-dbsearch": "0.0.13", "nodebb-plugin-markdown": "~0.5.0", "nodebb-plugin-mentions": "~0.5.0", @@ -50,34 +41,24 @@ "nodebb-theme-lavender": "~0.0.74", "nodebb-theme-vanilla": "~0.0.111", "nodebb-widget-essentials": "~0.1.0", - "npm": "^1.4.21", + "npm": "^1.4.6", "passport": "~0.2.0", "passport-local": "1.0.0", - "path-to-regexp": "^0.2.3", - "pkginfo": "^0.3.0", "prompt": "~0.2.11", - "read": "^1.0.5", - "reds": "^0.2.4", "request": "~2.38.0", - "revalidator": "^0.2.0", "rimraf": "~2.2.6", "rss": "~0.3.2", "semver": "~2.3.1", - "serve-favicon": "^2.0.1", "sitemap": "~0.7.3", "socket.io": "~0.9.16", - "socket.io-client": "^1.0.6", "socket.io-wildcard": "~0.1.1", - "stack-trace": "0.0.9", "string": "~1.9.0", - "templates.js": "0.0.8", - "uglify-js": "^2.4.15", + "uglify-js": "git+https://github.com/julianlam/UglifyJS2.git", "underscore": "~1.6.0", - "utile": "^0.2.1", - "utils-merge": "^1.0.0", "validator": "~3.16.1", - "winston": "^0.7.3", - "xregexp": "~2.0.0" + "winston": "~0.7.2", + "xregexp": "~2.0.0", + "templates.js": "0.0.8" }, "devDependencies": { "mocha": "~1.13.0" From efe938b392b3115f48f624a13c44e0ac16e77290 Mon Sep 17 00:00:00 2001 From: chronize Date: Sat, 2 Aug 2014 15:03:15 -0400 Subject: [PATCH 4/4] fix upgrade.js according to CodeClimate recommendation, remove BOM --- src/upgrade.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/upgrade.js b/src/upgrade.js index db91530ada..815baab82f 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; var db = require('./database'), async = require('async'), @@ -75,7 +75,7 @@ Upgrade.upgrade = function(callback) { { "widget": "html", "data": { - "html": Meta.config['motd'] || "Welcome to NodeBB, if you are an administrator of this forum visit the Themes ACP to modify and add widgets." + "html": Meta.config.motd || "Welcome to NodeBB, if you are an administrator of this forum visit the Themes ACP to modify and add widgets." } } ]), function(err) { @@ -171,7 +171,7 @@ Upgrade.upgrade = function(callback) { { "widget": "html", "data": { - "html": Meta.config['motd'] || "Welcome to NodeBB, if you are an administrator of this forum visit the Themes ACP to modify and add widgets.", + "html": Meta.config.motd || "Welcome to NodeBB, if you are an administrator of this forum visit the Themes ACP to modify and add widgets.", "container": container, "title": "MOTD" }