mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-04-13 09:42:01 +00:00
Move folder now backboneified.
This commit is contained in:
parent
8f3454b26b
commit
19eaa0e7c7
6 changed files with 92 additions and 37 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
},
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}, {
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
},
|
||||
|
||||
// ========================
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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' }));
|
||||
|
|
Loading…
Add table
Reference in a new issue