mirror of
https://github.com/viq/NewsBlur.git
synced 2025-11-01 09:09:16 +00:00
Hiding folders with no unread stories in Unread/Focus mode.
This commit is contained in:
parent
54ecb3305c
commit
ef772ff0d3
6 changed files with 100 additions and 7 deletions
|
|
@ -784,6 +784,7 @@ body.NB-theme-serif #story_pane .NB-feed-story-content {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.NB-feedlist.NB-selector-active .NB-folder-collapsed .folder,
|
.NB-feedlist.NB-selector-active .NB-folder-collapsed .folder,
|
||||||
|
.NB-feedlist.NB-selector-active .NB-hidden,
|
||||||
.NB-socialfeeds-folder.NB-selector-active {
|
.NB-socialfeeds-folder.NB-selector-active {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({
|
||||||
this.bind('change:ps', this.update_folder_counts);
|
this.bind('change:ps', this.update_folder_counts);
|
||||||
this.bind('change:nt', this.update_folder_counts);
|
this.bind('change:nt', this.update_folder_counts);
|
||||||
this.bind('change:ng', this.update_folder_counts);
|
this.bind('change:ng', this.update_folder_counts);
|
||||||
|
this.bind('change:selected', this.update_folder_visibility);
|
||||||
this.views = [];
|
this.views = [];
|
||||||
this.folders = [];
|
this.folders = [];
|
||||||
},
|
},
|
||||||
|
|
@ -19,9 +20,12 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({
|
||||||
update_folder_counts: function() {
|
update_folder_counts: function() {
|
||||||
_.each(this.folders, function(folder) {
|
_.each(this.folders, function(folder) {
|
||||||
folder.trigger('change:counts');
|
folder.trigger('change:counts');
|
||||||
if (folder.parent_folder) {
|
});
|
||||||
folder.parent_folder.trigger('change:counts');
|
},
|
||||||
}
|
|
||||||
|
update_folder_visibility: function() {
|
||||||
|
_.each(this.folders, function(folder) {
|
||||||
|
folder.trigger('change:feed_selected');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -106,6 +110,23 @@ NEWSBLUR.Models.Feed = Backbone.Model.extend({
|
||||||
nt: this.get('nt'),
|
nt: this.get('nt'),
|
||||||
ng: this.get('ng')
|
ng: this.get('ng')
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
has_unreads: function(options) {
|
||||||
|
options = options || {};
|
||||||
|
var unread_view = NEWSBLUR.assets.preference('unread_view');
|
||||||
|
|
||||||
|
if (options.include_selected && this.get('selected')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unread_view <= -1) {
|
||||||
|
return !!(this.get('ng') || this.get('nt') || this.get('ps'));
|
||||||
|
} else if (unread_view == 0) {
|
||||||
|
return !!(this.get('nt') || this.get('ps'));
|
||||||
|
} else if (unread_view > 0) {
|
||||||
|
return !!(this.get('ps'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,16 @@ NEWSBLUR.Models.FeedOrFolder = Backbone.Model.extend({
|
||||||
var feed_ids_in_folder = this.feed_ids_in_folder();
|
var feed_ids_in_folder = this.feed_ids_in_folder();
|
||||||
NEWSBLUR.assets.delete_folder(folder_title, in_folder, feed_ids_in_folder);
|
NEWSBLUR.assets.delete_folder(folder_title, in_folder, feed_ids_in_folder);
|
||||||
this.trigger('delete');
|
this.trigger('delete');
|
||||||
|
},
|
||||||
|
|
||||||
|
has_unreads: function(options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if (options.include_selected && this.get('selected')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.folders.has_unreads(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -95,9 +105,12 @@ NEWSBLUR.Collections.Folders = Backbone.Collection.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function(models, options) {
|
initialize: function(models, options) {
|
||||||
|
_.bindAll(this, 'propagate_feed_selected');
|
||||||
this.options = options || {};
|
this.options = options || {};
|
||||||
this.parent_folder = options && options.parent_folder;
|
this.parent_folder = options && options.parent_folder;
|
||||||
this.comparator = NEWSBLUR.Collections.Folders.comparator;
|
this.comparator = NEWSBLUR.Collections.Folders.comparator;
|
||||||
|
this.bind('change:feed_selected', this.propagate_feed_selected);
|
||||||
|
this.bind('change:counts', this.propagate_change_counts);
|
||||||
},
|
},
|
||||||
|
|
||||||
model: NEWSBLUR.Models.FeedOrFolder,
|
model: NEWSBLUR.Models.FeedOrFolder,
|
||||||
|
|
@ -199,9 +212,43 @@ NEWSBLUR.Collections.Folders = Backbone.Collection.extend({
|
||||||
ng: 0
|
ng: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
return counts;
|
this.counts = counts;
|
||||||
}
|
|
||||||
|
|
||||||
|
return counts;
|
||||||
|
},
|
||||||
|
|
||||||
|
has_unreads: function(options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
return this.any(function(item) {
|
||||||
|
if (item.is_feed()) {
|
||||||
|
return item.feed.has_unreads(options);
|
||||||
|
} else if (item.is_folder()) {
|
||||||
|
return item.has_unreads(options);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
propagate_feed_selected: function() {
|
||||||
|
if (this.parent_folder) {
|
||||||
|
this.parent_folder.trigger('change:feed_selected');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
propagate_change_counts: function() {
|
||||||
|
if (this.parent_folder) {
|
||||||
|
this.parent_folder.trigger('change:counts');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
update_all_folder_visibility: function() {
|
||||||
|
this.each(function(item) {
|
||||||
|
if (item.is_folder()) {
|
||||||
|
item.folders.trigger('change:counts');
|
||||||
|
item.folders.update_all_folder_visibility();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}, {
|
}, {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3544,6 +3544,7 @@
|
||||||
}
|
}
|
||||||
this.show_story_titles_above_intelligence_level({'animate': true, 'follow': true});
|
this.show_story_titles_above_intelligence_level({'animate': true, 'follow': true});
|
||||||
NEWSBLUR.app.sidebar_header.toggle_hide_read_preference();
|
NEWSBLUR.app.sidebar_header.toggle_hide_read_preference();
|
||||||
|
NEWSBLUR.assets.folders.update_all_folder_visibility();
|
||||||
NEWSBLUR.app.feed_list.scroll_to_show_selected_feed();
|
NEWSBLUR.app.feed_list.scroll_to_show_selected_feed();
|
||||||
NEWSBLUR.app.feed_list.scroll_to_show_selected_folder();
|
NEWSBLUR.app.feed_list.scroll_to_show_selected_folder();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,10 @@ NEWSBLUR.Views.FeedTitleView = Backbone.View.extend({
|
||||||
select_feed: function() {
|
select_feed: function() {
|
||||||
this.$el.toggleClass('selected', this.model.get('selected'));
|
this.$el.toggleClass('selected', this.model.get('selected'));
|
||||||
this.$el.toggleClass('NB-selected', this.model.get('selected'));
|
this.$el.toggleClass('NB-selected', this.model.get('selected'));
|
||||||
|
|
||||||
|
_.each(this.folders, function(folder) {
|
||||||
|
folder.view.update_hidden();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
flash_changes: function() {
|
flash_changes: function() {
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
_.bindAll(this, 'update_title', 'update_selected', 'delete_folder', 'check_collapsed');
|
_.bindAll(this, 'update_title', 'update_selected', 'delete_folder', 'check_collapsed',
|
||||||
|
'update_hidden');
|
||||||
|
|
||||||
this.options.folder_title = this.model && this.model.get('folder_title');
|
this.options.folder_title = this.model && this.model.get('folder_title');
|
||||||
|
|
||||||
|
|
@ -31,6 +32,9 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
|
||||||
// Root folder does not have a model.
|
// Root folder does not have a model.
|
||||||
this.model.bind('change:folder_title', this.update_title);
|
this.model.bind('change:folder_title', this.update_title);
|
||||||
this.model.bind('change:selected', this.update_selected);
|
this.model.bind('change:selected', this.update_selected);
|
||||||
|
this.model.bind('change:selected', this.update_hidden);
|
||||||
|
this.collection.bind('change:feed_selected', this.update_hidden);
|
||||||
|
this.collection.bind('change:counts', this.update_hidden);
|
||||||
this.model.bind('delete', this.delete_folder);
|
this.model.bind('delete', this.delete_folder);
|
||||||
if (!this.options.feedbar) {
|
if (!this.options.feedbar) {
|
||||||
this.model.folder_view = this;
|
this.model.folder_view = this;
|
||||||
|
|
@ -85,6 +89,7 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
this.check_collapsed({skip_animation: true});
|
this.check_collapsed({skip_animation: true});
|
||||||
|
this.update_hidden();
|
||||||
this.$('.folder_title').eq(0).bind('contextmenu', _.bind(this.show_manage_menu, this));
|
this.$('.folder_title').eq(0).bind('contextmenu', _.bind(this.show_manage_menu, this));
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
|
@ -140,6 +145,17 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
|
||||||
this.$el.toggleClass('NB-selected', this.model.get('selected'));
|
this.$el.toggleClass('NB-selected', this.model.get('selected'));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
update_hidden: function() {
|
||||||
|
if (!this.model) return;
|
||||||
|
|
||||||
|
var has_unreads = this.model.has_unreads({include_selected: true});
|
||||||
|
if (has_unreads || !NEWSBLUR.assets.preference('hide_read_feeds')) {
|
||||||
|
this.$el.removeClass('NB-hidden');
|
||||||
|
} else {
|
||||||
|
this.$el.addClass('NB-hidden');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// ===========
|
// ===========
|
||||||
// = Actions =
|
// = Actions =
|
||||||
// ===========
|
// ===========
|
||||||
|
|
@ -174,7 +190,10 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var $counts = new NEWSBLUR.Views.FolderCount({collection: this.collection}).render().$el;
|
this.folder_count = new NEWSBLUR.Views.FolderCount({
|
||||||
|
collection: this.collection
|
||||||
|
}).render();
|
||||||
|
var $counts = this.folder_count.$el;
|
||||||
if (this.options.feedbar) {
|
if (this.options.feedbar) {
|
||||||
this.$('.NB-story-title-indicator-count').html($counts.clone());
|
this.$('.NB-story-title-indicator-count').html($counts.clone());
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue