added submitting form loading indicator

This commit is contained in:
David Baldwynn 2015-11-12 12:51:44 -08:00
parent aa72e1ac3c
commit a66dd0fc20
16 changed files with 93 additions and 43 deletions

View file

@ -48,7 +48,29 @@ angular.module('forms').config(['$stateProvider',
templateUrl: 'modules/forms/views/adminTabs/design.html' templateUrl: 'modules/forms/views/adminTabs/design.html'
}).state('viewForm.analyze', { }).state('viewForm.analyze', {
url: '/analyze', url: '/analyze',
templateUrl: 'modules/forms/views/adminTabs/analyze.html' templateUrl: 'modules/forms/views/adminTabs/analyze.html',
resolve: {
mySubmissions: function() {
$http.get('/forms/'+$stateParams.formId+'/submissions')
.success(function(data, status, headers){
var _tmpSubFormFields,
defaultFormFields = _.cloneDeep($scope.myform.form_fields);
//Iterate through form's submissions
for(var i=0; i<data.length; i++){
_tmpSubFormFields = _.merge(defaultFormFields, data[i].form_fields);
data[i].form_fields = _tmpSubFormFields;
data[i].selected = false;
}
return data;
})
.error(function(err){
console.error('Could not fetch form submissions.\nError: '+err);
});
}
}
}).state('viewForm.create', { }).state('viewForm.create', {
url: '/create', url: '/create',
templateUrl: 'modules/forms/views/adminTabs/create.html' templateUrl: 'modules/forms/views/adminTabs/create.html'

View file

@ -13,16 +13,12 @@
z-index: 1; z-index: 1;
} }
.busy-updating-wrapper .message { .busy-submitting-wrapper {
text-align: center; position: fixed;
font-size: 20px; top: 50%;
position: fixed; left: 0px;
bottom: 0; right: 0px;
right: 70px; bottom: 0px;
background-color: gray;
color: white;
padding: 5px 15px 5px 10px;
z-index: 9999;
} }
section.public-form { section.public-form {

View file

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope', '$http', 'Upload', '$timeout', 'TimeCounter', 'Auth', 'FormFields', angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope', '$http', 'Upload', '$timeout', 'TimeCounter', 'Auth', 'FormFields', 'mySubmissions',
function ($rootScope, $http, Upload, $timeout, TimeCounter, Auth, FormFields) { function ($rootScope, $http, Upload, $timeout, TimeCounter, Auth, FormFields, mySubmissions) {
return { return {
templateUrl: 'modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html', templateUrl: 'modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html',
restrict: 'E', restrict: 'E',
@ -12,7 +12,7 @@ angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope',
controller: function($scope){ controller: function($scope){
$scope.table = { $scope.table = {
masterChecker: false, masterChecker: false,
rows: [] rows: mySubmissions
}; };
/* /*
@ -64,7 +64,6 @@ angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope',
.error(function(err){ .error(function(err){
console.error('Could not fetch form submissions.\nError: '+err); console.error('Could not fetch form submissions.\nError: '+err);
}); });
}; };
//Delete selected submissions of Form //Delete selected submissions of Form

View file

@ -27,39 +27,38 @@ angular.module('forms').directive('submitFormDirective', ['$http', '$timeout', '
/* /*
** Field Controls ** Field Controls
*/ */
$scope.setActiveField = function(field_id, field_index) { $rootScope.setActiveField = function(field_id, field_index) {
if($scope.selected === null){ if($scope.selected === null){
$scope.selected = { $scope.selected = {
_id: '', _id: '',
index: 0, index: 0,
}; };
} }
// console.log('field_id: '+field_id); console.log('field_id: '+field_id);
// console.log('field_index: '+field_index); console.log('field_index: '+field_index);
// console.log($scope.selected); console.log($scope.selected);
$scope.selected._id = field_id; $scope.selected._id = field_id;
$scope.selected.index = field_index; $scope.selected.index = field_index;
setTimeout(function() { setTimeout(function() {
$('html, body').animate({ $('html, body').animate({
scrollTop: $('.activeField').offset().top scrollTop: $('.activeField').offset().top
},350); },200);
}, 10); }, 10);
}; };
$scope.nextField = function(){ $scope.nextField = function(){
if($scope.selected.index < $scope.myform.form_fields.length-1){ if($scope.selected.index < $scope.myform.form_fields.length-1){
$scope.selected.index++; $scope.selected.index++;
$scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id; $scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id;
$scope.setActiveField($scope.selected._id, $scope.selected.index); $rootScope.setActiveField($scope.selected._id, $scope.selected.index);
} }
}; };
$scope.prevField = function(){ $scope.prevField = function(){
if($scope.selected.index > 0){ if($scope.selected.index > 0){
$scope.selected.index = $scope.selected.index - 1; $scope.selected.index = $scope.selected.index - 1;
$scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id; $scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id;
$scope.setActiveField($scope.selected._id, $scope.selected.index); $rootScope.setActiveField($scope.selected._id, $scope.selected.index);
} }
}; };

View file

@ -1,10 +1,11 @@
<div class="field row" ng-click="setActiveField(field._id, index)" ng-if="field.fieldOptions.length > 0"> <div class="field row" ng-if="field.fieldOptions.length > 0" ng-click="setActiveField(field._id, index)">
<div class="col-xs-12 field-title field-title">{{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">(* required)</span> </div> <div class="col-xs-12 field-title field-title">{{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">(* required)</span> </div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<div ng-repeat="option in field.fieldOptions" class="row-fluid"> <div ng-repeat="option in field.fieldOptions" class="row-fluid">
<label class="btn btn-info col-xs-3"> <label class="btn btn-info col-xs-3">
<input ng-focus="setActiveField(field._id, index)" ng-style="{'color': design.colors.answerColor}" <input ng-focus="setActiveField(field._id, index)"
ng-style="{'color': design.colors.answerColor}"
type="checkbox" type="checkbox"
value="{{option.option_id}}" value="{{option.option_id}}"
ng-model="field.fieldValue" ng-model="field.fieldValue"

View file

@ -8,7 +8,13 @@
</div> </div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<div class="control-group input-append"> <div class="control-group input-append">
<input ng-focus="setActiveField(field._id, index)" ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}" ui-date="dateOptions" ng-model="field.fieldValue" ng-model-options="{ debounce: 250 }" ng-required="field.required" ng-disabled="field.disabled"> <input ng-focus="setActiveField(field._id, index)"
ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}"
ui-date="dateOptions"
ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }"
ng-required="field.required"
ng-disabled="field.disabled">
</div> </div>
</div> </div>
</div> </div>

View file

@ -10,7 +10,8 @@
<select ng-model="field.fieldValue" <select ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }" ng-model-options="{ debounce: 250 }"
ng-required="field.required" ng-required="field.required"
ng-disabled="field.disabled"> ng-disabled="field.disabled"
ng-focus="setActiveField(field._id, index)">
<option ng-repeat="option in field.fieldOptions" <option ng-repeat="option in field.fieldOptions"
ng-selected="option.option_value == field.fieldValue" ng-selected="option.option_value == field.fieldValue"
ng-value="option.option_value"> ng-value="option.option_value">

View file

@ -1,13 +1,16 @@
<div class="field row" ng-click="setActiveField(field._id, index)"> <div class="field row" ng-click="setActiveField(field._id, index)">
<div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div> <div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<input ng-focus="setActiveField(field._id, index)" ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}" type="email" <input ng-focus="setActiveField(field._id, index)"
ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}"
type="email"
class="text-field-input" class="text-field-input"
placeholder="email@example.com" placeholder="email@example.com"
value="{{field.fieldValue}}" value="{{field.fieldValue}}"
ng-model="field.fieldValue" ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }" ng-model-options="{ debounce: 250 }"
ng-required="field.required" ng-required="field.required"
ng-disabled="field.disabled"/> ng-disabled="field.disabled"
ng-focus="setActiveField(field._id, index)"/>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
<div class="field row" ng-if="form.autofillPDFs"> <div class="field row" ng-if="form.autofillPDFs" ng-click="setActiveField(field._id, index)">
<div class="col-sm-4 field-title"> <div class="col-sm-4 field-title">
<h5>{{field.title}} <span class="required-error" ng-show="field.required && field.fieldValue == 0">(* required)</span></h5> <h5>{{field.title}} <span class="required-error" ng-show="field.required && field.fieldValue == 0">(* required)</span></h5>
</div> </div>

View file

@ -1,6 +1,15 @@
<div class="field row" ng-click="setActiveField(field._id, index)"> <div class="field row" ng-click="setActiveField(field._id, index)">
<div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div> <div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<input ng-focus="setActiveField(field._id, index)" ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}" type="url" class="text-field-input" placeholder="https://example.com/something" value="{{field.fieldValue}}" ng-model="field.fieldValue" ng-model-options="{ debounce: 250 }" ng-required="field.required" ng-disabled="field.disabled"/> <input ng-focus="setActiveField(field._id, index)"
ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}"
type="url"
class="text-field-input"
placeholder="https://example.com/something"
value="{{field.fieldValue}}"
ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }"
ng-required="field.required"
ng-disabled="field.disabled"/>
</div> </div>
</div> </div>

