From 524d0da0dedc2bee3ea0a9deec655949e6751331 Mon Sep 17 00:00:00 2001 From: Joe Fiorini Date: Wed, 12 Aug 2015 11:16:43 -0400 Subject: [PATCH] Pass question directly for survey taker --- .../questions/finalize.factory.js | 14 ++++++----- .../survey-maker/questions/main.js | 2 ++ .../questions/question-scope.factory.js | 25 +++++++++++++++++++ .../render/survey-question.directive.js | 12 +++++---- 4 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 awx/ui/client/src/job-templates/survey-maker/questions/question-scope.factory.js diff --git a/awx/ui/client/src/job-templates/survey-maker/questions/finalize.factory.js b/awx/ui/client/src/job-templates/survey-maker/questions/finalize.factory.js index facd87260b..e790f8e2dd 100644 --- a/awx/ui/client/src/job-templates/survey-maker/questions/finalize.factory.js +++ b/awx/ui/client/src/job-templates/survey-maker/questions/finalize.factory.js @@ -9,12 +9,13 @@ * }) * */ + export default - function FinalizeQuestion(GetBasePath, Rest, Wait, ProcessErrors, $compile, Empty, $filter) { + function FinalizeQuestion(GetBasePath, Rest, Wait, ProcessErrors, $compile, Empty, $filter, questionScope) { return function(params) { - var scope = params.scope, - question = params.question, + var question = params.question, + scope = questionScope(question, params.scope), index = params.index, required, element, @@ -80,7 +81,7 @@ export default html += '
'; html += '
'; html += '
'; - html += ''; + html += ''; html += '
'; html += '
'; html += '
'; @@ -132,8 +133,8 @@ export default 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'); @@ -187,5 +188,6 @@ FinalizeQuestion.$inject = 'ProcessErrors', '$compile', 'Empty', - '$filter' + '$filter', + 'questionScope' ]; diff --git a/awx/ui/client/src/job-templates/survey-maker/questions/main.js b/awx/ui/client/src/job-templates/survey-maker/questions/main.js index f1bbd8bc7c..346e6e9bff 100644 --- a/awx/ui/client/src/job-templates/survey-maker/questions/main.js +++ b/awx/ui/client/src/job-templates/survey-maker/questions/main.js @@ -1,7 +1,9 @@ +import questionScope from './question-scope.factory'; import finalize from './finalize.factory'; import edit from './edit.factory'; export default angular.module('jobTemplates.surveyMaker.questions', []) .factory('finalizeQuestion', finalize) + .factory('questionScope', questionScope) .factory('editQuestion', edit); diff --git a/awx/ui/client/src/job-templates/survey-maker/questions/question-scope.factory.js b/awx/ui/client/src/job-templates/survey-maker/questions/question-scope.factory.js new file mode 100644 index 0000000000..31af0902a5 --- /dev/null +++ b/awx/ui/client/src/job-templates/survey-maker/questions/question-scope.factory.js @@ -0,0 +1,25 @@ +var typesSupportingIsolatedScope = + [ 'multiselect', + 'multiplechoice' + ]; + +function typeSupportsIsolatedScope(type) { + return _.include(typesSupportingIsolatedScope, type); +} + +function getIsolatedScope(question, oldScope) { + var newScope = oldScope.$new(); + newScope.question = question; + return newScope; +} + +export default + function() { + return function(question, oldScope) { + if (typeSupportsIsolatedScope(question.type)) { + return getIsolatedScope(question, oldScope); + } else { + return oldScope; + } + }; + } diff --git a/awx/ui/client/src/job-templates/survey-maker/render/survey-question.directive.js b/awx/ui/client/src/job-templates/survey-maker/render/survey-question.directive.js index 3dc64e6667..da620de889 100644 --- a/awx/ui/client/src/job-templates/survey-maker/render/survey-question.directive.js +++ b/awx/ui/client/src/job-templates/survey-maker/render/survey-question.directive.js @@ -24,12 +24,13 @@ function findQuestionByIndex(questions, index) { } function link(scope, element, attrs) { - var question = findQuestionByIndex(scope.surveyQuestions, Number(attrs.index)); - scope.question = question; + if (!scope.question) { + scope.question = findQuestionByIndex(scope.surveyQuestions, Number(attrs.index)); + } - if (!_.isUndefined(question.choices)) { - scope.choices = question.choices.split('\n'); + if (!_.isUndefined(scope.question.choices)) { + scope.choices = scope.question.choices.split('\n'); } } @@ -38,8 +39,9 @@ export default var directive = { restrict: 'E', scope: - { surveyQuestions: '=', + { question: '=', selectedValue: '=ngModel', + surveyQuestions: '=', isRequired: '@ngRequired' }, templateUrl: templateUrl('job-templates/survey-maker/render/survey-question'),