2012-05-17 20:50:08 -07:00
|
|
|
NEWSBLUR.Views.Folder = Backbone.View.extend({
|
|
|
|
|
2012-05-18 16:59:39 -07:00
|
|
|
className: 'folder',
|
2012-05-17 20:50:08 -07:00
|
|
|
|
2012-05-18 16:59:39 -07:00
|
|
|
tagName: 'li',
|
|
|
|
|
|
|
|
options: {
|
|
|
|
depth: 0,
|
|
|
|
collapsed: false,
|
|
|
|
title: '',
|
|
|
|
root: false
|
2012-05-17 20:50:08 -07:00
|
|
|
},
|
|
|
|
|
2012-05-23 16:02:32 -07:00
|
|
|
events: {
|
|
|
|
"contextmenu" : "show_manage_menu",
|
|
|
|
"click .NB-feedlist-manage-icon" : "show_manage_menu",
|
|
|
|
"click" : "open",
|
|
|
|
"mouseenter" : "add_hover_inverse",
|
|
|
|
"mouseleave" : "remove_hover_inverse"
|
|
|
|
},
|
|
|
|
|
2012-05-17 20:50:08 -07:00
|
|
|
render: function() {
|
2012-05-18 16:59:39 -07:00
|
|
|
var depth = this.options.depth;
|
|
|
|
this.options.collapsed = _.contains(NEWSBLUR.Preferences.collapsed_folders, this.options.title);
|
2012-05-23 12:10:35 -07:00
|
|
|
var $feeds = this.collection.map(_.bind(function(item) {
|
2012-05-17 20:50:08 -07:00
|
|
|
var $model;
|
2012-05-18 16:59:39 -07:00
|
|
|
if (item.is_feed()) {
|
2012-05-23 12:10:35 -07:00
|
|
|
var feed_view = new NEWSBLUR.Views.Feed({
|
|
|
|
model: item.feed,
|
|
|
|
type: 'feed',
|
|
|
|
depth: depth,
|
|
|
|
folder_title: this.options.title
|
|
|
|
}).render();
|
2012-05-23 10:02:30 -07:00
|
|
|
item.feed.views.push(feed_view);
|
|
|
|
return feed_view.el;
|
2012-05-17 20:50:08 -07:00
|
|
|
} else {
|
2012-05-23 20:10:28 -07:00
|
|
|
var folder_view = new NEWSBLUR.Views.Folder({
|
|
|
|
model: item,
|
2012-05-18 16:59:39 -07:00
|
|
|
collection: item.folders,
|
|
|
|
depth: depth + 1,
|
|
|
|
title: item.get('folder_title')
|
2012-05-23 20:10:28 -07:00
|
|
|
}).render();
|
|
|
|
item.folder_views.push(folder_view);
|
|
|
|
return folder_view.el;
|
2012-05-17 20:50:08 -07:00
|
|
|
}
|
2012-05-23 12:10:35 -07:00
|
|
|
}, this));
|
2012-05-18 16:59:39 -07:00
|
|
|
$feeds.push(this.make('div', { 'class': 'feed NB-empty' }));
|
|
|
|
|
|
|
|
var $folder = this.render_folder();
|
|
|
|
$(this.el).html($folder);
|
|
|
|
this.$('.folder').append($feeds);
|
|
|
|
|
2012-05-17 20:50:08 -07:00
|
|
|
return this;
|
2012-05-18 16:59:39 -07:00
|
|
|
},
|
|
|
|
|
|
|
|
render_folder: function($feeds) {
|
|
|
|
var $folder = _.template('\
|
|
|
|
<% if (!root) { %>\
|
2012-05-23 16:02:32 -07:00
|
|
|
<div class="folder_title <% if (depth <= 1) { %>NB-toplevel<% } %>">\
|
2012-05-18 16:59:39 -07:00
|
|
|
<div class="NB-folder-icon"></div>\
|
|
|
|
<div class="NB-feedlist-collapse-icon" title="<% if (is_collapsed) { %>Expand Folder<% } else {%>Collapse Folder<% } %>"></div>\
|
|
|
|
<div class="NB-feedlist-manage-icon"></div>\
|
|
|
|
<span class="folder_title_text"><%= folder_title %></span>\
|
|
|
|
</div>\
|
|
|
|
<% } %>\
|
|
|
|
<ul class="folder <% if (root) { %>NB-root<% } %>" <% if (is_collapsed) { %>style="display: none"<% } %>>\
|
|
|
|
</ul>\
|
|
|
|
', {
|
|
|
|
depth : this.options.depth,
|
|
|
|
folder_title : this.options.title,
|
|
|
|
is_collapsed : this.options.collapsed,
|
|
|
|
root : this.options.root
|
|
|
|
});
|
|
|
|
|
|
|
|
return $folder;
|
2012-05-23 16:02:32 -07:00
|
|
|
},
|
|
|
|
|
|
|
|
// ==========
|
|
|
|
// = Events =
|
|
|
|
// ==========
|
|
|
|
|
|
|
|
open: function(e) {
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
show_manage_menu: function(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
// console.log(["showing manage menu", this.model.is_social() ? 'socialfeed' : 'feed', $(this.el), this]);
|
|
|
|
NEWSBLUR.reader.show_manage_menu('folder', this.$el, {
|
|
|
|
toplevel: this.options.depth == 0
|
|
|
|
});
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
|
|
|
|
add_hover_inverse: function() {
|
|
|
|
if (NEWSBLUR.app.feed_list.is_sorting()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.$el.offset().top > $(window).height() - 314) {
|
|
|
|
this.$el.addClass('NB-hover-inverse');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
remove_hover_inverse: function() {
|
|
|
|
this.$el.removeClass('NB-hover-inverse');
|
2012-05-17 20:50:08 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
});
|