diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-15 18:31:30 +0200 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-15 18:31:30 +0200 |
commit | 0ed9131f3f1c851158421b39767bf94264f80b8b (patch) | |
tree | 51ee951c0c7cd6cff6a3cd1456e2987a8943edaa /js | |
parent | 7c3c70fc88b669386cca180250081be45cdfeb92 (diff) |
add simple keyboard shortcuts, implemt keep unread fix #43, implement mark as read when scrolling fix #4
Diffstat (limited to 'js')
-rw-r--r-- | js/app/controllers/itemcontroller.coffee | 1 | ||||
-rw-r--r-- | js/app/directives/scrollmarksread.coffee | 6 | ||||
-rw-r--r-- | js/app/services/businesslayer/businesslayer.coffee | 10 | ||||
-rw-r--r-- | js/app/services/businesslayer/itembusinesslayer.coffee | 6 | ||||
-rw-r--r-- | js/config/testacular_conf.js | 2 | ||||
-rw-r--r-- | js/public/app.js | 36 | ||||
-rw-r--r-- | js/tests/services/businesslayer/businesslayerSpec.coffee | 16 | ||||
-rw-r--r-- | js/tests/services/businesslayer/itembusinesslayerSpec.coffee | 18 |
8 files changed, 43 insertions, 52 deletions
diff --git a/js/app/controllers/itemcontroller.coffee b/js/app/controllers/itemcontroller.coffee index a08486d08..4fd00ec59 100644 --- a/js/app/controllers/itemcontroller.coffee +++ b/js/app/controllers/itemcontroller.coffee @@ -55,6 +55,7 @@ Language) -> @_$scope.$on 'readItem', (scope, data) => console.log data + @_itemBusinessLayer.setRead(data) diff --git a/js/app/directives/scrollmarksread.coffee b/js/app/directives/scrollmarksread.coffee index 6a0a5e085..854f17923 100644 --- a/js/app/directives/scrollmarksread.coffee +++ b/js/app/directives/scrollmarksread.coffee @@ -48,11 +48,9 @@ angular.module('News').directive 'scrollMarksRead', ['$rootScope', 'Config', for feedItem in $elems offset = $(feedItem).position().top if offset <= -50 - data = - id: parseInt($(feedItem).data('id'), 10) - feed: parseInt($(feedItem).data('feed'), 10) + id = parseInt($(feedItem).data('id'), 10) + $rootScope.$broadcast 'readItem', id - $rootScope.$broadcast 'readItem', data else break diff --git a/js/app/services/businesslayer/businesslayer.coffee b/js/app/services/businesslayer/businesslayer.coffee index 7cfbb703c..3096eb71e 100644 --- a/js/app/services/businesslayer/businesslayer.coffee +++ b/js/app/services/businesslayer/businesslayer.coffee @@ -29,13 +29,9 @@ angular.module('News').factory '_BusinessLayer', -> load: (id) -> - if @_type != @_activeFeed.getType() or id != @_activeFeed.getId() - @_itemModel.clear() - @_persistence.getItems(@_type, id, 0) - @_activeFeed.handle({id: id, type: @_type}) - else - lastModified = @_itemModel.getHighestId() - @_persistence.getItems(@_type, id, 0, null, lastModified) + @_itemModel.clear() + @_persistence.getItems(@_type, id, 0) + @_activeFeed.handle({id: id, type: @_type}) isActive: (id) -> diff --git a/js/app/services/businesslayer/itembusinesslayer.coffee b/js/app/services/businesslayer/itembusinesslayer.coffee index 294be1f40..7f8d4fba6 100644 --- a/js/app/services/businesslayer/itembusinesslayer.coffee +++ b/js/app/services/businesslayer/itembusinesslayer.coffee @@ -72,7 +72,11 @@ StarredBusinessLayer) -> setRead: (itemId) -> item = @_itemModel.getById(itemId) if angular.isDefined(item) - if not item.isRead() + + keptUnread = angular.isDefined(item.keptUnread) and + item.keptUnread + + if not (item.isRead() or keptUnread) item.setRead() @_persistence.readItem(itemId) diff --git a/js/config/testacular_conf.js b/js/config/testacular_conf.js index 8082c7434..17c654805 100644 --- a/js/config/testacular_conf.js +++ b/js/config/testacular_conf.js @@ -88,7 +88,7 @@ autoWatch = true; // - Safari (only Mac) // - PhantomJS // - IE (only Windows) -browsers = ['Firefox']; +browsers = ['Chrome']; // If browser does not capture in given timeout [ms], kill it diff --git a/js/public/app.js b/js/public/app.js index 2aa6c14ee..02fc9c32c 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -329,7 +329,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. if (markingRead) { markingRead = false; setTimeout(function() { - var $elems, data, feedItem, offset, _i, _len, _results; + var $elems, feedItem, id, offset, _i, _len, _results; markingRead = true; $elems = elm.find('.feed_item:not(.read)'); @@ -338,11 +338,8 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. feedItem = $elems[_i]; offset = $(feedItem).position().top; if (offset <= -50) { - data = { - id: parseInt($(feedItem).data('id'), 10), - feed: parseInt($(feedItem).data('feed'), 10) - }; - _results.push($rootScope.$broadcast('readItem', data)); + id = parseInt($(feedItem).data('id'), 10); + _results.push($rootScope.$broadcast('readItem', id)); } else { break; } @@ -545,7 +542,8 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. } }; this._$scope.$on('readItem', function(scope, data) { - return console.log(data); + console.log(data); + return _this._itemBusinessLayer.setRead(data); }); } @@ -698,19 +696,12 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. } BusinessLayer.prototype.load = function(id) { - var lastModified; - - if (this._type !== this._activeFeed.getType() || id !== this._activeFeed.getId()) { - this._itemModel.clear(); - this._persistence.getItems(this._type, id, 0); - return this._activeFeed.handle({ - id: id, - type: this._type - }); - } else { - lastModified = this._itemModel.getHighestId(); - return this._persistence.getItems(this._type, id, 0, null, lastModified); - } + this._itemModel.clear(); + this._persistence.getItems(this._type, id, 0); + return this._activeFeed.handle({ + id: id, + type: this._type + }); }; BusinessLayer.prototype.isActive = function(id) { @@ -1263,11 +1254,12 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. }; ItemBusinessLayer.prototype.setRead = function(itemId) { - var feed, item; + var feed, item, keptUnread; item = this._itemModel.getById(itemId); if (angular.isDefined(item)) { - if (!item.isRead()) { + keptUnread = angular.isDefined(item.keptUnread) && item.keptUnread; + if (!(item.isRead() || keptUnread)) { item.setRead(); this._persistence.readItem(itemId); feed = this._feedModel.getById(item.feedId); diff --git a/js/tests/services/businesslayer/businesslayerSpec.coffee b/js/tests/services/businesslayer/businesslayerSpec.coffee index d91124a89..e93fcedd5 100644 --- a/js/tests/services/businesslayer/businesslayerSpec.coffee +++ b/js/tests/services/businesslayer/businesslayerSpec.coffee @@ -45,9 +45,6 @@ describe 'BusinessLayer', -> it 'should reset the item cache when a different feed is being loaded', => @ItemModel.clear = jasmine.createSpy('clear') @ActiveFeed.handle({id: 0, type: @FeedType.Starred}) - @BusinessLayer.load(0) - - expect(@ItemModel.clear).not.toHaveBeenCalled() @BusinessLayer.load(2) expect(@ItemModel.clear).toHaveBeenCalled() @@ -58,19 +55,6 @@ describe 'BusinessLayer', -> - it 'should send a get latest items query when feed did not change', => - @ItemModel.add({id: 1, lastModified: 5}) - @ItemModel.add({id: 2, lastModified: 1}) - @ItemModel.add({id: 4, lastModified: 323}) - @ItemModel.add({id: 6, lastModified: 44}) - @persistence.getItems = jasmine.createSpy('latest') - @ActiveFeed.handle({id: 3, type: @FeedType.Starred}) - @BusinessLayer.load(3) - - expect(@persistence.getItems).toHaveBeenCalledWith(@FeedType.Starred, 3, - 0, null, 6) - - it 'should send a get all items query when feed changed', => @persistence.getItems = jasmine.createSpy('latest') @ActiveFeed.handle({id: 3, type: @FeedType.Feed}) diff --git a/js/tests/services/businesslayer/itembusinesslayerSpec.coffee b/js/tests/services/businesslayer/itembusinesslayerSpec.coffee index 932260747..0bc8a3188 100644 --- a/js/tests/services/businesslayer/itembusinesslayerSpec.coffee +++ b/js/tests/services/businesslayer/itembusinesslayerSpec.coffee @@ -117,6 +117,20 @@ describe 'ItemBusinessLayer', -> expect(@persistence.readItem).toHaveBeenCalledWith(2) + it 'should not set an item read if its kept unread', => + @persistence.readItem = jasmine.createSpy('read item') + + item = {id: 2, feedId: 5, guidHash: 'a3', status: 0, keptUnread: true} + @ItemModel.add(item) + item.setUnread() + + @ItemBusinessLayer.setRead(2) + + expect(item.isRead()).toBe(false) + expect(@persistence.readItem).not.toHaveBeenCalled() + + + it 'should no set an item read if its already read', => @persistence.readItem = jasmine.createSpy('read item') @@ -214,4 +228,6 @@ describe 'ItemBusinessLayer', -> @ItemBusinessLayer.setUnread(2) - expect(@item1.unreadCount).toBe(135)
\ No newline at end of file + expect(@item1.unreadCount).toBe(135) + + |