From c38de1bcaf356d85be88a573f7cdabbc1aaa52ae Mon Sep 17 00:00:00 2001 From: Max Goodman Date: Mon, 20 May 2013 14:31:06 -0700 Subject: [PATCH] Add support for batch adding subreddits to a multi. --- r2/r2/public/static/js/multi.js | 36 ++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/r2/r2/public/static/js/multi.js b/r2/r2/public/static/js/multi.js index 1b48ef480..60f8a5138 100644 --- a/r2/r2/public/static/js/multi.js +++ b/r2/r2/public/static/js/multi.js @@ -93,8 +93,26 @@ r.multi.MultiReddit = Backbone.Model.extend({ return res }, - addSubreddit: function(name, options) { - this.subreddits.create({name: name}, options) + addSubreddit: function(names, options) { + names = r.utils.tup(names) + if (names.length == 1) { + this.subreddits.create({name: names[0]}, options) + } else { + // batch add by syncing the entire multi + var subreddits = this.subreddits, + tmp = subreddits.clone() + tmp.add(_.map(names, function(srName) { + return {name: srName} + })) + + // temporarily swap out the subreddits collection so we can + // serialize and send the new data without updating the UI + // this is similar to how the "wait" option is handled in + // Backbone.Model.set + this.subreddits = tmp + this.save(null, options) + this.subreddits = subreddits + } }, removeSubreddit: function(name, options) { @@ -261,25 +279,19 @@ r.multi.MultiDetails = Backbone.View.extend({ delete this.itemViews[sr.id] }, - addAll: function() { - this.itemViews = {} - this.$('.subreddits').empty() - this.model.subreddits.each(this.addOne, this) - }, - addSubreddit: function(ev) { ev.preventDefault() var nameEl = this.$('.add-sr .sr-name'), - srName = $.trim(nameEl.val()) - srName = srName.split('r/').pop() - if (!srName) { + srNames = nameEl.val() + srNames = _.compact(srNames.split(/[\/+,\s]+(?:r\/)?/)) + if (!srNames.length) { return } nameEl.val('') this.$('.add-error').css('visibility', 'hidden') - this.model.addSubreddit(srName, { + this.model.addSubreddit(srNames, { wait: true, success: _.bind(function() { this.$('.add-error').hide()