View file

@ -1,6 +1,16 @@
<div class="field row" ng-click="setActiveField(field._id, index)"> <div class="field row" ng-click="setActiveField(field._id, index)">
<div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div> <div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<input ng-focus="setActiveField(field._id, index)" ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}" type="number" class="text-field-input" placeholder="" value="{{field.fieldValue}}" ng-model="field.fieldValue" ng-model-options="{ debounce: 250 }" ng-required="field.required" ng-disabled="field.disabled"/> <input ng-focus="setActiveField(field._id, index)"
ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}"
type="number"
class="text-field-input"
placeholder=""
value="{{field.fieldValue}}"
ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }"
ng-required="field.required"
ng-disabled="field.disabled"
ng-focus="setActiveField(field._id, index)"/>
</div> </div>
</div> </div>

View file

@ -7,7 +7,7 @@
<div class="row field-title field-input"> <div class="row field-title field-input">
<p class="col-xs-12">{{field.description}} </p> <p class="col-xs-12">{{field.description}} </p>
<br> <br>
<button class="btn btn-info col-xs-6 col-xs-offset-3" style="font-size: 1.3em;" ng-focus="setActiveField(field._id, index)"> <button class="btn btn-info col-xs-6 col-xs-offset-3" style="font-size: 1.3em;" ng-focus="setActiveField(field._id, index)" ng-click="nextField()">
Continue Continue
</button> </button>
</div> </div>

