From c4ad789263baf0cbf40e61d6a0c0bd70ecc719fd Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Wed, 3 Apr 2013 12:37:20 -0700 Subject: [PATCH] Refactoring unread count view to merge feed and folder unread count views. Also re-centering unread counts (still need to re-center loading bar). Hiding Original tab in river view. --- media/js/newsblur/reader/reader.js | 50 ++++++----- media/js/newsblur/views/feed_title_view.js | 2 +- media/js/newsblur/views/folder_count_view.js | 89 ------------------- media/js/newsblur/views/folder_view.js | 2 +- media/js/newsblur/views/sidebar.js | 2 +- ...eed_count_view.js => unread_count_view.js} | 52 +++++------ 6 files changed, 55 insertions(+), 142 deletions(-) delete mode 100644 media/js/newsblur/views/folder_count_view.js rename media/js/newsblur/views/{feed_count_view.js => unread_count_view.js} (65%) diff --git a/media/js/newsblur/reader/reader.js b/media/js/newsblur/reader/reader.js index b202d77b6..5c3246f89 100644 --- a/media/js/newsblur/reader/reader.js +++ b/media/js/newsblur/reader/reader.js @@ -1290,6 +1290,7 @@ $original_tabs.removeClass('NB-disabled-page') .removeClass('NB-disabled') + .removeClass('NB-hidden') .removeClass('NB-exception-page'); $original_tabs.each(function() { $(this).tipsy('disable'); @@ -1312,12 +1313,37 @@ }); } else if (this.flags.river_view) { $page_tab.addClass('NB-disabled'); + $('.NB-taskbar-button.task_view_page').addClass('NB-hidden'); + $('.NB-taskbar-button.task_view_feed').addClass('NB-first'); } else if (feed && feed.get('has_exception') && feed.get('exception_type') == 'page') { if (view == 'page') { view = 'feed'; } $('.task_view_page').addClass('NB-exception-page'); } + + + var $split = $(".NB-task-layout-split"); + var $list = $(".NB-task-layout-list"); + var story_layout = NEWSBLUR.assets.preference('story_layout'); + + if (story_layout == 'list') { + $('.NB-taskbar-button.task_view_page').addClass('NB-hidden'); + $('.NB-taskbar-button.task_view_feed').addClass('NB-first'); + $('.NB-taskbar-button.task_view_story').addClass('NB-hidden'); + $('.NB-taskbar-button.task_view_text').addClass('NB-last'); + $split.removeClass('NB-active'); + $list.addClass('NB-active'); + } else if (story_layout == 'split') { + if (!this.flags.river_view) { + $('.NB-taskbar-button.task_view_page').removeClass('NB-hidden'); + $('.NB-taskbar-button.task_view_feed').removeClass('NB-first'); + } + $('.NB-taskbar-button.task_view_story').removeClass('NB-hidden'); + $('.NB-taskbar-button.task_view_text').removeClass('NB-last'); + $split.addClass('NB-active'); + $list.removeClass('NB-active'); + } if (feed_id == 'starred') { $page_tab.addClass('NB-disabled'); @@ -1333,29 +1359,11 @@ switch_story_layout: function(story_layout) { story_layout = story_layout || NEWSBLUR.assets.preference('story_layout'); - var $split = $(".NB-task-layout-split"); - var $list = $(".NB-task-layout-list"); - - if (story_layout == 'list') { - $('.NB-taskbar-button.task_view_page').addClass('NB-hidden'); - $('.NB-taskbar-button.task_view_story').addClass('NB-hidden'); - $('.NB-taskbar-button.task_view_text').addClass('NB-last'); - $('.NB-taskbar-button.task_view_feed').addClass('NB-first'); - $split.removeClass('NB-active'); - $list.addClass('NB-active'); - } else if (story_layout == 'split') { - $('.NB-taskbar-button.task_view_page').removeClass('NB-hidden'); - $('.NB-taskbar-button.task_view_story').removeClass('NB-hidden'); - $('.NB-taskbar-button.task_view_text').removeClass('NB-last'); - $('.NB-taskbar-button.task_view_feed').removeClass('NB-first'); - $split.addClass('NB-active'); - $list.removeClass('NB-active'); - } - if (story_layout == NEWSBLUR.assets.preference('story_layout')) return; NEWSBLUR.assets.preference('story_layout', story_layout); + this.set_correct_story_view_for_feed(); this.apply_resizable_layout(true); if (story_layout == 'list') { @@ -2206,7 +2214,7 @@ } if (feed) { - NEWSBLUR.app.story_unread_counter = new NEWSBLUR.Views.FeedCount({ + NEWSBLUR.app.story_unread_counter = new NEWSBLUR.Views.UnreadCount({ model: feed }).render(); } else if (folder) { @@ -2217,7 +2225,7 @@ } else { collection = folder.folder_view.collection; } - NEWSBLUR.app.story_unread_counter = new NEWSBLUR.Views.FolderCount({ + NEWSBLUR.app.story_unread_counter = new NEWSBLUR.Views.UnreadCount({ collection: collection }).render(); } diff --git a/media/js/newsblur/views/feed_title_view.js b/media/js/newsblur/views/feed_title_view.js index 08ee13b65..a371d01e0 100644 --- a/media/js/newsblur/views/feed_title_view.js +++ b/media/js/newsblur/views/feed_title_view.js @@ -163,7 +163,7 @@ NEWSBLUR.Views.FeedTitleView = Backbone.View.extend({ }, render_counts: function() { - this.counts_view = new NEWSBLUR.Views.FeedCount({model: this.model}).render(); + this.counts_view = new NEWSBLUR.Views.UnreadCount({model: this.model}).render(); this.$('.feed_counts').html(this.counts_view.el); if (this.options.type == 'story') { this.$('.NB-story-title-indicator-count').html(this.counts_view.$el.clone()); diff --git a/media/js/newsblur/views/folder_count_view.js b/media/js/newsblur/views/folder_count_view.js deleted file mode 100644 index b2684f9a2..000000000 --- a/media/js/newsblur/views/folder_count_view.js +++ /dev/null @@ -1,89 +0,0 @@ -NEWSBLUR.Views.FolderCount = Backbone.View.extend({ - - className: 'feed_counts_floater', - - initialize: function() { - _.bindAll(this, 'render'); - if (!this.options.stale) { - this.collection.bind('change:counts', this.render); - } - }, - - // ========== - // = Render = - // ========== - - render: function() { - var unread_class = ""; - var counts = this.collection.unread_counts(); - - if (counts['ps']) { - unread_class += ' unread_positive'; - } - if (counts['nt']) { - unread_class += ' unread_neutral'; - } - if (counts['ng']) { - unread_class += ' unread_negative'; - } - - this.$el.html(this.template({ - ps : counts['ps'], - nt : counts['nt'], - ng : counts['ng'], - unread_class : unread_class - })); - - return this; - }, - - template: _.template('\ -
\ - \ - <%= ps %>\ - \ - \ - <%= nt %>\ - \ - \ - <%= ng %>\ - \ -
\ - '), - - // =========== - // = Actions = - // =========== - - center: function() { - var i_width = this.$el.width(); - var o_width = NEWSBLUR.reader.$s.$story_taskbar.width(); - var left = (o_width / 2.0) - (i_width / 2.0); - var view_taskbar_width = $('.NB-taskbar-view').outerWidth(true); - var story_buttons_offset = $(".NB-taskbar-nav").position().left; - - if (i_width + 12 > (story_buttons_offset - view_taskbar_width)) { - this.$el.hide(); - } - - if (left < view_taskbar_width + 12) { - left += view_taskbar_width - left + 12; - } - - this.$el.css({'left': left}); - }, - - flash: function() { - var $floater = this.$el; - - if (!NEWSBLUR.assets.preference('animations')) return; - - _.defer(function() { - $floater.animate({'opacity': 1}, {'duration': 250, 'queue': false}); - _.delay(function() { - $floater.animate({'opacity': .2}, {'duration': 250, 'queue': false}); - }, 400); - }); - } - -}); \ No newline at end of file diff --git a/media/js/newsblur/views/folder_view.js b/media/js/newsblur/views/folder_view.js index 5a0caf30d..755d45657 100644 --- a/media/js/newsblur/views/folder_view.js +++ b/media/js/newsblur/views/folder_view.js @@ -198,7 +198,7 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({ }); } - this.folder_count = new NEWSBLUR.Views.FolderCount({ + this.folder_count = new NEWSBLUR.Views.UnreadCount({ collection: this.collection }).render(); var $counts = this.folder_count.$el; diff --git a/media/js/newsblur/views/sidebar.js b/media/js/newsblur/views/sidebar.js index a7276e1fe..4ee05af3a 100644 --- a/media/js/newsblur/views/sidebar.js +++ b/media/js/newsblur/views/sidebar.js @@ -59,7 +59,7 @@ NEWSBLUR.Views.Sidebar = Backbone.View.extend({ show_counts: function(options) { var $header = NEWSBLUR.reader.$s.$river_blurblogs_header; - var $counts = new NEWSBLUR.Views.FolderCount({ + var $counts = new NEWSBLUR.Views.UnreadCount({ collection: NEWSBLUR.assets.social_feeds }).render().$el; diff --git a/media/js/newsblur/views/feed_count_view.js b/media/js/newsblur/views/unread_count_view.js similarity index 65% rename from media/js/newsblur/views/feed_count_view.js rename to media/js/newsblur/views/unread_count_view.js index b7d7e1ce6..3ba19dc18 100644 --- a/media/js/newsblur/views/feed_count_view.js +++ b/media/js/newsblur/views/unread_count_view.js @@ -1,13 +1,17 @@ -NEWSBLUR.Views.FeedCount = Backbone.View.extend({ +NEWSBLUR.Views.UnreadCount = Backbone.View.extend({ className: 'feed_counts_floater', initialize: function() { _.bindAll(this, 'render'); if (!this.options.stale) { - this.model.bind('change:ps', this.render); - this.model.bind('change:nt', this.render); - this.model.bind('change:ng', this.render); + if (this.model) { + this.model.bind('change:ps', this.render); + this.model.bind('change:nt', this.render); + this.model.bind('change:ng', this.render); + } else if (this.collection) { + this.collection.bind('change:counts', this.render); + } } }, @@ -17,7 +21,12 @@ NEWSBLUR.Views.FeedCount = Backbone.View.extend({ render: function() { var unread_class = ""; - var counts = this.model.unread_counts(); + var counts; + if (this.model) { + counts = this.model.unread_counts(); + } else if (this.collection) { + counts = this.collection.unread_counts(); + } if (counts['ps']) { unread_class += ' unread_positive'; @@ -58,19 +67,18 @@ NEWSBLUR.Views.FeedCount = Backbone.View.extend({ // =========== center: function() { - var i_width = this.$el.width(); - var o_width = NEWSBLUR.reader.$s.$story_taskbar.width(); - var left = (o_width / 2.0) - (i_width / 2.0); - var view_taskbar_width = $('.NB-taskbar-view').outerWidth(true); - var story_buttons_offset = $(".NB-taskbar-layout").position().left; - - if (i_width + 12 > (story_buttons_offset - view_taskbar_width)) { + var count_width = this.$el.width(); + var left_buttons_offset = $('.NB-taskbar-view').outerWidth(true); + var right_buttons_offset = $(".NB-taskbar-layout").position().left; + var usable_space = right_buttons_offset - left_buttons_offset; + var left = (usable_space / 2) - (count_width / 2) + left_buttons_offset; + + // console.log(["Unread count offset", count_width, left, left_buttons_offset, right_buttons_offset]); + + if (count_width + 12 > usable_space) { this.$el.hide(); } - if (left < view_taskbar_width + 12) { - left += view_taskbar_width - left + 12; - } this.$el.css({'left': left}); }, @@ -85,20 +93,6 @@ NEWSBLUR.Views.FeedCount = Backbone.View.extend({ $floater.animate({'opacity': .2}, {'duration': 250, 'queue': false}); }, 400); }); - }, - - fall: function() { - var $floater = this.$el; - - _.delay(function() { - $floater.animate({ - 'top': $('#story_taskbar').height() - }, { - 'duration': 500, - 'queue': false, - 'easing': 'easeOutQuint' - }); - }, 500); } }); \ No newline at end of file