tellform/public/modules/forms/directives/edit-form.client.directive.js

209 lines
8.7 KiB
JavaScript
Raw Normal View History

2015-07-03 23:47:14 +00:00
'use strict';
2015-08-05 22:24:24 +00:00
angular.module('forms')
.directive('editFormDirective', ['$rootScope', '$q', '$http', '$timeout', 'timeCounter', 'Auth', 'FormFields',
2015-07-06 04:29:05 +00:00
function ($rootScope, $q, $http, $timeout, timeCounter, Auth, FormFields) {
2015-07-03 23:47:14 +00:00
return {
2015-07-06 04:29:05 +00:00
templateUrl: './modules/forms/views/directiveViews/form/edit-form.html',
restrict: 'E',
scope: {
myform:'=',
2015-07-06 04:29:05 +00:00
},
2015-08-05 22:24:24 +00:00
// transclude: true,
2015-07-03 23:47:14 +00:00
controller: function($scope){
2015-08-05 22:24:24 +00:00
// Log that the directive has been linked.
// console.log( "Linked: editForm Controller");
/*
** Initialize scope with variables
*/
//Populate AddField with all available form field types
$scope.addField = {};
$scope.addField.types = FormFields.fields;
$scope.addField.types.forEach(function(type){
type.lastAddedID = 1;
return type;
});
// accordion settings
$scope.accordion = {};
$scope.accordion.oneAtATime = true;
2015-07-06 04:29:05 +00:00
//Populate local scope with rootScope methods/variables
$scope.update = $rootScope.update;
/*
** FormFields (ui-sortable) drag-and-drop configuration
*/
$scope.dropzone = {
handle: ' .handle'
}
2015-08-04 21:06:16 +00:00
// console.log($scope.myform);
2015-07-27 18:11:43 +00:00
// $scope.draggable = {
// connectWith: ".dropzone",
// start: function (e, ui) {
// // $scope.$apply(function() {
// // $scope.dragging = true
// // });
// $('.dropzone').sortable('refresh');
// },
// update: function (e, ui) {
// var isInDropzone = $(e.target).parentsUntil('.panel-group').hasClass('dropzone');
// console.log('isInDropzone: '+isInDropzone);
// //Disable drag and drop if we aren't in dropzone
// if(!isInDropzone){
// ui.item.sortable.cancel();
// }
// },
// stop: function (e, ui) {
// var isInDropzone = $(e.target).parentsUntil('.panel-group').hasClass('dropzone');
// //Disable drag and drop if we aren't in dropzone
// if(isInDropzone){
// console.log($(e.target));
// }
// // if (ui.item.sortable.droptarget === undefined) {
// // $scope.$apply($scope.dragging = false);
// // return;
// // }else if (ui.item.sortable.droptarget[0].classList[0] === "dropzone") {
// // // run code when item is dropped in the dropzone
// // $scope.$apply($scope.dragging = false);
// // }else{
// // // $scope.$apply($scope.dragging = false);
// // }
// // console.log('has class .dropzone :'+);
// // if ($(e.target).hasClass('dropzone') && ui.item.sortable.droptarget && e.target != ui.item.sortable.droptarget[0] ) {
// // // restore original types
// // $scope.addField.types = FormFields.fields;
// // }
// }
// };
2015-08-05 22:24:24 +00:00
/*
** Field CRUD Methods
*/
2015-07-09 22:21:29 +00:00
// Add a new field
2015-08-05 22:46:33 +00:00
$scope.addNewField = function(addOrReturn, fieldType){
2015-07-03 23:47:14 +00:00
// incr field_id counter
$scope.addField.lastAddedID++;
2015-07-04 03:25:25 +00:00
var fieldTitle;
2015-07-09 22:15:34 +00:00
2015-07-04 03:25:25 +00:00
for(var i = 0; i < $scope.addField.types.length; i++){
2015-07-06 04:29:05 +00:00
// console.log($scope.addField.types[i].name === fieldType);
2015-07-27 18:11:43 +00:00
if($scope.addField.types[i].name === fieldType){
2015-07-04 03:25:25 +00:00
$scope.addField.types[i].lastAddedID++;
// console.log($scope.addField.types[i].lastAddedID);
2015-07-04 03:25:25 +00:00
fieldTitle = $scope.addField.types[i].value+$scope.addField.types[i].lastAddedID;
break;
}
}
2015-07-03 23:47:14 +00:00
var newField = {
2015-07-04 03:25:25 +00:00
'title' : fieldTitle,
'fieldType' : fieldType,
2015-07-03 23:47:14 +00:00
'fieldValue' : '',
'required' : true,
2015-07-27 18:11:43 +00:00
'disabled' : false,
2015-07-03 23:47:14 +00:00
};
2015-08-06 05:52:59 +00:00
console.log('\n\n---------\nAdded field CLIENT');
console.log(newField);
2015-07-03 23:47:14 +00:00
// put newField into fields array
2015-08-05 22:46:33 +00:00
if(addOrReturn){
$scope.myform.form_fields.push(newField);
}else {
return newField;
}
2015-08-06 05:52:59 +00:00
2015-07-27 18:11:43 +00:00
// console.log(Date.now());
// console.log($scope.myform.form_fields.length);
2015-07-03 23:47:14 +00:00
};
// deletes particular field on button click
$scope.deleteField = function (hashKey){
// console.log($scope.myform.form_fields);
for(var i = 0; i < $scope.myform.form_fields.length; i++){
// console.log($scope.myform.form_fields[i].$$hashKey === hashKey);
if($scope.myform.form_fields[i].$$hashKey === hashKey){
$scope.myform.form_fields.splice(i, 1);
2015-07-03 23:47:14 +00:00
break;
}
}
};
2015-08-05 22:46:33 +00:00
$scope.duplicateField = function (field_index){
console.log('field_index: '+field_index);
var field = $scope.addNewField(false, $scope.myform.form_fields[field_index].fieldType);
field.title = $scope.myform.form_fields[field_index].title;
console.log($scope.myform.form_fields[field_index]);
//Insert field at selected index
$scope.myform.form_fields.splice(field_index+1, 0, field);
// for(var i = 0; i < $scope.myform.form_fields.length; i++){
// if($scope.myform.form_fields[i].field_id === field.field_id){
// break;
// }
// }
};
2015-08-05 22:24:24 +00:00
/*
** Field Option Methods
*/
2015-07-03 23:47:14 +00:00
// add new option to the field
$scope.addOption = function (field){
if(!field.fieldOptions) field.fieldOptions = [];
2015-07-03 23:47:14 +00:00
var lastOptionID = 0;
if(field.fieldOptions[field.fieldOptions.length-1])
lastOptionID = field.fieldOptions[field.fieldOptions.length-1].option_id;
2015-07-03 23:47:14 +00:00
// new option's id
var option_id = lastOptionID + 1;
var newOption = {
'option_id' : option_id,
'option_title' : 'Option ' + option_id,
'option_value' : option_id
};
// put new option into fieldOptions array
field.fieldOptions.push(newOption);
2015-07-03 23:47:14 +00:00
};
// delete particular option
$scope.deleteOption = function (field, option){
for(var i = 0; i < field.fieldOptions.length; i++){
if(field.fieldOptions[i].option_id === option.option_id){
field.fieldOptions.splice(i, 1);
2015-07-03 23:47:14 +00:00
break;
}
}
};
// decides whether field options block will be shown (true for dropdown and radio fields)
$scope.showAddOptions = function (field){
2015-08-06 05:52:59 +00:00
if(field.fieldType === 'dropdown' || field.fieldType === 'checkbox' || field.fieldType === 'radio'){
2015-07-03 23:47:14 +00:00
return true;
} else {
2015-07-03 23:47:14 +00:00
return false;
}
2015-07-03 23:47:14 +00:00
};
},
2015-07-06 04:29:05 +00:00
2015-07-03 23:47:14 +00:00
};
}
]);