diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-29 22:58:30 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-29 22:58:30 +0200 |
commit | cba949fb0771c832326fc7886cced2bdc37e7536 (patch) | |
tree | 9e1a335a83a6006f645c801b762db7525e4c6c59 /js | |
parent | b91ef01fdbf14c6a5d58e5c471dbb1fc9d17cdfb (diff) |
order by pubdate
Diffstat (limited to 'js')
-rw-r--r-- | js/build/app.js | 63 | ||||
-rw-r--r-- | js/controller/ContentController.js | 36 | ||||
-rw-r--r-- | js/service/FeedResource.js | 4 | ||||
-rw-r--r-- | js/service/ItemResource.js | 44 | ||||
-rw-r--r-- | js/tests/unit/controller/ContentControllerSpec.js | 122 | ||||
-rw-r--r-- | js/tests/unit/service/ItemResourceSpec.js | 73 |
6 files changed, 200 insertions, 142 deletions
diff --git a/js/build/app.js b/js/build/app.js index e0472f32c..3e0e5624e 100644 --- a/js/build/app.js +++ b/js/build/app.js @@ -189,19 +189,23 @@ var $__build_47_app__ = function () { return ItemResource.getAll(); }; this.toggleStar = function (itemId) { - console.log(itemId); + ItemResource.toggleStar(itemId); }; this.markRead = function (itemId) { - console.log(itemId); + ItemResource.markItemRead(itemId); + var item = ItemResource.get(itemId); + FeedResource.markItemOfFeedRead(item.feedId); }; this.getFeed = function (feedId) { - console.log(feedId); + return FeedResource.getById(feedId); }; - this.keepUnread = function (itemId) { - console.log(itemId); - }; - this.isContentView = function () { - console.log('tbd'); + this.toggleKeepUnread = function (itemId) { + var item = ItemResource.get(itemId); + if (!item.unread) { + FeedResource.markItemOfFeedUnread(item.feedId); + ItemResource.markItemRead(itemId, false); + } + item.keepUnread = !item.keepUnread; }; this.orderBy = function () { if (SettingsResource.get('oldestFirst')) { @@ -210,9 +214,18 @@ var $__build_47_app__ = function () { return 'id'; } }; + this.isCompactView = function () { + return SettingsResource.get('compact'); + }; this.getRelativeDate = function (timestamp) { console.log(timestamp); }; + this.autoPage = function () { + console.log('hi'); + }; + this.scrollRead = function (itemIds) { + console.log(itemIds); + }; } ]); app.controller('NavigationController', [ @@ -422,6 +435,9 @@ var $__build_47_app__ = function () { return this.values.filter(function (v) { return v.folderId === folderId; }); + }, + getById: function (feedId) { + return this.ids[$traceurRuntime.toProperty(feedId)]; } }, {}, Resource); return new FeedResource($http, BASE_URL); @@ -457,21 +473,9 @@ var $__build_47_app__ = function () { BASE_URL ]); this.starredCount = 0; - this.highestId = 0; - this.lowestId = 0; }; var $ItemResource = ItemResource; $traceurRuntime.createClass(ItemResource, { - add: function (obj) { - var id = obj[$traceurRuntime.toProperty(this.id)]; - if (this.highestId < id) { - this.highestId = id; - } - if (this.lowestId === 0 || this.lowestId > id) { - this.lowestId = id; - } - $traceurRuntime.superCall(this, $ItemResource.prototype, 'add', [obj]); - }, receive: function (value, channel) { switch (channel) { case 'newestItemId': @@ -509,6 +513,13 @@ var $__build_47_app__ = function () { data: { isStarred: isStarred } }); }, + toggleStar: function (itemId) { + if (this.get(itemId).starred) { + this.star(itemId, false); + } else { + this.star(itemId, true); + } + }, markItemRead: function (itemId) { var isRead = arguments[1] !== void 0 ? arguments[1] : true; this.get(itemId).unread = !isRead; @@ -547,19 +558,7 @@ var $__build_47_app__ = function () { } return this.http.post(this.BASE_URL + '/items/read'); }, - getHighestId: function () { - return this.highestId; - }, - getLowestId: function () { - return this.lowestId; - }, - keepUnread: function (itemId) { - this.get(itemId).keepUnread = true; - return this.markItemRead(itemId, false); - }, clear: function () { - this.highestId = 0; - this.lowestId = 0; $traceurRuntime.superCall(this, $ItemResource.prototype, 'clear', []); } }, {}, Resource); diff --git a/js/controller/ContentController.js b/js/controller/ContentController.js index e1beff98d..164fa8662 100644 --- a/js/controller/ContentController.js +++ b/js/controller/ContentController.js @@ -20,25 +20,29 @@ function (Publisher, FeedResource, ItemResource, SettingsResource, data) { return ItemResource.getAll(); }; - // TBD this.toggleStar = (itemId) => { - console.log(itemId); + ItemResource.toggleStar(itemId); }; this.markRead = (itemId) => { - console.log(itemId); + ItemResource.markItemRead(itemId); + + let item = ItemResource.get(itemId); + FeedResource.markItemOfFeedRead(item.feedId); }; this.getFeed = (feedId) => { - console.log(feedId); + return FeedResource.getById(feedId); }; - this.keepUnread = (itemId) => { - console.log(itemId); - }; + this.toggleKeepUnread = (itemId) => { + let item = ItemResource.get(itemId); + if (!item.unread) { + FeedResource.markItemOfFeedUnread(item.feedId); + ItemResource.markItemRead(itemId, false); + } - this.isContentView = () => { - console.log('tbd'); + item.keepUnread = !item.keepUnread; }; this.orderBy = () => { @@ -49,7 +53,21 @@ function (Publisher, FeedResource, ItemResource, SettingsResource, data) { } }; + this.isCompactView = () => { + return SettingsResource.get('compact'); + }; + + // TBD this.getRelativeDate = (timestamp) => { console.log(timestamp); }; + + this.autoPage = () => { + console.log('hi'); + }; + + this.scrollRead = (itemIds) => { + console.log(itemIds); + }; + });
\ No newline at end of file diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js index 3e7a2e8bd..135601b2f 100644 --- a/js/service/FeedResource.js +++ b/js/service/FeedResource.js @@ -109,7 +109,9 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { return this.values.filter(v => v.folderId === folderId); } - + getById (feedId) { + return this.ids[feedId]; + } } return new FeedResource($http, BASE_URL); diff --git a/js/service/ItemResource.js b/js/service/ItemResource.js index 983b9b39a..625f58b5e 100644 --- a/js/service/ItemResource.js +++ b/js/service/ItemResource.js @@ -16,23 +16,6 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => { constructor ($http, BASE_URL) { super($http, BASE_URL); this.starredCount = 0; - this.highestId = 0; - this.lowestId = 0; - } - - - add (obj) { - let id = obj[this.id]; - - if (this.highestId < id) { - this.highestId = id; - } - - if (this.lowestId === 0 || this.lowestId > id) { - this.lowestId = id; - } - - super.add(obj); } @@ -84,6 +67,15 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => { } + toggleStar (itemId) { + if (this.get(itemId).starred) { + this.star(itemId, false); + } else { + this.star(itemId, true); + } + } + + markItemRead (itemId, isRead=true) { this.get(itemId).unread = !isRead; return this.http({ @@ -112,25 +104,7 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => { } - getHighestId () { - return this.highestId; - } - - - getLowestId () { - return this.lowestId; - } - - - keepUnread (itemId) { - this.get(itemId).keepUnread = true; - return this.markItemRead(itemId, false); - } - - clear () { - this.highestId = 0; - this.lowestId = 0; super.clear(); } diff --git a/js/tests/unit/controller/ContentControllerSpec.js b/js/tests/unit/controller/ContentControllerSpec.js index ac7c6f1a8..658ae9252 100644 --- a/js/tests/unit/controller/ContentControllerSpec.js +++ b/js/tests/unit/controller/ContentControllerSpec.js @@ -63,4 +63,126 @@ describe('ContentController', () => { expect(ctrl.orderBy()).toBe('-id'); })); + + it('should mark read', inject(($controller, + ItemResource, FeedResource, Publisher) => { + + Publisher.subscribe(ItemResource).toChannels('items'); + ItemResource.markItemRead = jasmine.createSpy('markRead'); + FeedResource.markItemOfFeedRead = jasmine.createSpy('markRead'); + + let ctrl = $controller('ContentController', { + ItemResource: ItemResource, + FeedResource: FeedResource, + data: { + 'items': [{ + id: 3, + feedId: 4 + }] + }, + }); + + ctrl.markRead(3); + + expect(ItemResource.markItemRead).toHaveBeenCalledWith(3); + expect(FeedResource.markItemOfFeedRead).toHaveBeenCalledWith(4); + })); + + + it('should toggle keep unread when unread', inject(($controller, + ItemResource, FeedResource, Publisher) => { + + Publisher.subscribe(ItemResource).toChannels('items'); + + let ctrl = $controller('ContentController', { + ItemResource: ItemResource, + FeedResource: FeedResource, + data: { + 'items': [{ + id: 3, + feedId: 4, + unread: true + }] + }, + }); + + ctrl.toggleKeepUnread(3); + + expect(ItemResource.get(3).keepUnread).toBe(true); + })); + + + it('should toggle keep unread when read', inject(($controller, + ItemResource, FeedResource, Publisher) => { + + Publisher.subscribe(ItemResource).toChannels('items'); + ItemResource.markItemRead = jasmine.createSpy('markRead'); + FeedResource.markItemOfFeedUnread = jasmine.createSpy('markRead'); + + let ctrl = $controller('ContentController', { + ItemResource: ItemResource, + FeedResource: FeedResource, + data: { + 'items': [{ + id: 3, + feedId: 4, + unread: false, + keepUnread: true + }] + }, + }); + + ctrl.toggleKeepUnread(3); + + expect(ItemResource.get(3).keepUnread).toBe(false); + expect(ItemResource.markItemRead).toHaveBeenCalledWith(3, false); + expect(FeedResource.markItemOfFeedUnread).toHaveBeenCalledWith(4); + })); + + + it('should get a feed', inject(($controller, FeedResource, Publisher) => { + + Publisher.subscribe(FeedResource).toChannels('feeds'); + + let ctrl = $controller('ContentController', { + FeedResource: FeedResource, + data: { + 'feeds': [{ + id: 3, + url: 4 + }] + }, + }); + + expect(ctrl.getFeed(3).url).toBe(4); + })); + + + it('should toggle starred', inject(($controller, ItemResource) => { + + ItemResource.toggleStar = jasmine.createSpy('star'); + + let ctrl = $controller('ContentController', { + ItemResource: ItemResource, + data: {}, + }); + + ctrl.toggleStar(3); + + expect(ItemResource.toggleStar).toHaveBeenCalledWith(3); + })); + + + + it('should publish compactview', inject(($controller, SettingsResource) => { + + SettingsResource.set('compact', true); + + let ctrl = $controller('ContentController', { + SettingsResource: SettingsResource, + data: {}, + }); + + expect(ctrl.isCompactView()).toBe(true); + })); }); diff --git a/js/tests/unit/service/ItemResourceSpec.js b/js/tests/unit/service/ItemResourceSpec.js index 4f2a572a9..50454d41a 100644 --- a/js/tests/unit/service/ItemResourceSpec.js +++ b/js/tests/unit/service/ItemResourceSpec.js @@ -35,31 +35,6 @@ describe('ItemResource', () => { })); - it ('should keep item unread', inject((ItemResource) => { - http.expectPOST('base/items/3/read', {isRead: false}).respond(200, {}); - - ItemResource.receive([ - { - id: 3, - feedId: 4, - unread: false - }, - { - id: 4, - feedId: 3, - unread: false - } - ], 'items'); - - ItemResource.keepUnread(3); - - http.flush(); - - expect(ItemResource.get(3).keepUnread).toBe(true); - expect(ItemResource.get(3).unread).toBe(true); - })); - - it ('should mark item as read', inject((ItemResource) => { http.expectPOST('base/items/3/read', {isRead: true}).respond(200, {}); @@ -172,57 +147,25 @@ describe('ItemResource', () => { })); - it ('should remember the highest id', inject((ItemResource) => { + it ('toggle star', inject((ItemResource) => { ItemResource.receive([ { id: 3, + starred: true }, { id: 5, - }, - { - id: 4, - } - ], 'items'); - - expect(ItemResource.getHighestId()).toBe(5); - })); - - - it ('should remember the lowest id', inject((ItemResource) => { - ItemResource.receive([ - { - id: 3, - }, - { - id: 5, - }, - { - id: 4, + starred: false } ], 'items'); - expect(ItemResource.getLowestId()).toBe(3); - })); - - - it ('should clear the highest and lowest id', inject((ItemResource) => { - ItemResource.receive([ - { - id: 3, - }, - { - id: 5, - }, - { - id: 4, - } - ], 'items'); + ItemResource.star = jasmine.createSpy('star'); - ItemResource.clear(); + ItemResource.toggleStar(3); + expect(ItemResource.star).toHaveBeenCalledWith(3, false); - expect(ItemResource.getHighestId()).toBe(0); - expect(ItemResource.getLowestId()).toBe(0); + ItemResource.toggleStar(5); + expect(ItemResource.star).toHaveBeenCalledWith(5, true); })); |