View file

@ -1,7 +1,14 @@
<div class="field row" ng-click="setActiveField(field._id, index)"> <div class="field row" ng-click="setActiveField(field._id, index)">
<div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div> <div class="col-xs-12 field-title" ng-style="{'color': design.colors.questionColor}"><h3><span class="fa fa-angle-double-right"></span> {{field.title}} <span class="required-error" ng-show="field.required && !field.fieldValue">*(required)</span></h3></div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<textarea class="textarea" type="text" ng-model="field.fieldValue" ng-model-options="{ debounce: 250 }" value="{{field.fieldValue}}" ng-required="field.required" ng-disabled="field.disabled"></textarea> <textarea class="textarea" type="text"
ng-model="field.fieldValue"
ng-model-options="{ debounce: 250 }"
value="{{field.fieldValue}}"
ng-required="field.required"
ng-disabled="field.disabled"
ng-focus="setActiveField(field._id, index)">
</textarea>
</div> </div>
</div> </div>

View file

@ -9,6 +9,7 @@
</div> </div>
<div class="col-xs-12 field-input"> <div class="col-xs-12 field-input">
<input ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}" <input ng-style="{'color': design.colors.answerColor, 'border-color': design.colors.answerColor}"
ng-focus="setActiveField(field._id, index)"
type="text" type="text"
class="text-field-input" class="text-field-input"
ng-model="field.fieldValue" ng-model="field.fieldValue"

