NEWSBLUR.Views.Folder = Backbone.View.extend({ className: 'folder', tagName: 'li', options: { depth: 0, collapsed: false, title: '', root: false }, events: { "contextmenu" : "show_manage_menu", "click .NB-feedlist-manage-icon" : "show_manage_menu", "click" : "open", "mouseenter" : "add_hover_inverse", "mouseleave" : "remove_hover_inverse" }, initialize: function() { _.bindAll(this, 'update_title', 'update_selected', 'delete_folder'); if (this.model) { // Root folder does not have a model. this.model.bind('change:folder_title', this.update_title); this.model.bind('change:selected', this.update_selected); this.model.bind('delete', this.delete_folder); } }, render: function() { var depth = this.options.depth; this.options.collapsed = _.contains(NEWSBLUR.Preferences.collapsed_folders, this.options.title); 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, folder_title: this.options.title }).render(); item.feed.views.push(feed_view); return feed_view.el; } else { var folder_view = new NEWSBLUR.Views.Folder({ model: item, collection: item.folders, depth: depth + 1, title: item.get('folder_title') }).render(); item.folder_views.push(folder_view); return folder_view.el; } }, this)); $feeds.push(this.make('div', { 'class': 'feed NB-empty' })); var $folder = this.render_folder(); $(this.el).html($folder); this.$('.folder').append($feeds); return this; }, render_folder: function($feeds) { var $folder = _.template('\ <% if (!root) { %>\