/**
* jspsych-survey-likert
* a jspsych plugin for measuring items on a likert scale
*
* Josh de Leeuw
*
* documentation: docs.jspsych.org
*
*/
jsPsych.plugins['survey-likert'] = (function() {
var plugin = {};
plugin.info = {
name: 'survey-likert',
description: '',
parameters: {
questions: {
type: jsPsych.plugins.parameterType.STRING,
array: true,
default: undefined,
no_function: false,
description: ''
},
labels: {
type: jsPsych.plugins.parameterType.STRING,
array: true,
default: undefined,
no_function: false,
description: ''
},
preamble: {
type: jsPsych.plugins.parameterType.STRING,
default: '',
no_function: false,
description: ''
},
required: {
type: jsPsych.plugins.parameterType.BOOL,
array: true,
default: false,
no_function: false,
description: ''
},
button_label: {
type: jsPsych.plugins.parameterType.STRING,
default: 'Next',
no_function: false,
description: ''
}
}
}
plugin.trial = function(display_element, trial) {
var html = "";
// inject CSS for trial
html += '';
// show preamble text
html += '
'+trial.preamble+'
';
html += ''
display_element.innerHTML = html;
display_element.querySelector('#jspsych-survey-likert-form').addEventListener('submit', function(e){
e.preventDefault();
// measure response time
var endTime = (new Date()).getTime();
var response_time = endTime - startTime;
// create object to hold responses
var question_data = {};
var matches = display_element.querySelectorAll('#jspsych-survey-likert-form .jspsych-survey-likert-opts');
for(var index = 0; index < matches.length; index++){
var id = matches[index].dataset['radioGroup'];
var el = display_element.querySelector('input[name="' + id + '"]:checked');
if (el === null) {
var response = "";
} else {
var response = parseInt(el.value);
}
var obje = {};
obje[id] = response;
Object.assign(question_data, obje);
}
// save data
var trial_data = {
"rt": response_time,
"responses": JSON.stringify(question_data)
};
display_element.innerHTML = '';
// next trial
jsPsych.finishTrial(trial_data);
});
var startTime = (new Date()).getTime();
};
return plugin;
})();