View file

@ -1,6 +1,4 @@
<div cg-busy="{promise:submitPromise,message:'Submitting form...',backdrop:true}"></div> <section class="overlay submitform" ng-if="selected._id.length" ng-click="hideOverlay()"></section>
<section class="overlay submitform" ng-if="selected.index" ng-click="hideOverlay()"></section>
<!-- Start Page View --> <!-- Start Page View -->
<div ng-show="!myform.submitted && myform.startPage.showStart" class="form-submitted"> <div ng-show="!myform.submitted && myform.startPage.showStart" class="form-submitted">
@ -29,7 +27,7 @@
</div> </div>
<!-- Form Fields View --> <!-- Form Fields View -->
<div ng-show="!myform.submitted && !myform.startPage.showStart" data-ng-init="initFocus()"> <div cg-busy="{promise:submitPromise,message:'Submitting form...',wrapperClass:'busy-submitting-wrapper',backdrop:true}" ng-show="!myform.submitted && !myform.startPage.showStart">
<div class="field row" style="padding-bottom:5em;"> <div class="field row" style="padding-bottom:5em;">
<div class="col-sm-10 col-sm-offset-1"> <div class="col-sm-10 col-sm-offset-1">
<h1>{{ myform.title }} <span style="font-size:0.8em; color: #bbb;" ng-if="!myform.isLive">(private preview)</span></h1> <h1>{{ myform.title }} <span style="font-size:0.8em; color: #bbb;" ng-if="!myform.isLive">(private preview)</span></h1>
@ -38,8 +36,8 @@
</div> </div>
<div class="row"> <div class="row">
<form name="myForm" class="submission-form col-sm-12 col-md-offset-1 col-md-10"> <form name="myForm" class="submission-form col-sm-12 col-md-offset-1 col-md-10">
<div ng-repeat="field in myform.form_fields" ng-if="!field.deletePreserved"> <div ng-repeat="field in myform.form_fields" ng-if="!field.deletePreserved" ng-class="{activeField: selected._id == field._id }" class="row field-directive">
<field-directive field="field" design="myform.design" index="$index" ng-class="{activeField: selected._id == field._id }" class="row field-directive"> <field-directive field="field" design="myform.design" index="$index">
</field-directive> </field-directive>
</div> </div>
</form> </form>
@ -57,7 +55,7 @@
<div class="container" > <div class="container" >
<div class="row"> <div class="row">
<div class="col-xs-4 col-xs-offset-4 col-sm-4 col-sm-offset-4 text-center col-md-3 col-md-offset-0" ng-show="!myform.submitted"> <div class="col-xs-4 col-xs-offset-4 col-sm-4 col-sm-offset-4 text-center col-md-3 col-md-offset-0" ng-show="!myform.submitted">
<p class="lead">{{myform | formValidity}} out of {{myform.visible_form_fields.length}} answered</p> <p class="lead">{{myform | formValidity}} out of {{myform.visible_form_fields.length}} answered</p>
</div> </div>
<div class="hidden-xs hidden-sm col-md-6 col-md-offset-3 row"> <div class="hidden-xs hidden-sm col-md-6 col-md-offset-3 row">
<div class="col-md-4 col-md-offset-2" ng-if="!authentication.isAuthenticated()"> <div class="col-md-4 col-md-offset-2" ng-if="!authentication.isAuthenticated()">

View file

@ -1,6 +1,4 @@
<section class="public-form" ng-style="{ 'background-color': myform.design.colors.backgroundColor }"> <section class="public-form" ng-style="{ 'background-color': myform.design.colors.backgroundColor }">
<submit-form-directive myform="myform"></submit-form-directive> <submit-form-directive myform="myform"></submit-form-directive>
</section> </section>