From a966a5f34a9cc4c6c34f5c90eaaa870d4b941e04 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 5 Jun 2016 01:34:43 +0200 Subject: [PATCH] fix docker --- config/env/development.js | 2 +- docker-compose.yml | 2 + public/dist/application.js | 1642 ++++++++------------------------ public/dist/application.min.js | 9 + 4 files changed, 417 insertions(+), 1238 deletions(-) diff --git a/config/env/development.js b/config/env/development.js index 5acc4687..d95f02fe 100755 --- a/config/env/development.js +++ b/config/env/development.js @@ -3,7 +3,7 @@ module.exports = { baseUrl: process.env.BASE_URL || 'http://localhost:5000', db: { - uri: 'mongodb://localhost/mean', + uri: 'mongodb://'+(process.env.DB_HOST || 'localhost')+'/mean', options: { user: '', pass: '' diff --git a/docker-compose.yml b/docker-compose.yml index db9bbf3f..5b1e6340 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,8 @@ services: - "35729:35729" links: - db + environment: + DB_HOST: db volumes: mongo-data-wt: driver: local diff --git a/public/dist/application.js b/public/dist/application.js index 971351f7..22822e45 100644 --- a/public/dist/application.js +++ b/public/dist/application.js @@ -1,21 +1,11 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templateCache) { "use strict"; -<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f -<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c -======= -<<<<<<< adb4e008930e5142044796081f66a1db54906706 ->>>>>>> make it work - $templateCache.put("../public/modules/core/views/header.client.view.html", - "
"); - $templateCache.put("../public/modules/core/views/home.client.view.html", -======= $templateCache.put("modules/core/views/header.client.view.html", - "
"); + "
"); $templateCache.put("modules/core/views/home.client.view.html", ->>>>>>> make it work "

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", - "
"); @@ -61,20 +52,20 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf ======= ======= +======= +>>>>>>> fix docker "

"); $templateCache.put("modules/forms/admin/views/list-forms.client.view.html", "

Create a new form
Name
Language

Created on
"); -<<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f - $templateCache.put("../public/modules/forms/views/submit-form.client.view.html", - "√
"); - $templateCache.put("../public/modules/forms/views/adminTabs/analyze.html", -======= $templateCache.put("modules/forms/base/views/submit-form.client.view.html", "
"); $templateCache.put("modules/forms/admin/views/adminTabs/analyze.html", +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 >>>>>>> make it work >>>>>>> make it work >>>>>>> make it work +======= +>>>>>>> fix docker ""); $templateCache.put("modules/forms/admin/views/adminTabs/configure.html", ""); @@ -86,6 +77,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa "
{{$message}}
"); $templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html", "
{{$message}}
"); +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -127,13 +119,12 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa $templateCache.put("../public/modules/forms/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}}

Edit Start Page


Intro Title:
Intro Paragraph:
{{ 'ENTER' | translate }}
"); + "

{{index+1}} {{field.title}} {{ 'OPTIONAL' | translate }}

{{ 'NEWLINE' | translate }}
{{ 'ENTER' | translate }}
"); $templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html", - "

{{field.title}} ({{ 'OPTIONAL' | translate }})

{{ 'ENTER' | translate }}
"); + "

{{index+1}} {{field.title}} ({{ 'OPTIONAL' | 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", - "
press ENTER

{{ 'ADVANCEMENT' | translate:translateAdvancementData }}

"); + "
{{ 'COMPLETING_NEEDED' | translate:translateAdvancementData }}
{{ 'ENTER' | translate }}

{{ 'ADVANCEMENT' | translate:translateAdvancementData }}

"); $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", - "

Sign into your account

Error:
  or  Sign up
"); + "

Sign into your account

Error:
  or  Sign up
"); $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

"); + "

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", ->>>>>>> make it work -======= -======= - $templateCache.put("modules/users/views/authentication/signin.client.view.html", - "

Sign into your account

Error:
  or  Sign up
"); - $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 "

Signup with your email

Couldn't submit form due to errors:

"); $templateCache.put("modules/users/views/password/forgot-password.client.view.html", "

Restore your password

Enter your account email.

{{error}}
{{success}}
"); @@ -483,21 +467,9 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa "

Edit your profile

Profile Saved Successfully
Couldn't Save Your Profile.
Error:
First Name
Last Name

Language
Email (also your username)
"); $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 "

Account successfuly activated

Continue to login page

Verification link is invalid or has expired

Resend your verification email Signin to your account
"); }]); @@ -620,6 +592,7 @@ angular.element(document).ready(function() { angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]); }); +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -1028,6 +1001,8 @@ angular.module('forms').config(['$stateProvider', }); ======= ======= +======= +>>>>>>> fix docker angular.module('NodeForm.templates', []).run(['$templateCache', function($templateCache) { "use strict"; $templateCache.put("../public/modules/core/views/header.client.view.html", @@ -1351,7 +1326,6 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa $templateCache.put("../public/modules/users/views/verify/verify-account.client.view.html", "

Account successfuly activated

Continue to login page

Verification link is invalid or has expired

Resend your verification email Signin to your account
"); }]); ->>>>>>> make it work 'use strict'; @@ -1382,8 +1356,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; @@ -1437,6 +1413,7 @@ angular.module('core').controller('HomeController', ['$rootScope', '$scope', 'Us 'use strict'; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf <<<<<<< 89a4852b67e5d936da0821c12c28ec39c7c6d2b0 // Forms controller @@ -1490,14 +1467,16 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope ======= ======= +======= +>>>>>>> fix docker //Menu service used for managing menus angular.module('core').service('Menus', [ ->>>>>>> make it work function() { // Define a set of default roles this.defaultRoles = ['*']; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf @@ -1541,6 +1520,8 @@ angular.module('core').service('Menus', [ ======= ======= +======= +>>>>>>> fix docker // Define the menus object this.menus = {}; @@ -1558,7 +1539,6 @@ angular.module('core').service('Menus', [ return true; } } ->>>>>>> make it work } } } else { @@ -1583,6 +1563,7 @@ angular.module('core').service('Menus', [ return false; }; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf @@ -1615,6 +1596,8 @@ angular.module('core').service('Menus', [ ======= ======= +======= +>>>>>>> fix docker // Get the menu object by menu id this.getMenu = function(menuId) { // Validate that the menu exists @@ -1623,7 +1606,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) { @@ -1639,6 +1621,7 @@ angular.module('core').service('Menus', [ return this.menus[menuId]; }; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf @@ -1661,16 +1644,18 @@ angular.module('core').service('Menus', [ ======= ======= +======= +>>>>>>> fix docker // 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]; }; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf @@ -1698,11 +1683,12 @@ angular.module('core').service('Menus', [ } }; ======= +======= +>>>>>>> fix docker // 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({ @@ -1717,45 +1703,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) { @@ -1831,7 +1787,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); @@ -1848,24 +1803,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); } @@ -1934,18 +1871,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. @@ -1993,34 +1918,68 @@ 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 + +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; + 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; + }); + } + + }); + } + }; +}); + +'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'; // Config HTTP Error Handling angular.module('users').config(['$httpProvider', @@ -2032,6 +1991,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'); @@ -2046,40 +2006,17 @@ angular.module('users').config(['$httpProvider', }; }]); }]); + 'use strict'; // Setting up route angular.module('users').config(['$stateProvider', function($stateProvider) { -<<<<<<< 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); - } - }); - }; - - //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(); +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 89a4852b67e5d936da0821c12c28ec39c7c6d2b0 //Autosave Form when model (specified in $attrs.autoSaveWatch) changes $scope.$watch($attrs.autoSaveWatch, function(newValue, oldValue) { @@ -2087,26 +2024,41 @@ angular.module('users').config(['$stateProvider', // console.log(Auth.ensureHasCurrentUser(User)); >>>>>>> make it work >>>>>>> make it work +======= + //console.log(Auth.ensureHasCurrentUser(User)); +>>>>>>> fix docker 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', { @@ -2130,12 +2082,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' }). @@ -2147,16 +2104,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' @@ -2175,229 +2136,7 @@ angular.module('users').config(['$stateProvider', }); } ]); -'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); - } - ); - }; - - $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'); - } - } - ); - }; - - } -]); ->>>>>>> make it work -======= - } -]); - -'use strict'; - -// 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) { - - var checkLoggedin = function($q, $timeout, $state, User, Auth) { - var deferred = $q.defer(); - - // 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}); - }); - } - - 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'; angular.module('users').controller('AuthenticationController', ['$scope', '$location', '$state', '$rootScope', 'User', 'Auth', @@ -2452,7 +2191,6 @@ angular.module('users').controller('AuthenticationController', ['$scope', '$loca } ]); ->>>>>>> make it work 'use strict'; @@ -2560,28 +2298,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) { @@ -2589,7 +2308,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() { @@ -2610,28 +2328,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){ @@ -2656,6 +2352,7 @@ angular.module('users').controller('VerifyController', ['$scope', '$state', '$ro ]); 'use strict'; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -2709,9 +2406,10 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField $scope.addField = {}; $scope.addField.types = FormFields.types; ======= +======= +>>>>>>> fix docker angular.module('users').factory('Auth', ['$window', function($window) { ->>>>>>> make it work var userState = { isLoggedIn: false @@ -2778,21 +2476,12 @@ 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'; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -2814,6 +2503,8 @@ angular.module('users').factory('Auth', ['$window', cursor: 'grabbing' }; ======= +======= +>>>>>>> fix docker angular.module('users').service('Authorizer', ["APP_PERMISSIONS", "USER_ROLES", function(APP_PERMISSIONS, USER_ROLES) { return function(user) { return { @@ -2840,8 +2531,11 @@ angular.module('users').service('Authorizer', ["APP_PERMISSIONS", "USER_ROLES", return false; } } +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 >>>>>>> make it work >>>>>>> make it work +======= +>>>>>>> fix docker return false; } @@ -2859,6 +2553,7 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' function($window, $q, $timeout, $http, $state) { >>>>>>> make it work +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -2897,10 +2592,11 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' return newField; }; ======= +======= +>>>>>>> fix docker var userService = { getCurrent: function() { var deferred = $q.defer(); ->>>>>>> make it work $http.get('/users/me') .success(function(response) { @@ -2914,26 +2610,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; }, @@ -2987,6 +2669,7 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' deferred.reject(error); }); +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -3010,9 +2693,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' ======= if(!currField.fieldOptions) $scope.myform.form_fields[field_index].fieldOptions = []; ======= +======= +>>>>>>> fix docker return deferred.promise; }, ->>>>>>> make it work resetPassword: function(passwordDetails, token) { @@ -3027,20 +2711,8 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' }, >>>>>>> make it work -<<<<<<< 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) { @@ -3063,6 +2735,7 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' 'use strict'; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf <<<<<<< 89a4852b67e5d936da0821c12c28ec39c7c6d2b0 // decides whether field options block will be shown (true for dropdown and radio fields) @@ -3090,6 +2763,8 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', ' }; } ======= +======= +>>>>>>> fix docker // Users service used for communicating with the users REST endpoint angular.module('users').factory('Users', ['$resource', function($resource) { @@ -3099,7 +2774,6 @@ angular.module('users').factory('Users', ['$resource', } }); } ->>>>>>> make it work ]); 'use strict'; @@ -3170,52 +2844,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}); @@ -3226,57 +2866,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){ @@ -3288,21 +2877,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}) @@ -3379,6 +2954,7 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope }); }; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -3408,6 +2984,8 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope return $templateCache.get('../public/'+templateUrl); }; ======= +======= +>>>>>>> fix docker //Modal functions $scope.openCreateModal = function(){ if(!$scope.showCreateModal){ @@ -3439,8 +3017,11 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope $scope.goToWithId = function(route, id) { $state.go(route, {'formId': id}, {reload: true}); }; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 >>>>>>> make it work >>>>>>> make it work +======= +>>>>>>> fix docker $scope.duplicateForm = function(form_index){ var form = _.cloneDeep($scope.myforms[form_index]); @@ -3525,6 +3106,7 @@ angular.module('forms').controller('ListFormsController', ['$rootScope', '$scope ]); 'use strict'; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -3549,26 +3131,29 @@ angular.module('forms').directive('keyToOption', function(){ $scope.field.fieldValue = $scope.field.fieldOptions[index].option_value; }); } +======= - }); - } - }; -}); +function removeDateFieldsFunc(o) { + var clone = _.clone(o); + function eachObject(v,k){ -'use strict'; + if(k === 'lastModified' || k === 'created'){ + delete clone[k]; + } + } +>>>>>>> fix docker -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; + for(var i=0; i>>>>>> fix docker return { require: ['^form'], restrict: 'AE', @@ -3751,25 +3338,29 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' $rootScope[$attrs.autoSaveCallback](true, function(err){ if(!err){ - console.log('\n\nForm data persisted -- setting pristine flag'); - $formCtrl.$setPristine(); - $formCtrl.$setUntouched(); + //console.log('\n\nForm data persisted -- setting pristine flag'); + $formCtrl.$setPristine(); + $formCtrl.$setUntouched(); }else{ console.error('Error form data NOT persisted'); console.error(err); } - }); + }); }; //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); + //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'); + //console.log('Form saving started'); debounceSave(); +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 console.log('introParagraphStartPage.$dirty AFTER: '+$scope.editForm.introParagraphStartPage.$dirty); >>>>>>> make it work +======= + //console.log('introParagraphStartPage.$dirty AFTER: '+$scope.editForm.introParagraphStartPage.$dirty); +>>>>>>> fix docker } }); @@ -3798,43 +3389,11 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' } >>>>>>> make it work -<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f -<<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c -======= -<<<<<<< adb4e008930e5142044796081f66a1db54906706 ->>>>>>> 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 ); @@ -3847,7 +3406,7 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' // 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; } @@ -3857,9 +3416,9 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' if(savePromise) { $timeout.cancel(savePromise); savePromise = null; ->>>>>>> make it work } +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 savePromise = $timeout(function() { debounceSave(); }); @@ -3877,6 +3436,11 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' console.log('setDropdownOption index: '); }; ======= +======= + savePromise = $timeout(function() { + debounceSave(); + }); +>>>>>>> fix docker } //If we are finished rendering then form saving should be finished else if($rootScope.finishedRender && $rootScope.saveInProgress){ @@ -3890,10 +3454,8 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' }); } }; - -}]); ->>>>>>> make it work +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 95d6fb967b8d351fe9e17be40be308a8fe73c55f >>>>>>> make it work /* @@ -3928,15 +3490,12 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter' } }; +======= +>>>>>>> fix docker }]); '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 { @@ -3958,13 +3517,8 @@ 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; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< d6b8995f6035723cf908d50b65e8b75b17f7190c ======= @@ -4003,11 +3557,14 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt SendVisitorData.send($scope.myform, getActiveField(), TimeCounter.getTimeElapsed()); }; ======= +======= +>>>>>>> fix docker this._current_upload = null; $scope.resetForm = $rootScope.resetForm; $scope.update = $rootScope.update; this._unbindedPdfFields = $scope.pdfFields; +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 >>>>>>> make it work <<<<<<< adb4e008930e5142044796081f66a1db54906706 @@ -4079,12 +3636,15 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt form.timeElapsed = _timeElapsed; ======= this._unbindedPdfFields = $scope.pdfFields; +======= +>>>>>>> fix docker //DAVID: TODO: finish this so we can create a Form.pdfFieldMap // $scope.getUnbindedPdfFields = function(fieldType){ // this._unbindedPdfFields = $scope.pdfFields // } +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf <<<<<<< 89a4852b67e5d936da0821c12c28ec39c7c6d2b0 for(var i=0; i < $scope.myform.form_fields.length; i++){ @@ -4111,6 +3671,8 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt ======= <<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f >>>>>>> make it work +======= +>>>>>>> fix docker //PDF Functions $scope.cancelUpload = function(){ this._current_upload.abort(); @@ -4123,25 +3685,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); @@ -4159,10 +3706,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); @@ -4186,7 +3729,6 @@ angular.module('forms').directive('configureFormDirective', ['$rootScope', '$htt >>>>>>> make it work }; ->>>>>>> make it work }] }; } @@ -4210,6 +3752,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; @@ -4398,222 +3951,6 @@ angular.module('forms').service('TimeCounter', [ */ >>>>>>> make it work -<<<<<<< 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 - */ - // add new Button to the startPage $scope.addButton = function(){ @@ -4626,38 +3963,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); @@ -4665,124 +3977,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 */ @@ -4819,10 +4015,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++){ @@ -4849,10 +4041,6 @@ angular.module('users').config(['$httpProvider', }; } -<<<<<<< afa26fde37ead7eff67e1cf9053c069ded63381f ->>>>>>> make it work -======= ->>>>>>> make it work ]); 'use strict'; @@ -4965,10 +4153,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); + */ }; }] @@ -4978,6 +4172,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) { @@ -5050,31 +4319,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'; @@ -5083,24 +4357,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', }); }]); @@ -5113,7 +4395,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){ @@ -5230,17 +4512,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': @@ -5252,7 +4523,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'; @@ -5265,7 +4536,6 @@ angular.module('forms').directive('fieldDirective', ['$http', '$compile', '$root element.html(template).show(); $compile(element.contents())(scope); } ->>>>>>> make it work }; }]); @@ -5277,12 +4547,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(); } }); } @@ -5338,9 +4607,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(){ @@ -5360,20 +4632,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; @@ -5381,41 +4643,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); @@ -5424,6 +4676,10 @@ angular.module('forms').directive('submitFormDirective', } }; + $rootScope.setDropdownOption = function(){ + console.log('setDropdownOption index: '); + }; + /* ** Field Controls */ @@ -5440,72 +4696,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); @@ -5530,11 +4795,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(); }] }; } @@ -5542,31 +4804,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; @@ -5578,82 +4822,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 9493be90..52307291 100644 --- a/public/dist/application.min.js +++ b/public/dist/application.min.js @@ -1,3 +1,4 @@ +<<<<<<< 7fab87aeb2fac11c800978b13daeeb2629a02297 <<<<<<< 96591cc1e8fbb4fd9e1f61b6c8ba44f9aa5a02cf <<<<<<< 89a4852b67e5d936da0821c12c28ec39c7c6d2b0 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",'

Craft beautiful forms in seconds.

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",'

Create a new form
Name
Language

'),$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",'
Background Color
Question Text Color
Answer Text Color
Button Background Color
Button Text Color
'),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",'
{{$message}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",'
{{$message}}
'),$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

{{field.description}}

'),$templateCache.put("../public/modules/forms/views/directiveViews/field/dropdown.html",'
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/radio.html",'

{{index+1}} {{field.title}} optional

{{field.description}}


'),$templateCache.put("../public/modules/forms/views/directiveViews/field/rating.html",'

{{index+1}} {{field.title}} optional

{{field.description}}

'),$templateCache.put("../public/modules/forms/views/directiveViews/field/statement.html",'

{{field.title}}

{{field.description}}

{{field.description}}


'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'

{{index+1}} {{field.title}} optional

{{field.description}}

Press SHIFT+ENTER to add a newline
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'

{{index+1}} {{field.title}} (optional)

{{field.description}}

'),$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",'
Save Submissions as PDFs?
Upload Your PDF Template
{{myform.pdf.name}}
Upload your PDF
Autogenerate Form?
Use Oscarhost API?
Oscarhost API Username
Oscarhost API Password
Oscarhost API URL
Oscarhost API Update Type
Form Name
Form Status
Google Analytics Tracking Code
Language
* required
Display Form Footer?
Display Start Page?
'), @@ -41,3 +42,11 @@ $templateCache.put("../public/modules/users/views/authentication/signup-success. >>>>>>> make it work >>>>>>> make it work >>>>>>> make it work +======= +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",'

Craft beautiful forms in seconds.

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",'

Create a new form
Name
Language

'),$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",'
Background Color
Question Text Color
Answer Text Color
Button Background Color
Button Text Color
'),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeA.html",'
{{$message}}
'),$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",'
{{$message}}
'),$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",'
Save Submissions as PDFs?
Upload Your PDF Template
{{myform.pdf.name}}
Upload your PDF
Autogenerate Form?
Use Oscarhost API?
Oscarhost API Username
Oscarhost API Password
Oscarhost API URL
Oscarhost API Update Type
Form Name
Form Status
Language
* required
Display Form Footer?
Display Start Page?
'),$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",'

Edit Start Page


Intro Title:
Intro Paragraph:
\n
\n\n

\n
\n
Options:
\n
\n
\n \n\n \n \n \n
\n
\n \n
\n
\n
\n\n

\n\n
\n
Required:
\n
\n \n\n \n
\n
\n\n
\n
Disabled:
\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'), +$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-submissions-form.client.view.html",'
#{{value.title}}OscarEMR User ProfilePercentage CompleteTime ElapsedDeviceLocationIP AddressDate Submitted (UTC)Generated PDF
{{$index+1}}{{field.fieldValue.field_title}}{{field.fieldValue}}User Profile #{{row.oscarDemoNum}}{{row.percentageComplete}}%{{row.timeElapsed}}{{row.device.name}}, {{row.device.type}}{{row.geoLocation.city}}, {{row.geoLocation.country}}{{row.ipAddr}}{{row.created | date:\'yyyy-MM-dd HH:mm:ss\'}}Generated PDF
'),$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",'
'),$templateCache.put("modules/forms/base/views/directiveViews/field/file.html",'

{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }}

{{field.file.originalname}}
{{ UPLOAD_FILE | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/hidden.html",''),$templateCache.put("modules/forms/base/views/directiveViews/field/legal.html",'
'),$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",'

{{field.title}}

{{field.description}}


'),$templateCache.put("modules/forms/base/views/directiveViews/field/textarea.html",'

{{index+1}} {{field.title}} {{ \'OPTIONAL\' | translate }}

{{ \'NEWLINE\' | translate }}
{{ \'ENTER\' | translate }}
'),$templateCache.put("modules/forms/base/views/directiveViews/field/textfield.html",'

{{index+1}} {{field.title}} ({{ \'OPTIONAL\' | 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",'
{{ \'COMPLETING_NEEDED\' | translate:translateAdvancementData }}
'),$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",'

Sign into your account

'),$templateCache.put("modules/users/views/authentication/signup-success.client.view.html",''),$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.

'),$templateCache.put("modules/users/views/password/reset-password-invalid.client.view.html",'

Password reset is invalid

Ask for a new password reset
'),$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",'

Reset your password

'),$templateCache.put("modules/users/views/settings/change-password.client.view.html",'

Change your password

'),$templateCache.put("modules/users/views/settings/edit-profile.client.view.html",'

Edit your 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

Verification link is invalid or has expired

Resend your verification email Signin to your account
')}]);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",'

Craft beautiful forms in seconds.

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",'

Create a new form
Name
Language

'),$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",'
Background Color
Question Text Color
Answer Text Color
Button Background Color
Button Text Color
'),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeA.html",'
{{$message}}
'),$templateCache.put("../public/modules/forms/views/directiveViews/cgBusy/update-form-message-TypeB.html",'
{{$message}}
'),$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",'
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/file.html",'
{{field.title}} (* required)
{{field.file.originalname}}
Upload your File
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/hidden.html",''),$templateCache.put("../public/modules/forms/views/directiveViews/field/legal.html",'
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/natural.html",'

{{field.title}} *(required)


'),$templateCache.put("../public/modules/forms/views/directiveViews/field/password.html",'

{{field.title}} *(required)

'),$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",'

{{field.title}}

{{field.description}}


'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textarea.html",'

{{field.title}} *(required)

press ENTER
'),$templateCache.put("../public/modules/forms/views/directiveViews/field/textfield.html",'

{{field.title}} *(required)

press ENTER
'), +$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",'
Save Submissions as PDFs?
Upload Your PDF Template
{{myform.pdf.originalname}}
Upload your PDF
Autogenerate Form?
Use Oscarhost API?
Oscarhost API Username
Oscarhost API Password
Oscarhost API URL
Oscarhost API Update Type
Form Name
Form Status
Language
* required
Display Form Footer?
Display Start Page?
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-form.client.view.html",'

Edit Start Page


Intro Title:
Intro Paragraph:
\n
\n\n

\n
\n
Options:
\n
\n
\n \n\n \n \n \n
\n
\n \n
\n
\n
\n\n

\n\n
\n
Required:
\n
\n \n\n \n
\n
\n\n
\n
Disabled:
\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'),$templateCache.put("../public/modules/forms/views/directiveViews/form/edit-submissions-form.client.view.html",'
#{{value.title}}OscarEMR User ProfilePercentage CompleteTime ElapsedDeviceLocationIP AddressDate Submitted (UTC)Generated PDF
{{$index+1}}{{field.fieldValue}}User Profile #{{row.oscarDemoNum}}{{row.percentageComplete}}%{{row.timeElapsed}}{{row.device.name}}, {{row.device.type}}{{row.geoLocation.city}}, {{row.geoLocation.country}}{{row.ipAddr}}{{row.created | date:\'yyyy-MM-dd HH:mm:ss\'}}Generated PDF
'),$templateCache.put("../public/modules/forms/views/directiveViews/form/submit-form.client.view.html",'
press ENTER
'),$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",'

Sign into your account

'), +$templateCache.put("../public/modules/users/views/authentication/signup-success.client.view.html",''),$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.

'),$templateCache.put("../public/modules/users/views/password/reset-password-invalid.client.view.html",'

Password reset is invalid

Ask for a new password reset
'),$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",'

Reset your password

'),$templateCache.put("../public/modules/users/views/settings/change-password.client.view.html",'

Change your password

'),$templateCache.put("../public/modules/users/views/settings/edit-profile.client.view.html",'

Edit your 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

Verification link is invalid or has expired

Resend your verification email Signin to your account
')}]),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}}]); +>>>>>>> fix docker