summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-04-15 18:31:30 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-04-15 18:31:30 +0200
commit0ed9131f3f1c851158421b39767bf94264f80b8b (patch)
tree51ee951c0c7cd6cff6a3cd1456e2987a8943edaa /js
parent7c3c70fc88b669386cca180250081be45cdfeb92 (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.coffee1
-rw-r--r--js/app/directives/scrollmarksread.coffee6
-rw-r--r--js/app/services/businesslayer/businesslayer.coffee10
-rw-r--r--js/app/services/businesslayer/itembusinesslayer.coffee6
-rw-r--r--js/config/testacular_conf.js2
-rw-r--r--js/public/app.js36
-rw-r--r--js/tests/services/businesslayer/businesslayerSpec.coffee16
-rw-r--r--js/tests/services/businesslayer/itembusinesslayerSpec.coffee18
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)
+
+