Move folder now backboneified.

This commit is contained in:
Samuel Clay 2012-05-23 20:10:28 -07:00
parent 8f3454b26b
commit 19eaa0e7c7
6 changed files with 92 additions and 37 deletions

View file

@ -275,7 +275,7 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({
var pre_callback = function(feeds, subscriptions) {
self.flags['favicons_fetching'] = self.feeds.any(function(feed) { return feed.get('favicons_fetching'); });
self.folders.reset(subscriptions.folders);
self.folders.reset(_.compact(subscriptions.folders));
self.starred_count = subscriptions.starred_count;
self.social_feeds.reset(subscriptions.social_feeds);
self.user_profile.set(subscriptions.social_profile);

View file

@ -13,9 +13,9 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({
delete_feed: function(options) {
options = options || {};
var view = options.view || this.get_view();
console.log(["Delete Feed", this, view, view.options.folder_title]);
console.log(["Delete Feed", this, view, view.collection.options.title]);
NEWSBLUR.assets.delete_feed(this.id, view.options.folder_title);
NEWSBLUR.assets.delete_feed(this.id, view.collection.options.title);
view.delete_feed();
},

View file

@ -9,8 +9,9 @@ NEWSBLUR.Models.FeedOrFolder = Backbone.Model.extend({
var children = model[title];
this.set('is_folder', true);
this.set('folder_title', title);
this.folder_views = [];
this.folders = new NEWSBLUR.Collections.Folders([], {title: title});
this.folders.reset(children);
this.folders.reset(_.compact(children));
}
},
@ -20,6 +21,39 @@ NEWSBLUR.Models.FeedOrFolder = Backbone.Model.extend({
is_folder: function() {
return this.get('is_folder', false);
},
get_view: function($folder) {
var view = _.detect(this.folder_views, function(view) {
if ($folder) {
return view.el == $folder.get(0);
}
});
if (!view && this.folders.length) {
view = this.folders.get_view($folder);
}
return view;
},
move_to_folder: function(to_folder, options) {
options = options || {};
var view = options.view || this.get_view();
var in_folder = this.collection.options.title;
var folder_title = this.get('folder_title');
if (in_folder == to_folder) return false;
NEWSBLUR.assets.move_folder_to_folder(folder_title, in_folder, to_folder, function() {
_.delay(function() {
NEWSBLUR.reader.$s.$feed_list.css('opacity', 1).animate({'opacity': 0}, {
'duration': 100,
'complete': function() {
NEWSBLUR.app.feed_list.make_feeds();
}
});
}, 250);
});
return true;
}
});
@ -30,11 +64,38 @@ NEWSBLUR.Collections.Folders = Backbone.Collection.extend({
title: ''
},
initialize: function() {
initialize: function(models, options) {
this.options = options || {};
this.comparator = NEWSBLUR.Collections.Folders.comparator;
},
model: NEWSBLUR.Models.FeedOrFolder
model: NEWSBLUR.Models.FeedOrFolder,
get_view: function($folder) {
var view;
this.any(function(item) {
if (item.is_folder()) {
view = item.get_view($folder);
return view;
}
});
if (view) {
return view;
}
},
child_folder_names: function() {
var names = [];
this.each(function(item) {
if (item.is_folder()) {
names.push(item.get('folder_title'));
_.each(item.folders.child_folder_names(), function(name) {
names.push(name);
});
}
});
return names;
}
}, {

View file

@ -5262,9 +5262,14 @@
var $confirm = $('.NB-menu-manage-feed-move-confirm,.NB-menu-manage-folder-move-confirm');
var $position = $('.NB-menu-manage-confirm-position', $confirm);
var $select = $('select', $confirm);
var feed = this.model.get_feed(feed_id);
var feed_view = feed.get_view($feed);
var in_folder = feed_view.options.folder_title;
if (_.isNumber(feed_id)) {
var feed = this.model.get_feed(feed_id);
var feed_view = feed.get_view($feed);
var in_folder = feed_view.options.folder_title;
} else {
folder_view = NEWSBLUR.assets.folders.get_view($feed);
var in_folder = folder_view.collection.options.title;
}
$move.addClass('NB-menu-manage-feed-move-cancel');
$('.NB-menu-manage-title', $move).text('Cancel move');
@ -5320,18 +5325,12 @@
},
manage_menu_move_folder: function(folder, $folder) {
var self = this;
var in_folder = '';
var $parent = $folder.parents('li.folder').eq(0);
var to_folder = $('.NB-menu-manage-folder-move-confirm select').val();
var folder_name = $folder.find('.folder_title_text').eq(0).text();
var child_folders = $folder.find('.folder_title_text').map(function() {
return $(this).text();
}).get();
if ($parent.length) {
in_folder = $parent.find('.folder_title_text').eq(0).text();
}
var self = this;
var to_folder = $('.NB-menu-manage-folder-move-confirm select').val();
var folder_view = NEWSBLUR.assets.folders.get_view($folder);
var in_folder = folder_view.collection.options.title;
var folder_name = folder_view.options.title;
var child_folders = folder_view.collection.child_folder_names();
if (to_folder == in_folder ||
to_folder == folder_name ||
@ -5339,20 +5338,13 @@
return this.hide_confirm_move_menu_item();
}
this.model.move_folder_to_folder(folder, in_folder, to_folder, _.bind(function() {
var moved = folder_view.model.move_to_folder(to_folder, {view: folder_view});
this.hide_confirm_move_menu_item(moved);
if (moved) {
_.delay(_.bind(function() {
this.$s.$feed_list.css('opacity', 1).animate({'opacity': 0}, {
'duration': 100,
'complete': _.bind(function() {
NEWSBLUR.app.feed_list.make_feeds();
}, this)
});
}, this), 250);
this.hide_manage_menu('folder', $parent, true);
}, this));
this.hide_confirm_move_menu_item(true);
this.hide_manage_menu('folder', $folder, true);
}, this), 500);
}
},
// ========================

View file

@ -142,7 +142,6 @@ NEWSBLUR.Views.FeedList = Backbone.View.extend({
if (!model) {
model = NEWSBLUR.assets.feeds.selected() || NEWSBLUR.assets.social_feeds.selected();
console.log(["selected models", model]);
}
if (!model || !model.get('selected')) return;

View file

@ -34,11 +34,14 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
item.feed.views.push(feed_view);
return feed_view.el;
} else {
return new NEWSBLUR.Views.Folder({
var folder_view = new NEWSBLUR.Views.Folder({
model: item,
collection: item.folders,
depth: depth + 1,
title: item.get('folder_title')
}).render().el;
}).render();
item.folder_views.push(folder_view);
return folder_view.el;
}
}, this));
$feeds.push(this.make('div', { 'class': 'feed NB-empty' }));