From 3f817f29379c34ce47d2c26ab38977b9c50aa08a Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Wed, 23 May 2012 12:10:35 -0700 Subject: [PATCH] Deleting feeds. --- media/js/newsblur/common/assetmodel.js | 9 ++---- media/js/newsblur/models/feeds.js | 32 ++++++++++++++++--- .../js/newsblur/models/social_subscription.js | 8 ++++- media/js/newsblur/reader/reader.js | 27 +++------------- media/js/newsblur/views/feed_list_view.js | 12 +++++-- media/js/newsblur/views/feed_view.js | 11 ++++++- media/js/newsblur/views/folder_view.js | 11 +++++-- 7 files changed, 71 insertions(+), 39 deletions(-) diff --git a/media/js/newsblur/common/assetmodel.js b/media/js/newsblur/common/assetmodel.js index 8cd2f2f63..d3ab043f1 100644 --- a/media/js/newsblur/common/assetmodel.js +++ b/media/js/newsblur/common/assetmodel.js @@ -300,8 +300,6 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ data['include_favicons'] = true; } - if (this.feeds.length) this.feeds.remove(); - this.feeds.fetch({ success: pre_callback, error: error_callback @@ -703,8 +701,7 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ }); }, - delete_feed: function(feed_id, in_folder, callback, duplicate_feed) { - if (!duplicate_feed) this.feeds.get(feed_id).destroy(); + delete_feed: function(feed_id, in_folder, callback) { if (NEWSBLUR.Globals.is_authenticated) { this.make_request('/reader/delete_feed', { 'feed_id': feed_id, @@ -782,7 +779,7 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ move_feed_to_folder: function(feed_id, in_folder, to_folder, callback) { var pre_callback = _.bind(function(data) { - this.folders = data.folders; + this.folders.reset(data.folders); return callback(); }, this); @@ -795,7 +792,7 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ move_folder_to_folder: function(folder_name, in_folder, to_folder, callback) { var pre_callback = _.bind(function(data) { - this.folders = data.folders; + this.folders.reset(data.folders); return callback(); }, this); diff --git a/media/js/newsblur/models/feeds.js b/media/js/newsblur/models/feeds.js index e908769a0..6a80d3e70 100644 --- a/media/js/newsblur/models/feeds.js +++ b/media/js/newsblur/models/feeds.js @@ -1,7 +1,7 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({ initialize: function() { - _.bindAll(this, 'on_change'); + _.bindAll(this, 'on_change', 'delete_feed'); this.bind('change', this.on_change); this.views = []; }, @@ -10,6 +10,25 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({ // NEWSBLUR.log(['Feed Change', this.changedAttributes(), this.previousAttributes()]); }, + delete_feed: function(options) { + options = options || {}; + var view = options.view || this.get_view(); + console.log(["Delete Feed", this, view, view.options.folder_title]); + + NEWSBLUR.assets.delete_feed(this.id, view.options.folder_title); + view.delete_feed(); + }, + + get_view: function($feed) { + return _.detect(this.views, function(view) { + if ($feed) { + return view.el == $feed.get(0); + } else { + return true; + } + }); + }, + is_social: function() { return false; }, @@ -37,9 +56,16 @@ NEWSBLUR.Collections.Feeds = Backbone.Collection.extend({ }, parse: function(data) { + _.each(data.feeds, function(feed) { + feed.selected = false; + }); return data.feeds; }, + selected: function() { + return this.detect(function(feed) { return feed.get('selected'); }); + }, + has_chosen_feeds: function() { return this.any(function(feed) { return feed.get('active'); @@ -47,9 +73,7 @@ NEWSBLUR.Collections.Feeds = Backbone.Collection.extend({ }, deselect: function() { - this.chain().select(function(feed) { - return feed.get('selected'); - }).each(function(feed){ + this.each(function(feed){ feed.set('selected', false); }); } diff --git a/media/js/newsblur/models/social_subscription.js b/media/js/newsblur/models/social_subscription.js index 54e9cb67c..6d1de8d7b 100644 --- a/media/js/newsblur/models/social_subscription.js +++ b/media/js/newsblur/models/social_subscription.js @@ -5,14 +5,20 @@ NEWSBLUR.Models.SocialSubscription = Backbone.Model.extend({ this.set('page_url', '/social/page/' + this.get('user_id')); } - _.bindAll(this, 'on_change'); + _.bindAll(this, 'on_change', 'on_remove'); this.bind('change', this.on_change); + this.bind('remove', this.on_remove); this.views = []; }, on_change: function() { NEWSBLUR.log(['Social Feed Change', this.changedAttributes(), this.previousAttributes()]); }, + + on_remove: function() { + console.log(["Remove Feed", this, this.views]); + _.each(this.views, function(view) { view.remove(); }); + }, is_social: function() { return true; diff --git a/media/js/newsblur/reader/reader.js b/media/js/newsblur/reader/reader.js index c71217e48..e81838286 100644 --- a/media/js/newsblur/reader/reader.js +++ b/media/js/newsblur/reader/reader.js @@ -5265,18 +5265,12 @@ $confirm.slideUp(500); }, - manage_menu_delete_feed: function(feed, $feed) { + manage_menu_delete_feed: function(feed_id, $feed) { var self = this; - var feed_id = feed || this.active_feed; - $feed = $feed || this.find_feed_in_feed_list(feed_id); - - var in_folder = $feed.parents('li.folder').eq(0).find('.folder_title_text').eq(0).text(); - var duplicate_feed = this.find_feed_in_feed_list(feed_id).length > 1; - - this.delete_feed(feed_id, $feed); - this.model.delete_feed(feed_id, in_folder, function() { - self.delete_feed(feed_id, $feed); - }, duplicate_feed); + feed_id = feed_id || this.active_feed; + var feed = this.model.get_feed(feed_id); + var feed_view = feed.get_view($feed); + feed.delete_feed({view: feed_view}); }, show_confirm_unfollow_menu_item: function() { @@ -5326,17 +5320,6 @@ }); }, - delete_feed: function(feed_id, $feed) { - var self = this; - $feed = $feed || this.find_feed_in_feed_list(feed_id); - $feed.slideUp(500); - - if (this.active_feed == parseInt($feed.data('id'), 10)) { - this.reset_feed(); - this.show_splash_page(); - } - }, - delete_folder: function(folder_name, $folder) { var self = this; var feeds = this.get_feed_ids_in_folder($folder); diff --git a/media/js/newsblur/views/feed_list_view.js b/media/js/newsblur/views/feed_list_view.js index 8d757fa4f..b2523f75a 100644 --- a/media/js/newsblur/views/feed_list_view.js +++ b/media/js/newsblur/views/feed_list_view.js @@ -67,7 +67,7 @@ NEWSBLUR.Views.FeedList = Backbone.View.extend({ } _.defer(_.bind(function() { NEWSBLUR.reader.open_dialog_after_feeds_loaded(); - + this.selected(); if (NEWSBLUR.reader.socket) { NEWSBLUR.reader.send_socket_active_feeds(); } else { @@ -137,7 +137,14 @@ NEWSBLUR.Views.FeedList = Backbone.View.extend({ selected: function(model, value, options) { var feed_view; - + options = options || {}; + + if (!model) { + model = NEWSBLUR.assets.feeds.selected(); + console.log(["selected models", model]); + } + if (!model) return; + if (options.$feed) { feed_view = _.detect(model.views, function(view) { return view.el == options.$feed[0]; @@ -153,6 +160,7 @@ NEWSBLUR.Views.FeedList = Backbone.View.extend({ scroll_to_show_selected_feed: function(feed_view) { var $feed_lists = this.$s.$feed_lists; var is_feed_visible = $feed_lists.isScrollVisible(feed_view.$el); + console.log(["scroll_to_show_selected_feed", feed_view, feed_view.$el, is_feed_visible]); if (!is_feed_visible) { var container_offset = $feed_lists.position().top; var scroll = feed_view.$el.position().top; diff --git a/media/js/newsblur/views/feed_view.js b/media/js/newsblur/views/feed_view.js index 9a1d90953..b805bbafe 100644 --- a/media/js/newsblur/views/feed_view.js +++ b/media/js/newsblur/views/feed_view.js @@ -14,7 +14,7 @@ NEWSBLUR.Views.Feed = Backbone.View.extend({ }, initialize: function() { - _.bindAll(this, 'render', 'changed'); + _.bindAll(this, 'render', 'changed', 'delete_feed'); this.model.bind('change', this.changed); if (this.model.is_social() && !this.model.get('feed_title')) { @@ -205,6 +205,15 @@ NEWSBLUR.Views.Feed = Backbone.View.extend({ toplevel: this.options.depth == 0 }); return false; + }, + + delete_feed: function() { + this.$el.slideUp(500); + + if (this.model.get('selected')) { + NEWSBLUR.reader.reset_feed(); + NEWSBLUR.reader.show_splash_page(); + } } }); \ No newline at end of file diff --git a/media/js/newsblur/views/folder_view.js b/media/js/newsblur/views/folder_view.js index 6a943b192..0f9689ede 100644 --- a/media/js/newsblur/views/folder_view.js +++ b/media/js/newsblur/views/folder_view.js @@ -14,10 +14,15 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({ render: function() { var depth = this.options.depth; this.options.collapsed = _.contains(NEWSBLUR.Preferences.collapsed_folders, this.options.title); - var $feeds = this.collection.map(function(item) { + var $feeds = this.collection.map(_.bind(function(item) { var $model; if (item.is_feed()) { - var feed_view = new NEWSBLUR.Views.Feed({model: item.feed, type: 'feed', depth: depth}).render(); + var feed_view = new NEWSBLUR.Views.Feed({ + model: item.feed, + type: 'feed', + depth: depth, + folder_title: this.options.title + }).render(); item.feed.views.push(feed_view); return feed_view.el; } else { @@ -27,7 +32,7 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({ title: item.get('folder_title') }).render().el; } - }); + }, this)); $feeds.push(this.make('div', { 'class': 'feed NB-empty' })); var $folder = this.render_folder();