fixed field preview

This commit is contained in:
David Baldwynn 2017-03-10 11:26:07 -08:00
parent 55b6a37ad6
commit 98c6b0cbe2
No known key found for this signature in database
GPG key ID: 15D1C13202224A9B
14 changed files with 183 additions and 225 deletions

View file

@ -198,7 +198,6 @@ exports.update = function(req, res) {
var form = req.form;
if (req.body.changes) {
console.log(req.body.changes);
var formChanges = req.body.changes;
formChanges.forEach(function (change) {
@ -207,8 +206,14 @@ exports.update = function(req, res) {
} else {
//Unless we have 'admin' privileges, updating form admin is disabled
if(req.body.form && req.user.roles.indexOf('admin') === -1) {
req.body.form.admin = null;
delete req.body.form.admin;
}
if(form.analytics == null){
form.analytics.visitors = [];
form.analytics.gaCode = '';
}
//Do this so we can create duplicate fields
var checkForValidId = new RegExp('^[0-9a-fA-F]{24}$');
for(var i=0; i<req.body.form.form_fields.length; i++){
@ -218,6 +223,7 @@ exports.update = function(req, res) {
}
}
form = _.extend(form, req.body.form);
console.log(form);
}
form.save(function(err, form) {

View file

@ -179,7 +179,11 @@ var FormSchema = new Schema({
** In-Form Analytics Virtual Attributes
*/
FormSchema.virtual('analytics.views').get(function () {
return this.analytics.visitors.length;
if(this.analytics && this.analytics.visitors && this.analytics.visitors.length > 0){
return this.analytics.visitors.length;
} else {
return 0;
}
});
FormSchema.virtual('analytics.submissions').get(function () {
@ -187,7 +191,11 @@ FormSchema.virtual('analytics.submissions').get(function () {
});
FormSchema.virtual('analytics.conversionRate').get(function () {
return this.submissions.length/this.analytics.visitors.length*100;
if(this.analytics && this.analytics.visitors && this.analytics.visitors.length > 0){
return this.submissions.length/this.analytics.visitors.length*100;
} else {
return 0;
}
});
FormSchema.virtual('analytics.fields').get(function () {

View file

@ -130,7 +130,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",
"<div><div style=\"text-align: center; font-size: 20px;position: fixed; bottom: 0; right: 55px; background-color: gray; color: white; padding: 5px 15px 5px 10px; z-index: 10\">{{$message}}</div></div>");
$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> &nbsp;<span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> &nbsp;<span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, myform, false, false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",
"<form class=\"row container\" name=editForm><script type=text/ng-template id=editFieldModal.html class=edit-field-modal><div class=\"modal-body\">\n" +
" <div class=\"row\">\n" +
@ -211,17 +211,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <a></a>\n" +
" </span>\n" +
" </label>\n" +
" <!--\n" +
" <label class=\"btn col-xs-5\">\n" +
" <input type=\"radio\" ng-value=\"true\" ng-model=\"field.required\" name=\"required{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'YES' | translate }}</span>\n" +
" </label>\n" +
"\n" +
" <label class=\"btn col-xs-5 col-xs-offset-1\">\n" +
" <input type=\"radio\" ng-value=\"false\" ng-model=\"field.required\" name=\"required{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'NO' | translate }}</span>\n" +
" </label>\n" +
" -->\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -236,19 +225,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <a></a>\n" +
" </span>\n" +
" </label>\n" +
" <!--\n" +
" <label class=\"btn col-xs-5\">\n" +
" <input type=\"radio\" ng-value=\"true\"\n" +
" ng-model=\"field.disabled\" name=\"disabled{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'YES' | translate }}</span>\n" +
" </label>\n" +
"\n" +
" <label class=\"btn col-xs-5 col-xs-offset-1\">\n" +
" <input type=\"radio\" ng-value=\"false\"\n" +
" ng-model=\"field.disabled\" name=\"disabled{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'NO' | translate }}</span>\n" +
" </label>\n" +
" -->\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -256,7 +232,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <div class=\"col-md-4 col-xs-12 field-input\">{{ 'LOGIC_JUMP' | translate }}</div>\n" +
" <div class=\"col-md-8 col-xs-12 field-input\">\n" +
" <label class=\"switch-light switch-holo\" onclick=\"\">\n" +
" <button ng-click=\"showLogicJump = !showLogicJump\">Click</button>\n" +
" <input type=\"checkbox\" ng-model=\"showLogicJump\">\n" +
" <span>\n" +
" <span> {{ 'OFF' | translate }}</span>\n" +
@ -266,9 +241,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </label>\n" +
" </div>\n" +
" </div>\n" +
" <span>\n" +
" showLogicJump: {{showLogicJump}}\n" +
" </span>\n" +
" <div class=\"row question\" ng-if=\"!!showLogicJump\">\n" +
" <div class=\"col-md-4 col-sm-12\">\n" +
"\n" +
@ -335,7 +307,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
" <div class=\"col-md-2\">\n" +
"\n" +
" <b>Jumps to </b>\n" +
" <b>then jump to </b>\n" +
" </div>\n" +
" <div class=\"col-md-10\">\n" +
" <select style=\"width:100%\" ng-model=\"field.logicJump.jumpTo\"\n" +
@ -349,7 +321,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
" </div>\n" +
" <div class=\"modal-footer row\">\n" +
" <button type=\"submit\" ng-click=\"update(false, null)\" class=\"btn btn-signup btn-rounded\">\n" +
" <button type=\"submit\" ng-click=\"saveField(false, $parent.myform, false, true)\" class=\"btn btn-signup btn-rounded\">\n" +
" {{ 'SAVE_FIELD' | translate }}\n" +
" </button>\n" +
"\n" +
@ -360,8 +332,10 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
"\n" +
" <div class=\"preview-field-panel col-md-6 hidden-sm hidden-xs container\">\n" +
" <field-directive field=\"field\" validate=\"false\" class=\"preview-field\">\n" +
" </field-directive>\n" +
" <form>\n" +
" <field-directive field=\"field\" validate=\"false\" class=\"preview-field\">\n" +
" </field-directive>\n" +
" </form>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -468,6 +442,7 @@ angular.module('forms').config(['$translateProvider', function ($translateProvid
ON: 'ON',
OFF: 'OFF',
REQUIRED_FIELD: 'Required',
LOGIC_JUMP: 'Logic Jump',
//Admin Form View
ARE_YOU_SURE: 'Are you ABSOLUTELY sure?',
@ -2073,7 +2048,7 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
};
// Update existing Form
$scope.update = $rootScope.update = function(updateImmediately, diffChanges, refreshAfterUpdate, cb){
$scope.update = $rootScope.update = function(updateImmediately, data, isDiffed, refreshAfterUpdate, cb){
refreshFrame();
var continueUpdate = true;
@ -2082,28 +2057,58 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
}
//Update form **if we are not currently updating** or if **shouldUpdateNow flag is set**
if(continueUpdate){
var err = null;
if(continueUpdate) {
var err = null;
if(!updateImmediately){ $rootScope.saveInProgress = true; }
if (!updateImmediately) {
$rootScope.saveInProgress = true;
}
$scope.updatePromise = $http.put('/forms/'+$scope.myform._id, { changes: diffChanges })
.then(function(response){
if (isDiffed) {
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {changes: data})
.then(function (response) {
if(refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
// console.log(response.data);
}).catch(function(response){
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function() {
// console.log('finished updating');
if(!updateImmediately){$rootScope.saveInProgress = false; }
if (refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
// console.log(response.data);
}).catch(function (response) {
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function () {
// console.log('finished updating');
if (!updateImmediately) {
$rootScope.saveInProgress = false;
}
if( (typeof cb) === 'function'){
return cb(err);
}
});
if ((typeof cb) === 'function') {
return cb(err);
}
});
} else {
var dataToSend = data;
delete dataToSend.analytics.visitors;
delete dataToSend.submissions;
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
.then(function (response) {
if (refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
}).catch(function (response) {
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function () {
// console.log('finished updating');
if (!updateImmediately) {
$rootScope.saveInProgress = false;
}
if ((typeof cb) === 'function') {
return cb(err);
}
});
}
}
};
@ -2443,32 +2448,25 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
$scope.field = curr_field;
$scope.showLogicJump = false;
$scope.$watch(function(oldValue, newValue){
console.log(newValue);
});
$scope.saveField = function(){
curr_field = $scope.field;
$scope.$parent.update(false, $scope.$parent.myform, false, true, function(){
$uibModalInstance.close();
});
};
$scope.cancel = function(){
$uibModalInstance.close();
};
}]
});
$scope.editFieldModal.result.then(function (selectedItem) {
$scope.selected = selectedItem;
}, function () {
console.log('Edit Modal dismissed at: ' + new Date());
});
};
$scope.cancelEditModal = function(){
if($scope.editModal){
$scope.editFieldModal.dismiss('cancel');
}
};
/*
** Setup Angular-Input-Star Shape Dropdown
*/
//Populate Name to Font-awesomeName Conversion Map
$scope.select2FA = {
$scope.select2FA = {
'Heart': 'Heart',
'Star': 'Star',
'thumbs-up': 'Thumbs Up',
@ -2502,24 +2500,6 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
//Populate local scope with rootScope methods/variables
$scope.update = $rootScope.update;
// LOGIC JUMP METHODS
$scope.removeLogicJump = function (field_index) {
$scope.myform.form_fields[field_index].logicJump.fieldA = null;
$scope.myform.form_fields[field_index].logicJump.valueB = null;
};
$scope.addNewLogicJump = function (field_index) {
var form_fields = $scope.myform.form_fields;
var currField = form_fields[field_index];
if (form_fields.length > 1 && currField._id) {
var newLogicJump = {
fieldA: currField._id
};
currField.logicJump = newLogicJump;
}
};
/*
** FormFields (ui-sortable) drag-and-drop configuration
*/
@ -2575,7 +2555,8 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
//Add newField to form_fields array
$scope.myform.form_fields.push(newField);
}
return newField;
$scope.openEditModal(newField);
};
// Delete particular field on button click

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -130,7 +130,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",
"<div><div style=\"text-align: center; font-size: 20px;position: fixed; bottom: 0; right: 55px; background-color: gray; color: white; padding: 5px 15px 5px 10px; z-index: 10\">{{$message}}</div></div>");
$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> &nbsp;<span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> &nbsp;<span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> &nbsp;<span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> &nbsp;<span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, myform, false, false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",
"<form class=\"row container\" name=editForm><script type=text/ng-template id=editFieldModal.html class=edit-field-modal><div class=\"modal-body\">\n" +
" <div class=\"row\">\n" +
@ -211,17 +211,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <a></a>\n" +
" </span>\n" +
" </label>\n" +
" <!--\n" +
" <label class=\"btn col-xs-5\">\n" +
" <input type=\"radio\" ng-value=\"true\" ng-model=\"field.required\" name=\"required{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'YES' | translate }}</span>\n" +
" </label>\n" +
"\n" +
" <label class=\"btn col-xs-5 col-xs-offset-1\">\n" +
" <input type=\"radio\" ng-value=\"false\" ng-model=\"field.required\" name=\"required{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'NO' | translate }}</span>\n" +
" </label>\n" +
" -->\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -236,19 +225,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <a></a>\n" +
" </span>\n" +
" </label>\n" +
" <!--\n" +
" <label class=\"btn col-xs-5\">\n" +
" <input type=\"radio\" ng-value=\"true\"\n" +
" ng-model=\"field.disabled\" name=\"disabled{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'YES' | translate }}</span>\n" +
" </label>\n" +
"\n" +
" <label class=\"btn col-xs-5 col-xs-offset-1\">\n" +
" <input type=\"radio\" ng-value=\"false\"\n" +
" ng-model=\"field.disabled\" name=\"disabled{{field._id}}\"/>\n" +
" <span> &nbsp; {{ 'NO' | translate }}</span>\n" +
" </label>\n" +
" -->\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -256,7 +232,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" <div class=\"col-md-4 col-xs-12 field-input\">{{ 'LOGIC_JUMP' | translate }}</div>\n" +
" <div class=\"col-md-8 col-xs-12 field-input\">\n" +
" <label class=\"switch-light switch-holo\" onclick=\"\">\n" +
" <button ng-click=\"showLogicJump = !showLogicJump\">Click</button>\n" +
" <input type=\"checkbox\" ng-model=\"showLogicJump\">\n" +
" <span>\n" +
" <span> {{ 'OFF' | translate }}</span>\n" +
@ -266,9 +241,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </label>\n" +
" </div>\n" +
" </div>\n" +
" <span>\n" +
" showLogicJump: {{showLogicJump}}\n" +
" </span>\n" +
" <div class=\"row question\" ng-if=\"!!showLogicJump\">\n" +
" <div class=\"col-md-4 col-sm-12\">\n" +
"\n" +
@ -335,7 +307,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
" <div class=\"col-md-2\">\n" +
"\n" +
" <b>Jumps to </b>\n" +
" <b>then jump to </b>\n" +
" </div>\n" +
" <div class=\"col-md-10\">\n" +
" <select style=\"width:100%\" ng-model=\"field.logicJump.jumpTo\"\n" +
@ -349,7 +321,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
" </div>\n" +
" <div class=\"modal-footer row\">\n" +
" <button type=\"submit\" ng-click=\"update(false, null)\" class=\"btn btn-signup btn-rounded\">\n" +
" <button type=\"submit\" ng-click=\"saveField(false, $parent.myform, false, true)\" class=\"btn btn-signup btn-rounded\">\n" +
" {{ 'SAVE_FIELD' | translate }}\n" +
" </button>\n" +
"\n" +
@ -360,8 +332,10 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
" </div>\n" +
"\n" +
" <div class=\"preview-field-panel col-md-6 hidden-sm hidden-xs container\">\n" +
" <field-directive field=\"field\" validate=\"false\" class=\"preview-field\">\n" +
" </field-directive>\n" +
" <form>\n" +
" <field-directive field=\"field\" validate=\"false\" class=\"preview-field\">\n" +
" </field-directive>\n" +
" </form>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
@ -666,7 +640,7 @@ angular.module('view-form').config(['$stateProvider',
}
$.ajaxSetup( { "async": false } );
var geoData = $.getJSON('//freegeoip.net/json/').responseJSON;
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
$.ajaxSetup( { "async": true } );
// Create a new message object
@ -1403,7 +1377,7 @@ angular.module('view-form').directive('submitFormDirective', ['$http', 'TimeCoun
var getIpAndGeo = function(){
//Get Ip Address and GeoLocation Data
$.ajaxSetup( { "async": false } );
var geoData = $.getJSON('//freegeoip.net/json/').responseJSON;
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
$.ajaxSetup( { "async": true } );
return {

File diff suppressed because one or more lines are too long

View file

@ -329,7 +329,7 @@ angular.module('view-form').directive('submitFormDirective', ['$http', 'TimeCoun
var getIpAndGeo = function(){
//Get Ip Address and GeoLocation Data
$.ajaxSetup( { "async": false } );
var geoData = $.getJSON('//freegeoip.net/json/').responseJSON;
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
$.ajaxSetup( { "async": true } );
return {

View file

@ -29,7 +29,7 @@
}
$.ajaxSetup( { "async": false } );
var geoData = $.getJSON('//freegeoip.net/json/').responseJSON;
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
$.ajaxSetup( { "async": true } );
// Create a new message object

View file

@ -108,7 +108,7 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
};
// Update existing Form
$scope.update = $rootScope.update = function(updateImmediately, diffChanges, refreshAfterUpdate, cb){
$scope.update = $rootScope.update = function(updateImmediately, data, isDiffed, refreshAfterUpdate, cb){
refreshFrame();
var continueUpdate = true;
@ -117,28 +117,58 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
}
//Update form **if we are not currently updating** or if **shouldUpdateNow flag is set**
if(continueUpdate){
var err = null;
if(continueUpdate) {
var err = null;
if(!updateImmediately){ $rootScope.saveInProgress = true; }
if (!updateImmediately) {
$rootScope.saveInProgress = true;
}
$scope.updatePromise = $http.put('/forms/'+$scope.myform._id, { changes: diffChanges })
.then(function(response){
if (isDiffed) {
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {changes: data})
.then(function (response) {
if(refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
// console.log(response.data);
}).catch(function(response){
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function() {
// console.log('finished updating');
if(!updateImmediately){$rootScope.saveInProgress = false; }
if (refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
// console.log(response.data);
}).catch(function (response) {
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function () {
// console.log('finished updating');
if (!updateImmediately) {
$rootScope.saveInProgress = false;
}
if( (typeof cb) === 'function'){
return cb(err);
}
});
if ((typeof cb) === 'function') {
return cb(err);
}
});
} else {
var dataToSend = data;
delete dataToSend.analytics.visitors;
delete dataToSend.submissions;
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
.then(function (response) {
if (refreshAfterUpdate) $rootScope.myform = $scope.myform = response.data;
}).catch(function (response) {
console.log('Error occured during form UPDATE.\n');
// console.log(response.data);
err = response.data;
}).finally(function () {
// console.log('finished updating');
if (!updateImmediately) {
$rootScope.saveInProgress = false;
}
if ((typeof cb) === 'function') {
return cb(err);
}
});
}
}
};

View file

@ -19,6 +19,11 @@
flex-direction: column;
justify-content: center;
}
.edit-field-modal-window .preview-field-panel form {
padding-right: 20px;
}
.edit-field-modal-window .preview-field {
resize: vertical;
}

View file

@ -33,32 +33,25 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
$scope.field = curr_field;
$scope.showLogicJump = false;
$scope.$watch(function(oldValue, newValue){
console.log(newValue);
});
$scope.saveField = function(){
curr_field = $scope.field;
$scope.$parent.update(false, $scope.$parent.myform, false, true, function(){
$uibModalInstance.close();
});
};
$scope.cancel = function(){
$uibModalInstance.close();
};
}
});
$scope.editFieldModal.result.then(function (selectedItem) {
$scope.selected = selectedItem;
}, function () {
console.log('Edit Modal dismissed at: ' + new Date());
});
};
$scope.cancelEditModal = function(){
if($scope.editModal){
$scope.editFieldModal.dismiss('cancel');
}
};
/*
** Setup Angular-Input-Star Shape Dropdown
*/
//Populate Name to Font-awesomeName Conversion Map
$scope.select2FA = {
$scope.select2FA = {
'Heart': 'Heart',
'Star': 'Star',
'thumbs-up': 'Thumbs Up',
@ -92,24 +85,6 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
//Populate local scope with rootScope methods/variables
$scope.update = $rootScope.update;
// LOGIC JUMP METHODS
$scope.removeLogicJump = function (field_index) {
$scope.myform.form_fields[field_index].logicJump.fieldA = null;
$scope.myform.form_fields[field_index].logicJump.valueB = null;
};
$scope.addNewLogicJump = function (field_index) {
var form_fields = $scope.myform.form_fields;
var currField = form_fields[field_index];
if (form_fields.length > 1 && currField._id) {
var newLogicJump = {
fieldA: currField._id
};
currField.logicJump = newLogicJump;
}
};
/*
** FormFields (ui-sortable) drag-and-drop configuration
*/
@ -165,7 +140,8 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
//Add newField to form_fields array
$scope.myform.form_fields.push(newField);
}
return newField;
$scope.openEditModal(newField);
};
// Delete particular field on button click

View file

@ -116,7 +116,7 @@
</div>
<div class="row">
<div class="col-sm-offset-4 col-sm-2">
<button class="btn btn-signup btn-rounded" type="button" ng-click="update(false, null)"><i class="icon-arrow-left icon-white"></i>{{ 'SAVE_CHANGES' | translate }}</button>
<button class="btn btn-signup btn-rounded" type="button" ng-click="update(false, myform, false, false, null)"><i class="icon-arrow-left icon-white"></i>{{ 'SAVE_CHANGES' | translate }}</button>
</div>
<div class="col-sm-1">
<button class="btn btn-secondary btn-rounded" type="button" ng-click="resetForm()"><i class="icon-eye-open icon-white"></i>{{ 'CANCEL' | translate }}</button>

View file

@ -81,17 +81,6 @@
<a></a>
</span>
</label>
<!--
<label class="btn col-xs-5">
<input type="radio" ng-value="true" ng-model="field.required" name="required{{field._id}}"/>
<span> &nbsp; {{ 'YES' | translate }}</span>
</label>
<label class="btn col-xs-5 col-xs-offset-1">
<input type="radio" ng-value="false" ng-model="field.required" name="required{{field._id}}"/>
<span> &nbsp; {{ 'NO' | translate }}</span>
</label>
-->
</div>
</div>
@ -106,19 +95,6 @@
<a></a>
</span>
</label>
<!--
<label class="btn col-xs-5">
<input type="radio" ng-value="true"
ng-model="field.disabled" name="disabled{{field._id}}"/>
<span> &nbsp; {{ 'YES' | translate }}</span>
</label>
<label class="btn col-xs-5 col-xs-offset-1">
<input type="radio" ng-value="false"
ng-model="field.disabled" name="disabled{{field._id}}"/>
<span> &nbsp; {{ 'NO' | translate }}</span>
</label>
-->
</div>
</div>
@ -201,7 +177,7 @@
</div>
<div class="col-md-2">
<b>Jumps to </b>
<b>then jump to </b>
</div>
<div class="col-md-10">
<select style="width:100%" ng-model="field.logicJump.jumpTo"
@ -215,7 +191,7 @@
</div>
</div>
<div class="modal-footer row">
<button type="submit" ng-click="update(false, null)" class="btn btn-signup btn-rounded">
<button type="submit" ng-click="saveField(false, $parent.myform, false, true)" class="btn btn-signup btn-rounded">
{{ 'SAVE_FIELD' | translate }}
</button>
@ -226,8 +202,10 @@
</div>
<div class="preview-field-panel col-md-6 hidden-sm hidden-xs container">
<field-directive field="field" validate="false" class="preview-field">
</field-directive>
<form class="public-form"ss>
<field-directive field="field" validate="false" class="preview-field">
</field-directive>
</form>
</div>
</div>
@ -566,7 +544,7 @@
<div class="row question" ng-if="myform.form_fields.length > 1 && myform.form_fields[$index].logicJump.fieldA">
<div class="col-md-4 col-sm-12">
<b> If this field </b>
</div>
<div class="col-md-4 col-sm-12">
@ -574,7 +552,7 @@
value="{{field.logicJump.expressionString}}"
name="logicjump_expressionString{{field._id}}">
<option value="field == static">
is equal to
</option>
<option value="field != static">
@ -591,32 +569,32 @@
is smaller than
</option>
<option value="field <= static" ng-if-end>
is smaller or equal than
</option>
<option value="field contains static" ng-if-start="field.fieldType !== 'number' && field.fieldType !== 'rating' && field.fieldType !== 'number'">
contains
</option>
<option value="field !contains static">
does not contain
</option>
<option value="field ends static">
ends with
</option>
<option value="field !ends static">
does not end with
</option>
<option value="field starts static">
starts with
</option>
<option value="field !starts static" ng-if-end>
does not start with
</option>
</select>
@ -625,7 +603,7 @@
<input type="text" ng-model="field.logicJump.valueB"/>
</div>
<div class="col-md-2">
<b>Jumps to </b>
</div>
<div class="col-md-10">