text: /**
   * 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: ''
        }
      }
    };
  
    plugin.trial = function(display_element, trial) {
      // default parameters for the trial
      trial.preamble =
        typeof trial.preamble === 'undefined' ? '' : trial.preamble;
  
      // if any trial variables are functions
      // this evaluates the function and replaces
      // it with the output of the function
      trial = jsPsych.pluginAPI.evaluateFunctionParameters(trial);
  
      // inject CSS for trial
      var node = (display_element.innerHTML +=
        '<style id="jspsych-survey-likert-css"></style>');
      var cssstr =
        '.jspsych-survey-likert-statement { display:block; font-size: 18px; padding-top: 30px; margin-bottom:10px; }' +
        '.jspsych-survey-likert-opts { list-style:none; width:100%; margin:0; padding:0 0 35px; display:block; font-size: 14px; line-height:1.1em; }' +
        '.jspsych-survey-likert-opt-label { line-height: 1.1em; }' +
        ".jspsych-survey-likert-opts:before { content: ''; position:relative; top:11px; /*left:9.5%;*/ display:block; background-color:#efefef; height:4px; width:100%; }" +
        '.jspsych-survey-likert-opts:last-of-type { border-bottom: 0; }' +
        '.jspsych-survey-likert-opts li { display:inline-block; /*width:19%;*/ text-align:center; vertical-align: top; }' +
        '.jspsych-survey-likert-opts li input[type=radio] { display:block; position:relative; top:0; left:50%; margin-left:-6px; }';
      display_element.querySelector(
        '#jspsych-survey-likert-css'
      ).innerHTML = cssstr;
  
      // show preamble text
      display_element.innerHTML +=
        '<div id="jspsych-survey-likert-preamble" class="jspsych-survey-likert-preamble">' +
        trial.preamble +
        '</div>';
  
      display_element.innerHTML += '<form id="jspsych-survey-likert-form">';
  
      var form_element = display_element.querySelector(
        '#jspsych-survey-likert-form'
      );
      // add likert scale questions
      for (var i = 0; i < trial.questions.length; i++) {
        // add question
        form_element.innerHTML +=
          '<label class="jspsych-survey-likert-statement">' +
          trial.questions[i] +
          '</label>';
        // add options
        var width = 100 / trial.labels[i].length;
        options_string =
          '<ul class="jspsych-survey-likert-opts" data-radio-group="Q' + i + '">';
        for (var j = 0; j < trial.labels[i].length; j++) {
          options_string +=
            '<li style="width:' +
            width +
            '%"><input type="radio" name="Q' +
            i +
            '" value="' +
            j +
            '"><label class="jspsych-survey-likert-opt-label">' +
            trial.labels[i][j] +
            '</label></li>';
        }
        options_string += '</ul>';
        form_element.innerHTML += options_string;
      }
  
      // add submit button
      display_element.innerHTML +=
        '<button id="jspsych-survey-likert" class="jspsych-survey-likert jspsych-btn">Submit Answers</button>';
  
      display_element
        .querySelector('#jspsych-survey-likert')
        .addEventListener('click', function() {
          // 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 response = display_element.querySelector('input[name="' + id + '"]:checked').value;
            let response;
            const input = display_element.querySelector(
              'input[name="' + id + '"]:checked'
            );
            if (input) {
              response = input.value;
            } else {
              response = null;
            }
            if (typeof response == 'undefined' || response == null) {
              response = -1;
            }
            var obje = {};
            obje[matches[index].textContent] = 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;
  })();
  