scripts/experiments/jnd_radius/jnd_radius_timeline.js
- import JND_Radius from "/scripts/experiments/jnd_radius/jnd_radius.js";
- import {get_instructions} from "/scripts/experiment-properties/instructions/instructions_controller.js";
-
- export var jnd_radius_exp = new JND_Radius(params);
-
- var timeline = [];
- var address = location.protocol + "//" + location.hostname + ":" + location.port;
-
- // Firefox check for formatting
- if (typeof InstallTrigger !== 'undefined') {
- var isFirefox = true;
- } else {
- var isFirefox = false;
- }
-
- // =========================================================
- // WELCOME TRIAL BLOCK
-
- let shape_names = jnd_radius_exp.condition_name.split("_");
-
- var welcome = {
- type: 'html-keyboard-response',
- stimulus: `<div align = "center" style="margin-top: ${isFirefox ? "25vh" : "0"}">` + `<img src="${address}/img/VCL_lab_logo.png"></img><br><br>` +
- `<b>Base:</b> ${jnd_radius_exp.constructor.name}` + '<br>' +
- `<b>Trial Type:</b> ${jnd_radius_exp.trial_structure}` + '<br>' +
- `<b>Condition:</b> ${shape_names[0]}, ${shape_names[1]}` +
- '<br><br><br><p><font size = 15>Press any key to begin.<p></font>' +
- '</div>',
- data: {type: 'instruction'}
- };
- timeline.push(welcome);
-
- // =========================================================
- // INSTRUCTION TRIAL BLOCKS
-
- var instructions = {
- type: "html-keyboard-response",
- stimulus: function (){
- return get_instructions(jnd_radius_exp);
- }
- };
-
- timeline.push(instructions);
-
- // =========================================================
- // FEEDBACK
-
- var feedback = {
- type: 'html-keyboard-response',
- choices: jsPsych.NO_KEYS, //No responses will be accepted as a valid response.
- trial_duration: 500,
- data: {type: 'feedback'},
- stimulus: function(){
-
- document.body.style.backgroundColor = jnd_radius_exp.trial_data.feedback_background_color;
-
- var last_trial = JSON.parse(jsPsych.data.getLastTrialData().json());
- var last_trial_correct = last_trial[0]["correct"];
-
- // For debugging purposes:
- if (last_trial_correct == -1){
- return '<p>' +
- `<div style = "margin-top: ${isFirefox ? "45vh" : "0"};"><font style="font-size:50px; color:blue">Exiting from experiment.<p></font></div>`
- }
-
- else if (last_trial_correct){
- return `<p><div style = "margin-top: ${isFirefox ? "45vh" : "0"};"><i class="fa fa-check-circle" style="font-size:50px; color:green; margin-right: 10px;"></i>` +
- '<font style="font-size:50px; color:green">Correct!<p></font></div>'
- }
- else{
- return `<p><div style = "margin-top: ${isFirefox ? "45vh" : "0"};"><i class="fa fa-close" style="font-size:50px; color:red; margin-right: 10px;"></i>` +
- '<font style="font-size:50px; color:red;"">Incorrect!<p></font></div>'
- }
- }
- };
-
- // =========================================================
- // EXPERIMENT TRIAL BLOCKS
-
- var trial = jnd_radius_exp.generate_trial("test");
-
- var experiment = {
- timeline: [trial, feedback], // We use same feedback block as that used in practice
- loop_function: function(data){ // Return true if timeline should continue
- // Return false if timeline should end
-
- // For debugging, if you want to exit out of experiment, press q:
- if (jsPsych.pluginAPI.convertKeyCharacterToKeyCode('q') == data.values()[0].key_press){
- return false;
- }
-
- // If subcondition should end:
- if(jnd_radius_exp.end_sub_condition()){
- jnd_radius_exp.first_trial_of_sub_condition = true;
- // If there are still more subconditions, increment current index
- if (jnd_radius_exp.current_sub_condition_index < (jnd_radius_exp.sub_conditions_constants.length-1)){
- jnd_radius_exp.current_sub_condition_index++;
- console.log("!!!!!!!!!! Moved to new sub condition at index "
- + jnd_radius_exp.current_sub_condition_index);
- return true;
- }
- // Else end experiment
- else{
- return false;
- }
- }
- // Else continue w/ current subcondition:
- else {
- return true;
- }
- },
- on_finish: function(data){
- jnd_radius_exp.trial_data = data;
- }
- };
-
- timeline.push(experiment);
-
- console.log("======================");
-
- // =========================================================
- // DATA DOWNLOADING
-
- var experiment_end = {
- type: 'html-keyboard-response',
- stimulus: `<div align = "center" style = "margin-top: ${isFirefox ? "45vh" : "0"};">` +
- '<p><font size = 10>You have completed the experiment!<p></font>' +
- '<br>' +
- 'Trial and summary data files will now automatically download locally.' +
- '</div>' ,
- on_start: function(){
-
- jnd_radius_exp.export_trial_data();
- jnd_radius_exp.export_summary_data();
-
- // Reset background color to feedback
- document.body.style.backgroundColor = jnd_radius_exp.trial_data.feedback_background_color;
- }
- };
- timeline.push(experiment_end);
-
- // =========================================================
- // START JSPSYCH
-
- jsPsych.init({
- timeline: timeline,
- on_finish: function(){
- jsPsych.data.displayData();
- }
- });