tao-test/app/taoQtiItem/views/js/qtiXmlRenderer/renderers/ResponseProcessing.js

68 lines
2.7 KiB
JavaScript

define([
'lodash',
'tpl!taoQtiItem/qtiXmlRenderer/tpl/responseProcessing',
'taoQtiItem/qtiXmlRenderer/helper/responseProcessingTpl'
], function(_, tpl, responseProcessingTpl){
'use strict';
var _renderFeedbackRules = function _renderFeedbackRules(renderer, response){
var ret = [];
_.forEach(response.getFeedbackRules(), function(rule){
ret.push(rule.render(renderer));
});
return ret;
};
return {
qtiClass : 'responseProcessing',
template : tpl,
getData : function(responseProcessing, data){
var defaultData = {},
self = this,
interactions, response;
switch(responseProcessing.processingType){
case 'custom':
defaultData.custom = true;
defaultData.xml = responseProcessing.xml;
break;
case 'templateDriven':
interactions = responseProcessing.getRootElement().getInteractions();
if(interactions.length === 1 && !data.notAllowTemplate){
response = interactions[0].getResponseDeclaration();
if(_.size(response.getFeedbackRules()) === 0 && response.id() === 'RESPONSE'){
if(response.template !== 'no_response_processing'){
//the exact condition to serialize the rp as a standard template is met
defaultData.template = response.template;
}
break;
}
}
defaultData.responseRules = [];
_.forEach(interactions, function(interaction){
const response = interaction.getResponseDeclaration();
const responseRule = responseProcessingTpl.renderInteractionRp(response, 'SCORE');
if(_.isString(responseRule) && responseRule.trim()){
defaultData.responseRules.push(responseRule);
}
});
defaultData.feedbackRules = [];
_.forEach(interactions, function(interaction){
defaultData.feedbackRules = _.union(defaultData.feedbackRules, _renderFeedbackRules(self, interaction.getResponseDeclaration()));
});
if(defaultData.responseRules.length || defaultData.feedbackRules.length){
defaultData.templateDriven = true;
}
break;
}
return _.merge(data || {}, defaultData);
}
};
});