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