From 02869fdc16bcec5ce142a597c3d203dadd7d2067 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 27 Mar 2013 17:19:50 +0100 Subject: adding folders works --- js/app/controllers/feedcontroller.coffee | 13 +++++---- js/app/directives/addfolderselect.coffee | 12 ++++++--- js/app/services/models/foldermodel.coffee | 9 ++++++- js/public/app.js | 35 +++++++++++++++---------- js/tests/controllers/feedcontrollerSpec.coffee | 8 +++--- js/tests/services/models/foldermodelSpec.coffee | 10 ++++++- 6 files changed, 59 insertions(+), 28 deletions(-) (limited to 'js') diff --git a/js/app/controllers/feedcontroller.coffee b/js/app/controllers/feedcontroller.coffee index 14e1aea5b..33d23d935 100644 --- a/js/app/controllers/feedcontroller.coffee +++ b/js/app/controllers/feedcontroller.coffee @@ -103,14 +103,13 @@ angular.module('News').factory '_FeedController', -> @$scope.addFolder = (folderName) => @$scope.folderEmptyError = false @$scope.folderExistsError = false + folderName = folderName.trim() - if angular.isUndefined(folderName) or folderName.trim() == '' + if angular.isUndefined(folderName) or folderName == '' @$scope.folderEmptyError = true else - folderName = folderName.trim() - for folder in @_folderModel.getAll() - if folderName.toLowerCase() == folder.name.toLowerCase() - @$scope.folderExistsError = true + if @_folderModel.nameExists(folderName) + @$scope.folderExistsError = true if not (@$scope.folderEmptyError or @$scope.folderExistsError) @_isAddingFolder = true @@ -119,6 +118,10 @@ angular.module('News').factory '_FeedController', -> @_isAddingFolder = false + @$scope.$on 'createFolder', (scope, folderName) => + $scope.addFolder(folderName) + + toggleFolder: (folderId) -> folder = @_folderModel.getById(folderId) diff --git a/js/app/directives/addfolderselect.coffee b/js/app/directives/addfolderselect.coffee index 1c3f39f04..41a111823 100644 --- a/js/app/directives/addfolderselect.coffee +++ b/js/app/directives/addfolderselect.coffee @@ -25,7 +25,8 @@ License along with this library. If not, see . Turns a normal select into a folder select with the ability to create new folders ### -angular.module('News').directive 'addFolderSelect', ['$rootScope', -> +angular.module('News').directive 'addFolderSelect', +['$rootScope', 'FolderModel', ($rootScope, FolderModel) -> return (scope, elm, attr) -> @@ -33,9 +34,12 @@ angular.module('News').directive 'addFolderSelect', ['$rootScope', -> singleSelect: true selectedFirst: true createText: $(elm).data('create') - createdCallback: (selected, value) -> - console.log selected - console.log value + createCallback: (selected, value) -> + if FolderModel.nameExists(value) + return false + else + $rootScope.$broadcast 'createFolder', value + $(elm).multiSelect(options) diff --git a/js/app/services/models/foldermodel.coffee b/js/app/services/models/foldermodel.coffee index 208bd2f4b..56997e603 100644 --- a/js/app/services/models/foldermodel.coffee +++ b/js/app/services/models/foldermodel.coffee @@ -20,9 +20,16 @@ License along with this library. If not, see . ### -angular.module('News').factory '_FolderModel', ['_Model', (_Model) -> +angular.module('News').factory '_FolderModel', +['_Model', '_EqualQuery', (_Model, _EqualQuery) -> class FolderModel extends _Model + + nameExists: (folderName) -> + query = new _EqualQuery('name', folderName.trim(), true) + return @get(query).length > 0 + + return FolderModel ] \ No newline at end of file diff --git a/js/public/app.js b/js/public/app.js index 06cbb6e3e..edf48f309 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -97,16 +97,19 @@ folders (function() { angular.module('News').directive('addFolderSelect', [ - '$rootScope', function() { + '$rootScope', 'FolderModel', function($rootScope, FolderModel) { return function(scope, elm, attr) { var options; options = { singleSelect: true, selectedFirst: true, createText: $(elm).data('create'), - createdCallback: function(selected, value) { - console.log(selected); - return console.log(value); + createCallback: function(selected, value) { + if (FolderModel.nameExists(value)) { + return false; + } else { + return $rootScope.$broadcast('createFolder', value); + } } }; return $(elm).multiSelect(options); @@ -275,19 +278,14 @@ License along with this library. If not, see . } }; this.$scope.addFolder = function(folderName) { - var folder, _i, _len, _ref; _this.$scope.folderEmptyError = false; _this.$scope.folderExistsError = false; - if (angular.isUndefined(folderName) || folderName.trim() === '') { + folderName = folderName.trim(); + if (angular.isUndefined(folderName) || folderName === '') { _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._folderModel.nameExists(folderName)) { + _this.$scope.folderExistsError = true; } } if (!(_this.$scope.folderEmptyError || _this.$scope.folderExistsError)) { @@ -298,6 +296,9 @@ License along with this library. If not, see . }); } }; + this.$scope.$on('createFolder', function(scope, folderName) { + return $scope.addFolder(folderName); + }); } FeedController.prototype.toggleFolder = function(folderId) { @@ -793,7 +794,7 @@ License along with this library. If not, see . __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; angular.module('News').factory('_FolderModel', [ - '_Model', function(_Model) { + '_Model', '_EqualQuery', function(_Model, _EqualQuery) { var FolderModel; FolderModel = (function(_super) { @@ -803,6 +804,12 @@ License along with this library. If not, see . return FolderModel.__super__.constructor.apply(this, arguments); } + FolderModel.prototype.nameExists = function(folderName) { + var query; + query = new _EqualQuery('name', folderName.trim(), true); + return this.get(query).length > 0; + }; + return FolderModel; })(_Model); diff --git a/js/tests/controllers/feedcontrollerSpec.coffee b/js/tests/controllers/feedcontrollerSpec.coffee index 71c76d57e..a37430d26 100644 --- a/js/tests/controllers/feedcontrollerSpec.coffee +++ b/js/tests/controllers/feedcontrollerSpec.coffee @@ -29,10 +29,12 @@ describe '_FeedController', -> beforeEach inject (@_FeedController, @ActiveFeed, @ShowAll, @FeedType, @StarredCount, @FeedModel, @FolderModel, @ItemModel) => - @scope = {} - @persistence = { + @scope = + $on: -> + + @persistence = getItems: -> - } + @controller = new @_FeedController(@scope, @FolderModel, @FeedModel, @ActiveFeed, @ShowAll, @FeedType, @StarredCount, @persistence, diff --git a/js/tests/services/models/foldermodelSpec.coffee b/js/tests/services/models/foldermodelSpec.coffee index 3cae0064c..bfac1fd49 100644 --- a/js/tests/services/models/foldermodelSpec.coffee +++ b/js/tests/services/models/foldermodelSpec.coffee @@ -29,4 +29,12 @@ describe '_FolderModel', -> it 'should extend model', => - expect(new @_FolderModel instanceof @_Model).toBeTruthy() \ No newline at end of file + expect(new @_FolderModel instanceof @_Model).toBeTruthy() + + + it 'should allow to search for foldernames', => + model = new @_FolderModel() + model.add({id: 3, name: 'hi'}) + + expect(model.nameExists('hi')).toBeTruthy() + expect(model.nameExists('dhi')).toBeFalsy() \ No newline at end of file -- cgit v1.2.3