got all frontend tests to pass
This commit is contained in:
parent
becd2a831c
commit
709303d43c
|
@ -67,10 +67,11 @@
|
||||||
var user = {{ user | json | safe }};
|
var user = {{ user | json | safe }};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--Embedding The signupDisabled Boolean-->
|
<!--Embedding signupDisabled, socketPort and socketUrl Boolean-->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var signupDisabled = {{signupDisabled | safe}};
|
var signupDisabled = {{signupDisabled | safe}};
|
||||||
var socketPort = {{socketPort | safe}};
|
var socketPort = {{socketPort | safe}};
|
||||||
|
var socketUrl = {{socketUrl | safe}} || null;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--Socket.io Client Dependency-->
|
<!--Socket.io Client Dependency-->
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
"appPath": "public/modules",
|
"appPath": "public/modules",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "^3.3.7",
|
"bootstrap": "^3.3.7",
|
||||||
"angular": "~1.4.7",
|
|
||||||
"angular-resource": "~1.4.7",
|
"angular-resource": "~1.4.7",
|
||||||
"angular-mocks": "~1.4.7",
|
"angular-mocks": "~1.4.7",
|
||||||
"angular-bootstrap": "~0.14.3",
|
"angular-bootstrap": "~0.14.3",
|
||||||
|
@ -47,7 +46,7 @@
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"angular-bootstrap": "^0.14.0",
|
"angular-bootstrap": "^0.14.0",
|
||||||
"angular": "~1.4.7",
|
"angular": "1.4.12",
|
||||||
"angular-ui-select": "compiled"
|
"angular-ui-select": "compiled"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
|
|
|
@ -63,6 +63,7 @@ module.exports.removeRootDir = function(files, removeRoot, addRoot) {
|
||||||
* Get the app's bower dependencies
|
* Get the app's bower dependencies
|
||||||
*/
|
*/
|
||||||
module.exports.getBowerJSAssets = function() {
|
module.exports.getBowerJSAssets = function() {
|
||||||
|
|
||||||
return this.removeRootDir(minBowerFiles('**/**.js'), 'public/', 'static/');
|
return this.removeRootDir(minBowerFiles('**/**.js'), 'public/', 'static/');
|
||||||
};
|
};
|
||||||
module.exports.getBowerCSSAssets = function() {
|
module.exports.getBowerCSSAssets = function() {
|
||||||
|
|
6
config/env/all.js
vendored
6
config/env/all.js
vendored
|
@ -104,9 +104,9 @@ module.exports = {
|
||||||
'!public/modules/**/tests/**/*.js'
|
'!public/modules/**/tests/**/*.js'
|
||||||
],
|
],
|
||||||
form_js: [
|
form_js: [
|
||||||
'public/config.js',
|
'public/form-config.js',
|
||||||
'public/application.js',
|
'public/form-application.js',
|
||||||
'public/dist/populate_template_cache.js',
|
'public/dist/form_populate_template_cache.js',
|
||||||
'public/form_modules/forms/*.js',
|
'public/form_modules/forms/*.js',
|
||||||
'public/form_modules/forms/*/*/*/*.js',
|
'public/form_modules/forms/*/*/*/*.js',
|
||||||
'public/form_modules/forms/*/*.js',
|
'public/form_modules/forms/*/*.js',
|
||||||
|
|
1
config/env/production.js
vendored
1
config/env/production.js
vendored
|
@ -6,6 +6,7 @@ module.exports = {
|
||||||
uri: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/mean',
|
uri: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/mean',
|
||||||
},
|
},
|
||||||
port: process.env.PORT || 5000,
|
port: process.env.PORT || 5000,
|
||||||
|
socketUrl: process.env.SOCKET_URL || 'ws.tellform.com',
|
||||||
log: {
|
log: {
|
||||||
// Can specify one of 'combined', 'common', 'dev', 'short', 'tiny'
|
// Can specify one of 'combined', 'common', 'dev', 'short', 'tiny'
|
||||||
format: 'combined',
|
format: 'combined',
|
||||||
|
|
|
@ -56,8 +56,11 @@ module.exports = function(db) {
|
||||||
app.locals.signupDisabled = config.signupDisabled;
|
app.locals.signupDisabled = config.signupDisabled;
|
||||||
app.locals.description = config.app.description;
|
app.locals.description = config.app.description;
|
||||||
app.locals.keywords = config.app.keywords;
|
app.locals.keywords = config.app.keywords;
|
||||||
app.locals.socketPort = config.socketPort;
|
|
||||||
|
|
||||||
|
app.locals.socketPort = config.socketPort;
|
||||||
|
if(config.socketUrl){
|
||||||
|
app.locals.socketUrl = config.socketUrl;
|
||||||
|
}
|
||||||
app.locals.bowerJSFiles = config.getBowerJSAssets();
|
app.locals.bowerJSFiles = config.getBowerJSAssets();
|
||||||
app.locals.bowerCssFiles = config.getBowerCSSAssets();
|
app.locals.bowerCssFiles = config.getBowerCSSAssets();
|
||||||
app.locals.bowerOtherFiles = config.getBowerOtherAssets();
|
app.locals.bowerOtherFiles = config.getBowerOtherAssets();
|
||||||
|
@ -136,7 +139,7 @@ module.exports = function(db) {
|
||||||
req.url = path;
|
req.url = path;
|
||||||
|
|
||||||
req.userId = user._id;
|
req.userId = user._id;
|
||||||
|
|
||||||
// Q.E.D.
|
// Q.E.D.
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
|
|
18
gruntfile.js
18
gruntfile.js
|
@ -1,7 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
var spawn = require('child_process').spawn;
|
var spawn = require('child_process').spawn;
|
||||||
|
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
require('jit-grunt')(grunt);
|
require('jit-grunt')(grunt);
|
||||||
|
|
||||||
|
@ -242,7 +241,6 @@ module.exports = function(grunt) {
|
||||||
options: {
|
options: {
|
||||||
base: 'public',
|
base: 'public',
|
||||||
watch: true,
|
watch: true,
|
||||||
module: 'NodeForm.templates',
|
|
||||||
singleModule: true,
|
singleModule: true,
|
||||||
useStrict: true,
|
useStrict: true,
|
||||||
htmlmin: {
|
htmlmin: {
|
||||||
|
@ -254,7 +252,17 @@ module.exports = function(grunt) {
|
||||||
removeRedundantAttributes: true
|
removeRedundantAttributes: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
forms: {
|
||||||
|
options: {
|
||||||
|
module: 'TellForm.form_templates'
|
||||||
|
},
|
||||||
|
src: ['public/form_modules/**/views/**.html', 'public/form_modules/**/views/**/*.html'],
|
||||||
|
dest: 'public/dist/form_populate_template_cache.js'
|
||||||
|
},
|
||||||
main: {
|
main: {
|
||||||
|
options: {
|
||||||
|
module: 'TellForm.templates'
|
||||||
|
},
|
||||||
src: ['public/modules/**/views/**.html', 'public/modules/**/views/**/*.html'],
|
src: ['public/modules/**/views/**.html', 'public/modules/**/views/**/*.html'],
|
||||||
dest: 'public/dist/populate_template_cache.js'
|
dest: 'public/dist/populate_template_cache.js'
|
||||||
}
|
}
|
||||||
|
@ -265,11 +273,10 @@ module.exports = function(grunt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
grunt.event.on('coverage', function(lcov, done){
|
grunt.event.on('coverage', function(lcov, done){
|
||||||
var coveralls = require('coveralls');
|
var coveralls = require('coveralls');
|
||||||
console.log(lcov);
|
coveralls.handleInput(lcov, function(err){
|
||||||
coveralls.handleInput(lcov, function(err){
|
|
||||||
if (err) {
|
if (err) {
|
||||||
grunt.log.error('Failed to submit lcov file to coveralls: ' + err);
|
grunt.log.error('Failed to submit lcov file to coveralls: ' + err);
|
||||||
return done(err);
|
return done(err);
|
||||||
|
@ -305,7 +312,6 @@ module.exports = function(grunt) {
|
||||||
// Debug task.
|
// Debug task.
|
||||||
grunt.registerTask('debug', ['lint', 'html2js:main', 'concurrent:debug']);
|
grunt.registerTask('debug', ['lint', 'html2js:main', 'concurrent:debug']);
|
||||||
|
|
||||||
|
|
||||||
// Secure task(s).
|
// Secure task(s).
|
||||||
grunt.registerTask('secure', ['env:secure', 'lint', 'html2js:main', 'concurrent:default']);
|
grunt.registerTask('secure', ['env:secure', 'lint', 'html2js:main', 'concurrent:default']);
|
||||||
|
|
||||||
|
|
|
@ -10,24 +10,24 @@ var bowerDep = bowerFiles('**/**.js');
|
||||||
|
|
||||||
// Karma configuration
|
// Karma configuration
|
||||||
module.exports = function(config) {
|
module.exports = function(config) {
|
||||||
var shouldBeSingleRun = false
|
var shouldBeSingleRun = false;
|
||||||
if(process.env.NODE_ENV === 'travis') shouldBeSingleRun = true
|
if(process.env.NODE_ENV === 'travis') shouldBeSingleRun = true;
|
||||||
|
|
||||||
config.set({
|
config.set({
|
||||||
// Frameworks to use
|
// Frameworks to use
|
||||||
frameworks: ['jasmine'],
|
frameworks: ['jasmine'],
|
||||||
|
|
||||||
// List of files / patterns to load in the browser
|
// List of files / patterns to load in the browser
|
||||||
files: bowerDep.concat(applicationConfiguration.assets.js, applicationConfiguration.assets.unit_tests, applicationConfiguration.assets.views),
|
files: bowerDep.concat(['public/lib/socket.io-client/dist/socket.io.js'], applicationConfiguration.assets.js, applicationConfiguration.assets.unit_tests, applicationConfiguration.assets.views),
|
||||||
|
|
||||||
// Test results reporter to use
|
// Test results reporter to use
|
||||||
// Possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
|
// Possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
|
||||||
reporters: ['mocha', 'html', 'progress'],
|
reporters: ['mocha', 'html', 'progress', 'coverage'],
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
'public/modules/*/views/**/**.html': ['ng-html2js'],
|
'public/modules/*/views/**/**.html': ['ng-html2js'],
|
||||||
'public/modules/*/views/*.html': ['ng-html2js'],
|
'public/modules/*/views/*.html': ['ng-html2js']
|
||||||
//'public/modules/*/*.js': ['coverage'],
|
//'public/modules/*/*.js': ['coverage'],
|
||||||
//'public/modules/*/*[!tests]*/*.js': ['coverage'],
|
//'public/modules/*/*[!tests]*/*.js': ['coverage'],
|
||||||
},
|
},
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
var ApplicationConfiguration = (function() {
|
var ApplicationConfiguration = (function() {
|
||||||
// Init module configuration options
|
// Init module configuration options
|
||||||
var applicationModuleName = 'NodeForm';
|
var applicationModuleName = 'NodeForm';
|
||||||
var applicationModuleVendorDependencies = ['duScroll', 'ui.select', 'cgBusy', 'ngSanitize', 'vButton', 'ngResource', 'NodeForm.templates', 'ui.router', 'ui.bootstrap', 'ui.utils', 'pascalprecht.translate'];
|
var applicationModuleVendorDependencies = ['duScroll', 'ui.select', 'cgBusy', 'ngSanitize', 'vButton', 'ngResource', 'TellForm.templates', 'ui.router', 'ui.bootstrap', 'ui.utils', 'pascalprecht.translate'];
|
||||||
|
|
||||||
// Add a new vertical module
|
// Add a new vertical module
|
||||||
var registerModule = function(moduleName, dependencies) {
|
var registerModule = function(moduleName, dependencies) {
|
||||||
|
|
93
public/dist/application.js
vendored
93
public/dist/application.js
vendored
|
@ -4,7 +4,7 @@
|
||||||
var ApplicationConfiguration = (function() {
|
var ApplicationConfiguration = (function() {
|
||||||
// Init module configuration options
|
// Init module configuration options
|
||||||
var applicationModuleName = 'NodeForm';
|
var applicationModuleName = 'NodeForm';
|
||||||
var applicationModuleVendorDependencies = ['duScroll', 'ui.select', 'cgBusy', 'ngSanitize', 'vButton', 'ngResource', 'NodeForm.templates', 'ui.router', 'ui.bootstrap', 'ui.utils', 'pascalprecht.translate'];
|
var applicationModuleVendorDependencies = ['duScroll', 'ui.select', 'cgBusy', 'ngSanitize', 'vButton', 'ngResource', 'TellForm.templates', 'ui.router', 'ui.bootstrap', 'ui.utils', 'pascalprecht.translate'];
|
||||||
|
|
||||||
// Add a new vertical module
|
// Add a new vertical module
|
||||||
var registerModule = function(moduleName, dependencies) {
|
var registerModule = function(moduleName, dependencies) {
|
||||||
|
@ -61,7 +61,7 @@ angular.element(document).ready(function() {
|
||||||
angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]);
|
angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]);
|
||||||
});
|
});
|
||||||
|
|
||||||
angular.module('NodeForm.templates', []).run(['$templateCache', function($templateCache) {
|
angular.module('TellForm.templates', []).run(['$templateCache', function($templateCache) {
|
||||||
"use strict";
|
"use strict";
|
||||||
$templateCache.put("modules/core/views/header.client.view.html",
|
$templateCache.put("modules/core/views/header.client.view.html",
|
||||||
"<section class=\"navbar navbar-inverse\" data-ng-controller=HeaderController ng-hide=hideNav><div class=container><div class=navbar-header><button class=navbar-toggle type=button data-ng-click=toggleCollapsibleMenu()><span class=sr-only>Toggle navigation</span> <span>{{ 'MENU_BTN' | translate }}</span></button> <a href=\"/#!/\" class=navbar-brand><img src=/static/modules/core/img/logo_white.svg height=100%></a></div><nav class=\"collapse navbar-collapse\" collapse=!isCollapsed role=navigation><ul class=\"nav navbar-nav navbar-right\" data-ng-hide=authentication.isAuthenticated()><li ng-hide=$root.signupDisabled ui-route=/signup ng-class=\"{active: $uiRoute}\"><a href=/#!/signup>{{ 'SIGNUP_TAB' | translate }}</a></li><li class=divider-vertical></li><li ui-route=/signin ng-class=\"{active: $uiRoute}\"><a href=/#!/signin>{{ 'SIGNIN_TAB' | translate }}</a></li></ul><ul class=\"nav navbar-nav navbar-right\" data-ng-show=authentication.isAuthenticated()><li class=dropdown uib-dropdown><a href=# class=dropdown-toggle data-toggle=dropdown dropdown-toggle><span>{{ 'MY_SETTINGS' | translate }}</span> <b class=caret></b></a><ul class=dropdown-menu><li><a href=/#!/settings/profile>{{ 'EDIT_PROFILE' | translate }}</a></li><li class=divider></li><li><a href=/#!/settings/password>{{ 'CHANGE_PASSWORD' | translate }}</a></li></ul></li><li><a href=\"/\" ng-click=signout()>{{ 'SIGNOUT_TAB' | translate }}</a></li></ul></nav></div></section>");
|
"<section class=\"navbar navbar-inverse\" data-ng-controller=HeaderController ng-hide=hideNav><div class=container><div class=navbar-header><button class=navbar-toggle type=button data-ng-click=toggleCollapsibleMenu()><span class=sr-only>Toggle navigation</span> <span>{{ 'MENU_BTN' | translate }}</span></button> <a href=\"/#!/\" class=navbar-brand><img src=/static/modules/core/img/logo_white.svg height=100%></a></div><nav class=\"collapse navbar-collapse\" collapse=!isCollapsed role=navigation><ul class=\"nav navbar-nav navbar-right\" data-ng-hide=authentication.isAuthenticated()><li ng-hide=$root.signupDisabled ui-route=/signup ng-class=\"{active: $uiRoute}\"><a href=/#!/signup>{{ 'SIGNUP_TAB' | translate }}</a></li><li class=divider-vertical></li><li ui-route=/signin ng-class=\"{active: $uiRoute}\"><a href=/#!/signin>{{ 'SIGNIN_TAB' | translate }}</a></li></ul><ul class=\"nav navbar-nav navbar-right\" data-ng-show=authentication.isAuthenticated()><li class=dropdown uib-dropdown><a href=# class=dropdown-toggle data-toggle=dropdown dropdown-toggle><span>{{ 'MY_SETTINGS' | translate }}</span> <b class=caret></b></a><ul class=dropdown-menu><li><a href=/#!/settings/profile>{{ 'EDIT_PROFILE' | translate }}</a></li><li class=divider></li><li><a href=/#!/settings/password>{{ 'CHANGE_PASSWORD' | translate }}</a></li></ul></li><li><a href=\"/\" ng-click=signout()>{{ 'SIGNOUT_TAB' | translate }}</a></li></ul></nav></div></section>");
|
||||||
|
@ -130,7 +130,7 @@ angular.module('NodeForm.templates', []).run(['$templateCache', function($templa
|
||||||
$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",
|
$templateCache.put("modules/forms/admin/views/directiveViews/cgBusy/update-form-message-TypeB.html",
|
||||||
"<div><div style=\"text-align: center; font-size: 20px;position: fixed; bottom: 0; right: 55px; background-color: gray; color: white; padding: 5px 15px 5px 10px; z-index: 10\">{{$message}}</div></div>");
|
"<div><div style=\"text-align: center; font-size: 20px;position: fixed; bottom: 0; right: 55px; background-color: gray; color: white; padding: 5px 15px 5px 10px; z-index: 10\">{{$message}}</div></div>");
|
||||||
$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",
|
$templateCache.put("modules/forms/admin/views/directiveViews/form/configure-form.client.view.html",
|
||||||
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> <span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>Display Custom Start Page?</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.endPage.showEnd ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.endPage.showEnd ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, myform, false, false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
|
"<div class=\"config-form container\"><div class=row><div class=\"col-sm-offset-2 col-sm-4\"><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_NAME' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.title value={{myform.title}} style=\"width: 100%\" ng-minlength=4 ng-pattern=\"/^[a-zA-Z0-9 \\-.]*$/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'FORM_STATUS' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.isLive ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'PUBLIC' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.isLive ng-required=\"true\"> <span>{{ 'PRIVATE' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"col-sm-12 field-title\">Language</div><div class=\"col-sm-12 field-input\"><select ng-model=myform.language><option ng-repeat=\"language in languages\" ng-selected=\"language == myform.language\" value={{language}}>{{language}}</option></select><span class=required-error ng-show=\"field.required && !field.fieldValue\">* required</span></div></div></div><div class=col-sm-4><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'GA_TRACKING_CODE' | translate }}</h5></div><div class=col-sm-12><input class=form-control ng-model=myform.analytics.gaCode value={{myform.analytics.gaCode}} style=\"width: 100%\" ng-minlength=4 placeholder=UA-XXXXX-Y ng-pattern=\"/\\bUA-\\d{4,10}-\\d{1,4}\\b/\"></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_FOOTER' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.hideFooter ng-required=\"true\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.hideFooter ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_START_PAGE' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.startPage.showStart ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.startPage.showStart ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div><div class=\"row field\"><div class=\"field-title col-sm-12\"><h5>{{ 'DISPLAY_END_PAGE' | translate }}</h5></div><div class=\"field-input col-sm-12\"><label style=\"display: inline-block\"><input type=radio data-ng-value=true ng-model=myform.endPage.showEnd ng-required=true style=\"background-color:#33CC00\"> <span>{{ 'YES' | translate }}</span></label><label style=\"display: inline-block\"><input type=radio data-ng-value=false ng-model=myform.endPage.showEnd ng-required=\"true\"> <span>{{ 'NO' | translate }}</span></label></div></div></div></div><div class=row><div class=\"col-sm-offset-4 col-sm-2\"><button class=\"btn btn-signup btn-rounded\" type=button ng-click=\"update(false, myform, false, false, null)\"><i class=\"icon-arrow-left icon-white\"></i>{{ 'SAVE_CHANGES' | translate }}</button></div><div class=col-sm-1><button class=\"btn btn-secondary btn-rounded\" type=button ng-click=resetForm()><i class=\"icon-eye-open icon-white\"></i>{{ 'CANCEL' | translate }}</button></div></div></div>");
|
||||||
$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",
|
$templateCache.put("modules/forms/admin/views/directiveViews/form/edit-form.client.view.html",
|
||||||
"<form class=\"row container\" name=editForm><script type=text/ng-template id=editEndPageModal.html class=edit-endpage-modal><div class=\"modal-body\">\n" +
|
"<form class=\"row container\" name=editForm><script type=text/ng-template id=editEndPageModal.html class=edit-endpage-modal><div class=\"modal-body\">\n" +
|
||||||
" <div class=\"row\">\n" +
|
" <div class=\"row\">\n" +
|
||||||
|
@ -2082,10 +2082,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
login: function(credentials) {
|
login: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/signin', credentials).success(function(response) {
|
$http.post('/auth/signin', credentials).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2093,10 +2093,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
logout: function() {
|
logout: function() {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/signout').success(function(response) {
|
$http.get('/auth/signout').then(function(response) {
|
||||||
deferred.resolve(null);
|
deferred.resolve(null);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2104,11 +2104,11 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
signup: function(credentials) {
|
signup: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/signup', credentials).success(function(response) {
|
$http.post('/auth/signup', credentials).then(function(response) {
|
||||||
// If successful we assign the response to the global user model
|
// If successful we assign the response to the global user model
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2117,10 +2117,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
resendVerifyEmail: function(_email) {
|
resendVerifyEmail: function(_email) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/verify', {email: _email}).success(function(response) {
|
$http.post('/auth/verify', {email: _email}).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2134,10 +2134,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
if( !validTokenRe.test(token) ) throw new Error('Error token: '+token+' is not a valid verification token');
|
if( !validTokenRe.test(token) ) throw new Error('Error token: '+token+' is not a valid verification token');
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/verify/'+token).success(function(response) {
|
$http.get('/auth/verify/'+token).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error);
|
deferred.reject(error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2146,10 +2146,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
resetPassword: function(passwordDetails, token) {
|
resetPassword: function(passwordDetails, token) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/password/'+token, passwordDetails).success(function(response) {
|
$http.get('/auth/password/'+token, passwordDetails).then(function(response) {
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2159,12 +2159,12 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
askForPasswordReset: function(credentials) {
|
askForPasswordReset: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/forgot', credentials).success(function(response) {
|
$http.post('/auth/forgot', credentials).then(function(response) {
|
||||||
// Show user success message and clear form
|
// Show user success message and clear form
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
// Show user error message
|
// Show user error message
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -2323,12 +2323,12 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
|
||||||
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
|
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
|
||||||
|
|
||||||
$http.delete('/forms/'+form_id)
|
$http.delete('/forms/'+form_id)
|
||||||
.success(function(data, status, headers){
|
.then(function(response){
|
||||||
console.log('form deleted successfully');
|
console.log('form deleted successfully');
|
||||||
|
|
||||||
$state.go('listForms', {}, {reload: true});
|
$state.go('listForms', {}, {reload: true});
|
||||||
|
|
||||||
}).error(function(error){
|
}, function(error){
|
||||||
console.log('ERROR: Form could not be deleted.');
|
console.log('ERROR: Form could not be deleted.');
|
||||||
console.error(error);
|
console.error(error);
|
||||||
});
|
});
|
||||||
|
@ -2374,8 +2374,12 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var dataToSend = data;
|
var dataToSend = data;
|
||||||
delete dataToSend.analytics.visitors;
|
if(dataToSend.analytics && dataToSend.analytics.visitors){
|
||||||
delete dataToSend.submissions;
|
delete dataToSend.analytics.visitors;
|
||||||
|
}
|
||||||
|
if(dataToSend.submissions){
|
||||||
|
delete dataToSend.submissions;
|
||||||
|
}
|
||||||
|
|
||||||
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
|
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
|
@ -2985,9 +2989,9 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var newField = {
|
var newField = {
|
||||||
title: fieldTitle + ' ' + $scope.myform.form_fields.length+1,
|
title: fieldTitle,
|
||||||
fieldType: fieldType,
|
fieldType: fieldType,
|
||||||
fieldValue: '0',
|
fieldValue: '',
|
||||||
required: true,
|
required: true,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
deletePreserved: false,
|
deletePreserved: false,
|
||||||
|
@ -2998,7 +3002,8 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
newField.ratingOptions = {
|
newField.ratingOptions = {
|
||||||
steps: 1,
|
steps: 1,
|
||||||
shape: 'Heart'
|
shape: 'Heart'
|
||||||
}
|
};
|
||||||
|
newField.fieldValue = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if($scope.showAddOptions(newField)){
|
if($scope.showAddOptions(newField)){
|
||||||
|
@ -3042,7 +3047,7 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
$scope.update(false, $scope.myform, false, true, null);
|
$scope.update(false, $scope.myform, false, true, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.duplicateField = function (field_index){
|
$scope.duplicateField = function(field_index){
|
||||||
var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
|
var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
|
||||||
currField._id = 'cloned'+_.uniqueId();
|
currField._id = 'cloned'+_.uniqueId();
|
||||||
currField.title += ' copy';
|
currField.title += ' copy';
|
||||||
|
@ -3791,10 +3796,10 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
if (document.querySelectorAll('.activeField .focusOn')[0]) {
|
if (document.querySelectorAll('.activeField .focusOn')[0] !== undefined) {
|
||||||
//FIXME: DAVID: Figure out how to set focus without scroll movement in HTML Dom
|
//FIXME: DAVID: Figure out how to set focus without scroll movement in HTML Dom
|
||||||
document.querySelectorAll('.activeField .focusOn')[0].focus();
|
document.querySelectorAll('.activeField .focusOn')[0].focus();
|
||||||
} else {
|
} else if(document.querySelectorAll('.activeField input')[0] !== undefined) {
|
||||||
document.querySelectorAll('.activeField input')[0].focus();
|
document.querySelectorAll('.activeField input')[0].focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -3842,7 +3847,7 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
|
document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
$rootScope.submitForm = $scope.submitForm = function() {
|
$rootScope.submitForm = $scope.submitForm = function(cb) {
|
||||||
|
|
||||||
var _timeElapsed = TimeCounter.stopClock();
|
var _timeElapsed = TimeCounter.stopClock();
|
||||||
$scope.loading = true;
|
$scope.loading = true;
|
||||||
|
@ -3863,14 +3868,22 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$scope.submitPromise = $http.post('/forms/' + $scope.myform._id, form)
|
$scope.submitPromise = $http.post('/forms/' + $scope.myform._id, form)
|
||||||
.success(function (data, status, headers) {
|
.success(function (data, status, headers) {
|
||||||
|
console.log('\n\n\n\n\nSUBMITTING PROMISE');
|
||||||
|
console.log(data);
|
||||||
$scope.myform.submitted = true;
|
$scope.myform.submitted = true;
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
SendVisitorData.send($scope.myform, getActiveField(), _timeElapsed);
|
SendVisitorData.send($scope.myform, getActiveField(), _timeElapsed);
|
||||||
|
if(cb){
|
||||||
|
cb();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.error(function (error) {
|
.error(function (error) {
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
console.error(error);
|
console.error(error);
|
||||||
$scope.error = error.message;
|
$scope.error = error.message;
|
||||||
|
if(cb){
|
||||||
|
cb(error);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
};
|
};
|
||||||
|
|
6
public/dist/application.min.js
vendored
6
public/dist/application.min.js
vendored
File diff suppressed because one or more lines are too long
655
public/dist/form-application.js
vendored
655
public/dist/form-application.js
vendored
File diff suppressed because one or more lines are too long
5
public/dist/form-application.min.js
vendored
5
public/dist/form-application.min.js
vendored
File diff suppressed because one or more lines are too long
38
public/form-application.js
Normal file
38
public/form-application.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
//Start by defining the main module and adding the module dependencies
|
||||||
|
angular.module(ApplicationConfiguration.applicationModuleName, ApplicationConfiguration.applicationModuleVendorDependencies);
|
||||||
|
|
||||||
|
// Setting HTML5 Location Mode
|
||||||
|
angular.module(ApplicationConfiguration.applicationModuleName).config(['$locationProvider',
|
||||||
|
function($locationProvider) {
|
||||||
|
$locationProvider.hashPrefix('!');
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Permission Constants
|
||||||
|
angular.module(ApplicationConfiguration.applicationModuleName).constant('APP_PERMISSIONS', {
|
||||||
|
viewAdminSettings: 'viewAdminSettings',
|
||||||
|
editAdminSettings: 'editAdminSettings',
|
||||||
|
editForm: 'editForm',
|
||||||
|
viewPrivateForm: 'viewPrivateForm'
|
||||||
|
});
|
||||||
|
|
||||||
|
//User Role constants
|
||||||
|
angular.module(ApplicationConfiguration.applicationModuleName).constant('USER_ROLES', {
|
||||||
|
admin: 'admin',
|
||||||
|
normal: 'user',
|
||||||
|
superuser: 'superuser'
|
||||||
|
});
|
||||||
|
|
||||||
|
//form url
|
||||||
|
angular.module(ApplicationConfiguration.applicationModuleName).constant('FORM_URL', '/forms/:formId');
|
||||||
|
|
||||||
|
//Then define the init function for starting up the application
|
||||||
|
angular.element(document).ready(function() {
|
||||||
|
//Fixing facebook bug with redirect
|
||||||
|
if (window.location.hash === '#_=_') window.location.hash = '#!';
|
||||||
|
|
||||||
|
//Then init the app
|
||||||
|
angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]);
|
||||||
|
});
|
23
public/form-config.js
Normal file
23
public/form-config.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Init the application configuration module for AngularJS application
|
||||||
|
var ApplicationConfiguration = (function() {
|
||||||
|
// Init module configuration options
|
||||||
|
var applicationModuleName = 'TellForm';
|
||||||
|
var applicationModuleVendorDependencies = ['duScroll', 'ui.select', 'ngSanitize', 'vButton', 'ngResource', 'TellForm.form_templates', 'ui.router', 'ui.bootstrap', 'ui.utils', 'pascalprecht.translate'];
|
||||||
|
|
||||||
|
// Add a new vertical module
|
||||||
|
var registerModule = function(moduleName, dependencies) {
|
||||||
|
// Create angular module
|
||||||
|
angular.module(moduleName, dependencies || []);
|
||||||
|
|
||||||
|
// Add the module to the AngularJS configuration file
|
||||||
|
angular.module(applicationModuleName).requires.push(moduleName);
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
applicationModuleName: applicationModuleName,
|
||||||
|
applicationModuleVendorDependencies: applicationModuleVendorDependencies,
|
||||||
|
registerModule: registerModule
|
||||||
|
};
|
||||||
|
})();
|
|
@ -17,7 +17,17 @@
|
||||||
socket: null
|
socket: null
|
||||||
};
|
};
|
||||||
|
|
||||||
connect(window.location.protocol+'//'+window.location.hostname + ':' + $window.socketPort);
|
var url = '';
|
||||||
|
if($window.socketPort && $window.socketUrl){
|
||||||
|
url = $window.socketUrl + ':' + $window.socketPort;
|
||||||
|
} else if ($window.socketUrl && !$window.socketUrl){
|
||||||
|
url = $window.socketUrl;
|
||||||
|
} else if ($window.socketPort){
|
||||||
|
url = window.location.protocol+'//'+window.location.hostname + ':' + $window.socketPort;
|
||||||
|
} else {
|
||||||
|
url = window.location.protocol+'//'+window.location.hostname;
|
||||||
|
}
|
||||||
|
connect(url);
|
||||||
|
|
||||||
return service;
|
return service;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,14 @@
|
||||||
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
|
var geoData = $.getJSON('https://freegeoip.net/json/').responseJSON;
|
||||||
$.ajaxSetup( { "async": true } );
|
$.ajaxSetup( { "async": true } );
|
||||||
|
|
||||||
|
if(!geoData){
|
||||||
|
geoData = {
|
||||||
|
ip: '',
|
||||||
|
city: '',
|
||||||
|
country_name: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new message object
|
// Create a new message object
|
||||||
var visitorData = {
|
var visitorData = {
|
||||||
referrer: document.referrer,
|
referrer: document.referrer,
|
||||||
|
|
|
@ -95,12 +95,12 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
|
||||||
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
|
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
|
||||||
|
|
||||||
$http.delete('/forms/'+form_id)
|
$http.delete('/forms/'+form_id)
|
||||||
.success(function(data, status, headers){
|
.then(function(response){
|
||||||
console.log('form deleted successfully');
|
console.log('form deleted successfully');
|
||||||
|
|
||||||
$state.go('listForms', {}, {reload: true});
|
$state.go('listForms', {}, {reload: true});
|
||||||
|
|
||||||
}).error(function(error){
|
}, function(error){
|
||||||
console.log('ERROR: Form could not be deleted.');
|
console.log('ERROR: Form could not be deleted.');
|
||||||
console.error(error);
|
console.error(error);
|
||||||
});
|
});
|
||||||
|
@ -146,8 +146,12 @@ angular.module('forms').controller('AdminFormController', ['$rootScope', '$scope
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var dataToSend = data;
|
var dataToSend = data;
|
||||||
delete dataToSend.analytics.visitors;
|
if(dataToSend.analytics && dataToSend.analytics.visitors){
|
||||||
delete dataToSend.submissions;
|
delete dataToSend.analytics.visitors;
|
||||||
|
}
|
||||||
|
if(dataToSend.submissions){
|
||||||
|
delete dataToSend.submissions;
|
||||||
|
}
|
||||||
|
|
||||||
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
|
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
|
|
|
@ -283,9 +283,9 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var newField = {
|
var newField = {
|
||||||
title: fieldTitle + ' ' + $scope.myform.form_fields.length+1,
|
title: fieldTitle,
|
||||||
fieldType: fieldType,
|
fieldType: fieldType,
|
||||||
fieldValue: '0',
|
fieldValue: '',
|
||||||
required: true,
|
required: true,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
deletePreserved: false,
|
deletePreserved: false,
|
||||||
|
@ -296,7 +296,8 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
newField.ratingOptions = {
|
newField.ratingOptions = {
|
||||||
steps: 1,
|
steps: 1,
|
||||||
shape: 'Heart'
|
shape: 'Heart'
|
||||||
}
|
};
|
||||||
|
newField.fieldValue = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if($scope.showAddOptions(newField)){
|
if($scope.showAddOptions(newField)){
|
||||||
|
@ -340,7 +341,7 @@ angular.module('forms').directive('editFormDirective', ['$rootScope', 'FormField
|
||||||
$scope.update(false, $scope.myform, false, true, null);
|
$scope.update(false, $scope.myform, false, true, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.duplicateField = function (field_index){
|
$scope.duplicateField = function(field_index){
|
||||||
var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
|
var currField = _.cloneDeep($scope.myform.form_fields[field_index]);
|
||||||
currField._id = 'cloned'+_.uniqueId();
|
currField._id = 'cloned'+_.uniqueId();
|
||||||
currField.title += ' copy';
|
currField.title += ' copy';
|
||||||
|
|
|
@ -147,10 +147,10 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
if (document.querySelectorAll('.activeField .focusOn')[0]) {
|
if (document.querySelectorAll('.activeField .focusOn')[0] !== undefined) {
|
||||||
//FIXME: DAVID: Figure out how to set focus without scroll movement in HTML Dom
|
//FIXME: DAVID: Figure out how to set focus without scroll movement in HTML Dom
|
||||||
document.querySelectorAll('.activeField .focusOn')[0].focus();
|
document.querySelectorAll('.activeField .focusOn')[0].focus();
|
||||||
} else {
|
} else if(document.querySelectorAll('.activeField input')[0] !== undefined) {
|
||||||
document.querySelectorAll('.activeField input')[0].focus();
|
document.querySelectorAll('.activeField input')[0].focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -198,7 +198,7 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
|
document.querySelectorAll('.ng-invalid.focusOn')[0].focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
$rootScope.submitForm = $scope.submitForm = function() {
|
$rootScope.submitForm = $scope.submitForm = function(cb) {
|
||||||
|
|
||||||
var _timeElapsed = TimeCounter.stopClock();
|
var _timeElapsed = TimeCounter.stopClock();
|
||||||
$scope.loading = true;
|
$scope.loading = true;
|
||||||
|
@ -219,14 +219,22 @@ angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter'
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$scope.submitPromise = $http.post('/forms/' + $scope.myform._id, form)
|
$scope.submitPromise = $http.post('/forms/' + $scope.myform._id, form)
|
||||||
.success(function (data, status, headers) {
|
.success(function (data, status, headers) {
|
||||||
|
console.log('\n\n\n\n\nSUBMITTING PROMISE');
|
||||||
|
console.log(data);
|
||||||
$scope.myform.submitted = true;
|
$scope.myform.submitted = true;
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
SendVisitorData.send($scope.myform, getActiveField(), _timeElapsed);
|
SendVisitorData.send($scope.myform, getActiveField(), _timeElapsed);
|
||||||
|
if(cb){
|
||||||
|
cb();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.error(function (error) {
|
.error(function (error) {
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
console.error(error);
|
console.error(error);
|
||||||
$scope.error = error.message;
|
$scope.error = error.message;
|
||||||
|
if(cb){
|
||||||
|
cb(error);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,7 +19,7 @@ module.exports = function(grunt) {
|
||||||
html2js: {
|
html2js: {
|
||||||
options: {
|
options: {
|
||||||
base: '',
|
base: '',
|
||||||
module: 'NodeForm.templates',
|
module: 'TellForm.templates',
|
||||||
singleModule: true,
|
singleModule: true,
|
||||||
rename: function (moduleName) {
|
rename: function (moduleName) {
|
||||||
return 'modules/forms/base/' + moduleName;
|
return 'modules/forms/base/' + moduleName;
|
||||||
|
|
|
@ -32,7 +32,12 @@
|
||||||
{fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false, _id:'5c9e22028e907634f45f59a6'},
|
{fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false, _id:'5c9e22028e907634f45f59a6'},
|
||||||
{fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false, _id:'56e90745f5934fc9e22028a6'}
|
{fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false, _id:'56e90745f5934fc9e22028a6'}
|
||||||
],
|
],
|
||||||
_id: '525a8422f6d0f87f0e407a33'
|
analytics: {
|
||||||
|
visitors: []
|
||||||
|
},
|
||||||
|
submissions: [],
|
||||||
|
_id: '525a8422f6d0f87f0e407a33',
|
||||||
|
id: '525a8422f6d0f87f0e407a33'
|
||||||
};
|
};
|
||||||
|
|
||||||
var expectedForm = {
|
var expectedForm = {
|
||||||
|
@ -75,7 +80,7 @@
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Mock Users Service
|
//Mock Users Service
|
||||||
beforeEach(module(function($provide) {
|
beforeEach(module(function($provide) {
|
||||||
$provide.service('myForm', function($q) {
|
$provide.service('myForm', function($q) {
|
||||||
|
@ -207,7 +212,7 @@
|
||||||
it('$scope.removeCurrentForm() with valid form data should send a DELETE request with the id of form', function() {
|
it('$scope.removeCurrentForm() with valid form data should send a DELETE request with the id of form', function() {
|
||||||
var controller = createAdminFormController();
|
var controller = createAdminFormController();
|
||||||
|
|
||||||
//Set $state transition
|
//Set $state transition
|
||||||
$state.expectTransitionTo('listForms');
|
$state.expectTransitionTo('listForms');
|
||||||
|
|
||||||
// Set DELETE response
|
// Set DELETE response
|
||||||
|
@ -216,7 +221,7 @@
|
||||||
//Run controller functionality
|
//Run controller functionality
|
||||||
scope.openDeleteModal();
|
scope.openDeleteModal();
|
||||||
scope.removeCurrentForm();
|
scope.removeCurrentForm();
|
||||||
|
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
$state.ensureAllTransitionsHappened();
|
$state.ensureAllTransitionsHappened();
|
||||||
});
|
});
|
||||||
|
@ -228,7 +233,7 @@
|
||||||
$httpBackend.expect('PUT', /^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
|
$httpBackend.expect('PUT', /^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
|
||||||
|
|
||||||
//Run controller functionality
|
//Run controller functionality
|
||||||
scope.update(false, null);
|
scope.update(false, sampleForm, false, false);
|
||||||
|
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
});
|
});
|
||||||
|
@ -253,4 +258,4 @@
|
||||||
expect( scope.deleteModal.opened ).toEqual(false);
|
expect( scope.deleteModal.opened ).toEqual(false);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -17,19 +17,6 @@
|
||||||
_id: 'ed873933b1f1dea0ce12fab9'
|
_id: 'ed873933b1f1dea0ce12fab9'
|
||||||
};
|
};
|
||||||
|
|
||||||
var pdfObj = {
|
|
||||||
fieldname:'file',
|
|
||||||
originalname:'test.pdf',
|
|
||||||
name:'1440112660375.pdf',
|
|
||||||
encoding:'7bit',
|
|
||||||
mimetype:'application/pdf',
|
|
||||||
path:'uploads/tmp/test@test.com/1440112660375.pdf',
|
|
||||||
extension:'pdf',
|
|
||||||
size:56223,
|
|
||||||
truncated:false,
|
|
||||||
buffer:null
|
|
||||||
};
|
|
||||||
|
|
||||||
var sampleForm = {
|
var sampleForm = {
|
||||||
title: 'Form Title',
|
title: 'Form Title',
|
||||||
admin: 'ed873933b1f1dea0ce12fab9',
|
admin: 'ed873933b1f1dea0ce12fab9',
|
||||||
|
@ -100,36 +87,5 @@
|
||||||
scope = el.isolateScope() || el.scope();
|
scope = el.isolateScope() || el.scope();
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('$scope.uploadPDF() should upload a pdf file', function() {
|
|
||||||
// expect(scope.isInitialized).toBeDefined()
|
|
||||||
// expect(scope.log).toEqual('');
|
|
||||||
|
|
||||||
expect(scope.pdfLoading).toBe(false);
|
|
||||||
|
|
||||||
//Set POST response
|
|
||||||
$httpBackend.when('POST', '/upload/pdf').respond(pdfObj);
|
|
||||||
|
|
||||||
var files = [{}];
|
|
||||||
scope.uploadPDF(files);
|
|
||||||
|
|
||||||
$httpBackend.flush();
|
|
||||||
expect(scope.myform.pdf).toEqualData(pdfObj);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('$scope.removePDF() should removed uploaded pdf file', function() {
|
|
||||||
// expect(scope.isInitialized).toBeDefined()
|
|
||||||
// expect(scope.log).toEqual('');
|
|
||||||
|
|
||||||
scope.myform.pdf = pdfObj;
|
|
||||||
scope.myform.isGenerated = true;
|
|
||||||
scope.myform.autofillPDFs = true;
|
|
||||||
|
|
||||||
scope.removePDF();
|
|
||||||
|
|
||||||
expect(scope.myform.pdf).toEqual(null);
|
|
||||||
expect(scope.myform.isGenerated).toBe(false);
|
|
||||||
expect(scope.myform.autofillPDFs).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -17,19 +17,6 @@
|
||||||
_id: 'ed873933b1f1dea0ce12fab9'
|
_id: 'ed873933b1f1dea0ce12fab9'
|
||||||
};
|
};
|
||||||
|
|
||||||
var pdfObj = {
|
|
||||||
fieldname:'file',
|
|
||||||
originalname:'test.pdf',
|
|
||||||
name:'1440112660375.pdf',
|
|
||||||
encoding:'7bit',
|
|
||||||
mimetype:'application/pdf',
|
|
||||||
path:'uploads/tmp/test@test.com/1440112660375.pdf',
|
|
||||||
extension:'pdf',
|
|
||||||
size:56223,
|
|
||||||
truncated:false,
|
|
||||||
buffer:null
|
|
||||||
};
|
|
||||||
|
|
||||||
var sampleForm = {
|
var sampleForm = {
|
||||||
title: 'Form Title',
|
title: 'Form Title',
|
||||||
admin: 'ed873933b1f1dea0ce12fab9',
|
admin: 'ed873933b1f1dea0ce12fab9',
|
||||||
|
@ -39,15 +26,19 @@
|
||||||
{fieldType:'checkbox', title:'nascar', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
|
{fieldType:'checkbox', title:'nascar', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
|
||||||
{fieldType:'checkbox', title:'hockey', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'}
|
{fieldType:'checkbox', title:'hockey', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'}
|
||||||
],
|
],
|
||||||
pdf: {},
|
analytics: {
|
||||||
pdfFieldMap: {},
|
visitors: []
|
||||||
|
},
|
||||||
|
submissions: [],
|
||||||
startPage: {
|
startPage: {
|
||||||
showStart: false
|
showStart: false
|
||||||
},
|
},
|
||||||
|
endPage: {
|
||||||
|
showEnd: false
|
||||||
|
},
|
||||||
hideFooter: false,
|
hideFooter: false,
|
||||||
isGenerated: false,
|
isGenerated: false,
|
||||||
isLive: false,
|
isLive: false,
|
||||||
autofillPDFs: false,
|
|
||||||
_id: '525a8422f6d0f87f0e407a33'
|
_id: '525a8422f6d0f87f0e407a33'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,12 +113,15 @@
|
||||||
// Point global variables to injected services
|
// Point global variables to injected services
|
||||||
$httpBackend = _$httpBackend_;
|
$httpBackend = _$httpBackend_;
|
||||||
|
|
||||||
|
sampleForm.submissions = sampleSubmissions;
|
||||||
$httpBackend.whenGET('/users/me/').respond('');
|
$httpBackend.whenGET('/users/me/').respond('');
|
||||||
$httpBackend.whenGET(/^(\/forms\/)([0-9a-fA-F]{24})(\/submissions)$/).respond(200, sampleSubmissions);
|
$httpBackend.whenGET(/^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
|
||||||
|
$httpBackend.whenGET('/forms').respond(200, sampleForm);
|
||||||
//Instantiate directive.
|
$httpBackend.whenGET(/^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
|
||||||
|
//Instantiate directive.
|
||||||
var tmp_scope = $rootScope.$new();
|
var tmp_scope = $rootScope.$new();
|
||||||
tmp_scope.myform = sampleForm;
|
tmp_scope.myform = sampleForm;
|
||||||
|
tmp_scope.myform.submissions = sampleSubmissions;
|
||||||
tmp_scope.user = sampleUser;
|
tmp_scope.user = sampleUser;
|
||||||
|
|
||||||
//gotacha: Controller and link functions will execute.
|
//gotacha: Controller and link functions will execute.
|
||||||
|
@ -143,17 +137,9 @@
|
||||||
scope = el.isolateScope() || el.scope();
|
scope = el.isolateScope() || el.scope();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('$scope.initFormSubmissions() should fetch all relevant form submissions', function() {
|
|
||||||
$httpBackend.expectGET(/^(\/forms\/)([0-9a-fA-F]{24})(\/submissions)$/).respond(200, sampleSubmissions);
|
|
||||||
scope.initFormSubmissions();
|
|
||||||
$httpBackend.flush();
|
|
||||||
scope.$digest();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Form Table Methods', function(){
|
describe('Form Table Methods', function(){
|
||||||
|
|
||||||
it('$scope.toggleAllCheckers should toggle all checkboxes in table', function(){
|
it('$scope.toggleAllCheckers should toggle all checkboxes in table', function(){
|
||||||
scope.initFormSubmissions();
|
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
//Run Controller Logic to Test
|
//Run Controller Logic to Test
|
||||||
|
@ -167,7 +153,6 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
it('$scope.isAtLeastOneChecked should return true when at least one checkbox is selected', function(){
|
it('$scope.isAtLeastOneChecked should return true when at least one checkbox is selected', function(){
|
||||||
scope.initFormSubmissions();
|
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
scope.table.masterChecker = true;
|
scope.table.masterChecker = true;
|
||||||
|
@ -180,7 +165,6 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
it('$scope.deleteSelectedSubmissions should delete all submissions that are selected', function(){
|
it('$scope.deleteSelectedSubmissions should delete all submissions that are selected', function(){
|
||||||
scope.initFormSubmissions();
|
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
scope.table.masterChecker = true;
|
scope.table.masterChecker = true;
|
||||||
|
|
|
@ -14,20 +14,7 @@
|
||||||
password: 'password',
|
password: 'password',
|
||||||
provider: 'local',
|
provider: 'local',
|
||||||
roles: ['user'],
|
roles: ['user'],
|
||||||
_id: 'ed873933b1f1dea0ce12fab9',
|
_id: 'ed873933b1f1dea0ce12fab9'
|
||||||
};
|
|
||||||
|
|
||||||
var pdfObj = {
|
|
||||||
fieldname:'file',
|
|
||||||
originalname:'test.pdf',
|
|
||||||
name:'1440112660375.pdf',
|
|
||||||
encoding:'7bit',
|
|
||||||
mimetype:'application/pdf',
|
|
||||||
path:'uploads/tmp/test@test.com/1440112660375.pdf',
|
|
||||||
extension:'pdf',
|
|
||||||
size:56223,
|
|
||||||
truncated:false,
|
|
||||||
buffer:null
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var sampleForm = {
|
var sampleForm = {
|
||||||
|
@ -43,13 +30,12 @@
|
||||||
pdfFieldMap: {},
|
pdfFieldMap: {},
|
||||||
startPage: {
|
startPage: {
|
||||||
showStart: false,
|
showStart: false,
|
||||||
buttons: [],
|
buttons: []
|
||||||
},
|
},
|
||||||
hideFooter: false,
|
hideFooter: false,
|
||||||
isGenerated: false,
|
isGenerated: false,
|
||||||
isLive: false,
|
isLive: false,
|
||||||
autofillPDFs: false,
|
_id: '525a8422f6d0f87f0e407a33'
|
||||||
_id: '525a8422f6d0f87f0e407a33',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// The $resource service augments the response object with methods for updating and deleting the resource.
|
// The $resource service augments the response object with methods for updating and deleting the resource.
|
||||||
|
@ -99,6 +85,12 @@
|
||||||
//See angular.element documentation.
|
//See angular.element documentation.
|
||||||
scope = el.isolateScope() || el.scope();
|
scope = el.isolateScope() || el.scope();
|
||||||
|
|
||||||
|
scope.update = function(updateImmediately, data, isDiffed, refreshAfterUpdate, cb){
|
||||||
|
if(cb){
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
describe('> Form Field >',function(){
|
describe('> Form Field >',function(){
|
||||||
|
@ -113,15 +105,16 @@
|
||||||
scope.addNewField(true, 'textfield');
|
scope.addNewField(true, 'textfield');
|
||||||
|
|
||||||
var expectedFormField = {
|
var expectedFormField = {
|
||||||
title:'Short Text2',
|
title: 'Short Text2',
|
||||||
fieldType:'textfield',
|
fieldType: 'textfield',
|
||||||
fieldValue: '',
|
fieldValue: '',
|
||||||
required: true,
|
required: true,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
deletePreserved: false
|
deletePreserved: false,
|
||||||
};
|
logicJump: Object({ })
|
||||||
|
};
|
||||||
|
|
||||||
var actualFormField = _.cloneDeep(_.last(scope.myform.form_fields));
|
var actualFormField = _.cloneDeep(_.last(scope.myform.form_fields));
|
||||||
delete actualFormField._id;
|
delete actualFormField._id;
|
||||||
|
|
||||||
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
|
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
|
||||||
|
@ -129,16 +122,21 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
it('$scope.deleteField() should DELETE a field to $scope.myform.form_fields', function() {
|
it('$scope.deleteField() should DELETE a field to $scope.myform.form_fields', function() {
|
||||||
|
|
||||||
//Run controller methods
|
spyOn(scope, 'update');
|
||||||
|
|
||||||
|
//Run controller methods
|
||||||
scope.deleteField(0);
|
scope.deleteField(0);
|
||||||
|
|
||||||
|
expect(scope.update).toHaveBeenCalled();
|
||||||
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length-1);
|
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length-1);
|
||||||
expect(_.first(scope.myform.form_fields)).toEqualData(sampleForm.form_fields[1]);
|
expect(_.first(scope.myform.form_fields)).toEqualData(sampleForm.form_fields[1]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('$scope.duplicateField() should DUPLICATE a field and update $scope.myform.form_fields', function() {
|
it('$scope.duplicateField() should DUPLICATE a field and update $scope.myform.form_fields', function() {
|
||||||
|
|
||||||
|
spyOn(scope, 'update');
|
||||||
|
|
||||||
//Run controller methods
|
//Run controller methods
|
||||||
scope.duplicateField(0);
|
scope.duplicateField(0);
|
||||||
|
|
||||||
|
@ -149,19 +147,20 @@
|
||||||
var copyField = _.cloneDeep(scope.myform.form_fields[1]);
|
var copyField = _.cloneDeep(scope.myform.form_fields[1]);
|
||||||
delete copyField._id;
|
delete copyField._id;
|
||||||
|
|
||||||
|
expect(scope.update).toHaveBeenCalled();
|
||||||
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
|
expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
|
||||||
expect(originalField).toEqualData(copyField);
|
expect(originalField).toEqualData(copyField);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
/*
|
||||||
describe('> Form Field Button >',function(){
|
describe('> Form Field Button >',function(){
|
||||||
|
|
||||||
it('$scope.addButton() should ADD a button to $scope.myform.startPage.buttons', function() {
|
it('$scope.addButton() should ADD a button to $scope.myform.startPage.buttons', function() {
|
||||||
|
|
||||||
var expectedStartPageBtn = {
|
var expectedStartPageBtn = {
|
||||||
bgColor:'#ddd',
|
bgColor:'#ddd',
|
||||||
color:'#ffffff',
|
color:'#ffffff',
|
||||||
text: 'Button'
|
text: 'Button'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -177,7 +176,7 @@
|
||||||
it('$scope.deleteButton() should DELETE a button from $scope.myform.startPage.buttons', function() {
|
it('$scope.deleteButton() should DELETE a button from $scope.myform.startPage.buttons', function() {
|
||||||
//Run controller methods
|
//Run controller methods
|
||||||
scope.deleteButton(scope.myform.startPage.buttons[0]);
|
scope.deleteButton(scope.myform.startPage.buttons[0]);
|
||||||
|
|
||||||
expect(scope.myform.startPage.buttons.length).toEqual(0);
|
expect(scope.myform.startPage.buttons.length).toEqual(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -201,6 +200,6 @@
|
||||||
expect(scope.myform.form_fields[0].fieldOptions.length).toEqual(0);
|
expect(scope.myform.form_fields[0].fieldOptions.length).toEqual(0);
|
||||||
expect(scope.myform.form_fields[0].fieldOptions[0]).not.toBeDefined();
|
expect(scope.myform.form_fields[0].fieldOptions[0]).not.toBeDefined();
|
||||||
});
|
});
|
||||||
});
|
});*/
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
password: 'password',
|
password: 'password',
|
||||||
provider: 'local',
|
provider: 'local',
|
||||||
roles: ['user'],
|
roles: ['user'],
|
||||||
_id: 'ed873933b1f1dea0ce12fab9',
|
_id: 'ed873933b1f1dea0ce12fab9'
|
||||||
};
|
};
|
||||||
|
|
||||||
var sampleFields = [
|
var sampleFields = [
|
||||||
|
@ -62,34 +62,32 @@
|
||||||
beforeEach(module(ApplicationConfiguration.applicationModuleName));
|
beforeEach(module(ApplicationConfiguration.applicationModuleName));
|
||||||
beforeEach(module('stateMock'));
|
beforeEach(module('stateMock'));
|
||||||
beforeEach(module('module-templates'));
|
beforeEach(module('module-templates'));
|
||||||
|
|
||||||
beforeEach(module('ngSanitize', 'ui.select'));
|
beforeEach(module('ngSanitize', 'ui.select'));
|
||||||
|
|
||||||
beforeEach(inject(function($rootScope, _FormFields_, _$compile_) {
|
beforeEach(inject(function($rootScope, _FormFields_, _$compile_, _$httpBackend_) {
|
||||||
scope = $rootScope.$new();
|
scope = $rootScope.$new();
|
||||||
FormFields = _FormFields_;
|
FormFields = _FormFields_;
|
||||||
|
|
||||||
|
// Point global variables to injected services
|
||||||
|
$httpBackend = _$httpBackend_;
|
||||||
|
$httpBackend.whenGET(/.+\.yml/).respond('');
|
||||||
|
|
||||||
$compile = _$compile_;
|
$compile = _$compile_;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should be able to render all field types in html', inject(function($rootScope) {
|
it('should be able to render all field types in html', inject(function($rootScope) {
|
||||||
scope.fields = sampleFields;
|
scope.fields = sampleFields;
|
||||||
|
|
||||||
for(var i=0; i<sampleFields.length; i++){
|
for(var i=0; i<sampleFields.length; i++){
|
||||||
var field = sampleFields[i];
|
var field = sampleFields[i];
|
||||||
if(!field.title) field.title = '';
|
if(!field.title) field.title = '';
|
||||||
|
|
||||||
scope.myfield = field;
|
scope.myfield = field;
|
||||||
var element = angular.element('<field-directive field="myfield"></field-directive>');
|
var element = angular.element('<field-directive field="myfield"></field-directive>');
|
||||||
$compile(element)(scope);
|
$compile(element)(scope);
|
||||||
scope.$digest();
|
scope.$digest();
|
||||||
|
|
||||||
console.log('Actual: ');
|
|
||||||
console.log(element.html());
|
|
||||||
|
|
||||||
console.log('\nExpected: ');
|
|
||||||
|
|
||||||
console.log('<div class="ng-binding ng-scope>'+field.title+'</div>');
|
|
||||||
expect(element.html()).not.toEqual('<div class="ng-binding ng-scope>'+field.title+'</div>');
|
expect(element.html()).not.toEqual('<div class="ng-binding ng-scope>'+field.title+'</div>');
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -17,19 +17,6 @@
|
||||||
_id: 'ed873933b1f1dea0ce12fab9'
|
_id: 'ed873933b1f1dea0ce12fab9'
|
||||||
};
|
};
|
||||||
|
|
||||||
var pdfObj = {
|
|
||||||
fieldname:'file',
|
|
||||||
originalname:'test.pdf',
|
|
||||||
name:'1440112660375.pdf',
|
|
||||||
encoding:'7bit',
|
|
||||||
mimetype:'application/pdf',
|
|
||||||
path:'uploads/tmp/test@test.com/1440112660375.pdf',
|
|
||||||
extension:'pdf',
|
|
||||||
size:56223,
|
|
||||||
truncated:false,
|
|
||||||
buffer:null
|
|
||||||
};
|
|
||||||
|
|
||||||
var sampleForm = {
|
var sampleForm = {
|
||||||
title: 'Form Title',
|
title: 'Form Title',
|
||||||
admin: 'ed873933b1f1dea0ce12fab9',
|
admin: 'ed873933b1f1dea0ce12fab9',
|
||||||
|
@ -142,9 +129,7 @@
|
||||||
//Grab scope. Depends on type of scope.
|
//Grab scope. Depends on type of scope.
|
||||||
//See angular.element documentation.
|
//See angular.element documentation.
|
||||||
scope = el.isolateScope() || el.scope();
|
scope = el.isolateScope() || el.scope();
|
||||||
|
}));
|
||||||
console.log(scope);
|
|
||||||
}));
|
|
||||||
|
|
||||||
var Validator = (function() {
|
var Validator = (function() {
|
||||||
return {
|
return {
|
||||||
|
@ -179,14 +164,12 @@
|
||||||
$httpBackend.expect('POST',/^(\/forms\/)([0-9a-fA-F]{24})$/, data).respond(200);
|
$httpBackend.expect('POST',/^(\/forms\/)([0-9a-fA-F]{24})$/, data).respond(200);
|
||||||
|
|
||||||
//Run Controller Logic to Test
|
//Run Controller Logic to Test
|
||||||
scope.submitForm();
|
scope.submitForm(function(error){
|
||||||
|
expect(error).toBe(null);
|
||||||
$httpBackend.flush();
|
expect(scope.myform.submitted).toBe(true);
|
||||||
|
expect(scope.error).toEqual('');
|
||||||
setTimeout(function(){
|
});
|
||||||
expect(scope.myform.submitted).toBe(true);
|
|
||||||
expect(scope.error).toEqual('');
|
|
||||||
}, 25);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('$scope.reloadForm() should reset and reload form', function(){
|
it('$scope.reloadForm() should reset and reload form', function(){
|
||||||
|
|
|
@ -20,10 +20,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
login: function(credentials) {
|
login: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/signin', credentials).success(function(response) {
|
$http.post('/auth/signin', credentials).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -31,10 +31,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
logout: function() {
|
logout: function() {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/signout').success(function(response) {
|
$http.get('/auth/signout').then(function(response) {
|
||||||
deferred.resolve(null);
|
deferred.resolve(null);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -42,11 +42,11 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
signup: function(credentials) {
|
signup: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/signup', credentials).success(function(response) {
|
$http.post('/auth/signup', credentials).then(function(response) {
|
||||||
// If successful we assign the response to the global user model
|
// If successful we assign the response to the global user model
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -55,10 +55,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
resendVerifyEmail: function(_email) {
|
resendVerifyEmail: function(_email) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/verify', {email: _email}).success(function(response) {
|
$http.post('/auth/verify', {email: _email}).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -72,10 +72,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
if( !validTokenRe.test(token) ) throw new Error('Error token: '+token+' is not a valid verification token');
|
if( !validTokenRe.test(token) ) throw new Error('Error token: '+token+' is not a valid verification token');
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/verify/'+token).success(function(response) {
|
$http.get('/auth/verify/'+token).then(function(response) {
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error);
|
deferred.reject(error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -84,10 +84,10 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
resetPassword: function(passwordDetails, token) {
|
resetPassword: function(passwordDetails, token) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get('/auth/password/'+token, passwordDetails).success(function(response) {
|
$http.get('/auth/password/'+token, passwordDetails).then(function(response) {
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
@ -97,12 +97,12 @@ angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '
|
||||||
askForPasswordReset: function(credentials) {
|
askForPasswordReset: function(credentials) {
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.post('/auth/forgot', credentials).success(function(response) {
|
$http.post('/auth/forgot', credentials).then(function(response) {
|
||||||
// Show user success message and clear form
|
// Show user success message and clear form
|
||||||
deferred.resolve(response);
|
deferred.resolve(response.data);
|
||||||
}).error(function(error) {
|
}, function(error) {
|
||||||
// Show user error message
|
// Show user error message
|
||||||
deferred.reject(error.message || error);
|
deferred.reject(error.data.message || error.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
|
Loading…
Reference in a new issue