Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n" +
" \n" +
@@ -333,103 +261,42 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
"
\n" +
"\n" +
"");
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- $templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",
- "
Delete Selected
Export to Excel
Export to CSV
Export to JSON
");
-=======
$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-submissions-form.client.view.html",
- "
Delete Selected
Export to Excel
Export to CSV
Export to JSON
");
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
->>>>>>> make it work
- $templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",
- "
");
- $templateCache.put("../public/modules/users/views/authentication/access-denied.client.view.html",
-=======
+ "
Delete Selected
Export to Excel
Export to CSV
Export to JSON
");
$templateCache.put("modules/forms/base/views/directiveViews/entryPage/startPage.html",
"
{{pageData.introTitle}} {{pageData.introParagraph}}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/date.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }} ");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} ");
$templateCache.put("modules/forms/base/views/directiveViews/field/dropdown.html",
- "
0\">
{{field.title}} {{ 'OPTIONAL' | translate }} {{$select.selected.option_value}}
");
+ "
0\">
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} {{$select.selected.option_value}}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/file.html",
- "
{{field.title}} (* {{ 'REQUIRED' | translate }}) ");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} ");
$templateCache.put("modules/forms/base/views/directiveViews/field/hidden.html",
"
");
$templateCache.put("modules/forms/base/views/directiveViews/field/legal.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }} {{field.description}}
");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} {{field.description}}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/radio.html",
- "
0\" on-enter-key=chooseDefaultOption()>
{{field.title}} {{ 'OPTIONAL' | translate }} ");
+ "
0\">
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} ");
$templateCache.put("modules/forms/base/views/directiveViews/field/rating.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }}
");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/statement.html",
- "
{{field.description}}
{{ 'CONTINUE' | translate }}
");
+ "
{{field.description}}
{{ 'CONTINUE' | translate }}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/textarea.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} {{ 'NEWLINE' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html",
- "
{{field.title}} ({{ 'OPTIONAL' | translate }})
Error: {{ 'ERROR_EMAIL_INVALID' | translate }} {{ 'ERROR_NOT_A_NUMBER' | translate }} {{ 'ERROR_URL_INVALID' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
+ "
{{index+1}} {{field.title}} ({{ 'OPTIONAL' | translate }})
Error: {{ 'ERROR_EMAIL_INVALID' | translate }} {{ 'ERROR_NOT_A_NUMBER' | translate }} {{ 'ERROR_URL_INVALID' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
$templateCache.put("modules/forms/base/views/directiveViews/field/yes_no.html",
- "
{{field.title}} *({{ REQUIRED | translate }}) {{field.description}}
");
+ "
{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }} {{field.description}}
");
$templateCache.put("modules/forms/base/views/directiveViews/form/submit-form.client.view.html",
- "
");
+ "
");
$templateCache.put("modules/users/views/authentication/access-denied.client.view.html",
->>>>>>> make it work
"
You need to be logged in to access this page Login ");
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
- $templateCache.put("../public/modules/users/views/authentication/signin.client.view.html",
+ $templateCache.put("modules/users/views/authentication/signin.client.view.html",
"
");
- $templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
+ $templateCache.put("modules/users/views/authentication/signup-success.client.view.html",
"
Signup Successful You've successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don't receive it within 24h drop us a line at polydaic@gmail.com
");
- $templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",
-=======
- $templateCache.put("modules/forms/admin/views/directiveViews/form/edit-submissions-form.client.view.html",
- "
Delete Selected
Export to Excel
Export to CSV
Export to JSON
");
- $templateCache.put("modules/forms/base/views/directiveViews/entryPage/startPage.html",
- "
{{pageData.introTitle}} {{pageData.introParagraph}}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/date.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }} ");
- $templateCache.put("modules/forms/base/views/directiveViews/field/dropdown.html",
- "
0\">
{{field.title}} {{ 'OPTIONAL' | translate }} {{$select.selected.option_value}}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/file.html",
- "
{{field.title}} (* {{ 'REQUIRED' | translate }}) ");
- $templateCache.put("modules/forms/base/views/directiveViews/field/hidden.html",
- "
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/legal.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }} {{field.description}}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/radio.html",
- "
0\" on-enter-key=chooseDefaultOption()>
{{field.title}} {{ 'OPTIONAL' | translate }} ");
- $templateCache.put("modules/forms/base/views/directiveViews/field/rating.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/statement.html",
- "
{{field.description}}
{{ 'CONTINUE' | translate }}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/textarea.html",
- "
{{field.title}} {{ 'OPTIONAL' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html",
- "
{{field.title}} ({{ 'OPTIONAL' | translate }})
Error: {{ 'ERROR_EMAIL_INVALID' | translate }} {{ 'ERROR_NOT_A_NUMBER' | translate }} {{ 'ERROR_URL_INVALID' | translate }}
{{ 'OK' | translate }} {{ 'ENTER' | translate }}
");
- $templateCache.put("modules/forms/base/views/directiveViews/field/yes_no.html",
- "
{{field.title}} *({{ REQUIRED | translate }}) {{field.description}}
");
- $templateCache.put("modules/forms/base/views/directiveViews/form/submit-form.client.view.html",
- "
");
- $templateCache.put("modules/users/views/authentication/access-denied.client.view.html",
- "
You need to be logged in to access this page Login ");
- $templateCache.put("modules/users/views/authentication/signin.client.view.html",
- "
");
- $templateCache.put("modules/users/views/authentication/signup-success.client.view.html",
- "
Signup Successful You've successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don't receive it within 24h drop us a line at hi@TellForm.com
");
$templateCache.put("modules/users/views/authentication/signup.client.view.html",
->>>>>>> make it work
-=======
-=======
- $templateCache.put("modules/users/views/authentication/signin.client.view.html",
- "
");
- $templateCache.put("modules/users/views/authentication/signup-success.client.view.html",
->>>>>>> make it work
- "
Signup Successful You've successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don't receive it within 24h drop us a line at hi@TellForm.com
");
- $templateCache.put("modules/users/views/authentication/signup.client.view.html",
->>>>>>> make it work
"
");
$templateCache.put("modules/users/views/password/forgot-password.client.view.html",
"
Restore your password Enter your account email.
");
@@ -445,21 +312,9 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
"
");
$templateCache.put("modules/users/views/settings/social-accounts.client.view.html",
"
Connected social accounts: Connect other social accounts: ");
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- $templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",
+ $templateCache.put("modules/users/views/verify/resend-verify-email.client.view.html",
"
Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at polydaic@gmail.com
");
- $templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",
-=======
- $templateCache.put("modules/users/views/verify/resend-verify-email.client.view.html",
- "
Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
");
$templateCache.put("modules/users/views/verify/verify-account.client.view.html",
->>>>>>> make it work
-=======
- $templateCache.put("modules/users/views/verify/resend-verify-email.client.view.html",
- "
Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
");
- $templateCache.put("modules/users/views/verify/verify-account.client.view.html",
->>>>>>> make it work
"
");
}]);
@@ -582,232 +437,6 @@ angular.element(document).ready(function() {
angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]);
});
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
-'use strict';
-
-// Use Application configuration module to register a new module
-ApplicationConfiguration.registerModule('core', ['users']);
-
-'use strict';
-
-// Use Application configuration module to register a new module
-ApplicationConfiguration.registerModule('forms', ['ngFileUpload', 'ui.router.tabs', 'colorpicker.module', 'ui.date', 'ui.sortable', 'angular-input-stars', 'users']);
-'use strict';
-
-// Use Application configuration module to register a new module
-ApplicationConfiguration.registerModule('users');
-'use strict';
-
-// Setting up route
-angular.module('core').config(['$stateProvider', '$urlRouterProvider',
- function($stateProvider, $urlRouterProvider, Authorization) {
- // Redirect to home view when route not found
- $urlRouterProvider.otherwise('/forms');
- }
-]);
-
-'use strict';
-
-angular.module('core').controller('HeaderController', ['$rootScope', '$scope', 'Menus', '$state', 'Auth', 'User', '$window',
- function ($rootScope, $scope, Menus, $state, Auth, User, $window) {
- $rootScope.signupDisabled = $window.signupDisabled;
-
- $scope.user = $rootScope.user = Auth.ensureHasCurrentUser(User);
- $scope.authentication = $rootScope.authentication = Auth;
-
- $rootScope.languages = $scope.languages = ['english', 'french', 'spanish'];
-
- $scope.isCollapsed = false;
- $rootScope.hideNav = false;
- $scope.menu = Menus.getMenu('topbar');
-
- $scope.signout = function() {
- var promise = User.logout();
- promise.then(function() {
- Auth.logout();
- Auth.ensureHasCurrentUser(User);
- $scope.user = $rootScope.user = null;
- $state.go('listForms');
- },
- function(reason) {
- console.log('Logout Failed: ' + reason);
- });
- };
-
- $scope.toggleCollapsibleMenu = function() {
- $scope.isCollapsed = !$scope.isCollapsed;
- };
-
- // Collapsing the menu after navigation
- $scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
- $scope.isCollapsed = false;
- $rootScope.hideNav = false;
- if ( angular.isDefined( toState.data ) ) {
-
- if ( angular.isDefined( toState.data.hideNav ) ) {
- $rootScope.hideNav = toState.data.hideNav;
- }
- }
- });
-
- }
-]);
-
-'use strict';
-
-
-angular.module('core').controller('HomeController', ['$rootScope', '$scope', 'User', '$state',
- function($rootScope, $scope, User, $state) {
- $scope = $rootScope;
- }
-]);
-
-'use strict';
-
-//Menu service used for managing menus
-angular.module('core').service('Menus', [
-
- function() {
- // Define a set of default roles
- this.defaultRoles = ['*'];
-
- // Define the menus object
- this.menus = {};
-
- // A private function for rendering decision
- var shouldRender = function(user) {
- if (user) {
- if (~this.roles.indexOf('*')) {
- return true;
- } else {
- for (var userRoleIndex in user.roles) {
- for (var roleIndex in this.roles) {
- console.log(this.roles[roleIndex]);
- console.log( this.roles[roleIndex] === user.roles[userRoleIndex]);
- if (this.roles[roleIndex] === user.roles[userRoleIndex]) {
- return true;
- }
- }
- }
- }
- } else {
- return this.isPublic;
- }
-
- return false;
- };
-
- // Validate menu existance
- this.validateMenuExistance = function(menuId) {
- if (menuId && menuId.length) {
- if (this.menus[menuId]) {
- return true;
- } else {
- throw new Error('Menu does not exists');
- }
- } else {
- throw new Error('MenuId was not provided');
- }
-
- return false;
- };
-
- // Get the menu object by menu id
- this.getMenu = function(menuId) {
- // Validate that the menu exists
- this.validateMenuExistance(menuId);
-
- // Return the menu object
- return this.menus[menuId];
- };
-
- // Add new menu object by menu id
- this.addMenu = function(menuId, isPublic, roles) {
- // Create the new menu
- this.menus[menuId] = {
- isPublic: isPublic || false,
- roles: roles || this.defaultRoles,
- items: [],
- shouldRender: shouldRender
- };
-
- // Return the menu object
- return this.menus[menuId];
- };
-
- // Remove existing menu object by menu id
- this.removeMenu = function(menuId) {
- // Validate that the menu exists
- this.validateMenuExistance(menuId);
-
- // Return the menu object
- delete this.menus[menuId];
- };
-
- // Add menu item object
- this.addMenuItem = function(menuId, menuItemTitle, menuItemURL, menuItemType, menuItemUIRoute, isPublic, roles, position) {
- // Validate that the menu exists
- this.validateMenuExistance(menuId);
-
- // Push new menu item
- this.menus[menuId].items.push({
- title: menuItemTitle,
- link: menuItemURL,
- menuItemType: menuItemType || 'item',
- menuItemClass: menuItemType,
- uiRoute: menuItemUIRoute || ('/' + menuItemURL),
- isPublic: ((isPublic === null || typeof isPublic === 'undefined') ? this.menus[menuId].isPublic : isPublic),
- roles: ((roles === null || typeof roles === 'undefined') ? this.menus[menuId].roles : roles),
- position: position || 0,
- items: [],
- shouldRender: shouldRender
- });
-
- // Return the menu object
- return this.menus[menuId];
- };
-
- // Add submenu item object
- this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles, position) {
- // Validate that the menu exists
- this.validateMenuExistance(menuId);
-
- // Search for menu item
- for (var itemIndex in this.menus[menuId].items) {
- if (this.menus[menuId].items[itemIndex].link === rootMenuItemURL) {
- // Push new submenu item
- this.menus[menuId].items[itemIndex].items.push({
- title: menuItemTitle,
- link: menuItemURL,
- uiRoute: menuItemUIRoute || ('/' + menuItemURL),
- isPublic: ((isPublic === null || typeof isPublic === 'undefined') ? this.menus[menuId].items[itemIndex].isPublic : isPublic),
- roles: ((roles === null || typeof roles === 'undefined') ? this.menus[menuId].items[itemIndex].roles : roles),
- position: position || 0,
- shouldRender: shouldRender
- });
- }
- }
-
- // Return the menu object
- return this.menus[menuId];
- };
-
- // Remove existing menu object by menu id
- this.removeMenuItem = function(menuId, menuItemURL) {
- // Validate that the menu exists
- this.validateMenuExistance(menuId);
-
- // Search for menu item to remove
- for (var itemIndex in this.menus[menuId].items) {
- if (this.menus[menuId].items[itemIndex].link === menuItemURL) {
- this.menus[menuId].items.splice(itemIndex, 1);
- }
- }
-=======
angular.module('NodeForm.templates', []).run(['$templateCache', function($templateCache) {
"use strict";
$templateCache.put("../public/modules/core/views/header.client.view.html",
@@ -1131,7 +760,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",
"
");
}]);
->>>>>>> make it work
'use strict';
@@ -1162,8 +790,10 @@ angular.module('core').config(['$stateProvider', '$urlRouterProvider',
'use strict';
-angular.module('core').controller('HeaderController', ['$rootScope', '$scope', 'Menus', '$state', 'Auth', 'User',
- function ($rootScope, $scope, Menus, $state, Auth, User) {
+angular.module('core').controller('HeaderController', ['$rootScope', '$scope', 'Menus', '$state', 'Auth', 'User', '$window',
+ function ($rootScope, $scope, Menus, $state, Auth, User, $window) {
+ $rootScope.signupDisabled = $window.signupDisabled;
+
$scope.user = $rootScope.user = Auth.ensureHasCurrentUser(User);
$scope.authentication = $rootScope.authentication = Auth;
@@ -1216,55 +846,13 @@ angular.module('core').controller('HomeController', ['$rootScope', '$scope', 'Us
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- $scope.tabData = [
- {
- heading: 'Create',
- route: 'viewForm.create'
- },
- {
- heading: 'Design',
- route: 'viewForm.design'
- },
- {
- heading: 'Configure',
- route: 'viewForm.configure'
- },
- {
- heading: 'Analyze',
- route: 'viewForm.analyze'
- }
- ];
-=======
//Menu service used for managing menus
angular.module('core').service('Menus', [
->>>>>>> make it work
function() {
// Define a set of default roles
this.defaultRoles = ['*'];
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- /*
- ** DeleteModal Functions
- */
- $scope.openDeleteModal = function(){
- $scope.deleteModal = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'myModalContent.html',
- controller: 'AdminFormController',
- resolve: {
- myForm: function(){
- return $scope.myform;
-=======
// Define the menus object
this.menus = {};
@@ -1282,7 +870,6 @@ angular.module('core').service('Menus', [
return true;
}
}
->>>>>>> make it work
}
}
} else {
@@ -1307,22 +894,6 @@ angular.module('core').service('Menus', [
return false;
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- $scope.deleteModal.close();
-
- var form_id = $scope.myform._id;
- if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
-
- $http.delete('/forms/'+form_id)
- .success(function(data, status, headers){
- console.log('form deleted successfully');
-
- $state.go('listForms', {}, {reload: true});
-=======
// Get the menu object by menu id
this.getMenu = function(menuId) {
// Validate that the menu exists
@@ -1331,7 +902,6 @@ angular.module('core').service('Menus', [
// Return the menu object
return this.menus[menuId];
};
->>>>>>> make it work
// Add new menu object by menu id
this.addMenu = function(menuId, isPublic, roles) {
@@ -1347,59 +917,19 @@ angular.module('core').service('Menus', [
return this.menus[menuId];
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- var continueUpdate = true;
- if(!updateImmediately){
- continueUpdate = !$rootScope.saveInProgress;
- }
-
- //Update form **if we are not currently updating** or if **shouldUpdateNow flag is set**
- if(continueUpdate){
- var err = null;
-=======
// Remove existing menu object by menu id
this.removeMenu = function(menuId) {
// Validate that the menu exists
this.validateMenuExistance(menuId);
->>>>>>> make it work
// Return the menu object
delete this.menus[menuId];
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- $scope.updatePromise = $http.put('/forms/'+$scope.myform._id, {form: $scope.myform})
- .then(function(response){
- $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);
- }
- });
- }
- };
-=======
// Add menu item object
this.addMenuItem = function(menuId, menuItemTitle, menuItemURL, menuItemType, menuItemUIRoute, isPublic, roles, position) {
// Validate that the menu exists
this.validateMenuExistance(menuId);
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
// Push new menu item
this.menus[menuId].items.push({
@@ -1414,45 +944,15 @@ angular.module('core').service('Menus', [
items: [],
shouldRender: shouldRender
});
->>>>>>> make it work
-=======
-
- // Push new menu item
- this.menus[menuId].items.push({
- title: menuItemTitle,
- link: menuItemURL,
- menuItemType: menuItemType || 'item',
- menuItemClass: menuItemType,
- uiRoute: menuItemUIRoute || ('/' + menuItemURL),
- isPublic: ((isPublic === null || typeof isPublic === 'undefined') ? this.menus[menuId].isPublic : isPublic),
- roles: ((roles === null || typeof roles === 'undefined') ? this.menus[menuId].roles : roles),
- position: position || 0,
- items: [],
- shouldRender: shouldRender
- });
->>>>>>> make it work
-
->>>>>>> make it work
// Return the menu object
return this.menus[menuId];
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- }
-]);
-
-'use strict';
-=======
// Add submenu item object
this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles, position) {
// Validate that the menu exists
this.validateMenuExistance(menuId);
->>>>>>> make it work
// Search for menu item
for (var itemIndex in this.menus[menuId].items) {
@@ -1528,7 +1028,6 @@ angular.module('forms').run(['Menus',
function(){
return function(formObj){
if(formObj && formObj.form_fields && formObj.visible_form_fields){
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
//get keys
var formKeys = Object.keys(formObj);
@@ -1545,24 +1044,6 @@ angular.module('forms').run(['Menus',
return !!(field.fieldValue);
}
-=======
-
- //get keys
- var formKeys = Object.keys(formObj);
-
- //we only care about things that don't start with $
- var fieldKeys = formKeys.filter(function(key){
- return key[0] !== '$';
- });
-
- var fields = formObj.form_fields;
-
- var valid_count = fields.filter(function(field){
- if(typeof field === 'object' && field.fieldType !== 'statement' && field.fieldType !== 'rating'){
- return !!(field.fieldValue);
- }
-
->>>>>>> make it work
}).length;
return valid_count - (formObj.form_fields.length - formObj.visible_form_fields.length);
}
@@ -1581,18 +1062,6 @@ angular.module('forms').run(['Menus',
// Setting up route
angular.module('forms').config(['$stateProvider',
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-function removeDateFieldsFunc(o) {
- var clone = _.clone(o);
- function eachObject(v,k){
-
- if(k === 'lastModified' || k === 'created'){
- delete clone[k];
- }
-=======
-=======
->>>>>>> make it work
function($stateProvider) {
// Forms state routing
$stateProvider.
@@ -1640,281 +1109,66 @@ function removeDateFieldsFunc(o) {
url: '/create',
templateUrl: 'modules/forms/admin/views/adminTabs/create.html'
});
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
->>>>>>> make it work
}
]);
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- for(var i=0; i
>>>>>> make it work
-
-// Config HTTP Error Handling
-angular.module('users').config(['$httpProvider',
- function($httpProvider) {
- $httpProvider.interceptors.push(["$q", "$location", function($q, $location) {
- return {
- responseError: function(response) {
- if( $location.path() !== '/users/me' && response.config){
- if(response.config.url !== '/users/me'){
- console.log('intercepted rejection of ', response.config.url, response.status);
- if (response.status === 401) {
- // save the current location so that login can redirect back
- $location.nextAfterLogin = $location.path();
- $location.path('/signin');
- }else if(response.status === 403){
- $location.path('/access_denied');
- }
- }
-
- }
- return $q.reject(response);
- }
- };
- }]);
-}]);
'use strict';
-// Setting up route
-angular.module('users').config(['$stateProvider',
- function($stateProvider) {
+angular.module('forms').directive('keyToOption', function(){
+ return {
+ restrict: 'A',
+ scope: {
+ field: '='
+ },
+ link: function($scope, $element, $attrs, $select) {
+ $element.bind('keydown keypress', function(event) {
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- $rootScope[$attrs.autoSaveCallback](true,
- function(err){
- if(!err){
- //console.log('\n\nForm data persisted -- setting pristine flag');
- $formCtrl.$setPristine();
- $formCtrl.$setUntouched();
- }else{
- console.error('Error form data NOT persisted');
- console.error(err);
- }
- });
- };
+ var keyCode = event.which || event.keyCode;
+ var index = parseInt(String.fromCharCode(keyCode))-1;
+ //console.log($scope.field);
- //Update/Save Form if any Form fields are Dirty and Touched
- $scope.$watch(function(newValue, oldValue) {
- //console.log('introParagraphStartPage.$dirty: '+$scope.editForm.introParagraphStartPage.$dirty);
- //console.log('introParagraphStartPage.$touched: '+$scope.editForm.introParagraphStartPage.$touched);
- if($rootScope.finishedRender && $scope.anyDirtyAndTouched($scope.editForm) && !$rootScope.saveInProgress){
- //console.log('Form saving started');
- debounceSave();
- //console.log('introParagraphStartPage.$dirty AFTER: '+$scope.editForm.introParagraphStartPage.$dirty);
- }
- });
-=======
- var checkLoggedin = function($q, $timeout, $state, User, Auth) {
- var deferred = $q.defer();
-
- // console.log(Auth.ensureHasCurrentUser(User));
->>>>>>> make it work
-
- if (Auth.currentUser && Auth.currentUser.email) {
- $timeout(deferred.resolve);
- }
- else {
- Auth.currentUser = User.getCurrent(function() {
- Auth.login();
- $timeout(deferred.resolve());
- },
- function() {
- Auth.logout();
- $timeout(deferred.reject());
- $state.go('sigin', {reload: true});
- });
- }
-
- return deferred.promise;
- };
- checkLoggedin.$inject = ["$q", "$timeout", "$state", "User", "Auth"];
-
- // Users state routing
- $stateProvider.
- state('profile', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/profile',
- templateUrl: 'modules/users/views/settings/edit-profile.client.view.html'
- }).
- state('password', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/password',
- templateUrl: 'modules/users/views/settings/change-password.client.view.html'
- }).
- state('accounts', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/accounts',
- templateUrl: 'modules/users/views/settings/social-accounts.client.view.html'
- }).
-
- state('signup', {
- url: '/signup',
- templateUrl: 'modules/users/views/authentication/signup.client.view.html'
- }).
- state('signup-success', {
- url: '/signup-success',
- templateUrl: 'modules/users/views/authentication/signup-success.client.view.html'
- }).
- state('signin', {
- url: '/signin',
- templateUrl: 'modules/users/views/authentication/signin.client.view.html'
- }).
- state('access_denied', {
- url: '/access_denied',
- templateUrl: 'modules/users/views/authentication/access-denied.client.view.html'
- }).
-
- state('resendVerifyEmail', {
- url: '/verify',
- templateUrl: 'modules/users/views/verify/resend-verify-email.client.view.html'
- }).
- state('verify', {
- url: '/verify/:token',
- templateUrl: 'modules/users/views/verify/verify-account.client.view.html'
- }).
-
- state('forgot', {
- url: '/password/forgot',
- templateUrl: 'modules/users/views/password/forgot-password.client.view.html'
- }).
- state('reset-invalid', {
- url: '/password/reset/invalid',
- templateUrl: 'modules/users/views/password/reset-password-invalid.client.view.html'
- }).
- state('reset-success', {
- url: '/password/reset/success',
- templateUrl: 'modules/users/views/password/reset-password-success.client.view.html'
- }).
- state('reset', {
- url: '/password/reset/:token',
- templateUrl: 'modules/users/views/password/reset-password.client.view.html'
- });
- }
-]);
-'use strict';
-
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- //If our form is undefined, don't save form
- if( (!newValue && !oldValue) || !oldValue ){
- return;
- }
-
- // console.log('Autosaving');
- // console.log('\n\n----------');
- // console.log('!$dirty: '+ !$formCtrl.$dirty );
- // console.log('changedFields: '+changedFields);
- // console.log('changedFieldMap: '+changedFieldMap);
- // console.log('finishedRender: '+$rootScope.finishedRender);
- // console.log('!saveInProgress: '+!$rootScope.saveInProgress);
- // console.log('newValue: '+newValue);
- // console.log('oldValue: '+oldValue);
- // console.log(oldValue.form_fields);
- // console.log(newValue.form_fields);
-
- if(oldValue.form_fields.length === 0) {
- $rootScope.finishedRender = true;
- }
-=======
-angular.module('users').controller('AuthenticationController', ['$scope', '$location', '$state', '$rootScope', 'User', 'Auth',
- function($scope, $location, $state, $rootScope, User, Auth) {
-
- $scope = $rootScope;
- $scope.credentials = {};
- $scope.error = '';
->>>>>>> make it work
-
- $scope.signin = function() {
- $scope.credentials.email = $scope.credentials.username;
- User.login($scope.credentials).then(
- function(response) {
- Auth.login(response);
- $scope.user = $rootScope.user = Auth.ensureHasCurrentUser(User);
-
- if($state.previous.name !== 'home' && $state.previous.name !== 'verify' && $state.previous.name !== ''){
- $state.go($state.previous.name);
- }else{
- $state.go('listForms');
- }
- },
- function(error) {
- $rootScope.user = Auth.ensureHasCurrentUser(User);
- $scope.user = $rootScope.user;
-
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- savePromise = $timeout(function() {
- debounceSave();
- });
- }
- //If we are finished rendering then form saving should be finished
- else if($rootScope.finishedRender && $rootScope.saveInProgress){
- $rootScope.saveInProgress = false;
- }
-
- }, true);
- });
- }
- };
-
-}]);
-=======
- $scope.error = error;
- console.log('loginError: '+error);
+ if (index < $scope.field.fieldOptions.length) {
+ event.preventDefault();
+ $scope.$apply(function () {
+ $scope.field.fieldValue = $scope.field.fieldOptions[index].option_value;
+ });
}
- );
- };
- $scope.signup = function() {
- console.log($scope.credentials);
- User.signup($scope.credentials).then(
- function(response) {
- console.log('signup-success');
- $state.go('signup-success');
- },
- function(error) {
- console.log('Error: ');
- console.log(error);
- if(error) {
- $scope.error = error;
- console.log(error);
- }else {
- console.log('No response received');
- }
- }
- );
- };
+ });
+ }
+ };
+});
+
+'use strict';
+
+angular.module('forms').directive('keyToTruthy', ['$rootScope', function($rootScope){
+ return {
+ restrict: 'A',
+ scope: {
+ field: '='
+ },
+ link: function($scope, $element, $attrs) {
+ $element.bind('keydown keypress', function(event) {
+ var keyCode = event.which || event.keyCode;
+ var truthyKeyCode = $attrs.keyCharTruthy.charCodeAt(0) - 32;
+ var falseyKeyCode = $attrs.keyCharFalsey.charCodeAt(0) - 32;
+
+ if(keyCode === truthyKeyCode ) {
+ event.preventDefault();
+ $scope.$apply(function() {
+ $scope.field.fieldValue = 'true';
+ });
+ }else if(keyCode === falseyKeyCode){
+ event.preventDefault();
+ $scope.$apply(function() {
+ $scope.field.fieldValue = 'false';
+ });
+ }
+ });
+ }
+ };
+}]);
- }
-]);
->>>>>>> make it work
-=======
- }
-]);
'use strict';
@@ -1928,6 +1182,7 @@ angular.module('users').config(['$httpProvider',
if(response.config.url !== '/users/me'){
console.log('intercepted rejection of ', response.config.url, response.status);
if (response.status === 401) {
+ console.log($location.path());
// save the current location so that login can redirect back
$location.nextAfterLogin = $location.path();
$location.path('/signin');
@@ -1942,6 +1197,7 @@ angular.module('users').config(['$httpProvider',
};
}]);
}]);
+
'use strict';
// Setting up route
@@ -1951,27 +1207,39 @@ angular.module('users').config(['$stateProvider',
var checkLoggedin = function($q, $timeout, $state, User, Auth) {
var deferred = $q.defer();
- // console.log(Auth.ensureHasCurrentUser(User));
+ //console.log(Auth.ensureHasCurrentUser(User));
if (Auth.currentUser && Auth.currentUser.email) {
$timeout(deferred.resolve);
}
else {
- Auth.currentUser = User.getCurrent(function() {
- Auth.login();
- $timeout(deferred.resolve());
- },
- function() {
- Auth.logout();
- $timeout(deferred.reject());
- $state.go('sigin', {reload: true});
- });
+ Auth.currentUser = User.getCurrent(
+ function() {
+ Auth.login();
+ $timeout(deferred.resolve());
+ },
+ function() {
+ Auth.logout();
+ $timeout(deferred.reject());
+ $state.go('signin', {reload: true});
+ });
}
return deferred.promise;
};
checkLoggedin.$inject = ["$q", "$timeout", "$state", "User", "Auth"];
+ var checkSignupDisabled = function($window, $timeout, $q) {
+ var deferred = $q.defer();
+ if($window.signupDisabled) {
+ $timeout(deferred.reject());
+ } else {
+ $timeout(deferred.resolve());
+ }
+ return deferred.promise;
+ };
+ checkSignupDisabled.$inject = ["$window", "$timeout", "$q"];
+
// Users state routing
$stateProvider.
state('profile', {
@@ -1995,12 +1263,17 @@ angular.module('users').config(['$stateProvider',
url: '/settings/accounts',
templateUrl: 'modules/users/views/settings/social-accounts.client.view.html'
}).
-
state('signup', {
+ resolve: {
+ isDisabled: checkSignupDisabled
+ },
url: '/signup',
templateUrl: 'modules/users/views/authentication/signup.client.view.html'
}).
state('signup-success', {
+ resolve: {
+ isDisabled: checkSignupDisabled
+ },
url: '/signup-success',
templateUrl: 'modules/users/views/authentication/signup-success.client.view.html'
}).
@@ -2012,16 +1285,20 @@ angular.module('users').config(['$stateProvider',
url: '/access_denied',
templateUrl: 'modules/users/views/authentication/access-denied.client.view.html'
}).
-
- state('resendVerifyEmail', {
- url: '/verify',
- templateUrl: 'modules/users/views/verify/resend-verify-email.client.view.html'
- }).
state('verify', {
+ resolve: {
+ isDisabled: checkSignupDisabled
+ },
url: '/verify/:token',
templateUrl: 'modules/users/views/verify/verify-account.client.view.html'
}).
-
+ state('resendVerifyEmail', {
+ resolve: {
+ isDisabled: checkSignupDisabled
+ },
+ url: '/verify',
+ templateUrl: 'modules/users/views/verify/resend-verify-email.client.view.html'
+ }).
state('forgot', {
url: '/password/forgot',
templateUrl: 'modules/users/views/password/forgot-password.client.view.html'
@@ -2040,6 +1317,7 @@ angular.module('users').config(['$stateProvider',
});
}
]);
+
'use strict';
angular.module('users').controller('AuthenticationController', ['$scope', '$location', '$state', '$rootScope', 'User', 'Auth',
@@ -2094,7 +1372,6 @@ angular.module('users').controller('AuthenticationController', ['$scope', '$loca
}
]);
->>>>>>> make it work
'use strict';
@@ -2202,28 +1479,9 @@ angular.module('users').controller('SettingsController', ['$scope', '$rootScope'
});
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- console.log($scope.log);
- if (!$scope.$$phase && !$scope.$digest) {
- $scope.$apply();
- }
- }, function(resp){
- $scope.pdfLoading = false;
- console.log('Error occured during upload.\n');
- console.log(resp.status);
- }, function (evt) {
- var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
- $scope.log = 'progress: ' + progressPercentage + '% ' +
- evt.config.data.file.name + '\n' + $scope.log;
-=======
}
]);
'use strict';
->>>>>>> make it work
angular.module('users').controller('VerifyController', ['$scope', '$state', '$rootScope', 'User', 'Auth', '$stateParams',
function($scope, $state, $rootScope, User, Auth, $stateParams) {
@@ -2231,7 +1489,6 @@ angular.module('users').controller('VerifyController', ['$scope', '$state', '$ro
$scope.isResetSent = false;
$scope.credentials = {};
$scope.error = '';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
// Submit forgotten password account id
$scope.resendVerifyEmail = function() {
@@ -2252,28 +1509,6 @@ angular.module('users').controller('VerifyController', ['$scope', '$state', '$ro
);
};
-=======
-
- // Submit forgotten password account id
- $scope.resendVerifyEmail = function() {
- // console.log($scope.credentials);
- // console.log($scope.credentials.email);
- User.resendVerifyEmail($scope.credentials.email).then(
- function(response){
- console.log(response);
- $scope.success = response.message;
- $scope.credentials = null;
- $scope.isResetSent = true;
- },
- function(error){
- $scope.error = error;
- $scope.credentials.email = null;
- $scope.isResetSent = false;
- }
- );
- };
-
->>>>>>> make it work
//Validate Verification Token
$scope.validateVerifyToken = function() {
if($stateParams.token){
@@ -2298,45 +1533,8 @@ angular.module('users').controller('VerifyController', ['$scope', '$state', '$ro
]);
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
-angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormFields',
- function ($rootScope, FormFields) {
- return {
- templateUrl: 'modules/forms/views/directiveViews/form/edit-form.client.view.html',
- restrict: 'E',
- scope: {
- myform:'='
- },
- controller: ["$scope", function($scope){
- var field_ids = _($scope.myform.form_fields).pluck('_id');
- for(var i=0; i>>>>>> make it work
var userState = {
isLoggedIn: false
@@ -2403,35 +1601,11 @@ angular.module('users').factory('Auth', ['$window',
};
return service;
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- if( $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id) ){
- currentFields = _(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id]);
- }
-=======
}
]);
->>>>>>> make it work
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- /*
- ** FormFields (ui-sortable) drag-and-drop configuration
- */
- $scope.dropzone = {
- handle: ' .handle',
- containment: '.dropzoneContainer',
- cursor: 'grabbing'
- };
-=======
angular.module('users').service('Authorizer', ["APP_PERMISSIONS", "USER_ROLES", function(APP_PERMISSIONS, USER_ROLES) {
return function(user) {
return {
@@ -2458,7 +1632,6 @@ angular.module('users').service('Authorizer', ["APP_PERMISSIONS", "USER_ROLES",
return false;
}
}
->>>>>>> make it work
return false;
}
@@ -2470,41 +1643,9 @@ angular.module('users').service('Authorizer', ["APP_PERMISSIONS", "USER_ROLES",
angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '$state',
function($window, $q, $timeout, $http, $state) {
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- for(var i = 0; i < $scope.addField.types.length; i++){
- if($scope.addField.types[i].name === fieldType){
- $scope.addField.types[i].lastAddedID++;
- fieldTitle = $scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;
- break;
- }
- }
- var newField = {
- title: fieldTitle,
- fieldType: fieldType,
- fieldValue: '',
- required: true,
- disabled: false,
- deletePreserved: false
- };
- // console.log('\n\n---------\nAdded field CLIENT');
- // console.log(newField);
- // newField._id = _.uniqueId();
-
- // put newField into fields array
- if(modifyForm){
- $scope.myform.form_fields.push(newField);
- }
- return newField;
- };
-=======
var userService = {
getCurrent: function() {
var deferred = $q.defer();
->>>>>>> make it work
$http.get('/users/me')
.success(function(response) {
@@ -2518,26 +1659,12 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
},
login: function(credentials) {
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- //Delete field
- $scope.myform.form_fields.splice(field_index, 1);
- };
- $scope.duplicateField = function (field_index){
- var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
- currField._id = 'cloned'+_.uniqueId();
- currField.title += ' copy';
-=======
var deferred = $q.defer();
$http.post('/auth/signin', credentials).success(function(response) {
deferred.resolve(response);
}).error(function(error) {
deferred.reject(error.message || error);
});
->>>>>>> make it work
return deferred.promise;
},
@@ -2591,23 +1718,8 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
deferred.reject(error);
});
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- // add new option to the field
- $scope.addOption = function(field_index){
- var currField = $scope.myform.form_fields[field_index];
- console.log(field_index);
- console.log(currField);
-
- if(currField.fieldType === 'checkbox' || currField.fieldType === 'dropdown' || currField.fieldType === 'radio'){
- if(!currField.fieldOptions) $scope.myform.form_fields[field_index].fieldOptions = [];
-=======
return deferred.promise;
},
->>>>>>> make it work
resetPassword: function(passwordDetails, token) {
@@ -2621,20 +1733,8 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
return deferred.promise;
},
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- var newOption = {
- 'option_id' : Math.floor(100000*Math.random()),
- 'option_title' : 'Option '+lastOptionID,
- 'option_value' : 'Option ' +lastOptionID
- };
-=======
// Submit forgotten password account id
askForPasswordReset: function(credentials) {
->>>>>>> make it work
var deferred = $q.defer();
$http.post('/auth/forgot', credentials).success(function(response) {
@@ -2657,16 +1757,6 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- }]
-
- };
- }
-=======
// Users service used for communicating with the users REST endpoint
angular.module('users').factory('Users', ['$resource',
function($resource) {
@@ -2676,7 +1766,6 @@ angular.module('users').factory('Users', ['$resource',
}
});
}
->>>>>>> make it work
]);
'use strict';
@@ -2747,52 +1836,18 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
}
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- // console.log('before textField2: '+data[0].form_fields[1].fieldValue);
-
- //Iterate through form's submissions
- for(var i=0; i>>>>>> make it work
var form_id = $scope.myform._id;
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- // console.log('form submissions successfully fetched');
- // console.log( JSON.parse(JSON.stringify($scope.submissions)) ) ;
- // console.log( JSON.parse(JSON.stringify($scope.myform.form_fields)) );
- })
- .error(function(err){
- console.error('Could not fetch form submissions.\nError: '+err);
- });
- };
-=======
$http.delete('/forms/'+form_id)
.success(function(data, status, headers){
console.log('form deleted successfully');
->>>>>>> make it work
$state.go('listForms', {}, {reload: true});
@@ -2803,57 +1858,6 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
}
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- $http({ url: '/forms/'+$scope.myform._id+'/submissions',
- method: 'DELETE',
- data: {deleted_submissions: delete_ids},
- headers: {'Content-Type': 'application/json;charset=utf-8'}
- }).success(function(data, status, headers){
- //Remove deleted ids from table
- var tmpArray = [];
- for(var i=0; i<$scope.table.rows.length; i++){
- if(!$scope.table.rows[i].selected){
- tmpArray.push($scope.table.rows[i]);
- }
- }
- $scope.table.rows = tmpArray;
- })
- .error(function(err){
- console.log('Could not delete form submissions.\nError: ');
- console.log(err);
- console.error = err;
- });
- };
-
- //Export selected submissions of Form
- $scope.exportSubmissions = function(type){
- var fileMIMETypeMap = {
- 'xls': 'vnd.openxmlformats-officedocument.spreadsheetml.sheet',
- 'json': 'json',
- 'csv': 'csv'
- };
-=======
- // Update existing Form
- $scope.update = $rootScope.update = function(updateImmediately, cb){
-
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
- console.log($scope.table.rows);
-
- angular.element('#table-submission-data').tableExport({type: type, escape:false});
-
- /*
- var blob = new Blob([$scope.table.rows], {
- type: 'application/'+fileMIMETypeMap[type]+';charset=utf-8'
- });
- saveAs(blob, $scope.myform.title+'_sumbissions_export_'+Date.now()+'.'+type);
- */
- };
-=======
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
// Update existing Form
$scope.update = $rootScope.update = function(updateImmediately, cb){
@@ -2865,21 +1869,7 @@ 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;
->>>>>>> make it work
-=======
- var continueUpdate = true;
- if(!updateImmediately){
- continueUpdate = !$rootScope.saveInProgress;
- }
->>>>>>> make it work
->>>>>>> make it work
-
- //Update form **if we are not currently updating** or if **shouldUpdateNow flag is set**
- if(continueUpdate){
- var err = null;
-
->>>>>>> make it work
if(!updateImmediately){ $rootScope.saveInProgress = true; }
$scope.updatePromise = $http.put('/forms/'+$scope.myform._id, {form: $scope.myform})
@@ -2922,35 +1912,6 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope
});
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- var getTemplateUrl = function(fieldType) {
- var type = fieldType;
- var templateUrl = 'modules/forms/views/directiveViews/field/';
- var supported_fields = [
- 'textfield',
- 'textarea',
- 'date',
- 'dropdown',
- 'hidden',
- 'password',
- 'radio',
- 'legal',
- 'statement',
- 'rating',
- 'yes_no',
- 'number',
- 'natural'
- ];
- if (__indexOf.call(supported_fields, type) >= 0) {
- templateUrl = templateUrl+type+'.html';
- }
- return $templateCache.get('../public/'+templateUrl);
- };
-=======
//Modal functions
$scope.openCreateModal = function(){
if(!$scope.showCreateModal){
@@ -2969,7 +1930,6 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope
$scope.goToWithId = function(route, id) {
$state.go(route, {'formId': id}, {reload: true});
};
->>>>>>> make it work
$scope.duplicateForm = function(form_index){
var form = _.cloneDeep($scope.myforms[form_index]);
@@ -3025,104 +1985,18 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope
]);
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
->>>>>>> make it work
-angular.module('forms').directive('keyToOption', function(){
- return {
- restrict: 'AE',
- transclude: true,
- scope: {
- field: '&'
- },
- link: function($scope, $element, $attrs, $select) {
- $element.bind('keydown keypress', function(event) {
-
- var keyCode = event.which || event.keyCode;
- var index = parseInt(String.fromCharCode(keyCode))-1;
- console.log($scope.field);
-
- if (index < $scope.field.fieldOptions.length) {
- event.preventDefault();
- $scope.$apply(function () {
- $scope.field.fieldValue = $scope.field.fieldOptions[index].option_value;
- if($attrs.type === 'dropdown'){
- $select.selected.option_value = $scope.field.fieldOptions[index].option_value;
- }
- console.log($scope);
- });
- }
-
- });
- }
- };
-});
-
-'use strict';
-
-angular.module('forms').directive('keyToTruthy', ['$rootScope', function($rootScope){
- return {
- restrict: 'A',
- scope: {
- field: '='
- },
- link: function($scope, $element, $attrs) {
- $element.bind('keydown keypress', function(event) {
- var keyCode = event.which || event.keyCode;
- var truthyKeyCode = $attrs.keyCharTruthy.charCodeAt(0) - 32;
- var falseyKeyCode = $attrs.keyCharFalsey.charCodeAt(0) - 32;
-
- if(keyCode === truthyKeyCode ) {
- event.preventDefault();
- $scope.$apply(function() {
- $scope.field.fieldValue = 'true';
- });
- }else if(keyCode === falseyKeyCode){
- event.preventDefault();
- $scope.$apply(function() {
- $scope.field.fieldValue = 'false';
- });
- }
- });
- }
- };
-}]);
-
-
-'use strict';
-
-angular.module('forms').directive('onEnterKey', ['$rootScope', function($rootScope){
- return {
- restrict: 'A',
- link: function($scope, $element, $attrs) {
- $element.bind('keydown keypress', function(event) {
- var keyCode = event.which || event.keyCode;
- if(keyCode === 13 && !event.shiftKey) {
- event.preventDefault();
- $rootScope.$apply(function() {
- $rootScope.$eval($attrs.onEnterKey);
- });
- }
- });
- }
- };
-}]);
-=======
function removeDateFieldsFunc(o) {
var clone = _.clone(o);
function eachObject(v,k){
-
+
if(k === 'lastModified' || k === 'created'){
- delete clone[i][k];
+ delete clone[k];
}
}
->>>>>>> make it work
for(var i=0; i>>>>>> make it work
- //console.log($scope.forms.myForm);
- var field_id;
- var field_index;
-
- if(!$scope.noscroll){
- //Focus on submit button
- if( $scope.selected.index === $scope.myform.visible_form_fields.length-1 && $scope.fieldBottom < 200){
- field_index = $scope.selected.index+1;
- field_id = 'submit_field';
- $scope.setActiveField(field_id, field_index, false);
- }
- //Focus on field above submit button
- else if($scope.selected.index === $scope.myform.visible_form_fields.length){
- if($scope.fieldTop > 200){
- field_index = $scope.selected.index-1;
- field_id = $scope.myform.visible_form_fields[field_index]._id;
- $scope.setActiveField(field_id, field_index, false);
- }
- }else if( $scope.fieldBottom < 0){
- field_index = $scope.selected.index+1;
- field_id = $scope.myform.visible_form_fields[field_index]._id;
- $scope.setActiveField(field_id, field_index, false);
- }else if ( $scope.selected.index !== 0 && $scope.fieldTop > 0) {
- field_index = $scope.selected.index-1;
- field_id = $scope.myform.visible_form_fields[field_index]._id;
- $scope.setActiveField(field_id, field_index, false);
-=======
//If our form is undefined, don't save form
if( (!newValue && !oldValue) || !oldValue ){
return;
}
-
+
// console.log('Autosaving');
// console.log('\n\n----------');
// console.log('!$dirty: '+ !$formCtrl.$dirty );
@@ -3255,7 +2097,7 @@ angular.module('forms').directive('autoSaveForm', ['$rootScope', '$timeout', fun
// console.log(oldValue.form_fields);
// console.log(newValue.form_fields);
- if(oldValue.form_fields.length === 0) {
+ if(oldValue.form_fields.length === 0) {
$rootScope.finishedRender = true;
}
@@ -3265,24 +2107,11 @@ angular.module('forms').directive('autoSaveForm', ['$rootScope', '$timeout', fun
if(savePromise) {
$timeout.cancel(savePromise);
savePromise = null;
->>>>>>> make it work
}
- savePromise = $timeout(function() {
- debounceSave();
- });
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
- }
- //If we are finished rendering then form saving should be finished
- else if($rootScope.finishedRender && $rootScope.saveInProgress){
- $rootScope.saveInProgress = false;
- }
-
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- $rootScope.setDropdownOption = function(){
- console.log('setDropdownOption index: ');
- };
-=======
+ savePromise = $timeout(function() {
+ debounceSave();
+ });
}
//If we are finished rendering then form saving should be finished
else if($rootScope.finishedRender && $rootScope.saveInProgress){
@@ -3293,39 +2122,11 @@ angular.module('forms').directive('autoSaveForm', ['$rootScope', '$timeout', fun
});
}
};
-
-}]);
->>>>>>> make it work
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
- /*
- ** Field Controls
- */
- $scope.setActiveField = $rootScope.setActiveField = function(field_id, field_index, animateScroll) {
- if($scope.selected === null || $scope.selected._id === field_id){
- //console.log('not scrolling');
- //console.log($scope.selected);
- return;
- }
- //console.log('field_id: '+field_id);
- //console.log('field_index: '+field_index);
- //console.log($scope.selected);
-=======
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
- }, true);
- });
- }
- };
-
}]);
'use strict';
-=======
-'use strict';
->>>>>>> make it work
-
->>>>>>> make it work
angular.module('forms').directive('configureFormDirective', ['$rootScope', '$http', 'Upload', 'CurrentForm',
function ($rootScope, $http, Upload, CurrentForm) {
return {
@@ -3347,114 +2148,11 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt
$scope.log = '';
$scope.pdfLoading = false;
$scope.languages = $rootScope.languages;
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
->>>>>>> make it work
this._current_upload = null;
$scope.resetForm = $rootScope.resetForm;
$scope.update = $rootScope.update;
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
->>>>>>> make it work
- if(animateScroll){
- $scope.noscroll=true;
- setTimeout(function() {
- $document.scrollToElement(angular.element('.activeField'), -10, 200).then(function() {
- $scope.noscroll = false;
- setTimeout(function() {
- if (document.querySelectorAll('.activeField .focusOn')[0]) {
- //console.log(document.querySelectorAll('.activeField .focusOn')[0]);
- document.querySelectorAll('.activeField .focusOn')[0].focus();
- } else {
- //console.log(document.querySelectorAll('.activeField input')[0]);
- document.querySelectorAll('.activeField input')[0].focus();
- }
- });
- });
- });
- }else {
- setTimeout(function() {
- if (document.querySelectorAll('.activeField .focusOn')[0]) {
- //console.log(document.querySelectorAll('.activeField .focusOn')[0]);
- document.querySelectorAll('.activeField .focusOn')[0].focus();
- } else {
- document.querySelectorAll('.activeField input')[0].focus();
- }
- });
- }
- };
-=======
- this._current_upload = null;
- $scope.resetForm = $rootScope.resetForm;
- $scope.update = $rootScope.update;
-
- this._unbindedPdfFields = $scope.pdfFields;
->>>>>>> make it work
-
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
- $rootScope.nextField = $scope.nextField = function(){
- //console.log('nextfield');
- //console.log($scope.selected.index);
- //console.log($scope.myform.visible_form_fields.length-1);
- var selected_index, selected_id;
- if($scope.selected.index < $scope.myform.visible_form_fields.length-1){
- selected_index = $scope.selected.index+1;
- selected_id = $scope.myform.visible_form_fields[selected_index]._id;
- $rootScope.setActiveField(selected_id, selected_index, true);
- } else if($scope.selected.index === $scope.myform.visible_form_fields.length-1) {
- //console.log('Second last element');
- selected_index = $scope.selected.index+1;
- selected_id = 'submit_field';
- $rootScope.setActiveField(selected_id, selected_index, true);
- }
- };
-=======
- //DAVID: TODO: finish this so we can create a Form.pdfFieldMap
- // $scope.getUnbindedPdfFields = function(fieldType){
- // this._unbindedPdfFields = $scope.pdfFields
- // }
->>>>>>> make it work
-
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
- $rootScope.prevField = $scope.prevField = function(){
- if($scope.selected.index > 0){
- var selected_index = $scope.selected.index - 1;
- var selected_id = $scope.myform.visible_form_fields[selected_index]._id;
- $scope.setActiveField(selected_id, selected_index, true);
- }
- };
-
- /*
- ** Form Display Functions
- */
- $scope.exitStartPage = function(){
- $scope.myform.startPage.showStart = false;
- if($scope.myform.visible_form_fields.length > 0){
- $scope.selected._id = $scope.myform.visible_form_fields[0]._id;
- }
-=======
- //PDF Functions
- $scope.cancelUpload = function(){
- this._current_upload.abort();
- $scope.pdfLoading = false;
- $scope.removePDF();
->>>>>>> make it work
- };
-
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
- $scope.goToInvalid = function() {
- document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
- };
-
- $scope.submitForm = function() {
- var _timeElapsed = TimeCounter.stopClock();
- $scope.loading = true;
- var form = _.cloneDeep($scope.myform);
- form.timeElapsed = _timeElapsed;
-=======
this._unbindedPdfFields = $scope.pdfFields;
//DAVID: TODO: finish this so we can create a Form.pdfFieldMap
@@ -3462,7 +2160,6 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt
// this._unbindedPdfFields = $scope.pdfFields
// }
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
//PDF Functions
$scope.cancelUpload = function(){
this._current_upload.abort();
@@ -3475,25 +2172,10 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt
$scope.myform.isGenerated = false;
$scope.myform.autofillPDFs = false;
-=======
- setTimeout(function () {
- $scope.submitPromise = $http.post('/forms/' + $scope.myform._id, form)
- .success(function (data, status, headers) {
- //console.log('form submitted successfully');
-=======
- $scope.removePDF = function(){
- $scope.myform.pdf = null;
- $scope.myform.isGenerated = false;
- $scope.myform.autofillPDFs = false;
->>>>>>> make it work
-
->>>>>>> make it work
console.log('form.pdf: '+$scope.myform.pdf+' REMOVED');
};
$scope.uploadPDF = function(file) {
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
->>>>>>> make it work
if (file) {
console.log(file);
@@ -3511,10 +2193,6 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt
//console.log($scope.myform.pdf);
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
- //Reload our form
- $scope.reloadForm();
-=======
$scope.pdfLoading = false;
console.log($scope.log);
@@ -3537,7 +2215,6 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt
}
};
->>>>>>> make it work
}]
};
}
@@ -3561,6 +2238,17 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
/*
** Initialize scope with variables
*/
+ //Setup UI-Sortable
+ $scope.sortableOptions = {
+ appendTo: '.dropzone',
+ cursorAt: { top: -155 },
+ forceHelperSize: true,
+ forcePlaceholderSize: true
+ };
+
+
+ console.log($scope.sortableOptions);
+
//Populate AddField with all available form field types
$scope.addField = {};
$scope.addField.types = FormFields.types;
@@ -3663,222 +2351,6 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
};
- /*
- ** startPage Button Methods
- */
-
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-
- if (file) {
- console.log(file);
-
- Upload.upload({
- url: '/upload/pdf',
- data: {
- 'user': $scope.user,
- file: file
- }
- }).then(function (resp) {
- var data = resp.data;
- $scope.log = 'file ' + data.originalname + ' uploaded as ' + data.filename + '. JSON: ' + JSON.stringify(data) + '\n' + $scope.log;
- $scope.myform.pdf = angular.fromJson(angular.toJson(data));
-
- //console.log($scope.myform.pdf);
-
- $scope.pdfLoading = false;
-
- console.log($scope.log);
- if (!$scope.$$phase && !$scope.$digest) {
- $scope.$apply();
- }
- }, function(resp){
- $scope.pdfLoading = false;
- console.log('Error occured during upload.\n');
- console.log(resp.status);
- }, function (evt) {
- var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
- $scope.log = 'progress: ' + progressPercentage + '% ' +
- evt.config.data.file.name + '\n' + $scope.log;
-
- console.log($scope.log);
-
- $scope.pdfLoading = true;
- });
- }
- };
-
- }]
- };
- }
-]);
-
-'use strict';
-
-angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormFields',
- function ($rootScope, FormFields) {
- return {
- templateUrl: 'modules/forms/admin/views/directiveViews/form/edit-form.client.view.html',
- restrict: 'E',
- scope: {
- myform:'='
- },
- controller: ["$scope", function($scope){
- var field_ids = _($scope.myform.form_fields).pluck('_id');
- for(var i=0; i FormFields
- $scope.oscarFieldsLeft = function(field_id){
-
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
->>>>>>> make it work
-// Config HTTP Error Handling
-angular.module('users').config(['$httpProvider',
- function($httpProvider) {
- $httpProvider.interceptors.push(["$q", "$location", function($q, $location) {
- return {
- responseError: function(response) {
- if( $location.path() !== '/users/me' && response.config){
- if(response.config.url !== '/users/me'){
- console.log('intercepted rejection of ', response.config.url, response.status);
- if (response.status === 401) {
- console.log($location.path());
- // save the current location so that login can redirect back
- $location.nextAfterLogin = $location.path();
- $location.path('/signin');
- }else if(response.status === 403){
- $location.path('/access_denied');
- }
- }
-
- }
- return $q.reject(response);
- }
- };
- }]);
-}]);
-
-'use strict';
-=======
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
- // add new Button to the startPage
- $scope.addButton = function(){
-
- var newButton = {};
- newButton.bgColor = '#ddd';
- newButton.color = '#ffffff';
- newButton.text = 'Button';
- newButton._id = Math.floor(100000*Math.random());
->>>>>>> make it work
-
- $scope.myform.startPage.buttons.push(newButton);
- };
-
-=======
- if($scope.myform && $scope.myform.plugins.oscarhost.settings.validFields.length > 0){
- if(!$scope.myform.plugins.oscarhost.settings.fieldMap) $scope.myform.plugins.oscarhost.settings.fieldMap = {};
-
- var oscarhostFields = $scope.myform.plugins.oscarhost.settings.validFields;
- var currentFields = _($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();
->>>>>>> make it work
-
- if( $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id) ){
- currentFields = _(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id]);
- }
-
- //Get all oscarhostFields that haven't been mapped to a formfield
- return _(oscarhostFields).difference(currentFields).value();
- }
- return [];
- };
-
- /*
- ** FormFields (ui-sortable) drag-and-drop configuration
- */
- $scope.dropzone = {
- handle: ' .handle',
- containment: '.dropzoneContainer',
- cursor: 'grabbing'
- };
-
- /*
- ** Field CRUD Methods
- */
- // Add a new field
- $scope.addNewField = function(modifyForm, fieldType){
-
- // incr field_id counter
- $scope.addField.lastAddedID++;
- var fieldTitle;
-
- for(var i = 0; i < $scope.addField.types.length; i++){
- if($scope.addField.types[i].name === fieldType){
- $scope.addField.types[i].lastAddedID++;
- fieldTitle = $scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;
- break;
- }
- }
- var newField = {
- title: fieldTitle,
- fieldType: fieldType,
- fieldValue: '',
- required: true,
- disabled: false,
- deletePreserved: false
- };
- // console.log('\n\n---------\nAdded field CLIENT');
- // console.log(newField);
- // newField._id = _.uniqueId();
-
- // put newField into fields array
- if(modifyForm){
- $scope.myform.form_fields.push(newField);
- }
- return newField;
- };
-
- // Delete particular field on button click
- $scope.deleteField = function (field_index){
-
- //Delete field from field map
- var currFieldId = $scope.myform.form_fields[field_index]._id;
- if($scope.myform.hasOwnProperty('plugins.oscarhost.baseUrl')) delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId];
-
- //Delete field
- $scope.myform.form_fields.splice(field_index, 1);
- };
- $scope.duplicateField = function (field_index){
- var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
- currField._id = 'cloned'+_.uniqueId();
- currField.title += ' copy';
-
- //Insert field at selected index
- $scope.myform.form_fields.splice(field_index+1, 0, currField);
- };
-
-
/*
** startPage Button Methods
*/
@@ -3895,38 +2367,13 @@ angular.module('users').config(['$httpProvider',
$scope.myform.startPage.buttons.push(newButton);
};
->>>>>>> make it work
// delete particular Button from startPage
$scope.deleteButton = function(button){
var currID;
for(var i = 0; i < $scope.myform.startPage.buttons.length; i++){
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- //console.log(Auth.ensureHasCurrentUser(User));
-
- if (Auth.currentUser && Auth.currentUser.email) {
- $timeout(deferred.resolve);
- }
- else {
- Auth.currentUser = User.getCurrent(
- function() {
- Auth.login();
- $timeout(deferred.resolve());
- },
- function() {
- Auth.logout();
- $timeout(deferred.reject());
- $state.go('signin', {reload: true});
- });
- }
-=======
currID = $scope.myform.startPage.buttons[i]._id;
console.log(currID);
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
if(currID === button._id){
$scope.myform.startPage.buttons.splice(i, 1);
@@ -3934,124 +2381,8 @@ angular.module('users').config(['$httpProvider',
}
}
};
->>>>>>> make it work
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-
- if(currID === button._id){
- $scope.myform.startPage.buttons.splice(i, 1);
- break;
- }
- }
- };
->>>>>>> make it work
-
-
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- var checkSignupDisabled = function($window, $timeout, $q) {
- var deferred = $q.defer();
- if($window.signupDisabled) {
- $timeout(deferred.reject());
- } else {
- $timeout(deferred.resolve());
- }
- return deferred.promise;
- };
- checkSignupDisabled.$inject = ["$window", "$timeout", "$q"];
-
- // Users state routing
- $stateProvider.
- state('profile', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/profile',
- templateUrl: 'modules/users/views/settings/edit-profile.client.view.html'
- }).
- state('password', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/password',
- templateUrl: 'modules/users/views/settings/change-password.client.view.html'
- }).
- state('accounts', {
- resolve: {
- loggedin: checkLoggedin
- },
- url: '/settings/accounts',
- templateUrl: 'modules/users/views/settings/social-accounts.client.view.html'
- }).
- state('signup', {
- resolve: {
- isDisabled: checkSignupDisabled
- },
- url: '/signup',
- templateUrl: 'modules/users/views/authentication/signup.client.view.html'
- }).
- state('signup-success', {
- resolve: {
- isDisabled: checkSignupDisabled
- },
- url: '/signup-success',
- templateUrl: 'modules/users/views/authentication/signup-success.client.view.html'
- }).
- state('signin', {
- url: '/signin',
- templateUrl: 'modules/users/views/authentication/signin.client.view.html'
- }).
- state('access_denied', {
- url: '/access_denied',
- templateUrl: 'modules/users/views/authentication/access-denied.client.view.html'
- }).
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
- state('verify', {
- resolve: {
- isDisabled: checkSignupDisabled
- },
- url: '/verify/:token',
- templateUrl: 'modules/users/views/verify/verify-account.client.view.html'
- }).
- state('resendVerifyEmail', {
- resolve: {
- isDisabled: checkSignupDisabled
- },
- url: '/verify',
- templateUrl: 'modules/users/views/verify/resend-verify-email.client.view.html'
- }).
- state('forgot', {
- url: '/password/forgot',
- templateUrl: 'modules/users/views/password/forgot-password.client.view.html'
- }).
- state('reset-invalid', {
- url: '/password/reset/invalid',
- templateUrl: 'modules/users/views/password/reset-password-invalid.client.view.html'
- }).
- state('reset-success', {
- url: '/password/reset/success',
- templateUrl: 'modules/users/views/password/reset-password-success.client.view.html'
-=======
- state('resendVerifyEmail', {
- url: '/verify',
- templateUrl: 'modules/users/views/verify/resend-verify-email.client.view.html'
->>>>>>> make it work
- }).
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
- state('reset', {
- url: '/password/reset/:token',
- templateUrl: 'modules/users/views/password/reset-password.client.view.html'
- });
- }
-=======
- state('verify', {
- url: '/verify/:token',
- templateUrl: 'modules/users/views/verify/verify-account.client.view.html'
- }).
->>>>>>> make it work
-=======
/*
** Field Option Methods
*/
@@ -4088,10 +2419,6 @@ angular.module('users').config(['$httpProvider',
// delete particular option
$scope.deleteOption = function (field_index, option){
var currField = $scope.myform.form_fields[field_index];
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-=======
->>>>>>> make it work
->>>>>>> make it work
if(currField.fieldType === 'checkbox' || currField.fieldType === 'dropdown' || currField.fieldType === 'radio'){
for(var i = 0; i < currField.fieldOptions.length; i++){
@@ -4118,10 +2445,6 @@ angular.module('users').config(['$httpProvider',
};
}
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
->>>>>>> make it work
-=======
->>>>>>> make it work
]);
'use strict';
@@ -4234,10 +2557,16 @@ angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope',
'csv': 'csv'
};
- var blob = new Blob([document.getElementById('table-submission-data').innerHTM], {
+ console.log($scope.table.rows);
+
+ angular.element('#table-submission-data').tableExport({type: type, escape:false});
+
+ /*
+ var blob = new Blob([$scope.table.rows], {
type: 'application/'+fileMIMETypeMap[type]+';charset=utf-8'
});
saveAs(blob, $scope.myform.title+'_sumbissions_export_'+Date.now()+'.'+type);
+ */
};
}]
@@ -4247,6 +2576,81 @@ angular.module('forms').directive('editSubmissionsFormDirective', ['$rootScope',
'use strict';
+//TODO: DAVID: URGENT: Make this a $resource that fetches valid field types from server
+angular.module('forms').service('FormFields', [
+ function() {
+ this.types = [
+ {
+ name : 'textfield',
+ value : 'Short Text'
+ },
+ {
+ name : 'email',
+ value : 'Email'
+ },
+ {
+ name : 'radio',
+ value : 'Multiple Choice'
+ },
+ {
+ name : 'dropdown',
+ value : 'Dropdown'
+ },
+ {
+ name : 'date',
+ value : 'Date'
+ },
+ {
+ name : 'textarea',
+ value : 'Paragraph Text'
+ },
+ {
+ name : 'yes_no',
+ value : 'Yes/No'
+ },
+ {
+ name : 'legal',
+ value : 'Legal'
+ },
+ // {
+ // name : 'sig',
+ // value : 'Signature'
+ // },
+ // {
+ // name : 'file',
+ // value : 'File Upload'
+ // },
+ {
+ name : 'rating',
+ value : 'Rating'
+ },
+ {
+ name : 'link',
+ value : 'Link'
+ },
+ {
+ name : 'number',
+ value : 'Numbers'
+ },
+ // {
+ // name : 'scale',
+ // value : 'Opinion Scale'
+ // },
+ // {
+ // name : 'stripe',
+ // value : 'Payment'
+ // },
+ {
+ name : 'statement',
+ value : 'Statement'
+ }
+ ];
+ }
+
+]);
+
+'use strict';
+
//Submissions service used for communicating with the forms REST endpoints
angular.module('forms').factory('Submissions', ['$resource',
function($resource) {
@@ -4319,31 +2723,36 @@ angular.module('forms').config(['$translateProvider', function ($translateProvid
$translateProvider.translations('english', {
FORM_SUCCESS: 'Form entry successfully submitted!',
+ REVIEW: 'Review',
BACK_TO_FORM: 'Go back to Form',
EDIT_FORM: 'Edit this TellForm',
CREATE_FORM: 'Create this TellForm',
ADVANCEMENT: '{{done}} out of {{total}} answered',
CONTINUE_FORM: 'Continue to Form',
REQUIRED: 'required',
+ COMPLETING_NEEDED: '{{answers_not_completed}} answer(s) need completing',
OPTIONAL: 'optional',
ERROR_EMAIL_INVALID: 'Please enter a valid email address',
ERROR_NOT_A_NUMBER: 'Please enter valid numbers only',
ERROR_URL_INVALID: 'Please a valid url',
OK: 'OK',
ENTER: 'press ENTER',
+ YES: 'Yes',
+ NO: 'No',
+ NEWLINE: 'press SHIFT+ENTER to create a newline',
CONTINUE: 'Continue',
LEGAL_ACCEPT: 'I accept',
LEGAL_NO_ACCEPT: 'I don’t accept',
DELETE: 'Delete',
CANCEL: 'Cancel',
- UPLOAD_FILE: 'Upload your File'
-
+ SUBMIT: 'Submit',
+ UPLOAD_FILE: 'Upload your File',
});
$translateProvider.preferredLanguage('english')
.fallbackLanguage('english')
.useSanitizeValueStrategy('escape');
-
+
}]);
'use strict';
@@ -4352,24 +2761,32 @@ angular.module('forms').config(['$translateProvider', function ($translateProvid
$translateProvider.translations('french', {
FORM_SUCCESS: 'Votre formulaire a été enregistré!',
+ REVIEW: 'Incomplet',
BACK_TO_FORM: 'Retourner au formulaire',
EDIT_FORM: 'Éditer le Tellform',
CREATE_FORM: 'Créer un TellForm',
ADVANCEMENT: '{{done}} complétés sur {{total}}',
CONTINUE_FORM: 'Aller au formulaire',
REQUIRED: 'obligatoire',
+ COMPLETING_NEEDED: '{{answers_not_completed}} réponse(s) doive(nt) être complétée(s)',
OPTIONAL: 'facultatif',
ERROR_EMAIL_INVALID: 'Merci de rentrer une adresse mail valide',
ERROR_NOT_A_NUMBER: 'Merce de ne rentrer que des nombres',
ERROR_URL_INVALID: 'Merci de rentrer une url valide',
OK: 'OK',
ENTER: 'presser ENTRÉE',
+ YES: 'Oui',
+ NO: 'Non',
+ NEWLINE: 'presser SHIFT+ENTER pour créer une nouvelle ligne',
CONTINUE: 'Continuer',
LEGAL_ACCEPT: 'J’accepte',
- LEGAL_NO_ACCEPT: 'Jen n’accepte pas',
+ LEGAL_NO_ACCEPT: 'Je n’accepte pas',
DELETE: 'Supprimer',
CANCEL: 'Réinitialiser',
- UPLOAD_FILE: 'Envoyer des fichier'
+ SUBMIT: 'Enregistrer',
+ UPLOAD_FILE: 'Envoyer un fichier',
+ Y: 'O',
+ N: 'N',
});
}]);
@@ -4382,7 +2799,7 @@ angular.module('forms').controller('SubmitFormController', [
function($scope, $rootScope, $state, $translate, myForm, Auth) {
$scope.authentication = Auth;
$scope.myform = myForm;
- console.log(myForm);
+
$translate.use(myForm.language);
if(!$scope.myform.isLive){
@@ -4499,17 +2916,6 @@ angular.module('forms').directive('fieldDirective', ['$http', '$compile', '$root
var fieldType = scope.field.fieldType;
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- logout: function() {
- $window.user = null;
- userState.isLoggedIn = false;
- service._currentUser = null;
- }
-=======
if(scope.field.fieldType === 'number' || scope.field.fieldType === 'textfield' || scope.field.fieldType === 'email' || scope.field.fieldType === 'link'){
switch(scope.field.fieldType){
case 'textfield':
@@ -4521,7 +2927,7 @@ angular.module('forms').directive('fieldDirective', ['$http', '$compile', '$root
break;
case 'number':
scope.field.input_type = 'text';
- scope.field.validateRegex = /^\d+$/;
+ scope.field.validateRegex = /^-?\d+$/;
break;
default:
scope.field.input_type = 'url';
@@ -4534,7 +2940,6 @@ angular.module('forms').directive('fieldDirective', ['$http', '$compile', '$root
element.html(template).show();
$compile(element.contents())(scope);
}
->>>>>>> make it work
};
}]);
@@ -4546,12 +2951,11 @@ angular.module('forms').directive('onEnterKey', ['$rootScope', function($rootSco
link: function($scope, $element, $attrs) {
$element.bind('keydown keypress', function(event) {
var keyCode = event.which || event.keyCode;
- if(keyCode === 13) {
+ if(keyCode === 13 && !event.shiftKey) {
+ event.preventDefault();
$rootScope.$apply(function() {
$rootScope.$eval($attrs.onEnterKey);
});
-
- event.preventDefault();
}
});
}
@@ -4607,9 +3011,12 @@ angular.module('forms').directive('submitFormDirective',
}
return true;
}).length;
+
+ var nb_valid = $filter('formValidity')($scope.myform);
$scope.translateAdvancementData = {
- done: $filter('formValidity')($scope.myform),
- total: form_fields_count
+ done: nb_valid,
+ total: form_fields_count,
+ answers_not_completed: form_fields_count - nb_valid
};
$scope.reloadForm = function(){
@@ -4629,20 +3036,10 @@ angular.module('forms').directive('submitFormDirective',
};
$scope.setActiveField($scope.myform.visible_form_fields[0]._id, 0, false);
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- return deferred.promise;
- },
- logout: function() {
-=======
//console.log($scope.selected);
//Reset Timer
TimeCounter.restartClock();
};
->>>>>>> make it work
$window.onscroll = function(){
$scope.scrollPos = document.body.scrollTop || document.documentElement.scrollTop || 0;
@@ -4650,41 +3047,31 @@ angular.module('forms').directive('submitFormDirective',
$scope.fieldTop = elemBox.top;
$scope.fieldBottom = elemBox.bottom;
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- return deferred.promise;
- },
- signup: function(credentials) {
-=======
//console.log($scope.forms.myForm);
var field_id;
var field_index;
->>>>>>> make it work
if(!$scope.noscroll){
//Focus on submit button
- if( $scope.selected.index === $scope.myform.form_fields.length-1 && $scope.fieldBottom < 200){
+ if( $scope.selected.index === $scope.myform.visible_form_fields.length-1 && $scope.fieldBottom < 200){
field_index = $scope.selected.index+1;
field_id = 'submit_field';
$scope.setActiveField(field_id, field_index, false);
}
//Focus on field above submit button
- else if($scope.selected.index === $scope.myform.form_fields.length){
+ else if($scope.selected.index === $scope.myform.visible_form_fields.length){
if($scope.fieldTop > 200){
field_index = $scope.selected.index-1;
- field_id = $scope.myform.form_fields[field_index]._id;
+ field_id = $scope.myform.visible_form_fields[field_index]._id;
$scope.setActiveField(field_id, field_index, false);
}
}else if( $scope.fieldBottom < 0){
field_index = $scope.selected.index+1;
- field_id = $scope.myform.form_fields[field_index]._id;
+ field_id = $scope.myform.visible_form_fields[field_index]._id;
$scope.setActiveField(field_id, field_index, false);
}else if ( $scope.selected.index !== 0 && $scope.fieldTop > 0) {
field_index = $scope.selected.index-1;
- field_id = $scope.myform.form_fields[field_index]._id;
+ field_id = $scope.myform.visible_form_fields[field_index]._id;
$scope.setActiveField(field_id, field_index, false);
}
//console.log('$scope.selected.index: '+$scope.selected.index);
@@ -4693,6 +3080,10 @@ angular.module('forms').directive('submitFormDirective',
}
};
+ $rootScope.setDropdownOption = function(){
+ console.log('setDropdownOption index: ');
+ };
+
/*
** Field Controls
*/
@@ -4709,72 +3100,81 @@ angular.module('forms').directive('submitFormDirective',
$scope.selected._id = field_id;
$scope.selected.index = field_index;
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- resendVerifyEmail: function(_email) {
-=======
+ var nb_valid = $filter('formValidity')($scope.myform);
$scope.translateAdvancementData = {
- done: $filter('formValidity')($scope.myform),
- total: form_fields_count
+ done: nb_valid,
+ total: form_fields_count,
+ answers_not_completed: form_fields_count - nb_valid
};
->>>>>>> make it work
if(animateScroll){
$scope.noscroll=true;
setTimeout(function() {
- $document.scrollToElement(angular.element('.activeField'), -10, 200).then(function(){
- $scope.noscroll = false;
- document.querySelectorAll('.activeField .focusOn')[0].focus();
+ $document.scrollToElement(angular.element('.activeField'), -10, 200).then(function() {
+ $scope.noscroll = false;
+ setTimeout(function() {
+ if (document.querySelectorAll('.activeField .focusOn')[0]) {
+ //console.log(document.querySelectorAll('.activeField .focusOn')[0]);
+ document.querySelectorAll('.activeField .focusOn')[0].focus();
+ } else {
+ //console.log(document.querySelectorAll('.activeField input')[0]);
+ document.querySelectorAll('.activeField input')[0].focus();
+ }
+ });
});
- }, 20);
- }
+ });
+ }else {
+ setTimeout(function() {
+ if (document.querySelectorAll('.activeField .focusOn')[0]) {
+ //console.log(document.querySelectorAll('.activeField .focusOn')[0]);
+ document.querySelectorAll('.activeField .focusOn')[0].focus();
+ } else {
+ document.querySelectorAll('.activeField input')[0].focus();
+ }
+ });
+ }
};
$rootScope.nextField = $scope.nextField = function(){
//console.log('nextfield');
//console.log($scope.selected.index);
- //console.log($scope.myform.form_fields.length-1);
- if($scope.selected.index < $scope.myform.form_fields.length-1){
- var selected_index = $scope.selected.index+1;
- var selected_id = $scope.myform.form_fields[selected_index]._id;
+ //console.log($scope.myform.visible_form_fields.length-1);
+ var selected_index, selected_id;
+ if($scope.selected.index < $scope.myform.visible_form_fields.length-1){
+ selected_index = $scope.selected.index+1;
+ selected_id = $scope.myform.visible_form_fields[selected_index]._id;
$rootScope.setActiveField(selected_id, selected_index, true);
- } else if($scope.selected.index === $scope.myform.form_fields.length-1) {
- var selected_index = $scope.selected.index+1;
- var selected_id = 'submit_field';
+ } else if($scope.selected.index === $scope.myform.visible_form_fields.length-1) {
+ //console.log('Second last element');
+ selected_index = $scope.selected.index+1;
+ selected_id = 'submit_field';
$rootScope.setActiveField(selected_id, selected_index, true);
}
};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- validateVerifyToken: function(token) {
-=======
$rootScope.prevField = $scope.prevField = function(){
if($scope.selected.index > 0){
var selected_index = $scope.selected.index - 1;
- var selected_id = $scope.myform.form_fields[selected_index]._id;
+ var selected_id = $scope.myform.visible_form_fields[selected_index]._id;
$scope.setActiveField(selected_id, selected_index, true);
}
};
->>>>>>> make it work
/*
** Form Display Functions
*/
$scope.exitStartPage = function(){
$scope.myform.startPage.showStart = false;
- if($scope.myform.form_fields.length > 0){
- $scope.selected._id = $scope.myform.form_fields[0]._id;
+ if($scope.myform.visible_form_fields.length > 0){
+ $scope.selected._id = $scope.myform.visible_form_fields[0]._id;
}
};
- $scope.submitForm = function() {
+ $scope.goToInvalid = function() {
+ document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
+ };
+
+ $scope.submitForm = function() {
var _timeElapsed = TimeCounter.stopClock();
$scope.loading = true;
var form = _.cloneDeep($scope.myform);
@@ -4799,11 +3199,8 @@ angular.module('forms').directive('submitFormDirective',
}, 500);
};
- //Load our form when the page is ready
- //angular.element(document).ready(function() {
- $scope.reloadForm();
- //});
-
+ //Reload our form
+ $scope.reloadForm();
}]
};
}
@@ -4811,31 +3208,13 @@ angular.module('forms').directive('submitFormDirective',
'use strict';
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- return deferred.promise;
- }
-=======
//Forms service used for communicating with the forms REST endpoints
angular.module('forms').service('CurrentForm',
function(){
->>>>>>> make it work
//Private variables
var _form = {};
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
->>>>>>> make it work
- return userService;
-
- }
-=======
//Public Methods
this.getForm = function() {
return _form;
@@ -4847,82 +3226,6 @@ angular.module('forms').service('CurrentForm',
);
'use strict';
-//TODO: DAVID: URGENT: Make this a $resource that fetches valid field types from server
-angular.module('forms').service('FormFields', [
- function() {
- this.types = [
- {
- name : 'textfield',
- value : 'Short Text'
- },
- {
- name : 'email',
- value : 'Email'
- },
- {
- name : 'radio',
- value : 'Multiple Choice'
- },
- {
- name : 'dropdown',
- value : 'Dropdown'
- },
- {
- name : 'date',
- value : 'Date'
- },
- {
- name : 'textarea',
- value : 'Paragraph Text'
- },
- {
- name : 'yes_no',
- value : 'Yes/No'
- },
- {
- name : 'legal',
- value : 'Legal'
- },
- // {
- // name : 'sig',
- // value : 'Signature'
- // },
- // {
- // name : 'file',
- // value : 'File Upload'
- // },
- {
- name : 'rating',
- value : 'Rating'
- },
- {
- name : 'link',
- value : 'Link'
- },
- {
- name : 'number',
- value : 'Numbers'
- },
- // {
- // name : 'scale',
- // value : 'Opinion Scale'
- // },
- // {
- // name : 'stripe',
- // value : 'Payment'
- // },
- {
- name : 'statement',
- value : 'Statement'
- }
- ];
- }
-
->>>>>>> make it work
-]);
-
-'use strict';
-
//Forms service used for communicating with the forms REST endpoints
angular.module('forms').factory('Forms', ['$resource', 'FORM_URL',
function($resource, FORM_URL) {
diff --git a/public/dist/application.min.js b/public/dist/application.min.js
index b1b71a0e..dd858db8 100644
--- a/public/dist/application.min.js
+++ b/public/dist/application.min.js
@@ -1,31 +1,6 @@
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c
-function removeDateFieldsFunc(o){function eachObject(v,k){"lastModified"!==k&&"created"!==k||delete clone[k]}for(var clone=_.clone(o),i=0;i'),$templateCache.put("../public/modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("../public/modules/forms/views/admin-form.client.view.html",'
'),$templateCache.put("../public/modules/forms/views/list-forms.client.view.html",''),$templateCache.put("../public/modules/forms/views/submit-form.client.view.html",""),$templateCache.put("../public/modules/forms/views/adminTabs/analyze.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/configure.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/create.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/design.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/date.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
{{index+1}} {{field.title}} optional {{$select.selected.option_value}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",' '),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'{{index+1}} {{field.title}} optional {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'
{{index+1}} {{field.title}} optional
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'
{{index+1}} {{field.title}} optional press SHIFT+ENTER to create a newline
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'
{{index+1}} {{field.title}} (optional)
Error: Please enter a valid email address Please enter valid numbers only Please a valid url
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/yes_no.html",'{{index+1}} {{field.title}} optional {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/configure-form.client.view.html",''),
-$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-form.client.view.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",' Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",''),$templateCache.put("../public/modules/users/views/authentication/access-denied.client.view.html",'You need to be logged in to access this page Login '),$templateCache.put("../public/modules/users/views/authentication/signin.client.view.html",''),$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at polydaic@gmail.com
'),$templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("../public/modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("../public/modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("../public/modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),
-$templateCache.put("../public/modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),$templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at polydaic@gmail.com
'),$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]);var ApplicationConfiguration=function(){var applicationModuleName="NodeForm",applicationModuleVendorDependencies=["duScroll","ui.select","cgBusy","ngSanitize","vButton","ngResource","NodeForm.templates","ui.router","ui.bootstrap","ui.utils"],registerModule=function(moduleName,dependencies){angular.module(moduleName,dependencies||[]),angular.module(applicationModuleName).requires.push(moduleName)};return{applicationModuleName:applicationModuleName,applicationModuleVendorDependencies:applicationModuleVendorDependencies,registerModule:registerModule}}();angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function($locationProvider){$locationProvider.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","$state","$stateParams",function($rootScope,Auth,$state,$stateParams){$rootScope.$state=$state,$rootScope.$stateParams=$stateParams,$rootScope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState){$state.previous=fromState;var statesToIgnore=["home","signin","resendVerifyEmail","verify","signup","signup-success","forgot","reset-invalid","reset","reset-success"];statesToIgnore.indexOf(toState.name)>0?Auth.isAuthenticated()&&(event.preventDefault(),$state.go("listForms")):"access_denied"===toState.name||Auth.isAuthenticated()||"submitForm"===toState.name||(console.log("go to signup"),event.preventDefault(),$state.go("listForms"))})}]),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","User","Authorizer","$state","$stateParams",function($rootScope,Auth,User,Authorizer,$state,$stateParams){$rootScope.$on("$stateChangeStart",function(event,next){var authenticator,permissions,user;permissions=next&&next.data&&next.data.permissions?next.data.permissions:null,Auth.ensureHasCurrentUser(User),user=Auth.currentUser,user&&(authenticator=new Authorizer(user),null!=permissions&&(authenticator.canAccess(permissions)||(event.preventDefault(),$state.go("access_denied"))))})}]),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])}),ApplicationConfiguration.registerModule("core",["users"]),ApplicationConfiguration.registerModule("forms",["ngFileUpload","ui.router.tabs","colorpicker.module","ui.date","ui.sortable","angular-input-stars","users"]),ApplicationConfiguration.registerModule("users"),angular.module("core").config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider,Authorization){$urlRouterProvider.otherwise("/forms")}]),angular.module("core").controller("HeaderController",["$rootScope","$scope","Menus","$state","Auth","User","$window",function($rootScope,$scope,Menus,$state,Auth,User,$window){$rootScope.signupDisabled=$window.signupDisabled,$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.authentication=$rootScope.authentication=Auth,$rootScope.languages=$scope.languages=["english","french","spanish"],$scope.isCollapsed=!1,$rootScope.hideNav=!1,$scope.menu=Menus.getMenu("topbar"),$scope.signout=function(){var promise=User.logout();promise.then(function(){Auth.logout(),Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user=null,$state.go("listForms")},function(reason){console.log("Logout Failed: "+reason)})},$scope.toggleCollapsibleMenu=function(){$scope.isCollapsed=!$scope.isCollapsed},$scope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState,fromParams){$scope.isCollapsed=!1,$rootScope.hideNav=!1,angular.isDefined(toState.data)&&angular.isDefined(toState.data.hideNav)&&($rootScope.hideNav=toState.data.hideNav)})}]),angular.module("core").controller("HomeController",["$rootScope","$scope","User","$state",function($rootScope,$scope,User,$state){$scope=$rootScope}]),angular.module("core").service("Menus",[function(){this.defaultRoles=["*"],this.menus={};var shouldRender=function(user){if(!user)return this.isPublic;if(~this.roles.indexOf("*"))return!0;for(var userRoleIndex in user.roles)for(var roleIndex in this.roles)if(console.log(this.roles[roleIndex]),console.log(this.roles[roleIndex]===user.roles[userRoleIndex]),this.roles[roleIndex]===user.roles[userRoleIndex])return!0;return!1};this.validateMenuExistance=function(menuId){if(menuId&&menuId.length){if(this.menus[menuId])return!0;throw new Error("Menu does not exists")}throw new Error("MenuId was not provided")},this.getMenu=function(menuId){return this.validateMenuExistance(menuId),this.menus[menuId]},this.addMenu=function(menuId,isPublic,roles){return this.menus[menuId]={isPublic:isPublic||!1,roles:roles||this.defaultRoles,items:[],shouldRender:shouldRender},this.menus[menuId]},this.removeMenu=function(menuId){this.validateMenuExistance(menuId),delete this.menus[menuId]},this.addMenuItem=function(menuId,menuItemTitle,menuItemURL,menuItemType,menuItemUIRoute,isPublic,roles,position){return this.validateMenuExistance(menuId),this.menus[menuId].items.push({title:menuItemTitle,link:menuItemURL,menuItemType:menuItemType||"item",menuItemClass:menuItemType,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].roles:roles,position:position||0,items:[],shouldRender:shouldRender}),this.menus[menuId]},this.addSubMenuItem=function(menuId,rootMenuItemURL,menuItemTitle,menuItemURL,menuItemUIRoute,isPublic,roles,position){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===rootMenuItemURL&&this.menus[menuId].items[itemIndex].items.push({title:menuItemTitle,link:menuItemURL,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].items[itemIndex].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].items[itemIndex].roles:roles,position:position||0,shouldRender:shouldRender});return this.menus[menuId]},this.removeMenuItem=function(menuId,menuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===menuItemURL&&this.menus[menuId].items.splice(itemIndex,1);return this.menus[menuId]},this.removeSubMenuItem=function(menuId,submenuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)for(var subitemIndex in this.menus[menuId].items[itemIndex].items)this.menus[menuId].items[itemIndex].items[subitemIndex].link===submenuItemURL&&this.menus[menuId].items[itemIndex].items.splice(subitemIndex,1);return this.menus[menuId]},this.addMenu("topbar",!1,["*"]),this.addMenu("bottombar",!1,["*"])}]),angular.module("forms").run(["Menus",function(Menus){Menus.addMenuItem("topbar","My Forms","forms","","/forms",!1)}]).filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}).config(["$provide",function($provide){$provide.decorator("accordionDirective",["$delegate",function($delegate){var directive=$delegate[0];return directive.replace=!0,$delegate}])}]),angular.module("forms").config(["$stateProvider",function($stateProvider){$stateProvider.state("listForms",{url:"/forms",templateUrl:"modules/forms/views/list-forms.client.view.html"}).state("submitForm",{url:"/forms/:formId",templateUrl:"modules/forms/views/submit-form.client.view.html",data:{hideNav:!0},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"}).state("viewForm",{url:"/forms/:formId/admin",templateUrl:"modules/forms/views/admin-form.client.view.html",data:{permissions:["editForm"]},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"AdminFormController"}).state("viewForm.configure",{url:"/configure",templateUrl:"modules/forms/views/adminTabs/configure.html"}).state("viewForm.design",{url:"/design",templateUrl:"modules/forms/views/adminTabs/design.html"}).state("viewForm.analyze",{url:"/analyze",templateUrl:"modules/forms/views/adminTabs/analyze.html"}).state("viewForm.create",{url:"/create",templateUrl:"modules/forms/views/adminTabs/create.html"})}]),angular.module("forms").controller("AdminFormController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http","$uibModal","myForm",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http,$uibModal,myForm){$scope=$rootScope,$scope.animationsEnabled=!0,$scope.myform=myForm,$rootScope.saveInProgress=!1,CurrentForm.setForm($scope.myform),$scope.tabData=[{heading:"Create",route:"viewForm.create"},{heading:"Design",route:"viewForm.design"},{heading:"Configure",route:"viewForm.configure"},{heading:"Analyze",route:"viewForm.analyze"}],$scope.setForm=function(form){$scope.myform=form},$rootScope.resetForm=function(){$scope.myform=Forms.get({formId:$stateParams.formId})},$scope.openDeleteModal=function(){$scope.deleteModal=$uibModal.open({animation:$scope.animationsEnabled,templateUrl:"myModalContent.html",controller:"AdminFormController",resolve:{myForm:function(){return $scope.myform}}}),$scope.deleteModal.result.then(function(selectedItem){$scope.selected=selectedItem},function(){console.log("Modal dismissed at: "+new Date)})},$scope.cancelDeleteModal=function(){$scope.deleteModal&&$scope.deleteModal.dismiss("cancel")},$scope.removeCurrentForm=function(){if($scope.deleteModal&&$scope.deleteModal.opened){$scope.deleteModal.close();var form_id=$scope.myform._id;if(!form_id)throw new Error("Error - removeCurrentForm(): $scope.myform._id does not exist");$http["delete"]("/forms/"+form_id).success(function(data,status,headers){console.log("form deleted successfully"),$state.go("listForms",{},{reload:!0})}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}},$scope.update=$rootScope.update=function(updateImmediately,cb){var continueUpdate=!0;if(updateImmediately||(continueUpdate=!$rootScope.saveInProgress),continueUpdate){var err=null;updateImmediately||($rootScope.saveInProgress=!0),$scope.updatePromise=$http.put("/forms/"+$scope.myform._id,{form:$scope.myform}).then(function(response){$rootScope.myform=$scope.myform=response.data})["catch"](function(response){console.log("Error occured during form UPDATE.\n"),err=response.data})["finally"](function(){return updateImmediately||($rootScope.saveInProgress=!1),"function"==typeof cb?cb(err):void 0})}}}]),angular.module("forms").controller("ListFormsController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http){$scope=$rootScope,$scope.forms={},$scope.showCreateModal=!1,$scope.findAll=function(){Forms.query(function(_forms){$scope.myforms=_forms})},$scope.openCreateModal=function(){$scope.showCreateModal||($scope.showCreateModal=!0)},$scope.closeCreateModal=function(){$scope.showCreateModal&&($scope.showCreateModal=!1)},$scope.setForm=function(form){$scope.myform=form},$scope.goToWithId=function(route,id){$state.go(route,{formId:id},{reload:!0})},$scope.duplicateForm=function(form_index){var form=_.cloneDeep($scope.myforms[form_index]);delete form._id,$http.post("/forms",{form:form}).success(function(data,status,headers){$scope.myforms.splice(form_index+1,0,data)}).error(function(errorResponse){console.error(errorResponse),null===errorResponse&&($scope.error=errorResponse.data.message)})},$scope.createNewForm=function(){var form={};form.title=$scope.forms.createForm.title.$modelValue,form.language=$scope.forms.createForm.language.$modelValue,$scope.forms.createForm.$valid&&$scope.forms.createForm.$dirty&&$http.post("/forms",{form:form}).success(function(data,status,headers){console.log("new form created"),$scope.goToWithId("viewForm.create",data._id+"")}).error(function(errorResponse){console.error(errorResponse),$scope.error=errorResponse.data.message})},$scope.removeForm=function(form_index){if(form_index>=$scope.myforms.length||0>form_index)throw new Error("Error: form_index in removeForm() must be between 0 and "+$scope.myforms.length-1);$http["delete"]("/forms/"+$scope.myforms[form_index]._id).success(function(data,status,headers){console.log("form deleted successfully"),$scope.myforms.splice(form_index,1)}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}}]),angular.module("forms").controller("SubmitFormController",["$scope","$rootScope","$state","myForm","Auth",function($scope,$rootScope,$state,myForm,Auth){$scope.authentication=Auth,$scope.myform=myForm,$scope.myform.isLive?$scope.hideNav=$rootScope.hideNav=!0:$scope.authentication.isAuthenticated()?$scope.hideNav=$rootScope.hideNav=!1:($scope.hideNav=$rootScope.hideNav=!0,$state.go("access_denied"))}]),_.mixin({removeDateFields:removeDateFieldsFunc}),angular.module("forms").directive("autoSaveForm",["$rootScope","$timeout",function($rootScope,$timeout){return{require:["^form"],restrict:"AE",link:function($scope,$element,$attrs,$ctrls){angular.element(document).ready(function(){var $formCtrl=$ctrls[0],savePromise=null;$rootScope.finishedRender=!1,$scope.$on("editFormFields Started",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!1}),$scope.$on("editFormFields Finished",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!0}),$scope.anyDirtyAndTouched=function(form){var propCount=0;for(var prop in form)if(form.hasOwnProperty(prop)&&"$"!==prop[0]&&(propCount++,form[prop].$touched&&form[prop].$dirty))return!0;return!1};var debounceSave=function(){$rootScope.saveInProgress=!0,$rootScope[$attrs.autoSaveCallback](!0,function(err){err?(console.error("Error form data NOT persisted"),console.error(err)):($formCtrl.$setPristine(),$formCtrl.$setUntouched())})};$scope.$watch(function(newValue,oldValue){$rootScope.finishedRender&&$scope.anyDirtyAndTouched($scope.editForm)&&!$rootScope.saveInProgress&&debounceSave()}),$scope.$watch($attrs.autoSaveWatch,function(newValue,oldValue){newValue=angular.copy(newValue),oldValue=angular.copy(oldValue),newValue.form_fields=_.removeDateFields(newValue.form_fields),oldValue.form_fields=_.removeDateFields(oldValue.form_fields);var changedFields=!_.isEqual(oldValue.form_fields,newValue.form_fields)||!_.isEqual(oldValue.startPage,newValue.startPage),changedFieldMap=!1;oldValue.hasOwnProperty("plugins.oscarhost.settings.fieldMap")&&(changedFieldMap=!!oldValue.plugins.oscarhost.settings.fieldMap&&!_.isEqual(oldValue.plugins.oscarhost.settings.fieldMap,newValue.plugins.oscarhost.settings.fieldMap)),(newValue||oldValue)&&oldValue&&(0===oldValue.form_fields.length&&($rootScope.finishedRender=!0),$rootScope.finishedRender&&(changedFields&&!$formCtrl.$dirty||changedFieldMap)&&!$rootScope.saveInProgress?(savePromise&&($timeout.cancel(savePromise),savePromise=null),savePromise=$timeout(function(){debounceSave()})):$rootScope.finishedRender&&$rootScope.saveInProgress&&($rootScope.saveInProgress=!1))},!0)})}}}]),angular.module("forms").directive("configureFormDirective",["$rootScope","$http","Upload","CurrentForm",function($rootScope,$http,Upload,CurrentForm){return{templateUrl:"modules/forms/views/directiveViews/form/configure-form.client.view.html",restrict:"E",scope:{myform:"=",user:"=",pdfFields:"@",formFields:"@"},controller:["$scope",function($scope){console.log($scope.myform),CurrentForm.getForm().plugins?CurrentForm.getForm().plugins.oscarhost.baseUrl&&($scope.oscarhostAPI=!0):$scope.oscarhostAPI=!1,$scope.log="",$scope.pdfLoading=!1,$scope.languages=$rootScope.languages,this._current_upload=null,$scope.resetForm=$rootScope.resetForm,$scope.update=$rootScope.update,this._unbindedPdfFields=$scope.pdfFields,$scope.cancelUpload=function(){this._current_upload.abort(),$scope.pdfLoading=!1,$scope.removePDF()},$scope.removePDF=function(){$scope.myform.pdf=null,$scope.myform.isGenerated=!1,$scope.myform.autofillPDFs=!1,console.log("form.pdf: "+$scope.myform.pdf+" REMOVED")},$scope.uploadPDF=function(file){file&&(console.log(file),Upload.upload({url:"/upload/pdf",data:{user:$scope.user,file:file}}).then(function(resp){var data=resp.data;$scope.log="file "+data.originalname+" uploaded as "+data.filename+". JSON: "+JSON.stringify(data)+"\n"+$scope.log,$scope.myform.pdf=angular.fromJson(angular.toJson(data)),$scope.pdfLoading=!1,console.log($scope.log),$scope.$$phase||$scope.$digest||$scope.$apply()},function(resp){$scope.pdfLoading=!1,console.log("Error occured during upload.\n"),console.log(resp.status)},function(evt){var progressPercentage=parseInt(100*evt.loaded/evt.total,10);$scope.log="progress: "+progressPercentage+"% "+evt.config.data.file.name+"\n"+$scope.log,console.log($scope.log),$scope.pdfLoading=!0}))}}]}}]),angular.module("forms").directive("editFormDirective",["$rootScope","FormFields",function($rootScope,FormFields){return{templateUrl:"modules/forms/views/directiveViews/form/edit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$scope",function($scope){for(var field_ids=_($scope.myform.form_fields).pluck("_id"),i=0;i0){$scope.myform.plugins.oscarhost.settings.fieldMap||($scope.myform.plugins.oscarhost.settings.fieldMap={});var oscarhostFields=$scope.myform.plugins.oscarhost.settings.validFields,currentFields=_($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();return $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id)&&(currentFields=_(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id])),_(oscarhostFields).difference(currentFields).value()}return[]},$scope.dropzone={handle:" .handle",containment:".dropzoneContainer",cursor:"grabbing"},$scope.addNewField=function(modifyForm,fieldType){$scope.addField.lastAddedID++;for(var fieldTitle,i=0;i<$scope.addField.types.length;i++)if($scope.addField.types[i].name===fieldType){$scope.addField.types[i].lastAddedID++,fieldTitle=$scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;break}var newField={title:fieldTitle,fieldType:fieldType,fieldValue:"",required:!0,disabled:!1,deletePreserved:!1};return modifyForm&&$scope.myform.form_fields.push(newField),newField},$scope.deleteField=function(field_index){var currFieldId=$scope.myform.form_fields[field_index]._id;$scope.myform.hasOwnProperty("plugins.oscarhost.baseUrl")&&delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId],$scope.myform.form_fields.splice(field_index,1)},$scope.duplicateField=function(field_index){var currField=_.cloneDeep($scope.myform.form_fields[field_index]);currField._id="cloned"+_.uniqueId(),currField.title+=" copy",$scope.myform.form_fields.splice(field_index+1,0,currField)},$scope.addButton=function(){var newButton={};newButton.bgColor="#ddd",newButton.color="#ffffff",newButton.text="Button",newButton._id=Math.floor(1e5*Math.random()),$scope.myform.startPage.buttons.push(newButton)},$scope.deleteButton=function(button){for(var currID,i=0;i<$scope.myform.startPage.buttons.length;i++)if(currID=$scope.myform.startPage.buttons[i]._id,console.log(currID),currID===button._id){$scope.myform.startPage.buttons.splice(i,1);break}},$scope.addOption=function(field_index){var currField=$scope.myform.form_fields[field_index];if(console.log(field_index),console.log(currField),"checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType){currField.fieldOptions||($scope.myform.form_fields[field_index].fieldOptions=[]);var lastOptionID=0;currField.fieldOptions[currField.fieldOptions.length-1]&&(lastOptionID=currField.fieldOptions[currField.fieldOptions.length-1].option_id);var newOption={option_id:Math.floor(1e5*Math.random()),option_title:"Option "+lastOptionID,option_value:"Option "+lastOptionID};$scope.myform.form_fields[field_index].fieldOptions.push(newOption)}},$scope.deleteOption=function(field_index,option){var currField=$scope.myform.form_fields[field_index];if("checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType)for(var i=0;i',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("forms").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache",function($http,$compile,$rootScope,$templateCache){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/views/directiveViews/field/",supported_fields=["textfield","textarea","date","dropdown","hidden","password","radio","legal","statement","rating","yes_no","number","natural"];return __indexOf.call(supported_fields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get("../public/"+templateUrl)};return{template:"{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show(),$compile(element.contents())(scope)}}}]),angular.module("forms").directive("keyToOption",function(){return{restrict:"AE",transclude:!0,scope:{field:"&"},link:function($scope,$element,$attrs,$select){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,index=parseInt(String.fromCharCode(keyCode))-1;console.log($scope.field),index<$scope.field.fieldOptions.length&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue=$scope.field.fieldOptions[index].option_value,"dropdown"===$attrs.type&&($select.selected.option_value=$scope.field.fieldOptions[index].option_value),console.log($scope)}))})}}}),angular.module("forms").directive("keyToTruthy",["$rootScope",function($rootScope){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,truthyKeyCode=$attrs.keyCharTruthy.charCodeAt(0)-32,falseyKeyCode=$attrs.keyCharFalsey.charCodeAt(0)-32;keyCode===truthyKeyCode?(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="true"})):keyCode===falseyKeyCode&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="false"}))})}}}]),angular.module("forms").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13!==keyCode||event.shiftKey||(event.preventDefault(),
-$rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}))})}}}]),angular.module("forms").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("forms").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","Auth",function($http,TimeCounter,$filter,$rootScope,Auth){return{templateUrl:"modules/forms/views/directiveViews/form/submit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.authentication=$rootScope.authentication,$scope.noscroll=!1,$scope.forms={},$scope.form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length,$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.visible_form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.visible_form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())},$rootScope.setDropdownOption=function(){console.log("setDropdownOption index: ")},$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){null!==$scope.selected&&$scope.selected._id!==field_id&&($scope.selected._id=field_id,$scope.selected.index=field_index,animateScroll?($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input")[0].focus()})})})):setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input")[0].focus()}))},$rootScope.nextField=$scope.nextField=function(){var selected_index,selected_id;$scope.selected.index<$scope.myform.visible_form_fields.length-1?(selected_index=$scope.selected.index+1,selected_id=$scope.myform.visible_form_fields[selected_index]._id,$rootScope.setActiveField(selected_id,selected_index,!0)):$scope.selected.index===$scope.myform.visible_form_fields.length-1&&(selected_index=$scope.selected.index+1,selected_id="submit_field",$rootScope.setActiveField(selected_id,selected_index,!0))},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.visible_form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.visible_form_fields.length>0&&($scope.selected._id=$scope.myform.visible_form_fields[0]._id)},$scope.goToInvalid=function(){document.querySelectorAll(".ng-invalid.focusOn")[0].focus()},$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields,setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){$scope.myform.submitted=!0,$scope.loading=!1}).error(function(error){$scope.loading=!1,$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("forms").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("forms").service("FormFields",[function(){this.types=[{name:"textfield",value:"Short Text"},{name:"email",value:"Email"},{name:"radio",value:"Multiple Choice"},{name:"dropdown",value:"Dropdown"},{name:"date",value:"Date"},{name:"textarea",value:"Paragraph Text"},{name:"yes_no",value:"Yes/No"},{name:"legal",value:"Legal"},{name:"rating",value:"Rating"},{name:"link",value:"Link"},{name:"number",value:"Numbers"},{name:"statement",value:"Statement"}]}]),angular.module("forms").factory("Forms",["$resource",function($resource){return $resource("/forms/:formId",{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").factory("Submissions",["$resource",function($resource){return $resource("forms/:formID/submissions/:submissionId",{submissionId:"@_id",formId:"@_id"},{query:{method:"GET",isArray:!0},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").service("TimeCounter",[function(){var _startTime,_endTime,that=this;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=_startTime},this.stopClock=function(){return _startTime?(_endTime=Date.now(),that.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,that.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]),angular.module("users").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(["$q","$location",function($q,$location){return{responseError:function(response){return"/users/me"!==$location.path()&&response.config&&"/users/me"!==response.config.url&&(console.log("intercepted rejection of ",response.config.url,response.status),401===response.status?(console.log($location.path()),$location.nextAfterLogin=$location.path(),$location.path("/signin")):403===response.status&&$location.path("/access_denied")),$q.reject(response)}}}])}]),angular.module("users").config(["$stateProvider",function($stateProvider){var checkLoggedin=function($q,$timeout,$state,User,Auth){var deferred=$q.defer();return Auth.currentUser&&Auth.currentUser.email?$timeout(deferred.resolve):Auth.currentUser=User.getCurrent(function(){Auth.login(),$timeout(deferred.resolve())},function(){Auth.logout(),$timeout(deferred.reject()),$state.go("signin",{reload:!0})}),deferred.promise};checkLoggedin.$inject=["$q","$timeout","$state","User","Auth"];var checkSignupDisabled=function($window,$timeout,$q){var deferred=$q.defer();return $timeout($window.signupDisabled?deferred.reject():deferred.resolve()),deferred.promise};checkSignupDisabled.$inject=["$window","$timeout","$q"],$stateProvider.state("profile",{resolve:{loggedin:checkLoggedin},url:"/settings/profile",templateUrl:"modules/users/views/settings/edit-profile.client.view.html"}).state("password",{resolve:{loggedin:checkLoggedin},url:"/settings/password",templateUrl:"modules/users/views/settings/change-password.client.view.html"}).state("accounts",{resolve:{loggedin:checkLoggedin},url:"/settings/accounts",templateUrl:"modules/users/views/settings/social-accounts.client.view.html"}).state("signup",{resolve:{isDisabled:checkSignupDisabled},url:"/signup",templateUrl:"modules/users/views/authentication/signup.client.view.html"}).state("signup-success",{resolve:{isDisabled:checkSignupDisabled},url:"/signup-success",templateUrl:"modules/users/views/authentication/signup-success.client.view.html"}).state("signin",{url:"/signin",templateUrl:"modules/users/views/authentication/signin.client.view.html"}).state("access_denied",{url:"/access_denied",templateUrl:"modules/users/views/authentication/access-denied.client.view.html"}).state("verify",{resolve:{isDisabled:checkSignupDisabled},url:"/verify/:token",templateUrl:"modules/users/views/verify/verify-account.client.view.html"}).state("resendVerifyEmail",{resolve:{isDisabled:checkSignupDisabled},url:"/verify",templateUrl:"modules/users/views/verify/resend-verify-email.client.view.html"}).state("forgot",{url:"/password/forgot",templateUrl:"modules/users/views/password/forgot-password.client.view.html"}).state("reset-invalid",{url:"/password/reset/invalid",templateUrl:"modules/users/views/password/reset-password-invalid.client.view.html"}).state("reset-success",{url:"/password/reset/success",templateUrl:"modules/users/views/password/reset-password-success.client.view.html"}).state("reset",{url:"/password/reset/:token",templateUrl:"modules/users/views/password/reset-password.client.view.html"})}]),angular.module("users").controller("AuthenticationController",["$scope","$location","$state","$rootScope","User","Auth",function($scope,$location,$state,$rootScope,User,Auth){$scope=$rootScope,$scope.credentials={},$scope.error="",$scope.signin=function(){$scope.credentials.email=$scope.credentials.username,User.login($scope.credentials).then(function(response){Auth.login(response),$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),"home"!==$state.previous.name&&"verify"!==$state.previous.name&&""!==$state.previous.name?$state.go($state.previous.name):$state.go("listForms")},function(error){$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user,$scope.error=error,console.log("loginError: "+error)})},$scope.signup=function(){console.log($scope.credentials),User.signup($scope.credentials).then(function(response){console.log("signup-success"),$state.go("signup-success")},function(error){console.log("Error: "),console.log(error),error?($scope.error=error,console.log(error)):console.log("No response received")})}}]),angular.module("users").controller("PasswordController",["$scope","$stateParams","$state","User",function($scope,$stateParams,$state,User){$scope.error="",$scope.askForPasswordReset=function(){User.askForPasswordReset($scope.credentials).then(function(response){$scope.success=response.message,$scope.credentials=null},function(error){$scope.error=error,$scope.credentials=null})},$scope.resetUserPassword=function(){$scope.success=$scope.error=null,User.resetPassword($scope.passwordDetails,$stateParams.token).then(function(response){$scope.success=response.message,$scope.passwordDetails=null,$state.go("reset-success")},function(error){$scope.error=error.message||error,$scope.passwordDetails=null})}}]),angular.module("users").controller("SettingsController",["$scope","$rootScope","$http","$state","Users",function($scope,$rootScope,$http,$state,Users){$scope.user=$rootScope.user,$scope.hasConnectedAdditionalSocialAccounts=function(provider){for(var i in $scope.user.additionalProvidersData)return!0;return!1},$scope.isConnectedSocialAccount=function(provider){return $scope.user.provider===provider||$scope.user.additionalProvidersData&&$scope.user.additionalProvidersData[provider]},$scope.removeUserSocialAccount=function(provider){$scope.success=$scope.error=null,$http["delete"]("/users/accounts",{params:{provider:provider}}).success(function(response){$scope.success=!0,$scope.user=response}).error(function(response){$scope.error=response.message})},$scope.updateUserProfile=function(isValid){if(isValid){$scope.success=$scope.error=null;var user=new Users($scope.user);user.$update(function(response){$scope.success=!0,$scope.user=response},function(response){$scope.error=response.data.message})}else $scope.submitted=!0},$scope.changeUserPassword=function(){$scope.success=$scope.error=null,$http.post("/users/password",$scope.passwordDetails).success(function(response){$scope.success=!0,$scope.passwordDetails=null}).error(function(response){$scope.error=response.message})}}]),angular.module("users").controller("VerifyController",["$scope","$state","$rootScope","User","Auth","$stateParams",function($scope,$state,$rootScope,User,Auth,$stateParams){$scope.isResetSent=!1,$scope.credentials={},$scope.error="",$scope.resendVerifyEmail=function(){User.resendVerifyEmail($scope.credentials.email).then(function(response){console.log(response),$scope.success=response.message,$scope.credentials=null,$scope.isResetSent=!0},function(error){$scope.error=error,$scope.credentials.email=null,$scope.isResetSent=!1})},$scope.validateVerifyToken=function(){$stateParams.token&&(console.log($stateParams.token),User.validateVerifyToken($stateParams.token).then(function(response){console.log("Success: "+response.message),$scope.success=response.message,$scope.isResetSent=!0,$scope.credentials.email=null},function(error){console.log("Error: "+error.message),$scope.isResetSent=!1,$scope.error=error,$scope.credentials.email=null}))}}]),angular.module("users").factory("Auth",["$window",function($window){var userState={isLoggedIn:!1},service={_currentUser:null,get currentUser(){return this._currentUser},ensureHasCurrentUser:function(User){return service._currentUser&&service._currentUser.username?service._currentUser:$window.user?(service._currentUser=$window.user,service._currentUser):void User.getCurrent().then(function(user){return service._currentUser=user,userState.isLoggedIn=!0,$window.user=service._currentUser,service._currentUser},function(response){return userState.isLoggedIn=!1,service._currentUser=null,$window.user=null,console.log("User.getCurrent() err",response),null})},isAuthenticated:function(){return!!service._currentUser},getUserState:function(){return userState},login:function(new_user){userState.isLoggedIn=!0,service._currentUser=new_user},logout:function(){$window.user=null,userState.isLoggedIn=!1,service._currentUser=null}};return service}]),angular.module("users").service("Authorizer",["APP_PERMISSIONS","USER_ROLES",function(APP_PERMISSIONS,USER_ROLES){return function(user){return{canAccess:function(permissions){var i,len,permission;for(angular.isArray(permissions)||(permissions=[permissions]),i=0,len=permissions.length;len>i;i++){if(permission=permissions[i],null===APP_PERMISSIONS[permission])throw"Bad permission value";if(!user||!user.roles)return!1;switch(permission){case APP_PERMISSIONS.viewAdminSettings:case APP_PERMISSIONS.editAdminSettings:return user.roles.indexOf(USER_ROLES.admin)>-1;case APP_PERMISSIONS.viewPrivateForm:case APP_PERMISSIONS.editForm:return user.roles.indexOf(USER_ROLES.admin)>-1||user.roles.indexOf(USER_ROLES.normal)>-1}}return!1}}}}]),angular.module("users").factory("User",["$window","$q","$timeout","$http","$state",function($window,$q,$timeout,$http,$state){var userService={getCurrent:function(){var deferred=$q.defer();return $http.get("/users/me").success(function(response){deferred.resolve(response)}).error(function(){deferred.reject("User's session has expired")}),deferred.promise},login:function(credentials){var deferred=$q.defer();return $http.post("/auth/signin",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},logout:function(){var deferred=$q.defer();return $http.get("/auth/signout").success(function(response){deferred.resolve(null)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},signup:function(credentials){var deferred=$q.defer();return $http.post("/auth/signup",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},resendVerifyEmail:function(_email){var deferred=$q.defer();return $http.post("/auth/verify",{email:_email}).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},validateVerifyToken:function(token){var validTokenRe=/^([A-Za-z0-9]{48})$/g;if(!validTokenRe.test(token))throw new Error("Error token: "+token+" is not a valid verification token");var deferred=$q.defer();return $http.get("/auth/verify/"+token).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error)}),deferred.promise},resetPassword:function(passwordDetails,token){var deferred=$q.defer();return $http.get("/auth/password/"+token,passwordDetails).success(function(response){deferred.resolve()}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},askForPasswordReset:function(credentials){var deferred=$q.defer();return $http.post("/auth/forgot",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise}};return userService}]),angular.module("users").factory("Users",["$resource",function($resource){return $resource("users",{},{update:{method:"PUT"}})}]);
-=======
-<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f
-function removeDateFieldsFunc(o){function eachObject(v,k){"lastModified"!==k&&"created"!==k||delete clone[i][k]}for(var clone=_.clone(o),i=0;i'),$templateCache.put("../public/modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("../public/modules/forms/views/admin-form.client.view.html",'
'),$templateCache.put("../public/modules/forms/views/list-forms.client.view.html",''),$templateCache.put("../public/modules/forms/views/submit-form.client.view.html","√"),$templateCache.put("../public/modules/forms/views/adminTabs/analyze.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/configure.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/create.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/design.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/date.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
{{index+1}} {{field.title}} optional {{$select.selected.option_value}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",' '),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'{{index+1}} {{field.title}} optional {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'
{{index+1}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'\n
\n \n {{index+1}}\n \n \n {{field.title}} \n optional \n \n \n \n \n \n
\n \n'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",'
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'
{{index+1}} {{field.title}} optional press SHIFT+ENTER to create a newline \n
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'
{{index+1}} {{field.title}} (optional)
Error: Please enter a valid email address Please enter valid numbers only Please a valid url
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/yes_no.html",'
{{index+1}} {{field.title}} optional {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/configure-form.client.view.html",'
'),
-$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-form.client.view.html",'
Click to Add New Field Add New FieldAdd Field
Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n \n
\n
Intro Button:
\n
\n \n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n\n \n\n \n\n \n \n \n \n {{field.title}} \n * \n \n \n \n \n \n \n \n
\n \n \n\n
\n
\n
Preview Field \n \n
\n
\n
\n\n
\n\n
\n
Question Title:
\n
\n
\n
\n\n
\n\n
\n\n
\n
\n
Options:
\n
\n
\n
\n \n Add Option\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n\n \n
\n
\n Click on Fields to add them here\n \n \n
\n\n \n \n
\n\n
\n
\n\n
\n
\n
\n \n \n N/A \n \n {{oscarhost_field}}\n \n \n
\n
\n
\n
\n
\n\n'),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",'
Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",'
'),$templateCache.put("../public/modules/users/views/authentication/access-denied.client.view.html",'
You need to be logged in to access this page Login '),$templateCache.put("../public/modules/users/views/authentication/signin.client.view.html",'
'),$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",'
Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",'
'),$templateCache.put("../public/modules/users/views/password/forgot-password.client.view.html",'
Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",'
'),$templateCache.put("../public/modules/users/views/password/reset-password-success.client.view.html",'
Password successfully reset Continue to home page '),$templateCache.put("../public/modules/users/views/password/reset-password.client.view.html",'
'),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",'
'),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'
Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),
-$templateCache.put("../public/modules/users/views/settings/social-accounts.client.view.html",'
Connected social accounts: Connect other social accounts: '),$templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",'
Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",'
Account successfuly activated Continue to login page ')}]);var ApplicationConfiguration=function(){var applicationModuleName="NodeForm",applicationModuleVendorDependencies=["duScroll","ui.select","cgBusy","ngSanitize","vButton","ngResource","NodeForm.templates","ui.router","ui.bootstrap","ui.utils"],registerModule=function(moduleName,dependencies){angular.module(moduleName,dependencies||[]),angular.module(applicationModuleName).requires.push(moduleName)};return{applicationModuleName:applicationModuleName,applicationModuleVendorDependencies:applicationModuleVendorDependencies,registerModule:registerModule}}();angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function($locationProvider){$locationProvider.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","$state","$stateParams",function($rootScope,Auth,$state,$stateParams){$rootScope.$state=$state,$rootScope.$stateParams=$stateParams,$rootScope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState){$state.previous=fromState;var statesToIgnore=["home","signin","resendVerifyEmail","verify","signup","signup-success","forgot","reset-invalid","reset","reset-success"];statesToIgnore.indexOf(toState.name)>0?Auth.isAuthenticated()&&(event.preventDefault(),$state.go("listForms")):"access_denied"===toState.name||Auth.isAuthenticated()||"submitForm"===toState.name||(console.log("go to signup"),event.preventDefault(),$state.go("listForms"))})}]),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","User","Authorizer","$state","$stateParams",function($rootScope,Auth,User,Authorizer,$state,$stateParams){$rootScope.$on("$stateChangeStart",function(event,next){var authenticator,permissions,user;permissions=next&&next.data&&next.data.permissions?next.data.permissions:null,Auth.ensureHasCurrentUser(User),user=Auth.currentUser,user&&(authenticator=new Authorizer(user),null!=permissions&&(authenticator.canAccess(permissions)||(event.preventDefault(),$state.go("access_denied"))))})}]),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])}),ApplicationConfiguration.registerModule("core",["users"]),ApplicationConfiguration.registerModule("forms",["ngFileUpload","ui.router.tabs","colorpicker.module","ui.date","ui.sortable","angular-input-stars","users"]),ApplicationConfiguration.registerModule("users"),angular.module("core").config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider,Authorization){$urlRouterProvider.otherwise("/forms")}]),angular.module("core").controller("HeaderController",["$rootScope","$scope","Menus","$state","Auth","User","$window",function($rootScope,$scope,Menus,$state,Auth,User,$window){$rootScope.signupDisabled=$window.signupDisabled,$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.authentication=$rootScope.authentication=Auth,$rootScope.languages=$scope.languages=["english","french","spanish"],$scope.isCollapsed=!1,$rootScope.hideNav=!1,$scope.menu=Menus.getMenu("topbar"),$scope.signout=function(){var promise=User.logout();promise.then(function(){Auth.logout(),Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user=null,$state.go("listForms")},function(reason){console.log("Logout Failed: "+reason)})},$scope.toggleCollapsibleMenu=function(){$scope.isCollapsed=!$scope.isCollapsed},$scope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState,fromParams){$scope.isCollapsed=!1,$rootScope.hideNav=!1,angular.isDefined(toState.data)&&angular.isDefined(toState.data.hideNav)&&($rootScope.hideNav=toState.data.hideNav)})}]),angular.module("core").controller("HomeController",["$rootScope","$scope","User","$state",function($rootScope,$scope,User,$state){$scope=$rootScope}]),angular.module("core").service("Menus",[function(){this.defaultRoles=["*"],this.menus={};var shouldRender=function(user){if(!user)return this.isPublic;if(~this.roles.indexOf("*"))return!0;for(var userRoleIndex in user.roles)for(var roleIndex in this.roles)if(console.log(this.roles[roleIndex]),console.log(this.roles[roleIndex]===user.roles[userRoleIndex]),this.roles[roleIndex]===user.roles[userRoleIndex])return!0;return!1};this.validateMenuExistance=function(menuId){if(menuId&&menuId.length){if(this.menus[menuId])return!0;throw new Error("Menu does not exists")}throw new Error("MenuId was not provided")},this.getMenu=function(menuId){return this.validateMenuExistance(menuId),this.menus[menuId]},this.addMenu=function(menuId,isPublic,roles){return this.menus[menuId]={isPublic:isPublic||!1,roles:roles||this.defaultRoles,items:[],shouldRender:shouldRender},this.menus[menuId]},this.removeMenu=function(menuId){this.validateMenuExistance(menuId),delete this.menus[menuId]},this.addMenuItem=function(menuId,menuItemTitle,menuItemURL,menuItemType,menuItemUIRoute,isPublic,roles,position){return this.validateMenuExistance(menuId),this.menus[menuId].items.push({title:menuItemTitle,link:menuItemURL,menuItemType:menuItemType||"item",menuItemClass:menuItemType,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].roles:roles,position:position||0,items:[],shouldRender:shouldRender}),this.menus[menuId]},this.addSubMenuItem=function(menuId,rootMenuItemURL,menuItemTitle,menuItemURL,menuItemUIRoute,isPublic,roles,position){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===rootMenuItemURL&&this.menus[menuId].items[itemIndex].items.push({title:menuItemTitle,link:menuItemURL,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].items[itemIndex].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].items[itemIndex].roles:roles,position:position||0,shouldRender:shouldRender});return this.menus[menuId]},this.removeMenuItem=function(menuId,menuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===menuItemURL&&this.menus[menuId].items.splice(itemIndex,1);return this.menus[menuId]},this.removeSubMenuItem=function(menuId,submenuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)for(var subitemIndex in this.menus[menuId].items[itemIndex].items)this.menus[menuId].items[itemIndex].items[subitemIndex].link===submenuItemURL&&this.menus[menuId].items[itemIndex].items.splice(subitemIndex,1);return this.menus[menuId]},this.addMenu("topbar",!1,["*"]),this.addMenu("bottombar",!1,["*"])}]),angular.module("forms").run(["Menus",function(Menus){Menus.addMenuItem("topbar","My Forms","forms","","/forms",!1)}]).filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}).config(["$provide",function($provide){$provide.decorator("accordionDirective",["$delegate",function($delegate){var directive=$delegate[0];return directive.replace=!0,$delegate}])}]),angular.module("forms").config(["$stateProvider",function($stateProvider){$stateProvider.state("listForms",{url:"/forms",templateUrl:"modules/forms/views/list-forms.client.view.html"}).state("submitForm",{url:"/forms/:formId",templateUrl:"modules/forms/views/submit-form.client.view.html",data:{hideNav:!0},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"}).state("viewForm",{url:"/forms/:formId/admin",templateUrl:"modules/forms/views/admin-form.client.view.html",data:{permissions:["editForm"]},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"AdminFormController"}).state("viewForm.configure",{url:"/configure",templateUrl:"modules/forms/views/adminTabs/configure.html"}).state("viewForm.design",{url:"/design",templateUrl:"modules/forms/views/adminTabs/design.html"}).state("viewForm.analyze",{url:"/analyze",templateUrl:"modules/forms/views/adminTabs/analyze.html"}).state("viewForm.create",{url:"/create",templateUrl:"modules/forms/views/adminTabs/create.html"})}]),angular.module("forms").controller("AdminFormController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http","$uibModal","myForm",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http,$uibModal,myForm){$scope=$rootScope,$scope.animationsEnabled=!0,$scope.myform=myForm,$rootScope.saveInProgress=!1,CurrentForm.setForm($scope.myform),$scope.tabData=[{heading:"Create",route:"viewForm.create"},{heading:"Design",route:"viewForm.design"},{heading:"Configure",route:"viewForm.configure"},{heading:"Analyze",route:"viewForm.analyze"}],$scope.setForm=function(form){$scope.myform=form},$rootScope.resetForm=function(){$scope.myform=Forms.get({formId:$stateParams.formId})},$scope.openDeleteModal=function(){$scope.deleteModal=$uibModal.open({animation:$scope.animationsEnabled,templateUrl:"myModalContent.html",controller:"AdminFormController",resolve:{myForm:function(){return $scope.myform}}}),$scope.deleteModal.result.then(function(selectedItem){$scope.selected=selectedItem},function(){console.log("Modal dismissed at: "+new Date)})},$scope.cancelDeleteModal=function(){$scope.deleteModal&&$scope.deleteModal.dismiss("cancel")},$scope.removeCurrentForm=function(){if($scope.deleteModal&&$scope.deleteModal.opened){$scope.deleteModal.close();var form_id=$scope.myform._id;if(!form_id)throw new Error("Error - removeCurrentForm(): $scope.myform._id does not exist");$http["delete"]("/forms/"+form_id).success(function(data,status,headers){console.log("form deleted successfully"),$state.go("listForms",{},{reload:!0})}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}},$scope.update=$rootScope.update=function(updateImmediately,cb){var continueUpdate=!0;if(updateImmediately||(continueUpdate=!$rootScope.saveInProgress),continueUpdate){var err=null;updateImmediately||($rootScope.saveInProgress=!0),$scope.updatePromise=$http.put("/forms/"+$scope.myform._id,{form:$scope.myform}).then(function(response){$rootScope.myform=$scope.myform=response.data})["catch"](function(response){console.log("Error occured during form UPDATE.\n"),err=response.data})["finally"](function(){return updateImmediately||($rootScope.saveInProgress=!1),"function"==typeof cb?cb(err):void 0})}}}]),angular.module("forms").controller("ListFormsController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http){$scope=$rootScope,$scope.forms={},$scope.showCreateModal=!1,$scope.findAll=function(){Forms.query(function(_forms){$scope.myforms=_forms})},$scope.openCreateModal=function(){$scope.showCreateModal||($scope.showCreateModal=!0)},$scope.closeCreateModal=function(){$scope.showCreateModal&&($scope.showCreateModal=!1)},$scope.setForm=function(form){$scope.myform=form},$scope.goToWithId=function(route,id){$state.go(route,{formId:id},{reload:!0})},$scope.duplicateForm=function(form_index){var form=_.cloneDeep($scope.myforms[form_index]);delete form._id,$http.post("/forms",{form:form}).success(function(data,status,headers){$scope.myforms.splice(form_index+1,0,data)}).error(function(errorResponse){console.error(errorResponse),null===errorResponse&&($scope.error=errorResponse.data.message)})},$scope.createNewForm=function(){var form={};form.title=$scope.forms.createForm.title.$modelValue,form.language=$scope.forms.createForm.language.$modelValue,$scope.forms.createForm.$valid&&$scope.forms.createForm.$dirty&&$http.post("/forms",{form:form}).success(function(data,status,headers){console.log("new form created"),$scope.goToWithId("viewForm.create",data._id+"")}).error(function(errorResponse){console.error(errorResponse),$scope.error=errorResponse.data.message})},$scope.removeForm=function(form_index){if(form_index>=$scope.myforms.length||0>form_index)throw new Error("Error: form_index in removeForm() must be between 0 and "+$scope.myforms.length-1);$http["delete"]("/forms/"+$scope.myforms[form_index]._id).success(function(data,status,headers){console.log("form deleted successfully"),$scope.myforms.splice(form_index,1)}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}}]),angular.module("forms").controller("SubmitFormController",["$scope","$rootScope","$state","myForm","Auth",function($scope,$rootScope,$state,myForm,Auth){$scope.authentication=Auth,$scope.myform=myForm,$scope.myform.isLive?$scope.hideNav=$rootScope.hideNav=!0:$scope.authentication.isAuthenticated()?$scope.hideNav=$rootScope.hideNav=!1:($scope.hideNav=$rootScope.hideNav=!0,$state.go("access_denied"))}]),_.mixin({removeDateFields:removeDateFieldsFunc}),angular.module("forms").directive("autoSaveForm",["$rootScope","$timeout",function($rootScope,$timeout){return{require:["^form"],restrict:"AE",link:function($scope,$element,$attrs,$ctrls){angular.element(document).ready(function(){var $formCtrl=$ctrls[0],savePromise=null;$rootScope.finishedRender=!1,$scope.$on("editFormFields Started",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!1}),$scope.$on("editFormFields Finished",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!0}),$scope.anyDirtyAndTouched=function(form){var propCount=0;for(var prop in form)if(form.hasOwnProperty(prop)&&"$"!==prop[0]&&(propCount++,form[prop].$touched&&form[prop].$dirty))return!0;return!1};var debounceSave=function(){$rootScope.saveInProgress=!0,$rootScope[$attrs.autoSaveCallback](!0,function(err){err?(console.error("Error form data NOT persisted"),console.error(err)):(console.log("\n\nForm data persisted -- setting pristine flag"),$formCtrl.$setPristine(),$formCtrl.$setUntouched())})};$scope.$watch(function(newValue,oldValue){console.log("introParagraphStartPage.$dirty: "+$scope.editForm.introParagraphStartPage.$dirty),console.log("introParagraphStartPage.$touched: "+$scope.editForm.introParagraphStartPage.$touched),$rootScope.finishedRender&&$scope.anyDirtyAndTouched($scope.editForm)&&!$rootScope.saveInProgress&&(console.log("Form saving started"),debounceSave(),console.log("introParagraphStartPage.$dirty AFTER: "+$scope.editForm.introParagraphStartPage.$dirty))}),$scope.$watch($attrs.autoSaveWatch,function(newValue,oldValue){newValue=angular.copy(newValue),oldValue=angular.copy(oldValue),newValue.form_fields=_.removeDateFields(newValue.form_fields),oldValue.form_fields=_.removeDateFields(oldValue.form_fields);var changedFields=!_.isEqual(oldValue.form_fields,newValue.form_fields)||!_.isEqual(oldValue.startPage,newValue.startPage),changedFieldMap=!1;oldValue.hasOwnProperty("plugins.oscarhost.settings.fieldMap")&&(changedFieldMap=!!oldValue.plugins.oscarhost.settings.fieldMap&&!_.isEqual(oldValue.plugins.oscarhost.settings.fieldMap,newValue.plugins.oscarhost.settings.fieldMap)),(newValue||oldValue)&&oldValue&&(0===oldValue.form_fields.length&&($rootScope.finishedRender=!0),$rootScope.finishedRender&&(changedFields&&!$formCtrl.$dirty||changedFieldMap)&&!$rootScope.saveInProgress?(savePromise&&($timeout.cancel(savePromise),savePromise=null),savePromise=$timeout(function(){debounceSave()})):$rootScope.finishedRender&&$rootScope.saveInProgress&&($rootScope.saveInProgress=!1))},!0)})}}}]),angular.module("forms").directive("configureFormDirective",["$rootScope","$http","Upload","CurrentForm",function($rootScope,$http,Upload,CurrentForm){return{templateUrl:"modules/forms/views/directiveViews/form/configure-form.client.view.html",restrict:"E",scope:{myform:"=",user:"=",pdfFields:"@",formFields:"@"},controller:["$scope",function($scope){console.log($scope.myform),CurrentForm.getForm().plugins?CurrentForm.getForm().plugins.oscarhost.baseUrl&&($scope.oscarhostAPI=!0):$scope.oscarhostAPI=!1,$scope.log="",$scope.pdfLoading=!1,$scope.languages=$rootScope.languages,this._current_upload=null,$scope.resetForm=$rootScope.resetForm,$scope.update=$rootScope.update,this._unbindedPdfFields=$scope.pdfFields,$scope.cancelUpload=function(){this._current_upload.abort(),$scope.pdfLoading=!1,$scope.removePDF()},$scope.removePDF=function(){$scope.myform.pdf=null,$scope.myform.isGenerated=!1,$scope.myform.autofillPDFs=!1,console.log("form.pdf: "+$scope.myform.pdf+" REMOVED")},$scope.uploadPDF=function(file){file&&(console.log(file),Upload.upload({url:"/upload/pdf",data:{user:$scope.user,file:file}}).then(function(resp){var data=resp.data;$scope.log="file "+data.originalname+" uploaded as "+data.filename+". JSON: "+JSON.stringify(data)+"\n"+$scope.log,$scope.myform.pdf=angular.fromJson(angular.toJson(data)),$scope.pdfLoading=!1,console.log($scope.log),$scope.$$phase||$scope.$digest||$scope.$apply()},function(resp){$scope.pdfLoading=!1,console.log("Error occured during upload.\n"),console.log(resp.status)},function(evt){var progressPercentage=parseInt(100*evt.loaded/evt.total,10);$scope.log="progress: "+progressPercentage+"% "+evt.config.data.file.name+"\n"+$scope.log,console.log($scope.log),$scope.pdfLoading=!0}))}}]}}]),angular.module("forms").directive("editFormDirective",["$rootScope","FormFields",function($rootScope,FormFields){return{templateUrl:"modules/forms/views/directiveViews/form/edit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$scope",function($scope){for(var field_ids=_($scope.myform.form_fields).pluck("_id"),i=0;i
0){$scope.myform.plugins.oscarhost.settings.fieldMap||($scope.myform.plugins.oscarhost.settings.fieldMap={});var oscarhostFields=$scope.myform.plugins.oscarhost.settings.validFields,currentFields=_($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();return $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id)&&(currentFields=_(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id])),_(oscarhostFields).difference(currentFields).value()}return[]},$scope.dropzone={handle:" .handle",containment:".dropzoneContainer",cursor:"grabbing"},$scope.addNewField=function(modifyForm,fieldType){$scope.addField.lastAddedID++;for(var fieldTitle,i=0;i<$scope.addField.types.length;i++)if($scope.addField.types[i].name===fieldType){$scope.addField.types[i].lastAddedID++,fieldTitle=$scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;break}var newField={title:fieldTitle,fieldType:fieldType,fieldValue:"",required:!0,disabled:!1,deletePreserved:!1};return modifyForm&&$scope.myform.form_fields.push(newField),newField},$scope.deleteField=function(field_index){var currFieldId=$scope.myform.form_fields[field_index]._id;$scope.myform.hasOwnProperty("plugins.oscarhost.baseUrl")&&delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId],$scope.myform.form_fields.splice(field_index,1)},$scope.duplicateField=function(field_index){var currField=_.cloneDeep($scope.myform.form_fields[field_index]);currField._id="cloned"+_.uniqueId(),currField.title+=" copy",$scope.myform.form_fields.splice(field_index+1,0,currField)},$scope.addButton=function(){var newButton={};newButton.bgColor="#ddd",newButton.color="#ffffff",newButton.text="Button",newButton._id=Math.floor(1e5*Math.random()),$scope.myform.startPage.buttons.push(newButton)},$scope.deleteButton=function(button){for(var currID,i=0;i<$scope.myform.startPage.buttons.length;i++)if(currID=$scope.myform.startPage.buttons[i]._id,console.log(currID),currID===button._id){$scope.myform.startPage.buttons.splice(i,1);break}},$scope.addOption=function(field_index){var currField=$scope.myform.form_fields[field_index];if(console.log(field_index),console.log(currField),"checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType){currField.fieldOptions||($scope.myform.form_fields[field_index].fieldOptions=[]);var lastOptionID=0;currField.fieldOptions[currField.fieldOptions.length-1]&&(lastOptionID=currField.fieldOptions[currField.fieldOptions.length-1].option_id);var newOption={option_id:Math.floor(1e5*Math.random()),option_title:"Option "+lastOptionID,option_value:"Option "+lastOptionID};$scope.myform.form_fields[field_index].fieldOptions.push(newOption)}},$scope.deleteOption=function(field_index,option){var currField=$scope.myform.form_fields[field_index];if("checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType)for(var i=0;i',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("forms").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache",function($http,$compile,$rootScope,$templateCache){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/views/directiveViews/field/",supported_fields=["textfield","textarea","date","dropdown","hidden","password","radio","legal","statement","rating","yes_no","number","natural"];return __indexOf.call(supported_fields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get("../public/"+templateUrl)};return{template:"{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show(),$compile(element.contents())(scope)}}}]),angular.module("forms").directive("keyToOption",function(){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){console.log("keypress");var keyCode=event.which||event.keyCode,index=parseInt(String.fromCharCode(keyCode))-1;console.log($scope.field),index<$scope.field.fieldOptions.length&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue=$scope.field.fieldOptions[index].option_value}))})}}}),angular.module("forms").directive("keyToTruthy",["$rootScope",function($rootScope){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,truthyKeyCode=$attrs.keyCharTruthy.charCodeAt(0)-32,falseyKeyCode=$attrs.keyCharFalsey.charCodeAt(0)-32;keyCode===truthyKeyCode?(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="true"})):keyCode===falseyKeyCode&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="false"}))})}}}]),angular.module("forms").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){
-$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13!==keyCode||event.shiftKey||(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}))})}}}]),angular.module("forms").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("forms").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","Auth",function($http,TimeCounter,$filter,$rootScope,Auth){return{templateUrl:"modules/forms/views/directiveViews/form/submit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.authentication=$rootScope.authentication,$scope.noscroll=!1,$scope.forms={},$scope.form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length,$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())},$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){null!==$scope.selected&&$scope.selected._id!==field_id&&(console.log("field_id: "+field_id),console.log("field_index: "+field_index),$scope.selected._id=field_id,$scope.selected.index=field_index,animateScroll&&($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?(console.log(document.querySelectorAll(".activeField .focusOn")[0]),document.querySelectorAll(".activeField .focusOn")[0].focus()):document.querySelectorAll(".activeField input")[0].focus()})})})))},$rootScope.nextField=$scope.nextField=function(){var selected_index,selected_id;$scope.selected.index<$scope.myform.form_fields.length-1?(selected_index=$scope.selected.index+1,selected_id=$scope.myform.form_fields[selected_index]._id,$rootScope.setActiveField(selected_id,selected_index,!0)):$scope.selected.index===$scope.myform.form_fields.length-1&&(console.log("Second last element"),selected_index=$scope.selected.index+1,selected_id="submit_field",$rootScope.setActiveField(selected_id,selected_index,!0))},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.form_fields.length>0&&($scope.selected._id=$scope.myform.form_fields[0]._id)},$scope.goToInvalid=function(){document.querySelectorAll(".ng-invalid.focusOn")[0].focus()},$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields,setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){$scope.myform.submitted=!0,$scope.loading=!1}).error(function(error){$scope.loading=!1,$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("forms").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("forms").service("FormFields",[function(){this.types=[{name:"textfield",value:"Short Text"},{name:"email",value:"Email"},{name:"radio",value:"Multiple Choice"},{name:"dropdown",value:"Dropdown"},{name:"date",value:"Date"},{name:"textarea",value:"Paragraph Text"},{name:"yes_no",value:"Yes/No"},{name:"legal",value:"Legal"},{name:"rating",value:"Rating"},{name:"link",value:"Link"},{name:"number",value:"Numbers"},{name:"statement",value:"Statement"}]}]),angular.module("forms").factory("Forms",["$resource",function($resource){return $resource("/forms/:formId",{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").factory("Submissions",["$resource",function($resource){return $resource("forms/:formID/submissions/:submissionId",{submissionId:"@_id",formId:"@_id"},{query:{method:"GET",isArray:!0},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").service("TimeCounter",[function(){var _startTime,_endTime,that=this;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=_startTime},this.stopClock=function(){return _startTime?(_endTime=Date.now(),that.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,that.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]),angular.module("users").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(["$q","$location",function($q,$location){return{responseError:function(response){return"/users/me"!==$location.path()&&response.config&&"/users/me"!==response.config.url&&(console.log("intercepted rejection of ",response.config.url,response.status),401===response.status?(console.log($location.path()),$location.nextAfterLogin=$location.path(),$location.path("/signin")):403===response.status&&$location.path("/access_denied")),$q.reject(response)}}}])}]),angular.module("users").config(["$stateProvider",function($stateProvider){var checkLoggedin=function($q,$timeout,$state,User,Auth){var deferred=$q.defer();return Auth.currentUser&&Auth.currentUser.email?$timeout(deferred.resolve):Auth.currentUser=User.getCurrent(function(){Auth.login(),$timeout(deferred.resolve())},function(){Auth.logout(),$timeout(deferred.reject()),$state.go("signin",{reload:!0})}),deferred.promise};checkLoggedin.$inject=["$q","$timeout","$state","User","Auth"];var checkSignupDisabled=function($window,$timeout,$q){var deferred=$q.defer();return $timeout($window.signupDisabled?deferred.reject():deferred.resolve()),deferred.promise};checkSignupDisabled.$inject=["$window","$timeout","$q"],$stateProvider.state("profile",{resolve:{loggedin:checkLoggedin},url:"/settings/profile",templateUrl:"modules/users/views/settings/edit-profile.client.view.html"}).state("password",{resolve:{loggedin:checkLoggedin},url:"/settings/password",templateUrl:"modules/users/views/settings/change-password.client.view.html"}).state("accounts",{resolve:{loggedin:checkLoggedin},url:"/settings/accounts",templateUrl:"modules/users/views/settings/social-accounts.client.view.html"}).state("signup",{resolve:{isDisabled:checkSignupDisabled},url:"/signup",templateUrl:"modules/users/views/authentication/signup.client.view.html"}).state("signup-success",{resolve:{isDisabled:checkSignupDisabled},url:"/signup-success",templateUrl:"modules/users/views/authentication/signup-success.client.view.html"}).state("signin",{url:"/signin",templateUrl:"modules/users/views/authentication/signin.client.view.html"}).state("access_denied",{url:"/access_denied",templateUrl:"modules/users/views/authentication/access-denied.client.view.html"}).state("verify",{resolve:{isDisabled:checkSignupDisabled},url:"/verify/:token",templateUrl:"modules/users/views/verify/verify-account.client.view.html"}).state("resendVerifyEmail",{resolve:{isDisabled:checkSignupDisabled},url:"/verify",templateUrl:"modules/users/views/verify/resend-verify-email.client.view.html"}).state("forgot",{url:"/password/forgot",templateUrl:"modules/users/views/password/forgot-password.client.view.html"}).state("reset-invalid",{url:"/password/reset/invalid",templateUrl:"modules/users/views/password/reset-password-invalid.client.view.html"}).state("reset-success",{url:"/password/reset/success",templateUrl:"modules/users/views/password/reset-password-success.client.view.html"}).state("reset",{url:"/password/reset/:token",templateUrl:"modules/users/views/password/reset-password.client.view.html"})}]),angular.module("users").controller("AuthenticationController",["$scope","$location","$state","$rootScope","User","Auth",function($scope,$location,$state,$rootScope,User,Auth){$scope=$rootScope,$scope.credentials={},$scope.error="",$scope.signin=function(){$scope.credentials.email=$scope.credentials.username,User.login($scope.credentials).then(function(response){Auth.login(response),$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),"home"!==$state.previous.name&&"verify"!==$state.previous.name&&""!==$state.previous.name?$state.go($state.previous.name):$state.go("listForms")},function(error){$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user,$scope.error=error,console.log("loginError: "+error)})},$scope.signup=function(){console.log($scope.credentials),User.signup($scope.credentials).then(function(response){console.log("signup-success"),$state.go("signup-success")},function(error){console.log("Error: "),console.log(error),error?($scope.error=error,console.log(error)):console.log("No response received")})}}]),angular.module("users").controller("PasswordController",["$scope","$stateParams","$state","User",function($scope,$stateParams,$state,User){$scope.error="",$scope.askForPasswordReset=function(){User.askForPasswordReset($scope.credentials).then(function(response){$scope.success=response.message,$scope.credentials=null},function(error){$scope.error=error,$scope.credentials=null})},$scope.resetUserPassword=function(){$scope.success=$scope.error=null,User.resetPassword($scope.passwordDetails,$stateParams.token).then(function(response){$scope.success=response.message,$scope.passwordDetails=null,$state.go("reset-success")},function(error){$scope.error=error.message||error,$scope.passwordDetails=null})}}]),angular.module("users").controller("SettingsController",["$scope","$rootScope","$http","$state","Users",function($scope,$rootScope,$http,$state,Users){$scope.user=$rootScope.user,$scope.hasConnectedAdditionalSocialAccounts=function(provider){for(var i in $scope.user.additionalProvidersData)return!0;return!1},$scope.isConnectedSocialAccount=function(provider){return $scope.user.provider===provider||$scope.user.additionalProvidersData&&$scope.user.additionalProvidersData[provider]},$scope.removeUserSocialAccount=function(provider){$scope.success=$scope.error=null,$http["delete"]("/users/accounts",{params:{provider:provider}}).success(function(response){$scope.success=!0,$scope.user=response}).error(function(response){$scope.error=response.message})},$scope.updateUserProfile=function(isValid){if(isValid){$scope.success=$scope.error=null;var user=new Users($scope.user);user.$update(function(response){$scope.success=!0,$scope.user=response},function(response){$scope.error=response.data.message})}else $scope.submitted=!0},$scope.changeUserPassword=function(){$scope.success=$scope.error=null,$http.post("/users/password",$scope.passwordDetails).success(function(response){$scope.success=!0,$scope.passwordDetails=null}).error(function(response){$scope.error=response.message})}}]),angular.module("users").controller("VerifyController",["$scope","$state","$rootScope","User","Auth","$stateParams",function($scope,$state,$rootScope,User,Auth,$stateParams){$scope.isResetSent=!1,$scope.credentials={},$scope.error="",$scope.resendVerifyEmail=function(){User.resendVerifyEmail($scope.credentials.email).then(function(response){console.log(response),$scope.success=response.message,$scope.credentials=null,$scope.isResetSent=!0},function(error){$scope.error=error,$scope.credentials.email=null,$scope.isResetSent=!1})},$scope.validateVerifyToken=function(){$stateParams.token&&(console.log($stateParams.token),User.validateVerifyToken($stateParams.token).then(function(response){console.log("Success: "+response.message),$scope.success=response.message,$scope.isResetSent=!0,$scope.credentials.email=null},function(error){console.log("Error: "+error.message),$scope.isResetSent=!1,$scope.error=error,$scope.credentials.email=null}))}}]),angular.module("users").factory("Auth",["$window",function($window){var userState={isLoggedIn:!1},service={_currentUser:null,get currentUser(){return this._currentUser},ensureHasCurrentUser:function(User){return service._currentUser&&service._currentUser.username?service._currentUser:$window.user?(service._currentUser=$window.user,service._currentUser):void User.getCurrent().then(function(user){return service._currentUser=user,userState.isLoggedIn=!0,$window.user=service._currentUser,service._currentUser},function(response){return userState.isLoggedIn=!1,service._currentUser=null,$window.user=null,console.log("User.getCurrent() err",response),null})},isAuthenticated:function(){return!!service._currentUser},getUserState:function(){return userState},login:function(new_user){userState.isLoggedIn=!0,service._currentUser=new_user},logout:function(){$window.user=null,userState.isLoggedIn=!1,service._currentUser=null}};return service}]),angular.module("users").service("Authorizer",["APP_PERMISSIONS","USER_ROLES",function(APP_PERMISSIONS,USER_ROLES){return function(user){return{canAccess:function(permissions){var i,len,permission;for(angular.isArray(permissions)||(permissions=[permissions]),i=0,len=permissions.length;len>i;i++){if(permission=permissions[i],null===APP_PERMISSIONS[permission])throw"Bad permission value";if(!user||!user.roles)return!1;switch(permission){case APP_PERMISSIONS.viewAdminSettings:case APP_PERMISSIONS.editAdminSettings:return user.roles.indexOf(USER_ROLES.admin)>-1;case APP_PERMISSIONS.viewPrivateForm:case APP_PERMISSIONS.editForm:return user.roles.indexOf(USER_ROLES.admin)>-1||user.roles.indexOf(USER_ROLES.normal)>-1}}return!1}}}}]),angular.module("users").factory("User",["$window","$q","$timeout","$http","$state",function($window,$q,$timeout,$http,$state){var userService={getCurrent:function(){var deferred=$q.defer();return $http.get("/users/me").success(function(response){deferred.resolve(response)}).error(function(){deferred.reject("User's session has expired")}),deferred.promise},login:function(credentials){var deferred=$q.defer();return $http.post("/auth/signin",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},logout:function(){var deferred=$q.defer();return $http.get("/auth/signout").success(function(response){deferred.resolve(null)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},signup:function(credentials){var deferred=$q.defer();return $http.post("/auth/signup",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},resendVerifyEmail:function(_email){var deferred=$q.defer();return $http.post("/auth/verify",{email:_email}).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},validateVerifyToken:function(token){var validTokenRe=/^([A-Za-z0-9]{48})$/g;if(!validTokenRe.test(token))throw new Error("Error token: "+token+" is not a valid verification token");var deferred=$q.defer();return $http.get("/auth/verify/"+token).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error)}),deferred.promise},resetPassword:function(passwordDetails,token){var deferred=$q.defer();return $http.get("/auth/password/"+token,passwordDetails).success(function(response){deferred.resolve()}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},askForPasswordReset:function(credentials){var deferred=$q.defer();return $http.post("/auth/forgot",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise}};return userService}]),angular.module("users").factory("Users",["$resource",function($resource){return $resource("users",{},{update:{method:"PUT"}})}]);
-=======
-<<<<<<< adb4e008930e5142044796081f66a1db54906706
-function removeDateFieldsFunc(o){function eachObject(v,k){"lastModified"!==k&&"created"!==k||delete clone[i][k]}for(var clone=_.clone(o),i=0;i'),$templateCache.put("../public/modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("../public/modules/forms/views/admin-form.client.view.html",'
'),$templateCache.put("../public/modules/forms/views/list-forms.client.view.html",''),$templateCache.put("../public/modules/forms/views/submit-form.client.view.html",""),$templateCache.put("../public/modules/forms/views/adminTabs/analyze.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/configure.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/create.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/design.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/date.html",'
{{index}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
{{index}} {{field.title}} optional {{$select.selected.option_value}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{field.title}} (* required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",' '),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'{{field.title}} optional {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'
{{index}} {{field.title}} optional '),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'
{{index}} {{field.title}} optional
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'
{{index}} {{field.title}} optional \n
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'
{{index}} {{field.title}} (optional)
Error: Please enter a valid email address Please enter valid numbers only Please a valid url
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/yes_no.html",'{{index}} {{field.title}} *(required) {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/configure-form.client.view.html",''),
-$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-form.client.view.html",'
Click to Add New Field Add New FieldAdd Field
Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n \n
\n
Intro Button:
\n
\n \n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n\n \n\n \n\n \n \n \n \n {{field.title}} \n * \n \n \n \n \n \n \n \n
\n \n \n\n
\n
\n
Preview Field \n \n
\n
\n
\n\n
\n\n
\n
Question Title:
\n
\n
\n
\n\n
\n\n
\n\n
\n
\n
Options:
\n
\n
\n
\n \n Add Option\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n\n \n
\n
\n Click on Fields to add them here\n \n \n
\n\n \n \n
\n\n
\n
\n\n
\n
\n
\n \n \n N/A \n \n {{oscarhost_field}}\n \n \n
\n
\n
\n
\n
\n\n '),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",' Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",''),$templateCache.put("../public/modules/users/views/authentication/access-denied.client.view.html",'You need to be logged in to access this page Login '),$templateCache.put("../public/modules/users/views/authentication/signin.client.view.html",''),$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("../public/modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("../public/modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("../public/modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),
-$templateCache.put("../public/modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),$templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]);var ApplicationConfiguration=function(){var applicationModuleName="NodeForm",applicationModuleVendorDependencies=["duScroll","ui.select","cgBusy","ngSanitize","vButton","ngResource","NodeForm.templates","ui.router","ui.bootstrap","ui.utils"],registerModule=function(moduleName,dependencies){angular.module(moduleName,dependencies||[]),angular.module(applicationModuleName).requires.push(moduleName)};return{applicationModuleName:applicationModuleName,applicationModuleVendorDependencies:applicationModuleVendorDependencies,registerModule:registerModule}}();angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function($locationProvider){$locationProvider.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","$state","$stateParams",function($rootScope,Auth,$state,$stateParams){$rootScope.$state=$state,$rootScope.$stateParams=$stateParams,$rootScope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState){$state.previous=fromState,"home"===toState.name||"signin"===toState.name||"resendVerifyEmail"===toState.name||"verify"===toState.name||"signup"===toState.name||"signup-success"===toState.name?Auth.isAuthenticated()&&(event.preventDefault(),$state.go("listForms")):"access_denied"===toState.name||Auth.isAuthenticated()||"submitForm"===toState.name||(event.preventDefault(),$state.go("listForms"))})}]),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","User","Authorizer","$state","$stateParams",function($rootScope,Auth,User,Authorizer,$state,$stateParams){$rootScope.$on("$stateChangeStart",function(event,next){var authenticator,permissions,user;permissions=next&&next.data&&next.data.permissions?next.data.permissions:null,Auth.ensureHasCurrentUser(User),user=Auth.currentUser,user&&(authenticator=new Authorizer(user),null!=permissions&&(authenticator.canAccess(permissions)||(event.preventDefault(),$state.go("access_denied"))))})}]),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])}),ApplicationConfiguration.registerModule("core",["users"]),ApplicationConfiguration.registerModule("forms",["ngFileUpload","ui.router.tabs","colorpicker.module","ui.date","ui.sortable","angular-input-stars","users"]),ApplicationConfiguration.registerModule("users"),angular.module("core").config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider,Authorization){$urlRouterProvider.otherwise("/forms")}]),angular.module("core").controller("HeaderController",["$rootScope","$scope","Menus","$state","Auth","User","$window",function($rootScope,$scope,Menus,$state,Auth,User,$window){$rootScope.signupDisabled=$window.signupDisabled,$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.authentication=$rootScope.authentication=Auth,$rootScope.languages=$scope.languages=["english","french","spanish"],$scope.isCollapsed=!1,$rootScope.hideNav=!1,$scope.menu=Menus.getMenu("topbar"),$scope.signout=function(){var promise=User.logout();promise.then(function(){Auth.logout(),Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user=null,$state.go("listForms")},function(reason){console.log("Logout Failed: "+reason)})},$scope.toggleCollapsibleMenu=function(){$scope.isCollapsed=!$scope.isCollapsed},$scope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState,fromParams){$scope.isCollapsed=!1,$rootScope.hideNav=!1,angular.isDefined(toState.data)&&angular.isDefined(toState.data.hideNav)&&($rootScope.hideNav=toState.data.hideNav)})}]),angular.module("core").controller("HomeController",["$rootScope","$scope","User","$state",function($rootScope,$scope,User,$state){$scope=$rootScope}]),angular.module("core").service("Menus",[function(){this.defaultRoles=["*"],this.menus={};var shouldRender=function(user){if(!user)return this.isPublic;if(~this.roles.indexOf("*"))return!0;for(var userRoleIndex in user.roles)for(var roleIndex in this.roles)if(console.log(this.roles[roleIndex]),console.log(this.roles[roleIndex]===user.roles[userRoleIndex]),this.roles[roleIndex]===user.roles[userRoleIndex])return!0;return!1};this.validateMenuExistance=function(menuId){if(menuId&&menuId.length){if(this.menus[menuId])return!0;throw new Error("Menu does not exists")}throw new Error("MenuId was not provided")},this.getMenu=function(menuId){return this.validateMenuExistance(menuId),this.menus[menuId]},this.addMenu=function(menuId,isPublic,roles){return this.menus[menuId]={isPublic:isPublic||!1,roles:roles||this.defaultRoles,items:[],shouldRender:shouldRender},this.menus[menuId]},this.removeMenu=function(menuId){this.validateMenuExistance(menuId),delete this.menus[menuId]},this.addMenuItem=function(menuId,menuItemTitle,menuItemURL,menuItemType,menuItemUIRoute,isPublic,roles,position){return this.validateMenuExistance(menuId),this.menus[menuId].items.push({title:menuItemTitle,link:menuItemURL,menuItemType:menuItemType||"item",menuItemClass:menuItemType,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].roles:roles,position:position||0,items:[],shouldRender:shouldRender}),this.menus[menuId]},this.addSubMenuItem=function(menuId,rootMenuItemURL,menuItemTitle,menuItemURL,menuItemUIRoute,isPublic,roles,position){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===rootMenuItemURL&&this.menus[menuId].items[itemIndex].items.push({title:menuItemTitle,link:menuItemURL,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].items[itemIndex].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].items[itemIndex].roles:roles,position:position||0,shouldRender:shouldRender});return this.menus[menuId]},this.removeMenuItem=function(menuId,menuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===menuItemURL&&this.menus[menuId].items.splice(itemIndex,1);return this.menus[menuId]},this.removeSubMenuItem=function(menuId,submenuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)for(var subitemIndex in this.menus[menuId].items[itemIndex].items)this.menus[menuId].items[itemIndex].items[subitemIndex].link===submenuItemURL&&this.menus[menuId].items[itemIndex].items.splice(subitemIndex,1);return this.menus[menuId]},this.addMenu("topbar",!1,["*"]),this.addMenu("bottombar",!1,["*"])}]),angular.module("forms").run(["Menus",function(Menus){Menus.addMenuItem("topbar","My Forms","forms","","/forms",!1)}]).filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}).config(["$provide",function($provide){$provide.decorator("accordionDirective",["$delegate",function($delegate){var directive=$delegate[0];return directive.replace=!0,$delegate}])}]),angular.module("forms").config(["$stateProvider",function($stateProvider){$stateProvider.state("listForms",{url:"/forms",templateUrl:"modules/forms/views/list-forms.client.view.html"}).state("submitForm",{url:"/forms/:formId",templateUrl:"modules/forms/views/submit-form.client.view.html",data:{hideNav:!0},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"}).state("viewForm",{url:"/forms/:formId/admin",templateUrl:"modules/forms/views/admin-form.client.view.html",data:{permissions:["editForm"]},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"AdminFormController"}).state("viewForm.configure",{url:"/configure",templateUrl:"modules/forms/views/adminTabs/configure.html"}).state("viewForm.design",{url:"/design",templateUrl:"modules/forms/views/adminTabs/design.html"}).state("viewForm.analyze",{url:"/analyze",templateUrl:"modules/forms/views/adminTabs/analyze.html"}).state("viewForm.create",{url:"/create",templateUrl:"modules/forms/views/adminTabs/create.html"})}]),angular.module("forms").controller("AdminFormController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http","$uibModal","myForm",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http,$uibModal,myForm){$scope=$rootScope,$scope.animationsEnabled=!0,$scope.myform=myForm,$rootScope.saveInProgress=!1,CurrentForm.setForm($scope.myform),$scope.tabData=[{heading:"Create",route:"viewForm.create"},{heading:"Design",route:"viewForm.design"},{heading:"Configure",route:"viewForm.configure"},{heading:"Analyze",route:"viewForm.analyze"}],$scope.setForm=function(form){$scope.myform=form},$rootScope.resetForm=function(){$scope.myform=Forms.get({formId:$stateParams.formId})},$scope.openDeleteModal=function(){$scope.deleteModal=$uibModal.open({animation:$scope.animationsEnabled,templateUrl:"myModalContent.html",controller:"AdminFormController",resolve:{myForm:function(){return $scope.myform}}}),$scope.deleteModal.result.then(function(selectedItem){$scope.selected=selectedItem},function(){console.log("Modal dismissed at: "+new Date)})},$scope.cancelDeleteModal=function(){$scope.deleteModal&&$scope.deleteModal.dismiss("cancel")},$scope.removeCurrentForm=function(){if($scope.deleteModal&&$scope.deleteModal.opened){$scope.deleteModal.close();var form_id=$scope.myform._id;if(!form_id)throw new Error("Error - removeCurrentForm(): $scope.myform._id does not exist");$http["delete"]("/forms/"+form_id).success(function(data,status,headers){console.log("form deleted successfully"),$state.go("listForms",{},{reload:!0})}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}},$scope.update=$rootScope.update=function(updateImmediately,cb){var continueUpdate=!0;if(updateImmediately||(continueUpdate=!$rootScope.saveInProgress),continueUpdate){var err=null;updateImmediately||($rootScope.saveInProgress=!0),$scope.updatePromise=$http.put("/forms/"+$scope.myform._id,{form:$scope.myform}).then(function(response){$rootScope.myform=$scope.myform=response.data})["catch"](function(response){console.log("Error occured during form UPDATE.\n"),err=response.data})["finally"](function(){return updateImmediately||($rootScope.saveInProgress=!1),"function"==typeof cb?cb(err):void 0})}}}]),angular.module("forms").controller("ListFormsController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http){$scope=$rootScope,$scope.forms={},$scope.showCreateModal=!1,$scope.findAll=function(){Forms.query(function(_forms){$scope.myforms=_forms})},$scope.openCreateModal=function(){$scope.showCreateModal||($scope.showCreateModal=!0)},$scope.closeCreateModal=function(){$scope.showCreateModal&&($scope.showCreateModal=!1)},$scope.setForm=function(form){$scope.myform=form},$scope.goToWithId=function(route,id){$state.go(route,{formId:id},{reload:!0})},$scope.duplicateForm=function(form_index){var form=_.cloneDeep($scope.myforms[form_index]);delete form._id,$http.post("/forms",{form:form}).success(function(data,status,headers){$scope.myforms.splice(form_index+1,0,data)}).error(function(errorResponse){console.error(errorResponse),null===errorResponse&&($scope.error=errorResponse.data.message)})},$scope.createNewForm=function(){var form={};form.title=$scope.forms.createForm.title.$modelValue,form.language=$scope.forms.createForm.language.$modelValue,$scope.forms.createForm.$valid&&$scope.forms.createForm.$dirty&&$http.post("/forms",{form:form}).success(function(data,status,headers){console.log("new form created"),$scope.goToWithId("viewForm.create",data._id+"")}).error(function(errorResponse){console.error(errorResponse),$scope.error=errorResponse.data.message})},$scope.removeForm=function(form_index){if(form_index>=$scope.myforms.length||0>form_index)throw new Error("Error: form_index in removeForm() must be between 0 and "+$scope.myforms.length-1);$http["delete"]("/forms/"+$scope.myforms[form_index]._id).success(function(data,status,headers){console.log("form deleted successfully"),$scope.myforms.splice(form_index,1)}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}}]),angular.module("forms").controller("SubmitFormController",["$scope","$rootScope","$state","myForm","Auth",function($scope,$rootScope,$state,myForm,Auth){$scope.authentication=Auth,$scope.myform=myForm,$scope.myform.isLive?$scope.hideNav=$rootScope.hideNav=!0:$scope.authentication.isAuthenticated()?$scope.hideNav=$rootScope.hideNav=!1:($scope.hideNav=$rootScope.hideNav=!0,$state.go("access_denied"))}]),_.mixin({removeDateFields:removeDateFieldsFunc}),angular.module("forms").directive("autoSaveForm",["$rootScope","$timeout",function($rootScope,$timeout){return{require:["^form"],restrict:"AE",link:function($scope,$element,$attrs,$ctrls){angular.element(document).ready(function(){var $formCtrl=$ctrls[0],savePromise=null;$rootScope.finishedRender=!1,$scope.$on("editFormFields Started",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!1}),$scope.$on("editFormFields Finished",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!0}),$scope.anyDirtyAndTouched=function(form){var propCount=0;for(var prop in form)if(form.hasOwnProperty(prop)&&"$"!==prop[0]&&(propCount++,form[prop].$touched&&form[prop].$dirty))return!0;return!1};var debounceSave=function(){$rootScope.saveInProgress=!0,$rootScope[$attrs.autoSaveCallback](!0,function(err){err?(console.error("Error form data NOT persisted"),console.error(err)):(console.log("\n\nForm data persisted -- setting pristine flag"),$formCtrl.$setPristine(),$formCtrl.$setUntouched())})};$scope.$watch(function(newValue,oldValue){console.log("introParagraphStartPage.$dirty: "+$scope.editForm.introParagraphStartPage.$dirty),console.log("introParagraphStartPage.$touched: "+$scope.editForm.introParagraphStartPage.$touched),$rootScope.finishedRender&&$scope.anyDirtyAndTouched($scope.editForm)&&!$rootScope.saveInProgress&&(console.log("Form saving started"),debounceSave(),console.log("introParagraphStartPage.$dirty AFTER: "+$scope.editForm.introParagraphStartPage.$dirty))}),$scope.$watch($attrs.autoSaveWatch,function(newValue,oldValue){newValue=angular.copy(newValue),oldValue=angular.copy(oldValue),newValue.form_fields=_.removeDateFields(newValue.form_fields),oldValue.form_fields=_.removeDateFields(oldValue.form_fields);var changedFields=!_.isEqual(oldValue.form_fields,newValue.form_fields)||!_.isEqual(oldValue.startPage,newValue.startPage),changedFieldMap=!1;oldValue.hasOwnProperty("plugins.oscarhost.settings.fieldMap")&&(changedFieldMap=!!oldValue.plugins.oscarhost.settings.fieldMap&&!_.isEqual(oldValue.plugins.oscarhost.settings.fieldMap,newValue.plugins.oscarhost.settings.fieldMap)),(newValue||oldValue)&&oldValue&&(0===oldValue.form_fields.length&&($rootScope.finishedRender=!0),$rootScope.finishedRender&&(changedFields&&!$formCtrl.$dirty||changedFieldMap)&&!$rootScope.saveInProgress?(savePromise&&($timeout.cancel(savePromise),savePromise=null),savePromise=$timeout(function(){debounceSave()})):$rootScope.finishedRender&&$rootScope.saveInProgress&&($rootScope.saveInProgress=!1))},!0)})}}}]),angular.module("forms").directive("configureFormDirective",["$rootScope","$http","Upload","CurrentForm",function($rootScope,$http,Upload,CurrentForm){return{templateUrl:"modules/forms/views/directiveViews/form/configure-form.client.view.html",restrict:"E",scope:{myform:"=",user:"=",pdfFields:"@",formFields:"@"},controller:["$scope",function($scope){console.log($scope.myform),CurrentForm.getForm().plugins?CurrentForm.getForm().plugins.oscarhost.baseUrl&&($scope.oscarhostAPI=!0):$scope.oscarhostAPI=!1,$scope.log="",$scope.pdfLoading=!1,$scope.languages=$rootScope.languages,this._current_upload=null,$scope.resetForm=$rootScope.resetForm,$scope.update=$rootScope.update,this._unbindedPdfFields=$scope.pdfFields,$scope.cancelUpload=function(){this._current_upload.abort(),$scope.pdfLoading=!1,$scope.removePDF()},$scope.removePDF=function(){$scope.myform.pdf=null,$scope.myform.isGenerated=!1,$scope.myform.autofillPDFs=!1,console.log("form.pdf: "+$scope.myform.pdf+" REMOVED")},$scope.uploadPDF=function(file){file&&(console.log(file),Upload.upload({url:"/upload/pdf",data:{user:$scope.user,file:file}}).then(function(resp){var data=resp.data;$scope.log="file "+data.originalname+" uploaded as "+data.filename+". JSON: "+JSON.stringify(data)+"\n"+$scope.log,$scope.myform.pdf=angular.fromJson(angular.toJson(data)),$scope.pdfLoading=!1,console.log($scope.log),$scope.$$phase||$scope.$digest||$scope.$apply()},function(resp){$scope.pdfLoading=!1,console.log("Error occured during upload.\n"),console.log(resp.status)},function(evt){var progressPercentage=parseInt(100*evt.loaded/evt.total,10);$scope.log="progress: "+progressPercentage+"% "+evt.config.data.file.name+"\n"+$scope.log,console.log($scope.log),$scope.pdfLoading=!0}))}}]}}]),angular.module("forms").directive("editFormDirective",["$rootScope","FormFields",function($rootScope,FormFields){return{templateUrl:"modules/forms/views/directiveViews/form/edit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$scope",function($scope){for(var field_ids=_($scope.myform.form_fields).pluck("_id"),i=0;i0){$scope.myform.plugins.oscarhost.settings.fieldMap||($scope.myform.plugins.oscarhost.settings.fieldMap={});var oscarhostFields=$scope.myform.plugins.oscarhost.settings.validFields,currentFields=_($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();return $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id)&&(currentFields=_(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id])),_(oscarhostFields).difference(currentFields).value()}return[]},$scope.dropzone={handle:" .handle",containment:".dropzoneContainer",cursor:"grabbing"},$scope.addNewField=function(modifyForm,fieldType){$scope.addField.lastAddedID++;for(var fieldTitle,i=0;i<$scope.addField.types.length;i++)if($scope.addField.types[i].name===fieldType){$scope.addField.types[i].lastAddedID++,fieldTitle=$scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;break}var newField={title:fieldTitle,fieldType:fieldType,fieldValue:"",required:!0,disabled:!1,deletePreserved:!1};return modifyForm&&$scope.myform.form_fields.push(newField),newField},$scope.deleteField=function(field_index){var currFieldId=$scope.myform.form_fields[field_index]._id;$scope.myform.hasOwnProperty("plugins.oscarhost.baseUrl")&&delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId],$scope.myform.form_fields.splice(field_index,1)},$scope.duplicateField=function(field_index){var currField=_.cloneDeep($scope.myform.form_fields[field_index]);currField._id="cloned"+_.uniqueId(),currField.title+=" copy",$scope.myform.form_fields.splice(field_index+1,0,currField)},$scope.addButton=function(){var newButton={};newButton.bgColor="#ddd",newButton.color="#ffffff",newButton.text="Button",newButton._id=Math.floor(1e5*Math.random()),$scope.myform.startPage.buttons.push(newButton)},$scope.deleteButton=function(button){for(var currID,i=0;i<$scope.myform.startPage.buttons.length;i++)if(currID=$scope.myform.startPage.buttons[i]._id,console.log(currID),currID===button._id){$scope.myform.startPage.buttons.splice(i,1);break}},$scope.addOption=function(field_index){var currField=$scope.myform.form_fields[field_index];if(console.log(field_index),console.log(currField),"checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType){currField.fieldOptions||($scope.myform.form_fields[field_index].fieldOptions=[]);var lastOptionID=0;currField.fieldOptions[currField.fieldOptions.length-1]&&(lastOptionID=currField.fieldOptions[currField.fieldOptions.length-1].option_id);var newOption={option_id:Math.floor(1e5*Math.random()),option_title:"Option "+lastOptionID,option_value:"Option "+lastOptionID};$scope.myform.form_fields[field_index].fieldOptions.push(newOption)}},$scope.deleteOption=function(field_index,option){var currField=$scope.myform.form_fields[field_index];if("checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType)for(var i=0;i',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("forms").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache",function($http,$compile,$rootScope,$templateCache){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/views/directiveViews/field/",supported_fields=["textfield","textarea","date","dropdown","hidden","password","radio","legal","statement","rating","yes_no","number","natural"];return __indexOf.call(supported_fields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get("../public/"+templateUrl)};return{template:"{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show(),$compile(element.contents())(scope)}}}]),angular.module("forms").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13===keyCode&&($rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}),event.preventDefault())})}}}]),angular.module("forms").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("forms").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","Auth",function($http,TimeCounter,$filter,$rootScope,Auth){return{templateUrl:"modules/forms/views/directiveViews/form/submit-form.client.view.html",
-restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.authentication=$rootScope.authentication,$scope.noscroll=!1,$scope.forms={},$scope.form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length,$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())},$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){null!==$scope.selected&&$scope.selected._id!==field_id&&($scope.selected._id=field_id,$scope.selected.index=field_index,animateScroll&&($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,document.querySelectorAll(".activeField .focusOn")[0].focus()})},20)))},$rootScope.nextField=$scope.nextField=function(){var selected_index,selected_id;$scope.selected.index<$scope.myform.form_fields.length-1?(selected_index=$scope.selected.index+1,selected_id=$scope.myform.form_fields[selected_index]._id,$rootScope.setActiveField(selected_id,selected_index,!0)):$scope.selected.index===$scope.myform.form_fields.length-1&&(selected_index=$scope.selected.index+1,selected_id="submit_field",$rootScope.setActiveField(selected_id,selected_index,!0))},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.form_fields.length>0&&($scope.selected._id=$scope.myform.form_fields[0]._id)},$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields,setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){$scope.myform.submitted=!0,$scope.loading=!1}).error(function(error){$scope.loading=!1,$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("forms").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("forms").service("FormFields",[function(){this.types=[{name:"textfield",value:"Short Text"},{name:"email",value:"Email"},{name:"radio",value:"Multiple Choice"},{name:"dropdown",value:"Dropdown"},{name:"date",value:"Date"},{name:"textarea",value:"Paragraph Text"},{name:"yes_no",value:"Yes/No"},{name:"legal",value:"Legal"},{name:"rating",value:"Rating"},{name:"link",value:"Link"},{name:"number",value:"Numbers"},{name:"statement",value:"Statement"}]}]),angular.module("forms").factory("Forms",["$resource",function($resource){return $resource("/forms/:formId",{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").factory("Submissions",["$resource",function($resource){return $resource("forms/:formID/submissions/:submissionId",{submissionId:"@_id",formId:"@_id"},{query:{method:"GET",isArray:!0},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").service("TimeCounter",[function(){var _startTime,_endTime,that=this;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=_startTime},this.stopClock=function(){return _startTime?(_endTime=Date.now(),that.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,that.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]),angular.module("users").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(["$q","$location",function($q,$location){return{responseError:function(response){return"/users/me"!==$location.path()&&response.config&&"/users/me"!==response.config.url&&(console.log("intercepted rejection of ",response.config.url,response.status),401===response.status?($location.nextAfterLogin=$location.path(),$location.path("/signin")):403===response.status&&$location.path("/access_denied")),$q.reject(response)}}}])}]),angular.module("users").config(["$stateProvider",function($stateProvider){var checkLoggedin=function($q,$timeout,$state,User,Auth){var deferred=$q.defer();return Auth.currentUser&&Auth.currentUser.email?$timeout(deferred.resolve):Auth.currentUser=User.getCurrent(function(){Auth.login(),$timeout(deferred.resolve())},function(){Auth.logout(),$timeout(deferred.reject()),$state.go("signin",{reload:!0})}),deferred.promise};checkLoggedin.$inject=["$q","$timeout","$state","User","Auth"];var checkSignupDisabled=function($window,$timeout,$q){var deferred=$q.defer();return $timeout($window.signupDisabled?deferred.reject():deferred.resolve()),deferred.promise};checkSignupDisabled.$inject=["$window","$timeout","$q"],$stateProvider.state("profile",{resolve:{loggedin:checkLoggedin},url:"/settings/profile",templateUrl:"modules/users/views/settings/edit-profile.client.view.html"}).state("password",{resolve:{loggedin:checkLoggedin},url:"/settings/password",templateUrl:"modules/users/views/settings/change-password.client.view.html"}).state("accounts",{resolve:{loggedin:checkLoggedin},url:"/settings/accounts",templateUrl:"modules/users/views/settings/social-accounts.client.view.html"}).state("signup",{resolve:{isDisabled:checkSignupDisabled},url:"/signup",templateUrl:"modules/users/views/authentication/signup.client.view.html"}).state("signup-success",{resolve:{isDisabled:checkSignupDisabled},url:"/signup-success",templateUrl:"modules/users/views/authentication/signup-success.client.view.html"}).state("signin",{url:"/signin",templateUrl:"modules/users/views/authentication/signin.client.view.html"}).state("access_denied",{url:"/access_denied",templateUrl:"modules/users/views/authentication/access-denied.client.view.html"}).state("resendVerifyEmail",{url:"/verify",templateUrl:"modules/users/views/verify/resend-verify-email.client.view.html"}).state("verify",{url:"/verify/:token",templateUrl:"modules/users/views/verify/verify-account.client.view.html"}).state("forgot",{url:"/password/forgot",templateUrl:"modules/users/views/password/forgot-password.client.view.html"}).state("reset-invalid",{url:"/password/reset/invalid",templateUrl:"modules/users/views/password/reset-password-invalid.client.view.html"}).state("reset-success",{url:"/password/reset/success",templateUrl:"modules/users/views/password/reset-password-success.client.view.html"}).state("reset",{url:"/password/reset/:token",templateUrl:"modules/users/views/password/reset-password.client.view.html"})}]),angular.module("users").controller("AuthenticationController",["$scope","$location","$state","$rootScope","User","Auth",function($scope,$location,$state,$rootScope,User,Auth){$scope=$rootScope,$scope.credentials={},$scope.error="",$scope.signin=function(){$scope.credentials.email=$scope.credentials.username,User.login($scope.credentials).then(function(response){Auth.login(response),$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),"home"!==$state.previous.name&&"verify"!==$state.previous.name&&""!==$state.previous.name?$state.go($state.previous.name):$state.go("listForms")},function(error){$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user,$scope.error=error,console.log("loginError: "+error)})},$scope.signup=function(){console.log($scope.credentials),User.signup($scope.credentials).then(function(response){console.log("signup-success"),$state.go("signup-success")},function(error){console.log("Error: "),console.log(error),error?($scope.error=error,console.log(error)):console.log("No response received")})}}]),angular.module("users").controller("PasswordController",["$scope","$stateParams","$state","User",function($scope,$stateParams,$state,User){$scope.error="",$scope.askForPasswordReset=function(){User.askForPasswordReset($scope.credentials).then(function(response){$scope.success=response.message,$scope.credentials=null},function(error){$scope.error=error,$scope.credentials=null})},$scope.resetUserPassword=function(){$scope.success=$scope.error=null,User.resetPassword($scope.passwordDetails,$stateParams.token).then(function(response){$scope.success=response.message,$scope.passwordDetails=null,$state.go("reset-success")},function(error){$scope.error=error.message||error,$scope.passwordDetails=null})}}]),angular.module("users").controller("SettingsController",["$scope","$rootScope","$http","$state","Users",function($scope,$rootScope,$http,$state,Users){$scope.user=$rootScope.user,$scope.hasConnectedAdditionalSocialAccounts=function(provider){for(var i in $scope.user.additionalProvidersData)return!0;return!1},$scope.isConnectedSocialAccount=function(provider){return $scope.user.provider===provider||$scope.user.additionalProvidersData&&$scope.user.additionalProvidersData[provider]},$scope.removeUserSocialAccount=function(provider){$scope.success=$scope.error=null,$http["delete"]("/users/accounts",{params:{provider:provider}}).success(function(response){$scope.success=!0,$scope.user=response}).error(function(response){$scope.error=response.message})},$scope.updateUserProfile=function(isValid){if(isValid){$scope.success=$scope.error=null;var user=new Users($scope.user);user.$update(function(response){$scope.success=!0,$scope.user=response},function(response){$scope.error=response.data.message})}else $scope.submitted=!0},$scope.changeUserPassword=function(){$scope.success=$scope.error=null,$http.post("/users/password",$scope.passwordDetails).success(function(response){$scope.success=!0,$scope.passwordDetails=null}).error(function(response){$scope.error=response.message})}}]),angular.module("users").controller("VerifyController",["$scope","$state","$rootScope","User","Auth","$stateParams",function($scope,$state,$rootScope,User,Auth,$stateParams){$scope.isResetSent=!1,$scope.credentials={},$scope.error="",$scope.resendVerifyEmail=function(){User.resendVerifyEmail($scope.credentials.email).then(function(response){console.log(response),$scope.success=response.message,$scope.credentials=null,$scope.isResetSent=!0},function(error){$scope.error=error,$scope.credentials.email=null,$scope.isResetSent=!1})},$scope.validateVerifyToken=function(){$stateParams.token&&(console.log($stateParams.token),User.validateVerifyToken($stateParams.token).then(function(response){console.log("Success: "+response.message),$scope.success=response.message,$scope.isResetSent=!0,$scope.credentials.email=null},function(error){console.log("Error: "+error.message),$scope.isResetSent=!1,$scope.error=error,$scope.credentials.email=null}))}}]),angular.module("users").factory("Auth",["$window",function($window){var userState={isLoggedIn:!1},service={_currentUser:null,get currentUser(){return this._currentUser},ensureHasCurrentUser:function(User){return service._currentUser&&service._currentUser.username?service._currentUser:$window.user?(service._currentUser=$window.user,service._currentUser):void User.getCurrent().then(function(user){return service._currentUser=user,userState.isLoggedIn=!0,$window.user=service._currentUser,service._currentUser},function(response){return userState.isLoggedIn=!1,service._currentUser=null,$window.user=null,console.log("User.getCurrent() err",response),null})},isAuthenticated:function(){return!!service._currentUser},getUserState:function(){return userState},login:function(new_user){userState.isLoggedIn=!0,service._currentUser=new_user},logout:function(){$window.user=null,userState.isLoggedIn=!1,service._currentUser=null}};return service}]),angular.module("users").service("Authorizer",["APP_PERMISSIONS","USER_ROLES",function(APP_PERMISSIONS,USER_ROLES){return function(user){return{canAccess:function(permissions){var i,len,permission;for(angular.isArray(permissions)||(permissions=[permissions]),i=0,len=permissions.length;len>i;i++){if(permission=permissions[i],null===APP_PERMISSIONS[permission])throw"Bad permission value";if(!user||!user.roles)return!1;switch(permission){case APP_PERMISSIONS.viewAdminSettings:case APP_PERMISSIONS.editAdminSettings:return user.roles.indexOf(USER_ROLES.admin)>-1;case APP_PERMISSIONS.viewPrivateForm:case APP_PERMISSIONS.editForm:return user.roles.indexOf(USER_ROLES.admin)>-1||user.roles.indexOf(USER_ROLES.normal)>-1}}return!1}}}}]),angular.module("users").factory("User",["$window","$q","$timeout","$http","$state",function($window,$q,$timeout,$http,$state){var userService={getCurrent:function(){var deferred=$q.defer();return $http.get("/users/me").success(function(response){deferred.resolve(response)}).error(function(){deferred.reject("User's session has expired")}),deferred.promise},login:function(credentials){var deferred=$q.defer();return $http.post("/auth/signin",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},logout:function(){var deferred=$q.defer();return $http.get("/auth/signout").success(function(response){deferred.resolve(null)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},signup:function(credentials){var deferred=$q.defer();return $http.post("/auth/signup",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},resendVerifyEmail:function(_email){var deferred=$q.defer();return $http.post("/auth/verify",{email:_email}).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},validateVerifyToken:function(token){var validTokenRe=/^([A-Za-z0-9]{48})$/g;if(!validTokenRe.test(token))throw new Error("Error token: "+token+" is not a valid verification token");var deferred=$q.defer();return $http.get("/auth/verify/"+token).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error)}),deferred.promise},resetPassword:function(passwordDetails,token){var deferred=$q.defer();return $http.get("/auth/password/"+token,passwordDetails).success(function(response){deferred.resolve()}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},askForPasswordReset:function(credentials){var deferred=$q.defer();return $http.post("/auth/forgot",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise}};return userService}]),angular.module("users").factory("Users",["$resource",function($resource){return $resource("users",{},{update:{method:"PUT"}})}]);
->>>>>>> make it work
-=======
-function removeDateFieldsFunc(o){function eachObject(v,k){"lastModified"!==k&&"created"!==k||delete clone[i][k]}for(var clone=_.clone(o),i=0;i'),$templateCache.put("modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("modules/forms/admin/views/admin-form.client.view.html",'
'),$templateCache.put("modules/forms/admin/views/list-forms.client.view.html",''),$templateCache.put("modules/forms/base/views/submit-form.client.view.html",""),$templateCache.put("modules/forms/admin/views/adminTabs/analyze.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/configure.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/create.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/design.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",'
Click to Add New Field Add New FieldAdd Field
Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n \n
\n
Intro Button:
\n
\n \n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n\n \n\n \n\n \n \n \n \n {{field.title}} \n * \n \n \n \n \n \n \n \n
\n \n \n\n
\n
\n
Preview Field \n \n
\n
\n
\n\n
\n\n
\n
Question Title:
\n
\n
\n
\n\n
\n\n
\n\n
\n
\n
Options:
\n
\n
\n
\n \n Add Option\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n\n \n
\n
\n Click on Fields to add them here\n \n \n
\n\n \n \n
\n\n
\n
\n\n
\n
\n
\n \n \n N/A \n \n {{oscarhost_field}}\n \n \n
\n
\n
\n
\n
\n\n '),
-$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-submissions-form.client.view.html",' Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("modules/forms/base/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/date.html",'
{{field.title}} {{ \'OPTIONAL\' | translate }} '),$templateCache.put("modules/forms/base/views/directiveViews/field/dropdown.html",'
{{field.title}} {{ \'OPTIONAL\' | translate }} {{$select.selected.option_value}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/file.html",'
{{field.title}} (* {{ \'REQUIRED\' | translate }}) '),$templateCache.put("modules/forms/base/views/directiveViews/field/hidden.html",' '),$templateCache.put("modules/forms/base/views/directiveViews/field/legal.html",'{{field.title}} {{ \'OPTIONAL\' | translate }} {{field.description}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/radio.html",'
{{field.title}} {{ \'OPTIONAL\' | translate }} '),$templateCache.put("modules/forms/base/views/directiveViews/field/rating.html",'
{{field.title}} {{ \'OPTIONAL\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/statement.html",''),$templateCache.put("modules/forms/base/views/directiveViews/field/textarea.html",'
{{field.title}} {{ \'OPTIONAL\' | translate }} \n
{{ \'OK\' | translate }} {{ \'ENTER\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html",'
{{field.title}} ({{ \'OPTIONAL\' | translate }})
Error: {{ \'ERROR_EMAIL_INVALID\' | translate }} {{ \'ERROR_NOT_A_NUMBER\' | translate }} {{ \'ERROR_URL_INVALID\' | translate }}
{{ \'OK\' | translate }} {{ \'ENTER\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/yes_no.html",' {{field.title}} *({{ REQUIRED | translate }}) {{field.description}}
'),$templateCache.put("modules/forms/base/views/directiveViews/form/submit-form.client.view.html",''),$templateCache.put("modules/users/views/authentication/access-denied.client.view.html",'You need to be logged in to access this page Login '),$templateCache.put("modules/users/views/authentication/signin.client.view.html",''),$templateCache.put("modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at hi@TellForm.com
'),$templateCache.put("modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),$templateCache.put("modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),
-$templateCache.put("modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
'),$templateCache.put("modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]);var ApplicationConfiguration=function(){var applicationModuleName="NodeForm",applicationModuleVendorDependencies=["duScroll","ui.select","cgBusy","ngSanitize","vButton","ngResource","NodeForm.templates","ui.router","ui.bootstrap","ui.utils"],registerModule=function(moduleName,dependencies){angular.module(moduleName,dependencies||[]),angular.module(applicationModuleName).requires.push(moduleName)};return{applicationModuleName:applicationModuleName,applicationModuleVendorDependencies:applicationModuleVendorDependencies,registerModule:registerModule}}();angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function($locationProvider){$locationProvider.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("FORM_URL","/forms/:formId"),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","$state","$stateParams",function($rootScope,Auth,$state,$stateParams){$rootScope.$state=$state,$rootScope.$stateParams=$stateParams,$rootScope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState){$state.previous=fromState,"home"===toState.name||"signin"===toState.name||"resendVerifyEmail"===toState.name||"verify"===toState.name||"signup"===toState.name||"signup-success"===toState.name?Auth.isAuthenticated()&&(event.preventDefault(),$state.go("listForms")):"access_denied"===toState.name||Auth.isAuthenticated()||"submitForm"===toState.name||(event.preventDefault(),$state.go("listForms"))})}]),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","User","Authorizer","$state","$stateParams",function($rootScope,Auth,User,Authorizer,$state,$stateParams){$rootScope.$on("$stateChangeStart",function(event,next){var authenticator,permissions,user;permissions=next&&next.data&&next.data.permissions?next.data.permissions:null,Auth.ensureHasCurrentUser(User),user=Auth.currentUser,user&&(authenticator=new Authorizer(user),null!=permissions&&(authenticator.canAccess(permissions)||(event.preventDefault(),$state.go("access_denied"))))})}]),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])}),angular.module("NodeForm.templates",[]).run(["$templateCache",function($templateCache){"use strict";$templateCache.put("../public/modules/core/views/header.client.view.html",''),$templateCache.put("../public/modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("../public/modules/forms/views/admin-form.client.view.html",'
'),$templateCache.put("../public/modules/forms/views/list-forms.client.view.html",''),$templateCache.put("../public/modules/forms/views/submit-form.client.view.html",""),$templateCache.put("../public/modules/forms/views/adminTabs/analyze.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/configure.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/create.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/design.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/date.html",'
{{field.title}} *(required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
{{field.title}} *(required) {{$select.selected.option_value}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{field.title}} (* required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",' '),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'{{field.title}} *(required) {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/natural.html",'
{{field.title}} *(required)
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/password.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'
{{field.title}} *(required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'
{{field.title}} *(required)
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'
{{field.title}} *(required) \n
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'
{{field.title}} *(required)
Error: Enter a valid email address
'),
+function removeDateFieldsFunc(o){function eachObject(v,k){"lastModified"!==k&&"created"!==k||delete clone[k]}for(var clone=_.clone(o),i=0;i'),$templateCache.put("modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("modules/forms/admin/views/admin-form.client.view.html",'
'),$templateCache.put("modules/forms/admin/views/list-forms.client.view.html",''),$templateCache.put("modules/forms/base/views/submit-form.client.view.html",""),$templateCache.put("modules/forms/admin/views/adminTabs/analyze.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/configure.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/create.html"," "),$templateCache.put("modules/forms/admin/views/adminTabs/design.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",''),$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",'
Click to Add New Field Add New Field Add Field
Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n \n
\n
Intro Button:
\n
\n \n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n\n \n \n\n \n\n \n \n \n \n {{field.title}} \n * \n \n \n \n \n \n \n \n
\n \n \n\n
\n
\n
Preview Field \n \n
\n
\n
\n\n
\n\n
\n
Question Title:
\n
\n
\n
\n\n
\n\n
\n\n
\n
\n
Options:
\n
\n
\n
\n \n Add Option\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n\n \n
\n
\n Click on Fields to add them here\n \n \n
\n\n \n \n
\n\n
\n
\n\n
\n
\n
\n \n \n N/A \n \n {{oscarhost_field}}\n \n \n
\n
\n
\n
\n
\n\n '),
+$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-submissions-form.client.view.html",' Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("modules/forms/base/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/date.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} '),$templateCache.put("modules/forms/base/views/directiveViews/field/dropdown.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} {{$select.selected.option_value}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/file.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} '),$templateCache.put("modules/forms/base/views/directiveViews/field/hidden.html",' '),$templateCache.put("modules/forms/base/views/directiveViews/field/legal.html",'{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} {{field.description}}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/radio.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} '),$templateCache.put("modules/forms/base/views/directiveViews/field/rating.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/statement.html",''),$templateCache.put("modules/forms/base/views/directiveViews/field/textarea.html",'
{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} {{ \'NEWLINE\' | translate }} \n
{{ \'OK\' | translate }} {{ \'ENTER\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html",'
{{index+1}} {{field.title}} ({{ \'OPTIONAL\' | translate }})
Error: {{ \'ERROR_EMAIL_INVALID\' | translate }} {{ \'ERROR_NOT_A_NUMBER\' | translate }} {{ \'ERROR_URL_INVALID\' | translate }}
{{ \'OK\' | translate }} {{ \'ENTER\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/yes_no.html",'{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }} {{field.description}}
'),$templateCache.put("modules/forms/base/views/directiveViews/form/submit-form.client.view.html",''),$templateCache.put("modules/users/views/authentication/access-denied.client.view.html",'You need to be logged in to access this page Login '),$templateCache.put("modules/users/views/authentication/signin.client.view.html",''),$templateCache.put("modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at polydaic@gmail.com
'),$templateCache.put("modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),
+$templateCache.put("modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),$templateCache.put("modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at polydaic@gmail.com
'),$templateCache.put("modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]);var ApplicationConfiguration=function(){var applicationModuleName="NodeForm",applicationModuleVendorDependencies=["duScroll","ui.select","cgBusy","ngSanitize","vButton","ngResource","NodeForm.templates","ui.router","ui.bootstrap","ui.utils"],registerModule=function(moduleName,dependencies){angular.module(moduleName,dependencies||[]),angular.module(applicationModuleName).requires.push(moduleName)};return{applicationModuleName:applicationModuleName,applicationModuleVendorDependencies:applicationModuleVendorDependencies,registerModule:registerModule}}();angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function($locationProvider){$locationProvider.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("FORM_URL","/forms/:formId"),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","$state","$stateParams",function($rootScope,Auth,$state,$stateParams){$rootScope.$state=$state,$rootScope.$stateParams=$stateParams,$rootScope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState){$state.previous=fromState;var statesToIgnore=["home","signin","resendVerifyEmail","verify","signup","signup-success","forgot","reset-invalid","reset","reset-success"];statesToIgnore.indexOf(toState.name)>0?Auth.isAuthenticated()&&(event.preventDefault(),$state.go("listForms")):"access_denied"===toState.name||Auth.isAuthenticated()||"submitForm"===toState.name||(console.log("go to signup"),event.preventDefault(),$state.go("listForms"))})}]),angular.module(ApplicationConfiguration.applicationModuleName).run(["$rootScope","Auth","User","Authorizer","$state","$stateParams",function($rootScope,Auth,User,Authorizer,$state,$stateParams){$rootScope.$on("$stateChangeStart",function(event,next){var authenticator,permissions,user;permissions=next&&next.data&&next.data.permissions?next.data.permissions:null,Auth.ensureHasCurrentUser(User),user=Auth.currentUser,user&&(authenticator=new Authorizer(user),null!=permissions&&(authenticator.canAccess(permissions)||(event.preventDefault(),$state.go("access_denied"))))})}]),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])}),angular.module("NodeForm.templates",[]).run(["$templateCache",function($templateCache){"use strict";$templateCache.put("../public/modules/core/views/header.client.view.html",''),$templateCache.put("../public/modules/core/views/home.client.view.html",'
TellForm Craft beautiful forms in seconds. Craft beautiful forms. TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
TellForm is an opensource alternative to TypeForm that can create stunning forms from PDFs or from scratch
Create your next ______. Tell a story with a form. '),$templateCache.put("../public/modules/forms/views/admin-form.client.view.html",'
'),$templateCache.put("../public/modules/forms/views/list-forms.client.view.html",''),$templateCache.put("../public/modules/forms/views/submit-form.client.view.html",""),$templateCache.put("../public/modules/forms/views/adminTabs/analyze.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/configure.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/create.html"," "),$templateCache.put("../public/modules/forms/views/adminTabs/design.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/entryPage/startPage.html",'
{{pageData.introTitle}} {{pageData.introParagraph}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/date.html",'
{{field.title}} *(required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
{{field.title}} *(required) {{$select.selected.option_value}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{field.title}} (* required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",' '),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'{{field.title}} *(required) {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/natural.html",'
{{field.title}} *(required)
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/password.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'
{{field.title}} *(required) '),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'
{{field.title}} *(required)
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'
{{field.title}} *(required) \n
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'
{{field.title}} *(required)
Error: Enter a valid email address
'),
$templateCache.put("../public/modules/forms/views/directiveViews/field/yes_no.html",' {{field.title}} *(required) {{field.description}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/configure-form.client.view.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-form.client.view.html",'
Click to Add New Field Add New FieldAdd Field
Start Page
Preview Start Page
{{myform.startPage.introTitle}} {{myform.startPage.introParagraph}}
{{myform.startPage.introButtonText}}
\n \n
\n
Intro Button:
\n
\n \n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n\n \n\n \n\n \n \n \n \n {{field.title}} \n * \n \n \n \n \n \n \n \n
\n \n \n\n
\n
\n
Preview Field \n \n
\n
\n
\n\n
\n\n
\n
Question Title:
\n
\n
\n
\n\n
\n\n
\n\n
\n
\n
Options:
\n
\n
\n
\n \n Add Option\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n\n \n
\n
\n Click on Fields to add them here\n \n \n
\n\n \n \n
\n\n
\n
\n\n
\n
\n
\n \n \n N/A \n \n {{oscarhost_field}}\n \n \n
\n
\n
\n
\n
\n\n '),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",' Delete Selected
Export to Excel
Export to CSV
Export to JSON
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",''),$templateCache.put("../public/modules/users/views/authentication/access-denied.client.view.html",'You need to be logged in to access this page Login '),$templateCache.put("../public/modules/users/views/authentication/signin.client.view.html",''),
-$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("../public/modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("../public/modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("../public/modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),$templateCache.put("../public/modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),$templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]),ApplicationConfiguration.registerModule("core",["users"]),ApplicationConfiguration.registerModule("forms",["ngFileUpload","ui.router.tabs","ui.date","ui.sortable","angular-input-stars","users","pascalprecht.translate"]),ApplicationConfiguration.registerModule("users"),angular.module("core").config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider,Authorization){$urlRouterProvider.otherwise("/forms")}]),angular.module("core").controller("HeaderController",["$rootScope","$scope","Menus","$state","Auth","User",function($rootScope,$scope,Menus,$state,Auth,User){$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.authentication=$rootScope.authentication=Auth,$rootScope.languages=$scope.languages=["english","french","spanish"],$scope.isCollapsed=!1,$rootScope.hideNav=!1,$scope.menu=Menus.getMenu("topbar"),$scope.signout=function(){var promise=User.logout();promise.then(function(){Auth.logout(),Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user=null,$state.go("listForms")},function(reason){console.log("Logout Failed: "+reason)})},$scope.toggleCollapsibleMenu=function(){$scope.isCollapsed=!$scope.isCollapsed},$scope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState,fromParams){$scope.isCollapsed=!1,$rootScope.hideNav=!1,angular.isDefined(toState.data)&&angular.isDefined(toState.data.hideNav)&&($rootScope.hideNav=toState.data.hideNav)})}]),angular.module("core").controller("HomeController",["$rootScope","$scope","User","$state",function($rootScope,$scope,User,$state){$scope=$rootScope}]),angular.module("core").service("Menus",[function(){this.defaultRoles=["*"],this.menus={};var shouldRender=function(user){if(!user)return this.isPublic;if(~this.roles.indexOf("*"))return!0;for(var userRoleIndex in user.roles)for(var roleIndex in this.roles)if(console.log(this.roles[roleIndex]),console.log(this.roles[roleIndex]===user.roles[userRoleIndex]),this.roles[roleIndex]===user.roles[userRoleIndex])return!0;return!1};this.validateMenuExistance=function(menuId){if(menuId&&menuId.length){if(this.menus[menuId])return!0;throw new Error("Menu does not exists")}throw new Error("MenuId was not provided")},this.getMenu=function(menuId){return this.validateMenuExistance(menuId),this.menus[menuId]},this.addMenu=function(menuId,isPublic,roles){return this.menus[menuId]={isPublic:isPublic||!1,roles:roles||this.defaultRoles,items:[],shouldRender:shouldRender},this.menus[menuId]},this.removeMenu=function(menuId){this.validateMenuExistance(menuId),delete this.menus[menuId]},this.addMenuItem=function(menuId,menuItemTitle,menuItemURL,menuItemType,menuItemUIRoute,isPublic,roles,position){return this.validateMenuExistance(menuId),this.menus[menuId].items.push({title:menuItemTitle,link:menuItemURL,menuItemType:menuItemType||"item",menuItemClass:menuItemType,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].roles:roles,position:position||0,items:[],shouldRender:shouldRender}),this.menus[menuId]},this.addSubMenuItem=function(menuId,rootMenuItemURL,menuItemTitle,menuItemURL,menuItemUIRoute,isPublic,roles,position){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===rootMenuItemURL&&this.menus[menuId].items[itemIndex].items.push({title:menuItemTitle,link:menuItemURL,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].items[itemIndex].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].items[itemIndex].roles:roles,position:position||0,shouldRender:shouldRender});return this.menus[menuId]},this.removeMenuItem=function(menuId,menuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===menuItemURL&&this.menus[menuId].items.splice(itemIndex,1);return this.menus[menuId]},this.removeSubMenuItem=function(menuId,submenuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)for(var subitemIndex in this.menus[menuId].items[itemIndex].items)this.menus[menuId].items[itemIndex].items[subitemIndex].link===submenuItemURL&&this.menus[menuId].items[itemIndex].items.splice(subitemIndex,1);return this.menus[menuId]},this.addMenu("topbar",!1,["*"]),this.addMenu("bottombar",!1,["*"])}]),angular.module("forms").run(["Menus",function(Menus){Menus.addMenuItem("topbar","My Forms","forms","","/forms",!1)}]).filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}).config(["$provide",function($provide){$provide.decorator("accordionDirective",["$delegate",function($delegate){var directive=$delegate[0];return directive.replace=!0,$delegate}])}]),angular.module("forms").config(["$stateProvider",function($stateProvider){$stateProvider.state("listForms",{url:"/forms",templateUrl:"modules/forms/admin/views/list-forms.client.view.html"}).state("submitForm",{url:"/forms/:formId",templateUrl:"modules/forms/base/views/submit-form.client.view.html",data:{hideNav:!0},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"}).state("viewForm",{url:"/forms/:formId/admin",templateUrl:"modules/forms/admin/views/admin-form.client.view.html",data:{permissions:["editForm"]},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"AdminFormController"}).state("viewForm.configure",{url:"/configure",templateUrl:"modules/forms/admin/views/adminTabs/configure.html"}).state("viewForm.design",{url:"/design",templateUrl:"modules/forms/admin/views/adminTabs/design.html"}).state("viewForm.analyze",{url:"/analyze",templateUrl:"modules/forms/admin/views/adminTabs/analyze.html"}).state("viewForm.create",{url:"/create",templateUrl:"modules/forms/admin/views/adminTabs/create.html"})}]),angular.module("users").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(["$q","$location",function($q,$location){return{responseError:function(response){return"/users/me"!==$location.path()&&response.config&&"/users/me"!==response.config.url&&(console.log("intercepted rejection of ",response.config.url,response.status),401===response.status?($location.nextAfterLogin=$location.path(),$location.path("/signin")):403===response.status&&$location.path("/access_denied")),$q.reject(response)}}}])}]),angular.module("users").config(["$stateProvider",function($stateProvider){var checkLoggedin=function($q,$timeout,$state,User,Auth){var deferred=$q.defer();return Auth.currentUser&&Auth.currentUser.email?$timeout(deferred.resolve):Auth.currentUser=User.getCurrent(function(){Auth.login(),$timeout(deferred.resolve())},function(){Auth.logout(),$timeout(deferred.reject()),$state.go("sigin",{reload:!0})}),deferred.promise};checkLoggedin.$inject=["$q","$timeout","$state","User","Auth"],$stateProvider.state("profile",{resolve:{loggedin:checkLoggedin},url:"/settings/profile",templateUrl:"modules/users/views/settings/edit-profile.client.view.html"}).state("password",{resolve:{loggedin:checkLoggedin},url:"/settings/password",templateUrl:"modules/users/views/settings/change-password.client.view.html"}).state("accounts",{resolve:{loggedin:checkLoggedin},url:"/settings/accounts",templateUrl:"modules/users/views/settings/social-accounts.client.view.html"}).state("signup",{url:"/signup",templateUrl:"modules/users/views/authentication/signup.client.view.html"}).state("signup-success",{url:"/signup-success",templateUrl:"modules/users/views/authentication/signup-success.client.view.html"}).state("signin",{url:"/signin",templateUrl:"modules/users/views/authentication/signin.client.view.html"}).state("access_denied",{url:"/access_denied",templateUrl:"modules/users/views/authentication/access-denied.client.view.html"}).state("resendVerifyEmail",{url:"/verify",templateUrl:"modules/users/views/verify/resend-verify-email.client.view.html"}).state("verify",{url:"/verify/:token",templateUrl:"modules/users/views/verify/verify-account.client.view.html"}).state("forgot",{url:"/password/forgot",templateUrl:"modules/users/views/password/forgot-password.client.view.html"}).state("reset-invalid",{url:"/password/reset/invalid",templateUrl:"modules/users/views/password/reset-password-invalid.client.view.html"}).state("reset-success",{url:"/password/reset/success",templateUrl:"modules/users/views/password/reset-password-success.client.view.html"}).state("reset",{url:"/password/reset/:token",templateUrl:"modules/users/views/password/reset-password.client.view.html"})}]),angular.module("users").controller("AuthenticationController",["$scope","$location","$state","$rootScope","User","Auth",function($scope,$location,$state,$rootScope,User,Auth){$scope=$rootScope,$scope.credentials={},$scope.error="",$scope.signin=function(){$scope.credentials.email=$scope.credentials.username,User.login($scope.credentials).then(function(response){Auth.login(response),$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),"home"!==$state.previous.name&&"verify"!==$state.previous.name&&""!==$state.previous.name?$state.go($state.previous.name):$state.go("listForms")},function(error){$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user,$scope.error=error,console.log("loginError: "+error)})},$scope.signup=function(){console.log($scope.credentials),User.signup($scope.credentials).then(function(response){console.log("signup-success"),$state.go("signup-success")},function(error){console.log("Error: "),console.log(error),error?($scope.error=error,console.log(error)):console.log("No response received")})}}]),angular.module("users").controller("PasswordController",["$scope","$stateParams","$state","User",function($scope,$stateParams,$state,User){$scope.error="",$scope.askForPasswordReset=function(){User.askForPasswordReset($scope.credentials).then(function(response){$scope.success=response.message,$scope.credentials=null},function(error){$scope.error=error,$scope.credentials=null})},$scope.resetUserPassword=function(){$scope.success=$scope.error=null,User.resetPassword($scope.passwordDetails,$stateParams.token).then(function(response){$scope.success=response.message,$scope.passwordDetails=null,$state.go("reset-success")},function(error){$scope.error=error.message||error,$scope.passwordDetails=null})}}]),angular.module("users").controller("SettingsController",["$scope","$rootScope","$http","$state","Users",function($scope,$rootScope,$http,$state,Users){$scope.user=$rootScope.user,$scope.hasConnectedAdditionalSocialAccounts=function(provider){for(var i in $scope.user.additionalProvidersData)return!0;return!1},$scope.isConnectedSocialAccount=function(provider){return $scope.user.provider===provider||$scope.user.additionalProvidersData&&$scope.user.additionalProvidersData[provider]},$scope.removeUserSocialAccount=function(provider){$scope.success=$scope.error=null,$http["delete"]("/users/accounts",{params:{provider:provider}}).success(function(response){$scope.success=!0,$scope.user=response}).error(function(response){$scope.error=response.message})},$scope.updateUserProfile=function(isValid){if(isValid){$scope.success=$scope.error=null;var user=new Users($scope.user);user.$update(function(response){$scope.success=!0,$scope.user=response},function(response){$scope.error=response.data.message})}else $scope.submitted=!0},$scope.changeUserPassword=function(){$scope.success=$scope.error=null,$http.post("/users/password",$scope.passwordDetails).success(function(response){$scope.success=!0,$scope.passwordDetails=null}).error(function(response){$scope.error=response.message})}}]),angular.module("users").controller("VerifyController",["$scope","$state","$rootScope","User","Auth","$stateParams",function($scope,$state,$rootScope,User,Auth,$stateParams){$scope.isResetSent=!1,$scope.credentials={},$scope.error="",$scope.resendVerifyEmail=function(){User.resendVerifyEmail($scope.credentials.email).then(function(response){console.log(response),$scope.success=response.message,$scope.credentials=null,$scope.isResetSent=!0},function(error){$scope.error=error,$scope.credentials.email=null,$scope.isResetSent=!1})},$scope.validateVerifyToken=function(){$stateParams.token&&(console.log($stateParams.token),User.validateVerifyToken($stateParams.token).then(function(response){console.log("Success: "+response.message),$scope.success=response.message,$scope.isResetSent=!0,$scope.credentials.email=null},function(error){console.log("Error: "+error.message),$scope.isResetSent=!1,$scope.error=error,$scope.credentials.email=null}))}}]),angular.module("users").factory("Auth",["$window",function($window){var userState={isLoggedIn:!1},service={_currentUser:null,get currentUser(){return this._currentUser},ensureHasCurrentUser:function(User){return service._currentUser&&service._currentUser.username?service._currentUser:$window.user?(service._currentUser=$window.user,service._currentUser):void User.getCurrent().then(function(user){return service._currentUser=user,userState.isLoggedIn=!0,$window.user=service._currentUser,service._currentUser},function(response){return userState.isLoggedIn=!1,service._currentUser=null,$window.user=null,console.log("User.getCurrent() err",response),null})},isAuthenticated:function(){return!!service._currentUser},getUserState:function(){return userState},login:function(new_user){userState.isLoggedIn=!0,service._currentUser=new_user},logout:function(){$window.user=null,userState.isLoggedIn=!1,service._currentUser=null}};return service}]),angular.module("users").service("Authorizer",["APP_PERMISSIONS","USER_ROLES",function(APP_PERMISSIONS,USER_ROLES){return function(user){return{canAccess:function(permissions){var i,len,permission;for(angular.isArray(permissions)||(permissions=[permissions]),i=0,len=permissions.length;len>i;i++){if(permission=permissions[i],null===APP_PERMISSIONS[permission])throw"Bad permission value";if(!user||!user.roles)return!1;switch(permission){case APP_PERMISSIONS.viewAdminSettings:case APP_PERMISSIONS.editAdminSettings:return user.roles.indexOf(USER_ROLES.admin)>-1;case APP_PERMISSIONS.viewPrivateForm:case APP_PERMISSIONS.editForm:return user.roles.indexOf(USER_ROLES.admin)>-1||user.roles.indexOf(USER_ROLES.normal)>-1}}return!1}}}}]),angular.module("users").factory("User",["$window","$q","$timeout","$http","$state",function($window,$q,$timeout,$http,$state){var userService={getCurrent:function(){var deferred=$q.defer();return $http.get("/users/me").success(function(response){deferred.resolve(response)}).error(function(){deferred.reject("User's session has expired")}),deferred.promise},login:function(credentials){var deferred=$q.defer();return $http.post("/auth/signin",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},logout:function(){var deferred=$q.defer();return $http.get("/auth/signout").success(function(response){deferred.resolve(null)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},signup:function(credentials){var deferred=$q.defer();return $http.post("/auth/signup",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},resendVerifyEmail:function(_email){var deferred=$q.defer();return $http.post("/auth/verify",{email:_email}).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},validateVerifyToken:function(token){var validTokenRe=/^([A-Za-z0-9]{48})$/g;if(!validTokenRe.test(token))throw new Error("Error token: "+token+" is not a valid verification token");var deferred=$q.defer();return $http.get("/auth/verify/"+token).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error)}),deferred.promise},resetPassword:function(passwordDetails,token){var deferred=$q.defer();return $http.get("/auth/password/"+token,passwordDetails).success(function(response){deferred.resolve()}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},askForPasswordReset:function(credentials){var deferred=$q.defer();return $http.post("/auth/forgot",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise}};return userService}]),angular.module("users").factory("Users",["$resource",function($resource){return $resource("users",{},{update:{method:"PUT"}})}]),angular.module("forms").controller("AdminFormController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http","$uibModal","myForm",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http,$uibModal,myForm){$scope=$rootScope,$scope.animationsEnabled=!0,$scope.myform=myForm,$rootScope.saveInProgress=!1,CurrentForm.setForm($scope.myform),$scope.tabData=[{heading:"Create",route:"viewForm.create"},{heading:"Design",route:"viewForm.design"},{heading:"Configure",route:"viewForm.configure"},{heading:"Analyze",route:"viewForm.analyze"}],$scope.setForm=function(form){$scope.myform=form},$rootScope.resetForm=function(){$scope.myform=Forms.get({formId:$stateParams.formId})},$scope.openDeleteModal=function(){$scope.deleteModal=$uibModal.open({animation:$scope.animationsEnabled,templateUrl:"myModalContent.html",controller:"AdminFormController",resolve:{myForm:function(){return $scope.myform}}}),$scope.deleteModal.result.then(function(selectedItem){$scope.selected=selectedItem},function(){console.log("Modal dismissed at: "+new Date)})},$scope.cancelDeleteModal=function(){$scope.deleteModal&&$scope.deleteModal.dismiss("cancel")},$scope.removeCurrentForm=function(){if($scope.deleteModal&&$scope.deleteModal.opened){$scope.deleteModal.close();var form_id=$scope.myform._id;if(!form_id)throw new Error("Error - removeCurrentForm(): $scope.myform._id does not exist");$http["delete"]("/forms/"+form_id).success(function(data,status,headers){console.log("form deleted successfully"),$state.go("listForms",{},{reload:!0})}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}},$scope.update=$rootScope.update=function(updateImmediately,cb){var continueUpdate=!0;if(updateImmediately||(continueUpdate=!$rootScope.saveInProgress),continueUpdate){var err=null;updateImmediately||($rootScope.saveInProgress=!0),$scope.updatePromise=$http.put("/forms/"+$scope.myform._id,{form:$scope.myform}).then(function(response){$rootScope.myform=$scope.myform=response.data})["catch"](function(response){console.log("Error occured during form UPDATE.\n"),err=response.data})["finally"](function(){return updateImmediately||($rootScope.saveInProgress=!1),"function"==typeof cb?cb(err):void 0})}}}]),angular.module("forms").controller("ListFormsController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http){$scope=$rootScope,$scope.forms={},$scope.showCreateModal=!1,$scope.findAll=function(){Forms.query(function(_forms){$scope.myforms=_forms})},$scope.openCreateModal=function(){$scope.showCreateModal||($scope.showCreateModal=!0)},$scope.closeCreateModal=function(){$scope.showCreateModal&&($scope.showCreateModal=!1);
-},$scope.setForm=function(form){$scope.myform=form},$scope.goToWithId=function(route,id){$state.go(route,{formId:id},{reload:!0})},$scope.duplicateForm=function(form_index){var form=_.cloneDeep($scope.myforms[form_index]);delete form._id,$http.post("/forms",{form:form}).success(function(data,status,headers){$scope.myforms.splice(form_index+1,0,data)}).error(function(errorResponse){console.error(errorResponse),null===errorResponse&&($scope.error=errorResponse.data.message)})},$scope.createNewForm=function(){var form={};form.title=$scope.forms.createForm.title.$modelValue,form.language=$scope.forms.createForm.language.$modelValue,$scope.forms.createForm.$valid&&$scope.forms.createForm.$dirty&&$http.post("/forms",{form:form}).success(function(data,status,headers){console.log("new form created"),$scope.goToWithId("viewForm.create",data._id+"")}).error(function(errorResponse){console.error(errorResponse),$scope.error=errorResponse.data.message})},$scope.removeForm=function(form_index){if(form_index>=$scope.myforms.length||0>form_index)throw new Error("Error: form_index in removeForm() must be between 0 and "+$scope.myforms.length-1);$http["delete"]("/forms/"+$scope.myforms[form_index]._id).success(function(data,status,headers){console.log("form deleted successfully"),$scope.myforms.splice(form_index,1)}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}}]),_.mixin({removeDateFields:removeDateFieldsFunc}),angular.module("forms").directive("autoSaveForm",["$rootScope","$timeout",function($rootScope,$timeout){return{require:["^form"],restrict:"AE",link:function($scope,$element,$attrs,$ctrls){angular.element(document).ready(function(){var $formCtrl=$ctrls[0],savePromise=null;$rootScope.finishedRender=!1,$scope.$on("editFormFields Started",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!1}),$scope.$on("editFormFields Finished",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!0}),$scope.anyDirtyAndTouched=function(form){var propCount=0;for(var prop in form)if(form.hasOwnProperty(prop)&&"$"!==prop[0]&&(propCount++,form[prop].$touched&&form[prop].$dirty))return!0;return!1};var debounceSave=function(){$rootScope.saveInProgress=!0,$rootScope[$attrs.autoSaveCallback](!0,function(err){err?(console.error("Error form data NOT persisted"),console.error(err)):(console.log("\n\nForm data persisted -- setting pristine flag"),$formCtrl.$setPristine(),$formCtrl.$setUntouched())})};$scope.$watch(function(newValue,oldValue){console.log("introParagraphStartPage.$dirty: "+$scope.editForm.introParagraphStartPage.$dirty),console.log("introParagraphStartPage.$touched: "+$scope.editForm.introParagraphStartPage.$touched),$rootScope.finishedRender&&$scope.anyDirtyAndTouched($scope.editForm)&&!$rootScope.saveInProgress&&(console.log("Form saving started"),debounceSave(),console.log("introParagraphStartPage.$dirty AFTER: "+$scope.editForm.introParagraphStartPage.$dirty))}),$scope.$watch($attrs.autoSaveWatch,function(newValue,oldValue){newValue=angular.copy(newValue),oldValue=angular.copy(oldValue),newValue.form_fields=_.removeDateFields(newValue.form_fields),oldValue.form_fields=_.removeDateFields(oldValue.form_fields);var changedFields=!_.isEqual(oldValue.form_fields,newValue.form_fields)||!_.isEqual(oldValue.startPage,newValue.startPage),changedFieldMap=!1;oldValue.hasOwnProperty("plugins.oscarhost.settings.fieldMap")&&(changedFieldMap=!!oldValue.plugins.oscarhost.settings.fieldMap&&!_.isEqual(oldValue.plugins.oscarhost.settings.fieldMap,newValue.plugins.oscarhost.settings.fieldMap)),(newValue||oldValue)&&oldValue&&(0===oldValue.form_fields.length&&($rootScope.finishedRender=!0),$rootScope.finishedRender&&(changedFields&&!$formCtrl.$dirty||changedFieldMap)&&!$rootScope.saveInProgress?(savePromise&&($timeout.cancel(savePromise),savePromise=null),savePromise=$timeout(function(){debounceSave()})):$rootScope.finishedRender&&$rootScope.saveInProgress&&($rootScope.saveInProgress=!1))},!0)})}}}]),angular.module("forms").directive("configureFormDirective",["$rootScope","$http","Upload","CurrentForm",function($rootScope,$http,Upload,CurrentForm){return{templateUrl:"modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",restrict:"E",scope:{myform:"=",user:"=",pdfFields:"@",formFields:"@"},controller:["$scope",function($scope){console.log($scope.myform),CurrentForm.getForm().plugins?CurrentForm.getForm().plugins.oscarhost.baseUrl&&($scope.oscarhostAPI=!0):$scope.oscarhostAPI=!1,$scope.log="",$scope.pdfLoading=!1,$scope.languages=$rootScope.languages,this._current_upload=null,$scope.resetForm=$rootScope.resetForm,$scope.update=$rootScope.update,this._unbindedPdfFields=$scope.pdfFields,$scope.cancelUpload=function(){this._current_upload.abort(),$scope.pdfLoading=!1,$scope.removePDF()},$scope.removePDF=function(){$scope.myform.pdf=null,$scope.myform.isGenerated=!1,$scope.myform.autofillPDFs=!1,console.log("form.pdf: "+$scope.myform.pdf+" REMOVED")},$scope.uploadPDF=function(file){file&&(console.log(file),Upload.upload({url:"/upload/pdf",data:{user:$scope.user,file:file}}).then(function(resp){var data=resp.data;$scope.log="file "+data.originalname+" uploaded as "+data.filename+". JSON: "+JSON.stringify(data)+"\n"+$scope.log,$scope.myform.pdf=angular.fromJson(angular.toJson(data)),$scope.pdfLoading=!1,console.log($scope.log),$scope.$$phase||$scope.$digest||$scope.$apply()},function(resp){$scope.pdfLoading=!1,console.log("Error occured during upload.\n"),console.log(resp.status)},function(evt){var progressPercentage=parseInt(100*evt.loaded/evt.total,10);$scope.log="progress: "+progressPercentage+"% "+evt.config.data.file.name+"\n"+$scope.log,console.log($scope.log),$scope.pdfLoading=!0}))}}]}}]),angular.module("forms").directive("editFormDirective",["$rootScope","FormFields",function($rootScope,FormFields){return{templateUrl:"modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$scope",function($scope){for(var field_ids=_($scope.myform.form_fields).pluck("_id"),i=0;i0){$scope.myform.plugins.oscarhost.settings.fieldMap||($scope.myform.plugins.oscarhost.settings.fieldMap={});var oscarhostFields=$scope.myform.plugins.oscarhost.settings.validFields,currentFields=_($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();return $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id)&&(currentFields=_(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id])),_(oscarhostFields).difference(currentFields).value()}return[]},$scope.dropzone={handle:" .handle",containment:".dropzoneContainer",cursor:"grabbing"},$scope.addNewField=function(modifyForm,fieldType){$scope.addField.lastAddedID++;for(var fieldTitle,i=0;i<$scope.addField.types.length;i++)if($scope.addField.types[i].name===fieldType){$scope.addField.types[i].lastAddedID++,fieldTitle=$scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;break}var newField={title:fieldTitle,fieldType:fieldType,fieldValue:"",required:!0,disabled:!1,deletePreserved:!1};return modifyForm&&$scope.myform.form_fields.push(newField),newField},$scope.deleteField=function(field_index){var currFieldId=$scope.myform.form_fields[field_index]._id;$scope.myform.hasOwnProperty("plugins.oscarhost.baseUrl")&&delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId],$scope.myform.form_fields.splice(field_index,1)},$scope.duplicateField=function(field_index){var currField=_.cloneDeep($scope.myform.form_fields[field_index]);currField._id="cloned"+_.uniqueId(),currField.title+=" copy",$scope.myform.form_fields.splice(field_index+1,0,currField)},$scope.addButton=function(){var newButton={};newButton.bgColor="#ddd",newButton.color="#ffffff",newButton.text="Button",newButton._id=Math.floor(1e5*Math.random()),$scope.myform.startPage.buttons.push(newButton)},$scope.deleteButton=function(button){for(var currID,i=0;i<$scope.myform.startPage.buttons.length;i++)if(currID=$scope.myform.startPage.buttons[i]._id,console.log(currID),currID===button._id){$scope.myform.startPage.buttons.splice(i,1);break}},$scope.addOption=function(field_index){var currField=$scope.myform.form_fields[field_index];if(console.log(field_index),console.log(currField),"checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType){currField.fieldOptions||($scope.myform.form_fields[field_index].fieldOptions=[]);var lastOptionID=0;currField.fieldOptions[currField.fieldOptions.length-1]&&(lastOptionID=currField.fieldOptions[currField.fieldOptions.length-1].option_id);var newOption={option_id:Math.floor(1e5*Math.random()),option_title:"Option "+lastOptionID,option_value:"Option "+lastOptionID};$scope.myform.form_fields[field_index].fieldOptions.push(newOption)}},$scope.deleteOption=function(field_index,option){var currField=$scope.myform.form_fields[field_index];if("checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType)for(var i=0;i',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("forms").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache","supportedFields",function($http,$compile,$rootScope,$templateCache,supportedFields){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/base/views/directiveViews/field/";return __indexOf.call(supportedFields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get(templateUrl)};return{template:"{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show(),$compile(element.contents())(scope)}}}]),angular.module("forms").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13===keyCode&&($rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}),event.preventDefault())})}}}]),angular.module("forms").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("forms").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","Auth",function($http,TimeCounter,$filter,$rootScope,Auth){return{templateUrl:"modules/forms/base/views/directiveViews/form/submit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.authentication=$rootScope.authentication,$scope.noscroll=!1,$scope.forms={};var form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length;$scope.translateAdvancementData={done:$filter("formValidity")($scope.myform),total:form_fields_count},$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())},$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){null!==$scope.selected&&$scope.selected._id!==field_id&&($scope.selected._id=field_id,$scope.selected.index=field_index,$scope.translateAdvancementData={done:$filter("formValidity")($scope.myform),total:form_fields_count},animateScroll&&($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,document.querySelectorAll(".activeField .focusOn")[0].focus()})},20)))},$rootScope.nextField=$scope.nextField=function(){if($scope.selected.index<$scope.myform.form_fields.length-1){var selected_index=$scope.selected.index+1,selected_id=$scope.myform.form_fields[selected_index]._id;$rootScope.setActiveField(selected_id,selected_index,!0)}else if($scope.selected.index===$scope.myform.form_fields.length-1){var selected_index=$scope.selected.index+1,selected_id="submit_field";$rootScope.setActiveField(selected_id,selected_index,!0)}},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.form_fields.length>0&&($scope.selected._id=$scope.myform.form_fields[0]._id)},$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields,setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){$scope.myform.submitted=!0,$scope.loading=!1}).error(function(error){$scope.loading=!1,$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("forms").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("forms").service("FormFields",[function(){this.types=[{name:"textfield",value:"Short Text"},{name:"email",value:"Email"},{name:"radio",value:"Multiple Choice"},{name:"dropdown",value:"Dropdown"},{name:"date",value:"Date"},{name:"textarea",value:"Paragraph Text"},{name:"yes_no",value:"Yes/No"},{name:"legal",value:"Legal"},{name:"rating",value:"Rating"},{name:"link",value:"Link"},{name:"number",value:"Numbers"},{name:"statement",value:"Statement"}]}]),angular.module("forms").factory("Forms",["$resource","FORM_URL",function($resource,FORM_URL){return $resource(FORM_URL,{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").service("TimeCounter",[function(){var _startTime,_endTime,that=this;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=_startTime},this.stopClock=function(){return _startTime?(_endTime=Date.now(),that.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,that.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]);
->>>>>>> make it work
-<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f
-=======
->>>>>>> make it work
->>>>>>> make it work
+$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",'Signup Successful You\'ve successfully registered an account at TellForm. But your account is not activated yet Before you continue, make sure to check your email for our verification. If you don\'t receive it within 24h drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/authentication/signup.client.view.html",''),$templateCache.put("../public/modules/users/views/password/forgot-password.client.view.html",'Restore your password Enter your account email.
Submit
{{error}}
{{success}}
'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",''),$templateCache.put("../public/modules/users/views/password/reset-password-success.client.view.html",'Password successfully reset Continue to home page '),$templateCache.put("../public/modules/users/views/password/reset-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",''),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'Edit your profile Profile Saved Successfully
Couldn\'t Save Your Profile. Error:
Update Profile
'),$templateCache.put("../public/modules/users/views/settings/social-accounts.client.view.html",'Connected social accounts: Connect other social accounts: '),$templateCache.put("../public/modules/users/views/verify/resend-verify-email.client.view.html",'Resend your account verification email Enter your account email.
{{error}}
Verification Email has been Sent A verification email has been sent to {{username}}. But your account is still not activated yet Check your email and click on the activation link to activate your account. If you have any questions drop us a line at hi@TellForm.com
'),$templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html",'Account successfuly activated Continue to login page ')}]),ApplicationConfiguration.registerModule("core",["users"]),ApplicationConfiguration.registerModule("forms",["ngFileUpload","ui.router.tabs","ui.date","ui.sortable","angular-input-stars","users","pascalprecht.translate"]),ApplicationConfiguration.registerModule("users"),angular.module("core").config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider,Authorization){$urlRouterProvider.otherwise("/forms")}]),angular.module("core").controller("HeaderController",["$rootScope","$scope","Menus","$state","Auth","User","$window",function($rootScope,$scope,Menus,$state,Auth,User,$window){$rootScope.signupDisabled=$window.signupDisabled,$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.authentication=$rootScope.authentication=Auth,$rootScope.languages=$scope.languages=["english","french","spanish"],$scope.isCollapsed=!1,$rootScope.hideNav=!1,$scope.menu=Menus.getMenu("topbar"),$scope.signout=function(){var promise=User.logout();promise.then(function(){Auth.logout(),Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user=null,$state.go("listForms")},function(reason){console.log("Logout Failed: "+reason)})},$scope.toggleCollapsibleMenu=function(){$scope.isCollapsed=!$scope.isCollapsed},$scope.$on("$stateChangeSuccess",function(event,toState,toParams,fromState,fromParams){$scope.isCollapsed=!1,$rootScope.hideNav=!1,angular.isDefined(toState.data)&&angular.isDefined(toState.data.hideNav)&&($rootScope.hideNav=toState.data.hideNav)})}]),angular.module("core").controller("HomeController",["$rootScope","$scope","User","$state",function($rootScope,$scope,User,$state){$scope=$rootScope}]),angular.module("core").service("Menus",[function(){this.defaultRoles=["*"],this.menus={};var shouldRender=function(user){if(!user)return this.isPublic;if(~this.roles.indexOf("*"))return!0;for(var userRoleIndex in user.roles)for(var roleIndex in this.roles)if(console.log(this.roles[roleIndex]),console.log(this.roles[roleIndex]===user.roles[userRoleIndex]),this.roles[roleIndex]===user.roles[userRoleIndex])return!0;return!1};this.validateMenuExistance=function(menuId){if(menuId&&menuId.length){if(this.menus[menuId])return!0;throw new Error("Menu does not exists")}throw new Error("MenuId was not provided")},this.getMenu=function(menuId){return this.validateMenuExistance(menuId),this.menus[menuId]},this.addMenu=function(menuId,isPublic,roles){return this.menus[menuId]={isPublic:isPublic||!1,roles:roles||this.defaultRoles,items:[],shouldRender:shouldRender},this.menus[menuId]},this.removeMenu=function(menuId){this.validateMenuExistance(menuId),delete this.menus[menuId]},this.addMenuItem=function(menuId,menuItemTitle,menuItemURL,menuItemType,menuItemUIRoute,isPublic,roles,position){return this.validateMenuExistance(menuId),this.menus[menuId].items.push({title:menuItemTitle,link:menuItemURL,menuItemType:menuItemType||"item",menuItemClass:menuItemType,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].roles:roles,position:position||0,items:[],shouldRender:shouldRender}),this.menus[menuId]},this.addSubMenuItem=function(menuId,rootMenuItemURL,menuItemTitle,menuItemURL,menuItemUIRoute,isPublic,roles,position){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===rootMenuItemURL&&this.menus[menuId].items[itemIndex].items.push({title:menuItemTitle,link:menuItemURL,uiRoute:menuItemUIRoute||"/"+menuItemURL,isPublic:null===isPublic||"undefined"==typeof isPublic?this.menus[menuId].items[itemIndex].isPublic:isPublic,roles:null===roles||"undefined"==typeof roles?this.menus[menuId].items[itemIndex].roles:roles,position:position||0,shouldRender:shouldRender});return this.menus[menuId]},this.removeMenuItem=function(menuId,menuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)this.menus[menuId].items[itemIndex].link===menuItemURL&&this.menus[menuId].items.splice(itemIndex,1);return this.menus[menuId]},this.removeSubMenuItem=function(menuId,submenuItemURL){this.validateMenuExistance(menuId);for(var itemIndex in this.menus[menuId].items)for(var subitemIndex in this.menus[menuId].items[itemIndex].items)this.menus[menuId].items[itemIndex].items[subitemIndex].link===submenuItemURL&&this.menus[menuId].items[itemIndex].items.splice(subitemIndex,1);return this.menus[menuId]},this.addMenu("topbar",!1,["*"]),this.addMenu("bottombar",!1,["*"])}]),angular.module("forms").run(["Menus",function(Menus){Menus.addMenuItem("topbar","My Forms","forms","","/forms",!1)}]).filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}).config(["$provide",function($provide){$provide.decorator("accordionDirective",["$delegate",function($delegate){var directive=$delegate[0];return directive.replace=!0,$delegate}])}]),angular.module("forms").config(["$stateProvider",function($stateProvider){$stateProvider.state("listForms",{url:"/forms",templateUrl:"modules/forms/admin/views/list-forms.client.view.html"}).state("submitForm",{url:"/forms/:formId",templateUrl:"modules/forms/base/views/submit-form.client.view.html",data:{hideNav:!0},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"}).state("viewForm",{url:"/forms/:formId/admin",templateUrl:"modules/forms/admin/views/admin-form.client.view.html",data:{permissions:["editForm"]},resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"AdminFormController"}).state("viewForm.configure",{url:"/configure",templateUrl:"modules/forms/admin/views/adminTabs/configure.html"}).state("viewForm.design",{url:"/design",templateUrl:"modules/forms/admin/views/adminTabs/design.html"}).state("viewForm.analyze",{url:"/analyze",templateUrl:"modules/forms/admin/views/adminTabs/analyze.html"}).state("viewForm.create",{url:"/create",templateUrl:"modules/forms/admin/views/adminTabs/create.html"})}]),angular.module("forms").directive("keyToOption",function(){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs,$select){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,index=parseInt(String.fromCharCode(keyCode))-1;index<$scope.field.fieldOptions.length&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue=$scope.field.fieldOptions[index].option_value}))})}}}),angular.module("forms").directive("keyToTruthy",["$rootScope",function($rootScope){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,truthyKeyCode=$attrs.keyCharTruthy.charCodeAt(0)-32,falseyKeyCode=$attrs.keyCharFalsey.charCodeAt(0)-32;keyCode===truthyKeyCode?(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="true"})):keyCode===falseyKeyCode&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="false"}))})}}}]),angular.module("users").config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push(["$q","$location",function($q,$location){return{responseError:function(response){return"/users/me"!==$location.path()&&response.config&&"/users/me"!==response.config.url&&(console.log("intercepted rejection of ",response.config.url,response.status),401===response.status?(console.log($location.path()),$location.nextAfterLogin=$location.path(),$location.path("/signin")):403===response.status&&$location.path("/access_denied")),$q.reject(response)}}}])}]),angular.module("users").config(["$stateProvider",function($stateProvider){var checkLoggedin=function($q,$timeout,$state,User,Auth){var deferred=$q.defer();return Auth.currentUser&&Auth.currentUser.email?$timeout(deferred.resolve):Auth.currentUser=User.getCurrent(function(){Auth.login(),$timeout(deferred.resolve())},function(){Auth.logout(),$timeout(deferred.reject()),$state.go("signin",{reload:!0})}),deferred.promise};checkLoggedin.$inject=["$q","$timeout","$state","User","Auth"];var checkSignupDisabled=function($window,$timeout,$q){var deferred=$q.defer();return $timeout($window.signupDisabled?deferred.reject():deferred.resolve()),deferred.promise};checkSignupDisabled.$inject=["$window","$timeout","$q"],$stateProvider.state("profile",{resolve:{loggedin:checkLoggedin},url:"/settings/profile",templateUrl:"modules/users/views/settings/edit-profile.client.view.html"}).state("password",{resolve:{loggedin:checkLoggedin},url:"/settings/password",templateUrl:"modules/users/views/settings/change-password.client.view.html"}).state("accounts",{resolve:{loggedin:checkLoggedin},url:"/settings/accounts",templateUrl:"modules/users/views/settings/social-accounts.client.view.html"}).state("signup",{resolve:{isDisabled:checkSignupDisabled},url:"/signup",templateUrl:"modules/users/views/authentication/signup.client.view.html"}).state("signup-success",{resolve:{isDisabled:checkSignupDisabled},url:"/signup-success",templateUrl:"modules/users/views/authentication/signup-success.client.view.html"}).state("signin",{url:"/signin",templateUrl:"modules/users/views/authentication/signin.client.view.html"}).state("access_denied",{url:"/access_denied",templateUrl:"modules/users/views/authentication/access-denied.client.view.html"}).state("verify",{resolve:{isDisabled:checkSignupDisabled},url:"/verify/:token",templateUrl:"modules/users/views/verify/verify-account.client.view.html"}).state("resendVerifyEmail",{resolve:{isDisabled:checkSignupDisabled},url:"/verify",templateUrl:"modules/users/views/verify/resend-verify-email.client.view.html"}).state("forgot",{url:"/password/forgot",templateUrl:"modules/users/views/password/forgot-password.client.view.html"}).state("reset-invalid",{url:"/password/reset/invalid",templateUrl:"modules/users/views/password/reset-password-invalid.client.view.html"}).state("reset-success",{url:"/password/reset/success",templateUrl:"modules/users/views/password/reset-password-success.client.view.html"}).state("reset",{url:"/password/reset/:token",templateUrl:"modules/users/views/password/reset-password.client.view.html"})}]),angular.module("users").controller("AuthenticationController",["$scope","$location","$state","$rootScope","User","Auth",function($scope,$location,$state,$rootScope,User,Auth){$scope=$rootScope,$scope.credentials={},$scope.error="",$scope.signin=function(){$scope.credentials.email=$scope.credentials.username,User.login($scope.credentials).then(function(response){Auth.login(response),$scope.user=$rootScope.user=Auth.ensureHasCurrentUser(User),"home"!==$state.previous.name&&"verify"!==$state.previous.name&&""!==$state.previous.name?$state.go($state.previous.name):$state.go("listForms")},function(error){$rootScope.user=Auth.ensureHasCurrentUser(User),$scope.user=$rootScope.user,$scope.error=error,console.log("loginError: "+error)})},$scope.signup=function(){console.log($scope.credentials),User.signup($scope.credentials).then(function(response){console.log("signup-success"),$state.go("signup-success")},function(error){console.log("Error: "),console.log(error),error?($scope.error=error,console.log(error)):console.log("No response received")})}}]),angular.module("users").controller("PasswordController",["$scope","$stateParams","$state","User",function($scope,$stateParams,$state,User){$scope.error="",$scope.askForPasswordReset=function(){User.askForPasswordReset($scope.credentials).then(function(response){$scope.success=response.message,$scope.credentials=null},function(error){$scope.error=error,$scope.credentials=null})},$scope.resetUserPassword=function(){$scope.success=$scope.error=null,User.resetPassword($scope.passwordDetails,$stateParams.token).then(function(response){$scope.success=response.message,$scope.passwordDetails=null,$state.go("reset-success")},function(error){$scope.error=error.message||error,$scope.passwordDetails=null})}}]),angular.module("users").controller("SettingsController",["$scope","$rootScope","$http","$state","Users",function($scope,$rootScope,$http,$state,Users){$scope.user=$rootScope.user,$scope.hasConnectedAdditionalSocialAccounts=function(provider){for(var i in $scope.user.additionalProvidersData)return!0;return!1},$scope.isConnectedSocialAccount=function(provider){return $scope.user.provider===provider||$scope.user.additionalProvidersData&&$scope.user.additionalProvidersData[provider]},$scope.removeUserSocialAccount=function(provider){$scope.success=$scope.error=null,$http["delete"]("/users/accounts",{params:{provider:provider}}).success(function(response){$scope.success=!0,$scope.user=response}).error(function(response){$scope.error=response.message})},$scope.updateUserProfile=function(isValid){if(isValid){$scope.success=$scope.error=null;var user=new Users($scope.user);user.$update(function(response){$scope.success=!0,$scope.user=response},function(response){$scope.error=response.data.message})}else $scope.submitted=!0},$scope.changeUserPassword=function(){$scope.success=$scope.error=null,$http.post("/users/password",$scope.passwordDetails).success(function(response){$scope.success=!0,$scope.passwordDetails=null}).error(function(response){$scope.error=response.message})}}]),angular.module("users").controller("VerifyController",["$scope","$state","$rootScope","User","Auth","$stateParams",function($scope,$state,$rootScope,User,Auth,$stateParams){$scope.isResetSent=!1,$scope.credentials={},$scope.error="",$scope.resendVerifyEmail=function(){User.resendVerifyEmail($scope.credentials.email).then(function(response){console.log(response),$scope.success=response.message,$scope.credentials=null,$scope.isResetSent=!0},function(error){$scope.error=error,$scope.credentials.email=null,$scope.isResetSent=!1})},$scope.validateVerifyToken=function(){$stateParams.token&&(console.log($stateParams.token),User.validateVerifyToken($stateParams.token).then(function(response){console.log("Success: "+response.message),$scope.success=response.message,$scope.isResetSent=!0,$scope.credentials.email=null},function(error){console.log("Error: "+error.message),$scope.isResetSent=!1,$scope.error=error,$scope.credentials.email=null}))}}]),angular.module("users").factory("Auth",["$window",function($window){var userState={isLoggedIn:!1},service={_currentUser:null,get currentUser(){return this._currentUser},ensureHasCurrentUser:function(User){return service._currentUser&&service._currentUser.username?service._currentUser:$window.user?(service._currentUser=$window.user,service._currentUser):void User.getCurrent().then(function(user){return service._currentUser=user,userState.isLoggedIn=!0,$window.user=service._currentUser,service._currentUser},function(response){return userState.isLoggedIn=!1,service._currentUser=null,$window.user=null,console.log("User.getCurrent() err",response),null})},isAuthenticated:function(){return!!service._currentUser},getUserState:function(){return userState},login:function(new_user){userState.isLoggedIn=!0,service._currentUser=new_user},logout:function(){$window.user=null,userState.isLoggedIn=!1,service._currentUser=null}};return service}]),angular.module("users").service("Authorizer",["APP_PERMISSIONS","USER_ROLES",function(APP_PERMISSIONS,USER_ROLES){return function(user){return{canAccess:function(permissions){var i,len,permission;for(angular.isArray(permissions)||(permissions=[permissions]),i=0,len=permissions.length;len>i;i++){if(permission=permissions[i],null===APP_PERMISSIONS[permission])throw"Bad permission value";if(!user||!user.roles)return!1;switch(permission){case APP_PERMISSIONS.viewAdminSettings:case APP_PERMISSIONS.editAdminSettings:return user.roles.indexOf(USER_ROLES.admin)>-1;case APP_PERMISSIONS.viewPrivateForm:case APP_PERMISSIONS.editForm:return user.roles.indexOf(USER_ROLES.admin)>-1||user.roles.indexOf(USER_ROLES.normal)>-1}}return!1}}}}]),angular.module("users").factory("User",["$window","$q","$timeout","$http","$state",function($window,$q,$timeout,$http,$state){var userService={getCurrent:function(){var deferred=$q.defer();return $http.get("/users/me").success(function(response){deferred.resolve(response)}).error(function(){deferred.reject("User's session has expired")}),deferred.promise},login:function(credentials){var deferred=$q.defer();return $http.post("/auth/signin",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},logout:function(){var deferred=$q.defer();return $http.get("/auth/signout").success(function(response){deferred.resolve(null)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},signup:function(credentials){var deferred=$q.defer();return $http.post("/auth/signup",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},resendVerifyEmail:function(_email){var deferred=$q.defer();return $http.post("/auth/verify",{email:_email}).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},validateVerifyToken:function(token){var validTokenRe=/^([A-Za-z0-9]{48})$/g;if(!validTokenRe.test(token))throw new Error("Error token: "+token+" is not a valid verification token");var deferred=$q.defer();return $http.get("/auth/verify/"+token).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error)}),deferred.promise},resetPassword:function(passwordDetails,token){var deferred=$q.defer();return $http.get("/auth/password/"+token,passwordDetails).success(function(response){deferred.resolve()}).error(function(error){deferred.reject(error.message||error)}),deferred.promise},askForPasswordReset:function(credentials){var deferred=$q.defer();return $http.post("/auth/forgot",credentials).success(function(response){deferred.resolve(response)}).error(function(error){deferred.reject(error.message||error)}),deferred.promise}};return userService}]),angular.module("users").factory("Users",["$resource",function($resource){return $resource("users",{},{update:{method:"PUT"}})}]),angular.module("forms").controller("AdminFormController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http","$uibModal","myForm",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http,$uibModal,myForm){$scope=$rootScope,$scope.animationsEnabled=!0,$scope.myform=myForm,$rootScope.saveInProgress=!1,CurrentForm.setForm($scope.myform),$scope.tabData=[{heading:"Create",route:"viewForm.create"},{heading:"Design",route:"viewForm.design"},{heading:"Configure",route:"viewForm.configure"},{heading:"Analyze",route:"viewForm.analyze"}],$scope.setForm=function(form){$scope.myform=form},$rootScope.resetForm=function(){$scope.myform=Forms.get({formId:$stateParams.formId})},$scope.openDeleteModal=function(){$scope.deleteModal=$uibModal.open({animation:$scope.animationsEnabled,templateUrl:"myModalContent.html",controller:"AdminFormController",resolve:{myForm:function(){return $scope.myform}}}),$scope.deleteModal.result.then(function(selectedItem){$scope.selected=selectedItem},function(){console.log("Modal dismissed at: "+new Date)})},$scope.cancelDeleteModal=function(){$scope.deleteModal&&$scope.deleteModal.dismiss("cancel")},$scope.removeCurrentForm=function(){if($scope.deleteModal&&$scope.deleteModal.opened){
+$scope.deleteModal.close();var form_id=$scope.myform._id;if(!form_id)throw new Error("Error - removeCurrentForm(): $scope.myform._id does not exist");$http["delete"]("/forms/"+form_id).success(function(data,status,headers){console.log("form deleted successfully"),$state.go("listForms",{},{reload:!0})}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}},$scope.update=$rootScope.update=function(updateImmediately,cb){var continueUpdate=!0;if(updateImmediately||(continueUpdate=!$rootScope.saveInProgress),continueUpdate){var err=null;updateImmediately||($rootScope.saveInProgress=!0),$scope.updatePromise=$http.put("/forms/"+$scope.myform._id,{form:$scope.myform}).then(function(response){$rootScope.myform=$scope.myform=response.data})["catch"](function(response){console.log("Error occured during form UPDATE.\n"),err=response.data})["finally"](function(){return updateImmediately||($rootScope.saveInProgress=!1),"function"==typeof cb?cb(err):void 0})}}}]),angular.module("forms").controller("ListFormsController",["$rootScope","$scope","$stateParams","$state","Forms","CurrentForm","$http",function($rootScope,$scope,$stateParams,$state,Forms,CurrentForm,$http){$scope=$rootScope,$scope.forms={},$scope.showCreateModal=!1,$scope.findAll=function(){Forms.query(function(_forms){$scope.myforms=_forms})},$scope.openCreateModal=function(){$scope.showCreateModal||($scope.showCreateModal=!0)},$scope.closeCreateModal=function(){$scope.showCreateModal&&($scope.showCreateModal=!1)},$scope.setForm=function(form){$scope.myform=form},$scope.goToWithId=function(route,id){$state.go(route,{formId:id},{reload:!0})},$scope.duplicateForm=function(form_index){var form=_.cloneDeep($scope.myforms[form_index]);delete form._id,$http.post("/forms",{form:form}).success(function(data,status,headers){$scope.myforms.splice(form_index+1,0,data)}).error(function(errorResponse){console.error(errorResponse),null===errorResponse&&($scope.error=errorResponse.data.message)})},$scope.createNewForm=function(){var form={};form.title=$scope.forms.createForm.title.$modelValue,form.language=$scope.forms.createForm.language.$modelValue,$scope.forms.createForm.$valid&&$scope.forms.createForm.$dirty&&$http.post("/forms",{form:form}).success(function(data,status,headers){console.log("new form created"),$scope.goToWithId("viewForm.create",data._id+"")}).error(function(errorResponse){console.error(errorResponse),$scope.error=errorResponse.data.message})},$scope.removeForm=function(form_index){if(form_index>=$scope.myforms.length||0>form_index)throw new Error("Error: form_index in removeForm() must be between 0 and "+$scope.myforms.length-1);$http["delete"]("/forms/"+$scope.myforms[form_index]._id).success(function(data,status,headers){console.log("form deleted successfully"),$scope.myforms.splice(form_index,1)}).error(function(error){console.log("ERROR: Form could not be deleted."),console.error(error)})}}]),_.mixin({removeDateFields:removeDateFieldsFunc}),angular.module("forms").directive("autoSaveForm",["$rootScope","$timeout",function($rootScope,$timeout){return{require:["^form"],restrict:"AE",link:function($scope,$element,$attrs,$ctrls){angular.element(document).ready(function(){var $formCtrl=$ctrls[0],savePromise=null;$rootScope.finishedRender=!1,$scope.$on("editFormFields Started",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!1}),$scope.$on("editFormFields Finished",function(ngRepeatFinishedEvent){$rootScope.finishedRender=!0}),$scope.anyDirtyAndTouched=function(form){var propCount=0;for(var prop in form)if(form.hasOwnProperty(prop)&&"$"!==prop[0]&&(propCount++,form[prop].$touched&&form[prop].$dirty))return!0;return!1};var debounceSave=function(){$rootScope.saveInProgress=!0,$rootScope[$attrs.autoSaveCallback](!0,function(err){err?(console.error("Error form data NOT persisted"),console.error(err)):($formCtrl.$setPristine(),$formCtrl.$setUntouched())})};$scope.$watch(function(newValue,oldValue){$rootScope.finishedRender&&$scope.anyDirtyAndTouched($scope.editForm)&&!$rootScope.saveInProgress&&debounceSave()}),$scope.$watch($attrs.autoSaveWatch,function(newValue,oldValue){newValue=angular.copy(newValue),oldValue=angular.copy(oldValue),newValue.form_fields=_.removeDateFields(newValue.form_fields),oldValue.form_fields=_.removeDateFields(oldValue.form_fields);var changedFields=!_.isEqual(oldValue.form_fields,newValue.form_fields)||!_.isEqual(oldValue.startPage,newValue.startPage),changedFieldMap=!1;oldValue.hasOwnProperty("plugins.oscarhost.settings.fieldMap")&&(changedFieldMap=!!oldValue.plugins.oscarhost.settings.fieldMap&&!_.isEqual(oldValue.plugins.oscarhost.settings.fieldMap,newValue.plugins.oscarhost.settings.fieldMap)),(newValue||oldValue)&&oldValue&&(0===oldValue.form_fields.length&&($rootScope.finishedRender=!0),$rootScope.finishedRender&&(changedFields&&!$formCtrl.$dirty||changedFieldMap)&&!$rootScope.saveInProgress?(savePromise&&($timeout.cancel(savePromise),savePromise=null),savePromise=$timeout(function(){debounceSave()})):$rootScope.finishedRender&&$rootScope.saveInProgress&&($rootScope.saveInProgress=!1))},!0)})}}}]),angular.module("forms").directive("configureFormDirective",["$rootScope","$http","Upload","CurrentForm",function($rootScope,$http,Upload,CurrentForm){return{templateUrl:"modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",restrict:"E",scope:{myform:"=",user:"=",pdfFields:"@",formFields:"@"},controller:["$scope",function($scope){console.log($scope.myform),CurrentForm.getForm().plugins?CurrentForm.getForm().plugins.oscarhost.baseUrl&&($scope.oscarhostAPI=!0):$scope.oscarhostAPI=!1,$scope.log="",$scope.pdfLoading=!1,$scope.languages=$rootScope.languages,this._current_upload=null,$scope.resetForm=$rootScope.resetForm,$scope.update=$rootScope.update,this._unbindedPdfFields=$scope.pdfFields,$scope.cancelUpload=function(){this._current_upload.abort(),$scope.pdfLoading=!1,$scope.removePDF()},$scope.removePDF=function(){$scope.myform.pdf=null,$scope.myform.isGenerated=!1,$scope.myform.autofillPDFs=!1,console.log("form.pdf: "+$scope.myform.pdf+" REMOVED")},$scope.uploadPDF=function(file){file&&(console.log(file),Upload.upload({url:"/upload/pdf",data:{user:$scope.user,file:file}}).then(function(resp){var data=resp.data;$scope.log="file "+data.originalname+" uploaded as "+data.filename+". JSON: "+JSON.stringify(data)+"\n"+$scope.log,$scope.myform.pdf=angular.fromJson(angular.toJson(data)),$scope.pdfLoading=!1,console.log($scope.log),$scope.$$phase||$scope.$digest||$scope.$apply()},function(resp){$scope.pdfLoading=!1,console.log("Error occured during upload.\n"),console.log(resp.status)},function(evt){var progressPercentage=parseInt(100*evt.loaded/evt.total,10);$scope.log="progress: "+progressPercentage+"% "+evt.config.data.file.name+"\n"+$scope.log,console.log($scope.log),$scope.pdfLoading=!0}))}}]}}]),angular.module("forms").directive("editFormDirective",["$rootScope","FormFields",function($rootScope,FormFields){return{templateUrl:"modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$scope",function($scope){for(var field_ids=_($scope.myform.form_fields).pluck("_id"),i=0;i0){$scope.myform.plugins.oscarhost.settings.fieldMap||($scope.myform.plugins.oscarhost.settings.fieldMap={});var oscarhostFields=$scope.myform.plugins.oscarhost.settings.validFields,currentFields=_($scope.myform.plugins.oscarhost.settings.fieldMap).invert().keys().value();return $scope.myform.plugins.oscarhost.settings.fieldMap.hasOwnProperty(field_id)&&(currentFields=_(currentFields).difference($scope.myform.plugins.oscarhost.settings.fieldMap[field_id])),_(oscarhostFields).difference(currentFields).value()}return[]},$scope.dropzone={handle:" .handle",containment:".dropzoneContainer",cursor:"grabbing"},$scope.addNewField=function(modifyForm,fieldType){$scope.addField.lastAddedID++;for(var fieldTitle,i=0;i<$scope.addField.types.length;i++)if($scope.addField.types[i].name===fieldType){$scope.addField.types[i].lastAddedID++,fieldTitle=$scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;break}var newField={title:fieldTitle,fieldType:fieldType,fieldValue:"",required:!0,disabled:!1,deletePreserved:!1};return modifyForm&&$scope.myform.form_fields.push(newField),newField},$scope.deleteField=function(field_index){var currFieldId=$scope.myform.form_fields[field_index]._id;$scope.myform.hasOwnProperty("plugins.oscarhost.baseUrl")&&delete $scope.myform.plugins.oscarhost.settings.fieldMap[currFieldId],$scope.myform.form_fields.splice(field_index,1)},$scope.duplicateField=function(field_index){var currField=_.cloneDeep($scope.myform.form_fields[field_index]);currField._id="cloned"+_.uniqueId(),currField.title+=" copy",$scope.myform.form_fields.splice(field_index+1,0,currField)},$scope.addButton=function(){var newButton={};newButton.bgColor="#ddd",newButton.color="#ffffff",newButton.text="Button",newButton._id=Math.floor(1e5*Math.random()),$scope.myform.startPage.buttons.push(newButton)},$scope.deleteButton=function(button){for(var currID,i=0;i<$scope.myform.startPage.buttons.length;i++)if(currID=$scope.myform.startPage.buttons[i]._id,console.log(currID),currID===button._id){$scope.myform.startPage.buttons.splice(i,1);break}},$scope.addOption=function(field_index){var currField=$scope.myform.form_fields[field_index];if(console.log(field_index),console.log(currField),"checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType){currField.fieldOptions||($scope.myform.form_fields[field_index].fieldOptions=[]);var lastOptionID=0;currField.fieldOptions[currField.fieldOptions.length-1]&&(lastOptionID=currField.fieldOptions[currField.fieldOptions.length-1].option_id);var newOption={option_id:Math.floor(1e5*Math.random()),option_title:"Option "+lastOptionID,option_value:"Option "+lastOptionID};$scope.myform.form_fields[field_index].fieldOptions.push(newOption)}},$scope.deleteOption=function(field_index,option){var currField=$scope.myform.form_fields[field_index];if("checkbox"===currField.fieldType||"dropdown"===currField.fieldType||"radio"===currField.fieldType)for(var i=0;i',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("forms").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache","supportedFields",function($http,$compile,$rootScope,$templateCache,supportedFields){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/base/views/directiveViews/field/";return __indexOf.call(supportedFields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get(templateUrl)};return{template:"{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^-?\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show(),$compile(element.contents())(scope)}}}]),angular.module("forms").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13!==keyCode||event.shiftKey||(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}))})}}}]),angular.module("forms").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("forms").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","Auth",function($http,TimeCounter,$filter,$rootScope,Auth){return{templateUrl:"modules/forms/base/views/directiveViews/form/submit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.authentication=$rootScope.authentication,$scope.noscroll=!1,$scope.forms={};var form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length,nb_valid=$filter("formValidity")($scope.myform);$scope.translateAdvancementData={done:nb_valid,total:form_fields_count,answers_not_completed:form_fields_count-nb_valid},$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.visible_form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.visible_form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())},$rootScope.setDropdownOption=function(){console.log("setDropdownOption index: ")},$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){if(null!==$scope.selected&&$scope.selected._id!==field_id){$scope.selected._id=field_id,$scope.selected.index=field_index;var nb_valid=$filter("formValidity")($scope.myform);$scope.translateAdvancementData={done:nb_valid,total:form_fields_count,answers_not_completed:form_fields_count-nb_valid},animateScroll?($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input")[0].focus()})})})):setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input")[0].focus()})}},$rootScope.nextField=$scope.nextField=function(){var selected_index,selected_id;$scope.selected.index<$scope.myform.visible_form_fields.length-1?(selected_index=$scope.selected.index+1,selected_id=$scope.myform.visible_form_fields[selected_index]._id,$rootScope.setActiveField(selected_id,selected_index,!0)):$scope.selected.index===$scope.myform.visible_form_fields.length-1&&(selected_index=$scope.selected.index+1,selected_id="submit_field",$rootScope.setActiveField(selected_id,selected_index,!0))},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.visible_form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.visible_form_fields.length>0&&($scope.selected._id=$scope.myform.visible_form_fields[0]._id)},$scope.goToInvalid=function(){document.querySelectorAll(".ng-invalid.focusOn")[0].focus()},$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields,setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){$scope.myform.submitted=!0,$scope.loading=!1}).error(function(error){$scope.loading=!1,$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("forms").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("forms").factory("Forms",["$resource","FORM_URL",function($resource,FORM_URL){return $resource(FORM_URL,{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),angular.module("forms").service("TimeCounter",[function(){var _startTime,_endTime,that=this;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=_startTime},this.stopClock=function(){return _startTime?(_endTime=Date.now(),that.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,that.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]);
\ No newline at end of file