summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-03-26 14:22:01 +0100
committerBernhard Posselt <nukeawhale@gmail.com>2013-03-26 14:22:01 +0100
commitcd3b748f65cc98185c56fd110a140ad2206c319b (patch)
tree2e51aa3169b2c57ac36472e3db07a47109675c47 /js
parentb553ff390353a860195b61f5418847880f24410d (diff)
added adding of feeds logic
Diffstat (limited to 'js')
-rw-r--r--js/app/controllers/feedcontroller.coffee71
-rw-r--r--js/app/services/services.coffee3
-rw-r--r--js/public/app.js78
-rw-r--r--js/tests/controllers/feedcontrollerSpec.coffee71
4 files changed, 221 insertions, 2 deletions
diff --git a/js/app/controllers/feedcontroller.coffee b/js/app/controllers/feedcontroller.coffee
index 2feec2a1c..fea2cb46d 100644
--- a/js/app/controllers/feedcontroller.coffee
+++ b/js/app/controllers/feedcontroller.coffee
@@ -29,6 +29,9 @@ angular.module('News').factory '_FeedController', ->
@_showAll, @_feedType, @_starredCount, @_persistence,
@_itemModel) ->
+ @_isAddingFolder = false
+ @_isAddingFeed = false
+
# bind internal stuff to scope
@$scope.feeds = @_feedModel.getAll()
@$scope.folders = @_folderModel.getAll()
@@ -64,6 +67,74 @@ angular.module('News').factory '_FeedController', ->
@$scope.setShowAll = (showAll) =>
@setShowAll(showAll)
+ @$scope.addFeed = (feedUrl, parentFolderId) =>
+ ###
+ @$scope.feedEmptyError = false
+ @$scope.feedExistsError = false
+ @$scope.feedError = false
+
+ if angular.isUndefined(feedUrl) or feedUrl.trim() == ''
+ @$scope.feedEmptyError = true
+ else
+ feedUrl = feedUrl.trim()
+ for feed in @feedModel.getItems()
+ if feedUrl == feed.feedUrl # FIXME: can we really compare this
+ @$scope.feedExistsError = true
+
+ if not (@$scope.feedEmptyError or @$scope.feedExistsError)
+ if angular.isUndefined(parentFolderId)
+ folderId = 0
+ else
+ folderId = folder.id
+ @$scope.adding = true
+ onSuccess = =>
+ @$scope.feedUrl = ''
+ @$scope.adding = false
+ onError = =>
+ @$scope.feedError = true
+ @$scope.adding = false
+ @persistence.createFeed(url, folderId, onSuccess, onError)
+ ###
+
+ @$scope.addFolder = (folderName) =>
+ @$scope.folderEmptyError = false
+ @$scope.folderExistsError = false
+
+ if angular.isUndefined(folderName) or folderName.trim() == ''
+ @$scope.folderEmptyError = true
+ else
+ folderName = folderName.trim()
+ for folder in @_folderModel.getAll()
+ if folderName.toLowerCase() == folder.name.toLowerCase()
+ @$scope.folderExistsError = true
+
+ if not (@$scope.folderEmptyError or @$scope.folderExistsError)
+ @_isAddingFolder = true
+ @_persistence.createFolder folderName, 0, =>
+ @$scope.folderName = ''
+ @_isAddingFolder = false
+
+
+ @$scope.isAddingFolder = =>
+ return @_isAddingFolder
+
+ @$scope.isAddingFeed = =>
+ return @_isAddingFeed
+
+ @$scope.toggleFolder = (folderId) =>
+ @toggleFolder(folderId)
+
+
+ toggleFolder: (folderId) ->
+ folder = @_folderModel.getById(folderId)
+
+ if angular.isDefined(folder)
+ folder.open = !folder.open
+ if folder.open
+ @_persistence.openFolder(folder.id)
+ else
+ @_persistence.collapseFolder(folder.id)
+
isFeedActive: (type, id) ->
return type == @_active.getType() and id = @_active.getId()
diff --git a/js/app/services/services.coffee b/js/app/services/services.coffee
index dac4206a9..cf1389fa7 100644
--- a/js/app/services/services.coffee
+++ b/js/app/services/services.coffee
@@ -59,7 +59,8 @@ angular.module('News').factory 'FeedModel', ['_FeedModel', 'Utils',
return new _FeedModel(Utils)
]
-angular.module('News').factory 'FolderModel', ['_FolderModel', (_FolderModel) ->
+angular.module('News').factory 'FolderModel',
+['_FolderModel', (_FolderModel) ->
return new _FolderModel()
]
diff --git a/js/public/app.js b/js/public/app.js
index 375b02554..aced192d8 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -151,6 +151,8 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
this._starredCount = _starredCount;
this._persistence = _persistence;
this._itemModel = _itemModel;
+ this._isAddingFolder = false;
+ this._isAddingFeed = false;
this.$scope.feeds = this._feedModel.getAll();
this.$scope.folders = this._folderModel.getAll();
this.$scope.feedType = this._feedType;
@@ -184,8 +186,84 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
this.$scope.setShowAll = function(showAll) {
return _this.setShowAll(showAll);
};
+ this.$scope.addFeed = function(feedUrl, parentFolderId) {
+ /*
+ @$scope.feedEmptyError = false
+ @$scope.feedExistsError = false
+ @$scope.feedError = false
+
+ if angular.isUndefined(feedUrl) or feedUrl.trim() == ''
+ @$scope.feedEmptyError = true
+ else
+ feedUrl = feedUrl.trim()
+ for feed in @feedModel.getItems()
+ if feedUrl == feed.feedUrl # FIXME: can we really compare this
+ @$scope.feedExistsError = true
+
+ if not (@$scope.feedEmptyError or @$scope.feedExistsError)
+ if angular.isUndefined(parentFolderId)
+ folderId = 0
+ else
+ folderId = folder.id
+ @$scope.adding = true
+ onSuccess = =>
+ @$scope.feedUrl = ''
+ @$scope.adding = false
+ onError = =>
+ @$scope.feedError = true
+ @$scope.adding = false
+ @persistence.createFeed(url, folderId, onSuccess, onError)
+ */
+
+ };
+ this.$scope.addFolder = function(folderName) {
+ var folder, _i, _len, _ref;
+ _this.$scope.folderEmptyError = false;
+ _this.$scope.folderExistsError = false;
+ if (angular.isUndefined(folderName) || folderName.trim() === '') {
+ _this.$scope.folderEmptyError = true;
+ } else {
+ folderName = folderName.trim();
+ _ref = _this._folderModel.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ folder = _ref[_i];
+ if (folderName.toLowerCase() === folder.name.toLowerCase()) {
+ _this.$scope.folderExistsError = true;
+ }
+ }
+ }
+ if (!(_this.$scope.folderEmptyError || _this.$scope.folderExistsError)) {
+ _this._isAddingFolder = true;
+ return _this._persistence.createFolder(folderName, 0, function() {
+ _this.$scope.folderName = '';
+ return _this._isAddingFolder = false;
+ });
+ }
+ };
+ this.$scope.isAddingFolder = function() {
+ return _this._isAddingFolder;
+ };
+ this.$scope.isAddingFeed = function() {
+ return _this._isAddingFeed;
+ };
+ this.$scope.toggleFolder = function(folderId) {
+ return _this.toggleFolder(folderId);
+ };
}
+ FeedController.prototype.toggleFolder = function(folderId) {
+ var folder;
+ folder = this._folderModel.getById(folderId);
+ if (angular.isDefined(folder)) {
+ folder.open = !folder.open;
+ if (folder.open) {
+ return this._persistence.openFolder(folder.id);
+ } else {
+ return this._persistence.collapseFolder(folder.id);
+ }
+ }
+ };
+
FeedController.prototype.isFeedActive = function(type, id) {
return type === this._active.getType() && (id = this._active.getId());
};
diff --git a/js/tests/controllers/feedcontrollerSpec.coffee b/js/tests/controllers/feedcontrollerSpec.coffee
index df3917ea8..1a019a74e 100644
--- a/js/tests/controllers/feedcontrollerSpec.coffee
+++ b/js/tests/controllers/feedcontrollerSpec.coffee
@@ -263,4 +263,73 @@ describe '_FeedController', ->
expect(@FeedModel.getById(3).unreadCount).toBe(0)
expect(@FeedModel.getById(1).unreadCount).toBe(0)
- expect(@FeedModel.getById(5).unreadCount).toBe(0) \ No newline at end of file
+ expect(@FeedModel.getById(5).unreadCount).toBe(0)
+
+
+ it 'should toggle folder', =>
+ @persistence.openFolder = jasmine.createSpy('open')
+ @persistence.collapseFolder = jasmine.createSpy('collapse')
+
+ @FolderModel.add({id: 3, open: false})
+ @scope.toggleFolder(4)
+ expect(@FolderModel.getById(3).open).toBeFalsy()
+
+ @scope.toggleFolder(3)
+ expect(@FolderModel.getById(3).open).toBeTruthy()
+ expect(@persistence.openFolder).toHaveBeenCalledWith(3)
+
+ @scope.toggleFolder(3)
+ expect(@FolderModel.getById(3).open).toBeFalsy()
+ expect(@persistence.collapseFolder).toHaveBeenCalledWith(3)
+
+
+ it 'isAddingFolder should return false in the beginning', =>
+ expect(@scope.isAddingFolder()).toBeFalsy()
+
+
+ it 'isAddingFeed should return false in the beginning', =>
+ expect(@scope.isAddingFeed()).toBeFalsy()
+
+
+ it 'should not add folders that have no name', =>
+ @persistence.createFolder = jasmine.createSpy('create')
+ @scope.addFolder(' ')
+
+ expect(@scope.folderEmptyError).toBeTruthy()
+ expect(@persistence.createFolder).not.toHaveBeenCalled()
+
+
+ it 'should not add folders that already exist client side', =>
+ @FolderModel.add({id: 3, name: 'ola'})
+ @persistence.createFolder = jasmine.createSpy('create')
+ @scope.addFolder(' Ola')
+
+ expect(@scope.folderExistsError).toBeTruthy()
+ expect(@persistence.createFolder).not.toHaveBeenCalled()
+
+
+ it 'should set isAddingFolder to true if there were no problems', =>
+ @persistence.createFolder = jasmine.createSpy('create')
+ @scope.addFolder(' Ola')
+ expect(@scope.isAddingFolder()).toBeTruthy()
+
+
+ it 'should create a create new folder request if everything was ok', =>
+ @persistence.createFolder = jasmine.createSpy('create')
+ @scope.addFolder(' Ola')
+ expect(@persistence.createFolder).toHaveBeenCalled()
+ expect(@persistence.createFolder.argsForCall[0][0]).toBe('Ola')
+ expect(@persistence.createFolder.argsForCall[0][1]).toBe(0)
+
+
+ it 'should should reset the foldername on and set isAddingFolder to false',=>
+
+ @persistence.createFolder =
+ jasmine.createSpy('create').andCallFake (arg1, arg2, func) =>
+ func()
+ @scope.addFolder(' Ola')
+
+ expect(@scope.folderName).toBe('')
+ expect(@scope.isAddingFolder()).toBeFalsy()
+
+