diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-03-26 14:45:39 +0100 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-03-26 14:45:39 +0100 |
commit | 8e1e0f5281c1ee49fe7f6d84ba8f2b709ebf7f40 (patch) | |
tree | 30bc99a02a414de50e1461c9f6b6289b44e3c543 | |
parent | cd3b748f65cc98185c56fd110a140ad2206c319b (diff) |
added logic for adding feeds
-rw-r--r-- | js/app/controllers/feedcontroller.coffee | 46 | ||||
-rw-r--r-- | js/app/services/persistence.coffee | 4 | ||||
-rw-r--r-- | js/public/app.js | 85 | ||||
-rw-r--r-- | js/tests/controllers/feedcontrollerSpec.coffee | 51 |
4 files changed, 122 insertions, 64 deletions
diff --git a/js/app/controllers/feedcontroller.coffee b/js/app/controllers/feedcontroller.coffee index fea2cb46d..7a61f4ab1 100644 --- a/js/app/controllers/feedcontroller.coffee +++ b/js/app/controllers/feedcontroller.coffee @@ -67,34 +67,40 @@ angular.module('News').factory '_FeedController', -> @$scope.setShowAll = (showAll) => @setShowAll(showAll) - @$scope.addFeed = (feedUrl, parentFolderId) => - ### + @$scope.isAddingFolder = => + return @_isAddingFolder + + @$scope.isAddingFeed = => + return @_isAddingFeed + + @$scope.toggleFolder = (folderId) => + @toggleFolder(folderId) + + @$scope.addFeed = (feedUrl, parentFolderId=0) => @$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 + for feed in @_feedModel.getAll() + if feedUrl == feed.url @$scope.feedExistsError = true - + + if not (@$scope.feedEmptyError or @$scope.feedExistsError) - if angular.isUndefined(parentFolderId) - folderId = 0 - else - folderId = folder.id - @$scope.adding = true + @_isAddingFeed = true + onSuccess = => @$scope.feedUrl = '' - @$scope.adding = false + @_isAddingFeed = false onError = => @$scope.feedError = true - @$scope.adding = false - @persistence.createFeed(url, folderId, onSuccess, onError) - ### + @_isAddingFeed = false + @_persistence.createFeed(feedUrl, parentFolderId, onSuccess, + onError) @$scope.addFolder = (folderName) => @$scope.folderEmptyError = false @@ -115,16 +121,6 @@ angular.module('News').factory '_FeedController', -> @_isAddingFolder = false - @$scope.isAddingFolder = => - return @_isAddingFolder - - @$scope.isAddingFeed = => - return @_isAddingFeed - - @$scope.toggleFolder = (folderId) => - @toggleFolder(folderId) - - toggleFolder: (folderId) -> folder = @_folderModel.getById(folderId) diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee index 200145c71..8e0564002 100644 --- a/js/app/services/persistence.coffee +++ b/js/app/services/persistence.coffee @@ -145,7 +145,9 @@ angular.module('News').factory '_Persistence', -> @_request.get 'news_feeds_active', params - createFeed: (url, parentFolderId, onSuccess, onFailure) -> + createFeed: (url, parentFolderId, onSuccess=null, onFailure=null) -> + onSuccess or= -> + onFailure or= -> params = data: parentFolderId: parentFolderId diff --git a/js/public/app.js b/js/public/app.js index aced192d8..e720ed428 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -186,35 +186,47 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. this.$scope.setShowAll = function(showAll) { return _this.setShowAll(showAll); }; + this.$scope.isAddingFolder = function() { + return _this._isAddingFolder; + }; + this.$scope.isAddingFeed = function() { + return _this._isAddingFeed; + }; + this.$scope.toggleFolder = function(folderId) { + return _this.toggleFolder(folderId); + }; 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) - */ - + var feed, onError, onSuccess, _i, _len, _ref; + if (parentFolderId == null) { + parentFolderId = 0; + } + _this.$scope.feedEmptyError = false; + _this.$scope.feedExistsError = false; + _this.$scope.feedError = false; + if (angular.isUndefined(feedUrl) || feedUrl.trim() === '') { + _this.$scope.feedEmptyError = true; + } else { + feedUrl = feedUrl.trim(); + _ref = _this._feedModel.getAll(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + feed = _ref[_i]; + if (feedUrl === feed.url) { + _this.$scope.feedExistsError = true; + } + } + } + if (!(_this.$scope.feedEmptyError || _this.$scope.feedExistsError)) { + _this._isAddingFeed = true; + onSuccess = function() { + _this.$scope.feedUrl = ''; + return _this._isAddingFeed = false; + }; + onError = function() { + _this.$scope.feedError = true; + return _this._isAddingFeed = false; + }; + return _this._persistence.createFeed(feedUrl, parentFolderId, onSuccess, onError); + } }; this.$scope.addFolder = function(folderName) { var folder, _i, _len, _ref; @@ -240,15 +252,6 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. }); } }; - 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) { @@ -1085,6 +1088,14 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. Persistence.prototype.createFeed = function(url, parentFolderId, onSuccess, onFailure) { var params; + if (onSuccess == null) { + onSuccess = null; + } + if (onFailure == null) { + onFailure = null; + } + onSuccess || (onSuccess = function() {}); + onFailure || (onFailure = function() {}); params = { data: { parentFolderId: parentFolderId, diff --git a/js/tests/controllers/feedcontrollerSpec.coffee b/js/tests/controllers/feedcontrollerSpec.coffee index 1a019a74e..af4c8f9a7 100644 --- a/js/tests/controllers/feedcontrollerSpec.coffee +++ b/js/tests/controllers/feedcontrollerSpec.coffee @@ -323,7 +323,6 @@ describe '_FeedController', -> it 'should should reset the foldername on and set isAddingFolder to false',=> - @persistence.createFolder = jasmine.createSpy('create').andCallFake (arg1, arg2, func) => func() @@ -333,3 +332,53 @@ describe '_FeedController', -> expect(@scope.isAddingFolder()).toBeFalsy() + it 'should not add feeds that have no url', => + @persistence.createFeed = jasmine.createSpy('create') + @scope.addFeed(' ') + + expect(@scope.feedEmptyError).toBeTruthy() + expect(@persistence.createFeed).not.toHaveBeenCalled() + + + it 'should not add feeds that already exist client side', => + @FeedModel.add({id: 3, url: 'ola'}) + @persistence.createFeed = jasmine.createSpy('create') + @scope.addFeed('ola') + + expect(@scope.feedExistsError).toBeTruthy() + expect(@persistence.createFeed).not.toHaveBeenCalled() + + + it 'should set isAddingFeed to true if there were no problems', => + @persistence.createFeed = jasmine.createSpy('create') + @scope.addFeed('ola') + expect(@scope.isAddingFeed()).toBeTruthy() + + + it 'should should reset the feedurl and set isAddingFeed to false on succ',=> + @persistence.createFeed = + jasmine.createSpy('create').andCallFake (arg1, arg2, func) => + func() + @scope.addFeed(' Ola') + + expect(@scope.feedUrl).toBe('') + expect(@scope.isAddingFeed()).toBeFalsy() + + + it 'should should set isAddingFeed to false on err',=> + @persistence.createFeed = + jasmine.createSpy('create').andCallFake (arg1, arg2, func, err) => + err() + @scope.addFeed('Ola') + + expect(@scope.isAddingFeed()).toBeFalsy() + expect(@scope.feedError).toBeTruthy() + + + it 'should create a create new feed request if everything was ok', => + @persistence.createFeed = jasmine.createSpy('create') + @scope.addFeed('Ola') + expect(@persistence.createFeed).toHaveBeenCalled() + expect(@persistence.createFeed.argsForCall[0][0]).toBe('Ola') + expect(@persistence.createFeed.argsForCall[0][1]).toBe(0) + |