summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-29 22:58:30 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-29 22:58:30 +0200
commitcba949fb0771c832326fc7886cced2bdc37e7536 (patch)
tree9e1a335a83a6006f645c801b762db7525e4c6c59 /js
parentb91ef01fdbf14c6a5d58e5c471dbb1fc9d17cdfb (diff)
order by pubdate
Diffstat (limited to 'js')
-rw-r--r--js/build/app.js63
-rw-r--r--js/controller/ContentController.js36
-rw-r--r--js/service/FeedResource.js4
-rw-r--r--js/service/ItemResource.js44
-rw-r--r--js/tests/unit/controller/ContentControllerSpec.js122
-rw-r--r--js/tests/unit/service/ItemResourceSpec.js73
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);
}));