diff --git a/jspsych-animation.js b/jspsych-animation.js index d8dbae15..f859c9ef 100644 --- a/jspsych-animation.js +++ b/jspsych-animation.js @@ -13,6 +13,9 @@ function animation_create(params) trials[i]["frame_time"] = params["frame_time"]; trials[i]["repetitions"] = params["repetitions"]; trials[i]["timing"] = params["timing"]; + if(params["prompt"] != undefined){ + trials[i]["prompt"] = params["prompt"][i]; + } } return trials; } @@ -27,6 +30,7 @@ function animation_trial($this, block, trial, part) animate_interval = setInterval(function(){ showImage = true; $('.animate').remove(); + $this.html(""); // clear everything animate_frame++; if(animate_frame == trial.stims.length) { @@ -41,6 +45,7 @@ function animation_trial($this, block, trial, part) } if(showImage){ $.fn.jsPsych.showImage($this, trial.stims[animate_frame], 'animate'); + if(trial.prompt != undefined) { $this.append(trial.prompt); } } }, trial.frame_time); break; diff --git a/jspsych-categorize-feedback.js b/jspsych-categorize-feedback.js new file mode 100644 index 00000000..c9bfba68 --- /dev/null +++ b/jspsych-categorize-feedback.js @@ -0,0 +1,113 @@ +// timing parameters: [length to show feedback, intertrial gap, optional length to display target] +// if optional length to display target is missing, then target is displayed until subject responds. + +//TODO +// option to keep stim on screen during feedback +// way to provide corrective feedback + +function cf_create(params) +{ + cf_stims = params["stimuli"]; + trials = new Array(cf_stims.length); + for(var i = 0; i < trials.length; i++) + { + trials[i] = {}; + trials[i]["type"] = "cf"; + trials[i]["a_path"] = cf_stims[i]; + trials[i]["timing"] = params["timing"]; + trials[i]["key_answer"] = params["key_answer"][i]; + trials[i]["text_answer"] = params["text_answer"][i]; + trials[i]["choices"] = params["choices"]; + trials[i]["correct_text"] = params["correct_text"]; + trials[i]["incorrect_text"] = params["incorrect_text"]; + trials[i]["show_stim_feedback"] = params["show_stim_feedback"]; + if(params["prompt"] != undefined){ + trials[i]["prompt"] = params["prompt"]; + } + if(params["data"]!=undefined){ + trials[i]["data"] = params["data"][i]; + } + } + return trials; +} + +function cf_trial($this, block, trial, part) +{ + //console.log(block.trial_idx); + switch(part){ + case 1: + p1_time = (new Date()).getTime(); + $.fn.jsPsych.showImage($this, trial.a_path, 'cf'); + if(trial.timing[2]!=undefined){ + setTimeout(cf_trial, trial.timing[2], $this, block, trial, part + 1); + } else { + //show prompt here + $this.append(trial.prompt); + cf_trial($this, block, trial, part + 1); + } + break; + case 2: + p2_time = (new Date()).getTime(); + if(trial.timing[2]!=undefined){ + $('.cf').remove(); + $this.html(trial.prompt); + } + startTime = (new Date()).getTime(); + var resp_func = function(e) { + var flag = false; + var correct = false; + if(e.which==trial.key_answer) // correct category + { + flag = true; + correct = true; + } + else + { + // check if the key is any of the options, or if it is an accidental keystroke + for(var i=0;i', { + "src": trial.a_path, + "class": 'sd' + })); + setTimeout(function(){sd_trial($this, block, trial, part + 1);}, trial.timing[0]); break; case 2: p2_time = (new Date()).getTime(); $('.sd').remove(); - setTimeout(sd_trial, trial.timing[1], $this, block, trial, part + 1); + setTimeout(function(){sd_trial($this, block, trial, part + 1);}, trial.timing[1]); break; case 3: p3_time = (new Date()).getTime(); - $.fn.jsPsych.showImage($this, trial.b_path, 'sd'); + $this.append($('', { + "src": trial.b_path, + "class": 'sd' + })); if(trial.timing[3]!=undefined){ - setTimeout(sd_trial, trial.timing[3], $this, block, trial, part + 1); + setTimeout(function(){sd_trial($this, block, trial, part + 1);}, trial.timing[3]); } else { sd_trial($this, block, trial, part + 1); } @@ -73,7 +79,7 @@ function sd_trial($this, block, trial, part) $(document).unbind('keyup',resp_func); $('.sd').remove(); $this.html(''); - setTimeout(function(b){b.next();}, trial.timing[2], block); + setTimeout(function(){block.next();}, trial.timing[2]); } } $(document).keyup(resp_func); diff --git a/jspsych-text.js b/jspsych-text.js index f27e9e7b..1f1c35ea 100755 --- a/jspsych-text.js +++ b/jspsych-text.js @@ -21,7 +21,7 @@ function text_trial($this, block, trial, part) flag = true; $(document).unbind('keyup',key_listener); $this.html(''); - setTimeout(function(b){b.next();}, trial.timing[0], block); + setTimeout(function(){block.next();}, trial.timing[0]); } } $(document).keyup(key_listener); diff --git a/jspsych-xab-touch.js b/jspsych-xab-touch.js index 3020aa63..73689e2f 100644 --- a/jspsych-xab-touch.js +++ b/jspsych-xab-touch.js @@ -22,13 +22,13 @@ function xab_touch_trial($this, block, trial, part) switch(part){ case 1: p1_time = (new Date()).getTime(); - $.fn.jsPsych.showImage($this, trial.a_path, 'xab'); - setTimeout(xab_trial, trial.timing[0], $this, block, trial, part + 1); + $.fn.jsPsych.showImage($this, trial.a_path, 'xab_touch'); + setTimeout(xab_touch_trial, trial.timing[0], $this, block, trial, part + 1); break; case 2: p2_time = (new Date()).getTime(); - $('.xab').remove(); - setTimeout(xab_trial, trial.timing[1], $this, block, trial, part + 1); + $('.xab_touch').remove(); + setTimeout(xab_touch_trial, trial.timing[1], $this, block, trial, part + 1); break; case 3: p3_time = (new Date()).getTime(); @@ -40,37 +40,41 @@ function xab_touch_trial($this, block, trial, part) } //$.fn.jsPsych.showImages($this, images, 'xab'); + var correct=false; + var left_img = document.createElement('img'); left_img.setAttribute('src', images[0]); left_img.setAttribute('class', 'xab_touch'); + left_img.setAttribute('id','left_img'); $this.append(left_img); - left_img.click(function() { + $("#left_img").click(function() { if(target_left) { correct = true; } endTime = (new Date()).getTime(); rt = (endTime-startTime); stim1_time = (p2_time-p1_time); isi_time = (p3_time-p2_time); - var trial_data = {"rt": rt, "correct": correct, "a_path": trial.a_path, "b_path": trial.b_path, "key_press": e.which, "key_press": e.which, "stim1_time": stim1_time, "isi_time":isi_time} + var trial_data = {"rt": rt, "correct": correct, "a_path": trial.a_path, "b_path": trial.b_path, "stim1_time": stim1_time, "isi_time":isi_time} block.data[block.trial_idx] = $.extend({},trial_data,trial.data); - $('.xab').remove(); + $('.xab_touch').remove(); setTimeout(function(b){b.next();}, trial.timing[2], block); }); var right_img = document.createElement('img'); right_img.setAttribute('src', images[1]); right_img.setAttribute('class', 'xab_touch'); + right_img.setAttribute('id','right_img'); $this.append(right_img); - right_img.click(function() { + $("#right_img").click(function() { if(!target_left) { correct = true; } endTime = (new Date()).getTime(); rt = (endTime-startTime); stim1_time = (p2_time-p1_time); isi_time = (p3_time-p2_time); - var trial_data = {"rt": rt, "correct": correct, "a_path": trial.a_path, "b_path": trial.b_path, "key_press": e.which, "key_press": e.which, "stim1_time": stim1_time, "isi_time":isi_time} + var trial_data = {"rt": rt, "correct": correct, "a_path": trial.a_path, "b_path": trial.b_path, "stim1_time": stim1_time, "isi_time":isi_time} block.data[block.trial_idx] = $.extend({},trial_data,trial.data); - $('.xab').remove(); + $('.xab_touch').remove(); setTimeout(function(b){b.next();}, trial.timing[2], block); });