01/05: improvement auto-save, and add auto-save in poll-settings
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 5230e07ed7ebcad55b26036e7dd5087595c6123a Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Thu Jun 12 16:27:55 2014 +0200 improvement auto-save, and add auto-save in poll-settings --- pollen-ui-angular/src/main/webapp/js/app.js | 56 ++++++++++++------- .../src/main/webapp/js/controllers/pollCtrl.js | 18 ++++++- .../src/main/webapp/partials/poll-comment.html | 2 +- .../src/main/webapp/partials/poll-settings.html | 63 +++++++++++----------- 4 files changed, 89 insertions(+), 50 deletions(-) diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js index 102da70..e2e148f 100644 --- a/pollen-ui-angular/src/main/webapp/js/app.js +++ b/pollen-ui-angular/src/main/webapp/js/app.js @@ -175,19 +175,6 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC }; }) -.directive('inputError', function() { - return { - restrict:'A', - require: '?ngModel', - link: function (scope, element, attrs) { - element.bind('change', function () { - - }) - } - }; -}) - - .directive('selectOnClick', function () { return { restrict: 'A', @@ -203,12 +190,45 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC return { restrict : 'A', link : function (scope, element, attrs) { + scope.oldVal = {}; + scope.change = false; + scope.timeout; + scope.oldVal[attrs.ngModel] = scope.$eval(attrs.ngModel); + scope.$watch(attrs.ngModel, function (newVal, oldVal) { + if (newVal != scope.oldVal[attrs.ngModel]) { + scope.change = true; + } else { + scope.change = false; + } + }, true); + + var save = function () { + if (scope.change) { + // other change + scope.timeout = $timeout(function () { + scope.change = false; + scope.oldVal[attrs.ngModel] = scope.$eval(attrs.ngModel);; + scope.$apply(function () { + scope.$eval(attrs.autoSave); + }); + $timeout.cancel(scope.timeout); + }, 500); + } + }; + element.bind('change', function () { - scope.$apply(function () { - $timeout(function() { - scope.$eval(attrs.autoSave); - }, 100); - }); + if (scope.timeout) { + $timeout.cancel(scope.timeout) + } + save(); + }); + + element.bind('blur', function () { + if (scope.timeout) { + $timeout.cancel(scope.timeout) + } + // timeout for conflit with event change + $timeout(save, 50); }); } } 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 4c4e66b..26bea08 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -330,6 +330,14 @@ angular.module('pollControllers', []) $scope.savePoll = function () { var poll = angular.copy($scope.data.poll); poll.choice = angular.copy($scope.data.choices); + + if (angular.isDate(poll.beginDate)) { + poll.beginDate = poll.beginDate.getTime(); + } + if (angular.isDate(poll.endDate)) { + poll.endDate = poll.endDate.getTime(); + } + Poll.add(poll, function (data) { SessionStorage.save({saved: true}); if ($scope.data.poll.pollType != 'FREE') { @@ -377,6 +385,7 @@ angular.module('pollControllers', []) } $scope.callBackEditChoice = function (choice) { + console.log('save choice'); PollChoice.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, choice, function() { delete choice.restError; $scope.globalVariables.saved = true; @@ -539,7 +548,7 @@ angular.module('pollControllers', []) }; //////////////////////////////// - //// INIT POLL ///// + //// POLL ///// //////////////////////////////// var initPoll = function () { @@ -578,6 +587,13 @@ angular.module('pollControllers', []) }; $scope.savePoll = function () { + if (angular.isDate($scope.data.poll.beginDate)) { + $scope.data.poll.beginDate = $scope.data.poll.beginDate.getTime(); + } + if (angular.isDate($scope.data.poll.endDate)) { + $scope.data.poll.endDate = $scope.data.poll.endDate.getTime(); + } + $scope.data.poll.$update({permission:$scope.globalVariables.permission}, function (data) { $scope.globalVariables.saved = true; }, function (error) { diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-comment.html b/pollen-ui-angular/src/main/webapp/partials/poll-comment.html index 90e2ca2..cb1504a 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-comment.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-comment.html @@ -22,7 +22,7 @@ <h2>{{ 'title.comment' | translate }}</h2> <!-- begin for add comment --> - <form class="form-horizontal" ng-submit="postComment()"> + <form class="form-horizontal" ng-submit="postComment()" novalidate> <div class="form-group"> <label class="col-sm-2"> {{ 'user.name' | translate }} </label> <div class="col-sm-1"> diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-settings.html b/pollen-ui-angular/src/main/webapp/partials/poll-settings.html index ed890b0..0f277d5 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-settings.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-settings.html @@ -19,7 +19,7 @@ #L% --> -<form class="form-horizontal"> +<form class="form-horizontal" novalidate> <h4>Confiuration global</h4> <div class="form-group"> @@ -31,8 +31,9 @@ max-date="data.poll.endDate" ng-model="data.poll.beginDate" is-open="beginDateOpened" - ng-click="beginDateOpened = true" /> - </div> + ng-click="beginDateOpened = true" + auto-save="autoSavePoll()" /> + </div> </div> <div class="form-group"> @@ -43,16 +44,17 @@ min-date="data.poll.beginDate" ng-model="data.poll.endDate" is-open="endDateOpened" - ng-click="endDateOpened = true" /> + ng-click="endDateOpened = true" + auto-save="autoSavePoll()" /> </div> </div> <div class="form-group"> <label class="col-sm-4 control-label">Résultat : </label> <div class="col-sm-8"> - <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="EVERYBODY" /> Public</label> - <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="VOTER" /> Participants</label> - <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="CREATOR" /> Créateur</label> + <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="EVERYBODY" auto-save="autoSavePoll()" /> Public</label> + <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="VOTER" auto-save="autoSavePoll()" /> Participants</label> + <label><input type="radio" ng-model="data.poll.resultVisibility" name="resultVisibility" value="CREATOR" auto-save="autoSavePoll()" /> Créateur</label> </div> <!-- <div class="col-sm-8 btn-group"> @@ -66,8 +68,8 @@ <div class="form-group"> <label class="col-sm-4 control-label">Résultat continue : </label> <div class="col-sm-8 btn-group"> - <button class="btn btn-default" ng-model="data.poll.continuousResults" btn-radio="true">Oui</button> - <button class="btn btn-default" ng-model="data.poll.continuousResults" btn-radio="false">Non</button> + <button class="btn btn-default" ng-model="data.poll.continuousResults" btn-radio="true" auto-save="autoSavePoll()" >Oui</button> + <button class="btn btn-default" ng-model="data.poll.continuousResults" btn-radio="false" auto-save="autoSavePoll()" >Non</button> </div> </div> @@ -76,8 +78,8 @@ <div class="form-group"> <label class="col-sm-4 control-label">Ajout de choix par les votants :</label> <div class="col-sm-8 btn-group"> - <button class="btn btn-default" ng-model="data.poll.choiceAddAllowed" btn-radio="true">Oui</button> - <button class="btn btn-default" ng-model="data.poll.choiceAddAllowed" btn-radio="false">Non</button> + <button class="btn btn-default" ng-model="data.poll.choiceAddAllowed" btn-radio="true" auto-save="autoSavePoll()" >Oui</button> + <button class="btn btn-default" ng-model="data.poll.choiceAddAllowed" btn-radio="false" auto-save="autoSavePoll()" >Non</button> </div> </div> @@ -90,7 +92,8 @@ max-date="data.poll.endChoiceDate" ng-model="data.poll.beginChoiceDate" is-open="beginChoiceDateOpened" - ng-click="beginChoiceDateOpened = true" /> + ng-click="beginChoiceDateOpened = true" + auto-save="autoSavePoll()" /> </div> </div> <div class="form-group" ng-if="data.poll.choiceAddAllowed" for="endChoiceDate"> @@ -100,24 +103,24 @@ datepicker-popup="dd/MM/yyyy" min-date="data.poll.beginChoiceDate" max-date="data.poll.endDate" - ng-model="data.poll.endChoiceDate" is-open="endChoiceDateOpened" - ng-click="endChoiceDateOpened = true" /> + ng-click="endChoiceDateOpened = true" + auto-save="autoSavePoll()" /> </div> </div> <div class="form-group"> <label class="col-sm-4 control-label">Limiter les votes :</label> <div class="col-sm-8 btn-group"> - <button class="btn btn-default" ng-model="data.poll.limitedVote" btn-radio="true">Oui</button> - <button class="btn btn-default" ng-model="data.poll.limitedVote" btn-radio="false">Non</button> + <button class="btn btn-default" ng-model="data.poll.limitedVote" btn-radio="true" auto-save="autoSavePoll()">Oui</button> + <button class="btn btn-default" ng-model="data.poll.limitedVote" btn-radio="false" auto-save="autoSavePoll()">Non</button> </div> </div> <div class="form-group" ng-show="data.poll.limitedVote"> <label class="col-sm-4 control-label" for="popMaxChoiceNumber">Nombre de vote :</label> <div class="col-sm-6"> - <input type="text" class="form-control" id="popMaxChoiceNumber" ng-model="data.poll.maxChoiceNumber"/> + <input type="text" class="form-control" id="popMaxChoiceNumber" ng-model="data.poll.maxChoiceNumber" auto-save="autoSavePoll()" /> </div> </div> @@ -127,13 +130,13 @@ <label class="col-sm-4 control-label">Type : </label> <div class="col-sm-8"> <div class="btn-group"> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="1">Normal</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="2">Pourcentage</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="3">Condorcet</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="4">Nombre</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="5">Borda</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="6">Vote alternatif</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="7">Coombs</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="1" auto-save="autoSavePoll()">Normal</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="2" auto-save="autoSavePoll()">Pourcentage</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="3" auto-save="autoSavePoll()">Condorcet</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="4" auto-save="autoSavePoll()">Nombre</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="5" auto-save="autoSavePoll()">Borda</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="6" auto-save="autoSavePoll()">Vote alternatif</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteCountingType" btn-radio="7" auto-save="autoSavePoll()">Coombs</button> </div> <p>Description du types de vote</p> </div> @@ -142,18 +145,18 @@ <div class="form-group"> <label class="col-sm-4 control-label">Visibilité : </label> <div class="col-sm-8 btn-group"> - <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" btn-radio="'EVERYBODY'">Public</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" btn-radio="'VOTER'">Participants</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" btn-radio="'CREATOR'">Créateur</button> - <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" btn-radio="'ANONYMOUS'">Anonyme</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" auto-save="autoSavePoll()" btn-radio="'EVERYBODY'">Public</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" auto-save="autoSavePoll()" btn-radio="'VOTER'">Participants</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" auto-save="autoSavePoll()" btn-radio="'CREATOR'">Créateur</button> + <button type="button" class="btn btn-success" ng-model="data.poll.voteVisibility" auto-save="autoSavePoll()" btn-radio="'ANONYMOUS'">Anonyme</button> </div> </div> <div class="form-group"> <label class="col-sm-4 control-label">Autoriser les votes anonymes :</label> <div class="col-sm-8 btn-group"> - <button class="btn btn-default" ng-model="data.poll.anonymousVoteAllowed" btn-radio="true">Oui</button> - <button class="btn btn-default" ng-model="data.poll.anonymousVoteAllowed" btn-radio="false">Non</button> + <button class="btn btn-default" ng-model="data.poll.anonymousVoteAllowed" btn-radio="true" auto-save="autoSavePoll()">Oui</button> + <button class="btn btn-default" ng-model="data.poll.anonymousVoteAllowed" btn-radio="false" auto-save="autoSavePoll()">Non</button> </div> </div> </form> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm