/********************************************* * Copyright (c) 2014 AnsibleWorks, Inc. */ /** * @ngdoc function * @name helpers.function:Schedules * @description * Schedules Helper * * Display the scheduler widget in a dialog * */ 'use strict'; angular.module('SurveyHelper', [ 'Utilities', 'RestServices', 'SchedulesHelper', 'SearchHelper', 'PaginationHelpers', 'ListGenerator', 'ModalDialog', 'GeneratorHelpers']) .factory('ShowSurveyModal', ['Wait', 'CreateDialog', 'Empty', '$compile' , function(Wait, CreateDialog, Empty, $compile) { return function(params) { // Set modal dimensions based on viewport width var scope = params.scope, callback = params.callback, mode = (params.mode) ? params.mode : "survey-maker", title = params.title, element, target = (mode==='survey-taker') ? 'password-modal' : "survey-modal-dialog", buttons = [{ "label": "Cancel", "onClick": function() { scope.cancelSurvey(this); }, "icon": "fa-times", "class": "btn btn-default", "id": "survey-close-button" },{ "label": (mode==='survey-taker') ? "Launch" : "Save" , "onClick": function() { setTimeout(function(){ scope.$apply(function(){ if(mode==='survey-taker'){ scope.$emit('SurveyTakerCompleted'); } else{ scope.saveSurvey(); } }); }); }, "icon": (mode==='survey-taker') ? "fa-rocket" : "fa-check", "class": "btn btn-primary", "id": "survey-save-button" }]; CreateDialog({ id: target, title: title, scope: scope, buttons: buttons, width: 700, height: 725, minWidth: 400, onClose: function() { $('#'+target).empty(); }, onOpen: function() { Wait('stop'); if(mode!=="survey-taker"){ // if(scope.mode === 'add'){ // $('#survey-save-button').attr('disabled' , true); // } else if(scope.can_edit === false){ $('#survey-save-button').attr('disabled', "disabled"); } else $('#survey-save-button').attr('ng-disabled', "survey_questions.length<1 "); element = angular.element(document.getElementById('survey-save-button')); $compile(element)(scope); } if(mode==="survey-taker"){ $('#survey-save-button').attr('ng-disabled', "survey_taker_form.$invalid"); element = angular.element(document.getElementById('survey-save-button')); $compile(element)(scope); } }, callback: callback }); }; }]) .factory('EditSurvey', ['$routeParams','SchedulerInit', 'ShowSurveyModal', 'Wait', 'Rest', 'ProcessErrors', 'GetBasePath', 'GenerateForm', 'Empty', 'AddSurvey', function($routeParams, SchedulerInit, ShowSurveyModal, Wait, Rest, ProcessErrors, GetBasePath, GenerateForm, Empty, AddSurvey) { return function(params) { var scope = params.scope, id = params.id, tempSurv = {}, url = GetBasePath('job_templates') + id + '/survey_spec/', i; if (scope.removeDialogReady) { scope.removeDialogReady(); } scope.removeDialogReady = scope.$on('DialogReady', function() { $('#survey-modal-dialog').dialog('open'); }); scope.resetForm(); Wait('start'); if(scope.mode === 'add'){ tempSurv.survey_name = scope.survey_name; tempSurv.survey_description = scope.survey_description; tempSurv.survey_questions = scope.survey_questions; ShowSurveyModal({ title: "Edit Survey", scope: scope, callback: 'DialogReady' }); // scope.survey_name = tempSurv.survey_name; // scope.survey_description = tempSurv.survey_description; for(i=0; i0){ // $('#survey-save-button').removeAttr('disabled') // } question.index = index; question.question_name = question.question_name.replace(//g, ">"); question.question_description = (question.question_description) ? question.question_description.replace(//g, ">") : undefined; if(!$('#question_'+question.index+':eq(0)').is('div')){ html+='
'; $('#finalized_questions').append(html); } required = (question.required===true) ? "prepend-asterisk" : ""; html = '
'+question.question_name+'
\n'; if(!Empty(question.question_description)){ html += '
'+question.question_description+'
\n'; } // defaultValue = (question.default) ? question.default : ""; if(question.type === 'text' ){ defaultValue = (question.default) ? question.default : ""; defaultValue = defaultValue.replace(//g, ">"); html+='
'+ '
'+ ''+ '
'; } if(question.type === "textarea"){ defaultValue = (question.default) ? question.default : (question.default_textarea) ? question.default_textarea: "" ; defaultValue = defaultValue.replace(//g, ">"); html+='
'+ '
'+ ''+ '
'; } if(question.type === 'multiplechoice' || question.type === "multiselect"){ choices = question.choices.split(/\n/); element = (question.type==="multiselect") ? "checkbox" : 'radio'; question.default = (question.default) ? question.default : (question.default_multiselect) ? question.default_multiselect : "" ; html += '
'; for( i = 0; i/g, ">"); html+= '' + ''+choices[i] +'
' ; } html += '
'; } if(question.type === 'integer'){ min = (!Empty(question.min)) ? question.min : ""; max = (!Empty(question.max)) ? question.max : "" ; defaultValue = (!Empty(question.default)) ? question.default : (!Empty(question.default_int)) ? question.default_int : "" ; html+='
'+ '
'+ ''+ '
'; } if(question.type === "float"){ min = (!Empty(question.min)) ? question.min : ""; max = (!Empty(question.max)) ? question.max : "" ; defaultValue = (!Empty(question.default)) ? question.default : (!Empty(question.default_float)) ? question.default_float : "" ; html+='
'+ '
'+ ''+ '
'; } html += '
'; html += ' '; html += ' '; html += ' '; html += ' '; html+='
'; $('#question_'+question.index).append(html); element = angular.element(document.getElementById('question_'+question.index)); // // element.html(html); //element.css('opacity', 0.7); $compile(element)(scope); // var questionScope = scope.$new; $('#add_question_btn').show(); $('#add_question_btn').removeAttr('disabled'); $('#add_question_btn').focus(); $('#survey_maker_save_btn').removeAttr('disabled'); $('#delete-question_'+question.index+'').on('click', function($event){ scope.deleteQuestion($event.target.parentElement.parentElement.parentElement.id.split('_')[1]); }); $('#edit-question_'+question.index+'').on('click', function($event){ scope.editQuestion($event.target.parentElement.parentElement.parentElement.id.split('_')[1]); }); $('#question-up_'+question.index+'').on('click', function($event){ scope.questionUp($event.target.parentElement.parentElement.parentElement.id.split('_')[1]); }); $('#question-down_'+question.index+'').on('click', function($event){ scope.questionDown($event.target.parentElement.parentElement.parentElement.id.split('_')[1]); }); }; }]) .factory('EditQuestion', ['GetBasePath','Rest', 'Wait', 'ProcessErrors', '$compile', 'GenerateForm', 'SurveyQuestionForm', function(GetBasePath, Rest, Wait, ProcessErrors, $compile, GenerateForm, SurveyQuestionForm) { return function(params) { var scope = params.scope, index = params.index, element, //fld, i, question = params.question, //scope.survey_questions[index], form = SurveyQuestionForm; $('#survey-save-button').attr('disabled', 'disabled'); angular.element('#survey_question_question_cancel_btn').trigger('click'); $('#add_question_btn').hide(); // $('#new_question .aw-form-well').remove(); element = $('.question_final:eq('+index+')'); element.css('opacity', 1.0); element.empty(); scope.text_min = null; scope.text_max = null; scope.int_min = null; scope.int_max = null; scope.float_min = null; scope.float_max = null; if (scope.removeFillQuestionForm) { scope.removeFillQuestionForm(); } scope.removeFillQuestionForm = scope.$on('FillQuestionForm', function() { for( var fld in form.fields){ scope[fld] = question[fld]; if(form.fields[fld].type === 'select'){ for (i = 0; i < scope.answer_types.length; i++) { if (question[fld] === scope.answer_types[i].type) { scope[fld] = scope.answer_types[i]; } } } } if( question.type === 'text'){ scope.text_min = question.min; scope.text_max = question.max; // scope.default_text = question.default; } if( question.type === 'textarea'){ scope.textarea_min = question.min; scope.textarea_max = question.max; scope.default_textarea= question.default; } if( question.type === 'integer'){ scope.int_min = question.min; scope.int_max = question.max; scope.default_int = question.default; } else if( question.type === 'float' ) { scope.float_min = question.min; scope.float_max = question.max; scope.default_float = question.default; } else if ( question.type === 'multiselect'){ scope.default_multiselect = question.default; } }); if (scope.removeGenerateForm) { scope.removeGenerateForm(); } scope.removeGenerateForm = scope.$on('GenerateForm', function() { GenerateForm.inject(form, { id: 'question_'+index, mode: 'edit' , related: false, scope:scope, breadCrumbs: false}); scope.$emit('FillQuestionForm'); }); scope.$emit('GenerateForm'); }; }]) .factory('SurveyControllerInit', ['$location', 'DeleteSurvey', 'EditSurvey', 'AddSurvey', 'GenerateForm', 'SurveyQuestionForm', 'Wait', 'Alert', 'GetBasePath', 'Rest', 'ProcessErrors' , '$compile', 'FinalizeQuestion', 'EditQuestion', function($location, DeleteSurvey, EditSurvey, AddSurvey, GenerateForm, SurveyQuestionForm, Wait, Alert, GetBasePath, Rest, ProcessErrors, $compile, FinalizeQuestion, EditQuestion) { return function(params) { var scope = params.scope, id = params.id, i, url, html, element, questions = [], form = SurveyQuestionForm; scope.survey_questions = []; scope.answer_types=[ {name: 'Text' , type: 'text'}, {name: 'Textarea', type: 'textarea'}, {name: 'Multiple Choice (single select)', type: 'multiplechoice'}, {name: 'Multiple Choice (multiple select)', type: 'multiselect'}, {name: 'Integer', type: 'integer'}, {name: 'Float', type: 'float'} ]; scope.deleteSurvey = function() { DeleteSurvey({ scope: scope, id: id, // callback: 'SchedulesRefresh' }); }; scope.editSurvey = function() { if(scope.mode==='add'){ for(i=0; i0){ $('#survey-save-button').removeAttr('disabled'); } if(scope.mode === 'edit' && scope.survey_questions.length>0 && scope.can_edit===true){ $('#survey-save-button').removeAttr('disabled'); } } else { elementID = event.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.id; key = elementID.split('_')[1]; $('#'+elementID).empty(); if(scope.mode === 'add'){ if(questions.length>0){ $('#survey-save-button').removeAttr('disabled'); } scope.finalizeQuestion(questions[key], key); } else if(scope.mode=== 'edit' ){ if(scope.survey_questions.length>0 && scope.can_edit === true){ $('#survey-save-button').removeAttr('disabled'); } scope.finalizeQuestion(scope.survey_questions[key] , key); } } }; scope.questionUp = function(index){ var animating = false, clickedDiv = $('#question_'+index), prevDiv = clickedDiv.prev(), distance = clickedDiv.outerHeight(); if (animating) { return; } if (prevDiv.length) { animating = true; $.when(clickedDiv.animate({ top: -distance }, 600), prevDiv.animate({ top: distance }, 600)).done(function () { prevDiv.css('top', '0px'); clickedDiv.css('top', '0px'); clickedDiv.insertBefore(prevDiv); animating = false; if ( scope.mode === 'add'){ i = questions[index]; questions[index] = questions[index-1]; questions[index-1] = i; } else { i = scope.survey_questions[index]; scope.survey_questions[index] = scope.survey_questions[index-1]; scope.survey_questions[index-1] = i; } scope.reorder(); }); } }; scope.questionDown = function(index){ var clickedDiv = $('#question_'+index), nextDiv = clickedDiv.next(), distance = clickedDiv.outerHeight(), animating = false; if (animating) { return; } if (nextDiv.length) { animating = true; $.when(clickedDiv.animate({ top: distance }, 600), nextDiv.animate({ top: -distance }, 600)).done(function () { nextDiv.css('top', '0px'); clickedDiv.css('top', '0px'); nextDiv.insertBefore(clickedDiv); animating = false; if(scope.mode === 'add'){ i = questions[index]; questions[index] = questions[Number(index)+1]; questions[Number(index)+1] = i; } else { i = scope.survey_questions[index]; scope.survey_questions[index] = scope.survey_questions[Number(index)+1]; scope.survey_questions[Number(index)+1] = i; } scope.reorder(); }); } }; scope.reorder = function(){ if(scope.mode==='add'){ for(i=0; i'+ ''+ '
'+ '
'+ ''+ '
'+ ''+ ''; $('#survey-modal-dialog').html(html); element = angular.element(document.getElementById('add_question_btn')); $compile(element)(scope); }; scope.saveSurvey = function() { Wait('start'); if(scope.mode==="add"){ $('#survey-modal-dialog').dialog('close'); if(questions.length>0){ scope.survey_questions = questions; } scope.survey_name = ""; scope.survey_description = ""; questions = [] ; scope.$emit('SurveySaved'); } else{ scope.survey_name = ""; scope.survey_description = ""; url = GetBasePath('job_templates') + id + '/survey_spec/'; Rest.setUrl(url); Rest.post({ name: scope.survey_name, description: scope.survey_description, spec: scope.survey_questions }) .success(function () { // Wait('stop'); $('#survey-modal-dialog').dialog('close'); scope.$emit('SurveySaved'); }) .error(function (data, status) { ProcessErrors(scope, data, status, { hdr: 'Error!', msg: 'Failed to add new survey. Post returned status: ' + status }); }); } }; }; }]);