This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository pollen. See http://git.chorem.org/pollen.git commit 59c9f386b3ad11950dea6aa18c9095a6313dfd1d Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Fri Jun 20 17:14:57 2014 +0200 improve voterList --- pollen-ui-angular/src/main/webapp/js/app.js | 2 +- .../src/main/webapp/js/controllers/pollCtrl.js | 106 +++++++++++++-------- .../main/webapp/partials/favoriteList-edit.html | 12 ++- .../src/main/webapp/partials/inline-poll.html | 5 +- .../main/webapp/partials/poll-listParticipant.html | 37 +++---- 5 files changed, 99 insertions(+), 63 deletions(-) diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js index feaad42..a186282 100644 --- a/pollen-ui-angular/src/main/webapp/js/app.js +++ b/pollen-ui-angular/src/main/webapp/js/app.js @@ -248,7 +248,7 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC scope.$eval(attrs.autoSave); }); $timeout.cancel(scope.timeout); - }, 500); + }, 200); } }; diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js index d9df9cd..3714ed5 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -224,9 +224,6 @@ angular.module('pollControllers', []) $scope.data.voterList[0].members = listMember; } } - else if (newVal != oldVal && newVal == 'GROUP') { - $scope.addGroup(); - } }); $scope.addVoter = function (index) { @@ -457,7 +454,6 @@ angular.module('pollControllers', []) PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: list.id}, function (voterListMember) { var newVoterList = {group:list, members:voterListMember}; $scope.data.voterList.push(newVoterList); - $scope.addVoter($scope.data.voterList.indexOf(newVoterList)); }) }) } @@ -466,6 +462,18 @@ angular.module('pollControllers', []) } }; + var memberIsEmpty = function (member) { + var isEmpty = true; + try { + if (member.name != '' && member.email != '') { + isEmpty = false; + } + } + catch (e) { } + + return isEmpty; + } + var initFavoriteList = function () { FavoriteList.get({paginationParameter:{pageSize:-1}}, function (data) { $scope.data.favoriteList = data.elements; @@ -503,7 +511,7 @@ angular.module('pollControllers', []) var vl = {group: voterList.group, members:[]}; angular.forEach(voterList.members, function(member, key) { - if (member.name != '' || member.email != '') { + if (!memberIsEmpty(member)) { vl.members.push(member); } }); @@ -514,28 +522,40 @@ angular.module('pollControllers', []) delete voterList.group.restError; // Get member Id - PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: data.id}, function (voterListMember) { - voterList.members = voterListMember; - $scope.addVoter($scope.data.voterList.indexOf(voterList)); + PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: data.id}, + function (voterListMember) { + angular.forEach(voterListMember, function(member, key) { + for (var i = 0; i < voterList.members.length; i++) { + if (member.email == voterList.members[i].email) { + voterList.members[i] = member; + i = voterList.members.length; + } + } + }); }); }, function (error) { voterList.group.restError = error.data; - - angular.forEach(voterList.members, function (member, index) { - member.restError = {}; - if (angular.isDefined(error.data['member['+index+'].name'])) { - member.restError.name = error.data['member['+index+'].name']; - } - if (angular.isDefined(error.data['member['+index+'].email'])) { - member.restError.email = error.data['member['+index+'].email']; - } - if (angular.isDefined(error.data['member['+index+'].weight'])) { - member.restError.weight = error.data['member['+index+'].weight']; - } - - if (angular.equals(member.restError, {})) { - // no error on this member - delete member.restError; + var deltaError = 0; + angular.forEach(voterList.members, function (member, key) { + if (!memberIsEmpty(member)) { + var index = key - deltaError; + member.restError = {}; + if (angular.isDefined(error.data['member['+index+'].name'])) { + member.restError.name = error.data['member['+index+'].name']; + } + if (angular.isDefined(error.data['member['+index+'].email'])) { + member.restError.email = error.data['member['+index+'].email']; + } + if (angular.isDefined(error.data['member['+index+'].weight'])) { + member.restError.weight = error.data['member['+index+'].weight']; + } + + if (angular.equals(member.restError, {})) { + // no error on this member + delete member.restError; + } + } else { + deltaError++; } }); }); @@ -544,7 +564,7 @@ angular.module('pollControllers', []) }; $scope.saveVoterListMember = function (member, voterList) { - if (member.name != '' && member.email != '') { + if (!memberIsEmpty(member)) { var vlId = voterList.group.id; // Id Voter list var vlMemberPromise; if (angular.isDefined(vlId)) { @@ -564,7 +584,7 @@ angular.module('pollControllers', []) } else { // create voter list - if (angular.isUndefined(voterList.group.restError)) { + if (angular.isUndefined(voterList.group.restError) || angular.isUndefined(voterList.group.restError.name)) { $scope.saveVoterList(voterList); } } @@ -586,22 +606,30 @@ angular.module('pollControllers', []) } }); } + else { + var index = $scope.data.voterList.indexOf(voterList); + $scope.data.voterList.splice(index, 1); + } }; $scope.deleteVoterListMember = function (member, voterList) { - if (angular.isDefined(voterList) && angular.isDefined(voterList.group.id)) { + if (angular.isDefined(voterList) && angular.isDefined(voterList.group.id) && angular.isDefined(member.id)) { var confirmMessage; - $translate('action.message.confirmDelete').then(function (msg) { - confirmMessage = msg; - }).then( function () { - var confirmDelete = confirm(confirmMessage); - if (confirmDelete == true) { - member.$remove({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:voterList.group.id}, function (data) { - var index = voterList.members.indexOf(member); - voterList.members.splice(index, 1); - }); - } - }); + $translate('action.message.confirmDelete').then(function (msg) { + confirmMessage = msg; + }).then( function () { + var confirmDelete = confirm(confirmMessage); + if (confirmDelete == true) { + member.$remove({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:voterList.group.id}, function (data) { + var index = voterList.members.indexOf(member); + voterList.members.splice(index, 1); + }); + } + }); + } + else { + var index = voterList.members.indexOf(member); + voterList.members.splice(index, 1); } }; @@ -971,7 +999,7 @@ angular.module('pollControllers', []) votesDeferred.promise.then(function () { angular.forEach($scope.data.result.scoresChart, function (value, key) { - value.push( Math.floor(value[1] * 100 / $scope.data.result.scoreTotal) + '%'); + value.push( Math.round(value[1] * 100 / $scope.data.result.scoreTotal) + '%'); }); }) diff --git a/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html b/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html index 9592724..3ceb95d 100644 --- a/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html +++ b/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html @@ -22,11 +22,15 @@ </tr> <tr ng-repeat="member in data.favoriteList.members" ng-class="{'has-success':member.id && !member.restError}"> - <td ng-class="{'has-error':member.restError.name}"> - <input type="text" ng-model="member.name" class="form-control" auto-save="saveMember(member)" tooltip="{{member.restError.name[0]}}"/> + <td> + <input-error error="member.restError.name[0]"> + <input type="text" ng-model="member.name" class="form-control" auto-save="saveMember(member)" /> + </input-error> </td> - <td ng-class="{'has-error':member.restError.email}"> - <input type="text" ng-model="member.email" class="form-control" auto-save="saveMember(member)" tooltip="{{member.restError.email[0]}}" /> + <td> + <input-error error="member.restError.email[0]"> + <input type="text" ng-model="member.email" class="form-control" auto-save="saveMember(member)" /> + </input-error> </td> <td class="action"> <div ng-show="member.id"><button class="btn btn-danger" ng-click="deleteMember(member);" tooltip="{{ 'action.favoriteList.deleteMember' | translate }} "><span class="glyphicon glyphicon-trash"></span></button></div></td> </tr> diff --git a/pollen-ui-angular/src/main/webapp/partials/inline-poll.html b/pollen-ui-angular/src/main/webapp/partials/inline-poll.html index 9e908f9..8544d89 100644 --- a/pollen-ui-angular/src/main/webapp/partials/inline-poll.html +++ b/pollen-ui-angular/src/main/webapp/partials/inline-poll.html @@ -54,10 +54,9 @@ <input-error error="data.vote.restError.voterName[0]" data="data.vote.voterName"> <input type="text" class="form-control" placeholder="{{ 'user.name' | translate }}" ng-model="data.vote.voterName" input-error="data.vote.restError.voterName[0]" /> </input-error> - <!-- <info-error error="data.vote.restError.voterName[0]" data="data.vote.voterName"></info-error> --> </td> - <td ng-repeat="choice in data.vote.choice" class="pollChoice"> - <input type="checkbox" name="{{choice.choiceId}}" ng-model="choice.voteValue" /> + <td ng-repeat="choice in data.vote.choice" class="pollChoice" ng-class="{voteTrue:choice.voteValue, voteFalse:!choice.voteValue}" ng-click="choice.voteValue = !choice.voteValue"> + <input type="checkbox" name="{{choice.choiceId}}" ng-model="choice.voteValue" ng-click="choice.voteValue = !choice.voteValue;$event.stopPropagation()" /> </td> <td> <input class="btn btn-primary btn-large" type="button" value="{{ 'action.vote' | translate }}" ng-click="voter()" /> diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html index 3984cc4..5273ec0 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html @@ -35,26 +35,35 @@ </label> <hr/> - <div ng-if="data.favoriteList" class="container-fluid"> - <h3>{{ 'user.favoriteList' | translate }}</h3> - <div class="row text-right"> + <div class="container-fluid"> + <div class="row"> + <button class="btn btn-info" ng-show="data.poll.pollType == 'GROUP'" ng-click="addGroup()"><span class="glyphicon glyphicon-plus"></span> {{ 'action.restricted.addGroup' | translate }}</button> + <button class="btn btn-warning" ng-hide="data.poll.pollType == 'FREE'" disabled><span class="glyphicon glyphicon-envelope"></span> {{ 'action.restricted.notify' | translate }}</button> + </div> + + <div class="row" ng-if="data.favoriteList"> + <hr/> + </div> + + <div class="row text-right" ng-if="data.favoriteList"> <div class="col-sm-6"> - <button class="btn btn-info" ng-click="importFavoriteList()" ng-if="data.poll.pollType == 'GROUP'"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.import.addGroup' | translate }}</button> + <h4>{{ 'user.favoriteList' | translate }}</h4> </div> <div class="col-sm-6"> <select class="form-control" ng-model="data.favoriteListImport" ng-options="favList.id as favList.name for favList in data.favoriteList"> </select> - </div> </div> </div> + <hr/> + <table ng-repeat="voterList in data.voterList" class="voterList" ng-hide="data.poll.pollType == 'FREE'"> <tr ng-show="data.poll.pollType == 'GROUP'" ng-class="{'has-success':voterList.group.id && !voterList.group.restError}"> - <th colspan="2" ng-class="{'has-error':voterList.group.restError.name}"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" auto-save="saveVoterList(voterList)"/></th> + <th colspan="2" ng-class="{'has-error':voterList.group.restError.name}"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" auto-save="saveVoterList(voterList)" focus-me="!voterList.group.id"/></th> <th class="weight" ng-class="{'has-error':voterList.group.restError.weight}"> <input type="number" ng-model="voterList.group.weight" select-on-click class="form-control" auto-save="saveVoterList(voterList)" /> </th> <th class="action"> </th> </tr> @@ -67,22 +76,18 @@ </tr> <tr ng-repeat="member in voterList.members" ng-class="{'has-success':member.id && !member.restError}"> - <td> <div ng-class="{'has-error':member.restError.name}"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterListMember(member, voterList)"/></div></td> - <td> <div ng-class="{'has-error':member.restError.email}"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterListMember(member, voterList)" /></div></td> - <td class="weight"> <div ng-class="{'has-error':member.restError.weight}"><input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterListMember(member, voterList)"/></div></td> - <td class="action"> <div ng-show="member.id"><button class="btn btn-danger" ng-click="deleteVoterListMember(member, voterList);"><span class="glyphicon glyphicon-trash"></span></button></div></td> + <td> <input-error error="member.restError.name[0]"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterListMember(member, voterList)"/></input-error></td> + <td> <input-error error="member.restError.email[0]"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterListMember(member, voterList)" /></input-error></td> + <td class="weight"> <input-error error="member.restError.weight[0]"><input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterListMember(member, voterList)"/></input-error></td> + <td class="action"> <button class="btn btn-danger" ng-click="deleteVoterListMember(member, voterList);" tooltip="{{ 'action.restricted.deleteVoter' | translate }}"><span class="glyphicon glyphicon-trash"></span></button></td> </tr> <tr> <th colspan="4"> <button class="btn btn-info" ng-click="addVoter($index);"> <span class="glyphicon glyphicon-plus"></span> {{ 'action.restricted.addVoter' | translate }} </button> - <button class="btn btn-danger" ng-click="deleteVoterList(voterList);" ng-show="voterList.group.id"> <span class="glyphicon glyphicon-trash"></span> {{ 'action.restricted.deleteGroup' | translate }} </button> - <button class="btn btn-info" ng-click="importFavoriteList(voterList.group.id)"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.import.inGroup' | translate }}</button> + <button class="btn btn-danger" ng-click="deleteVoterList(voterList);"> <span class="glyphicon glyphicon-trash"></span> {{ 'action.restricted.deleteGroup' | translate }} </button> + <button class="btn btn-info" ng-click="importFavoriteList(voterList.group.id)" ng-if="data.favoriteList"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.import.inGroup' | translate }}</button> </th> - </tr> </table> - - <button class="btn btn-info" ng-show="data.poll.pollType == 'GROUP'" ng-click="addGroup()"><span class="glyphicon glyphicon-plus"></span> {{ 'action.restricted.addGroup' | translate }}</button> - <button class="btn btn-warning" ng-hide="data.poll.pollType == 'FREE'" disabled><span class="glyphicon glyphicon-envelope"></span> {{ 'action.restricted.notify' | translate }}</button> </div> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.