diff --git a/jspsych-xab.js b/jspsych-xab.js index aa6d8e87..e7f45363 100755 --- a/jspsych-xab.js +++ b/jspsych-xab.js @@ -1,96 +1,96 @@ - -(function( $ ) { - jsPsych.xab = (function(){ - - var plugin = {} - - plugin.create = function(params) - { - //xab_stims = shuffle(xab_stims); - xab_stims = params["stimuli"]; - trials = new Array(xab_stims.length); - for(var i = 0; i < trials.length; i++) - { - trials[i] = {}; - trials[i]["type"] = "xab"; - trials[i]["a_path"] = xab_stims[i][0]; - trials[i]["b_path"] = xab_stims[i][1]; - trials[i]["timing"] = params["timing"]; - if(params["data"]!=undefined){ - trials[i]["data"] = params["data"][i]; - } - } - return trials; - } - - plugin.trial = function($this, block, trial, part) - { - switch(part){ - case 1: - p1_time = (new Date()).getTime(); - $this.append($('', { - "src": trial.a_path, - "class": 'xab' - })); - setTimeout(function(){plugin.trial($this, block, trial, part + 1)}, trial.timing[0]); - break; - case 2: - p2_time = (new Date()).getTime(); - $('.xab').remove(); - setTimeout(function(){plugin.trial($this, block, trial, part + 1)}, trial.timing[1]); - break; - case 3: - p3_time = (new Date()).getTime(); - startTime = (new Date()).getTime(); - var images = [trial.a_path, trial.b_path]; - var target_left = (Math.floor(Math.random()*2)==0); // binary true/false choice - if(!target_left){ - images = [trial.b_path, trial.a_path]; - } - - // show the images - $this.append($('', { - "src": images[0], - "class": 'xab' - })); - $this.append($('', { - "src": images[1], - "class": 'xab' - })); - - - var resp_func = function(e) { - var flag = false; - var correct = false; - if(e.which=='80') // 'p' key - { - flag = true; - if(!target_left) { correct = true; } - } else if(e.which=='81') // 'q' key - { - flag = true; - if(target_left){ correct = true; } - } - if(flag) - { - 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} - block.data[block.trial_idx] = $.extend({},trial_data,trial.data); - $(document).unbind('keyup',resp_func); - $('.xab').remove(); - setTimeout(function(){block.next();}, trial.timing[2]); - } - } - $(document).keyup(resp_func); - //TODO: CHECK IF IMAGE SHOULD DISAPPEAR - //based on timings - break; - } - } - - return plugin; - })(); + +(function( $ ) { + jsPsych.xab = (function(){ + + var plugin = {} + + plugin.create = function(params) + { + //xab_stims = shuffle(xab_stims); + xab_stims = params["stimuli"]; + trials = new Array(xab_stims.length); + for(var i = 0; i < trials.length; i++) + { + trials[i] = {}; + trials[i]["type"] = "xab"; + trials[i]["a_path"] = xab_stims[i][0]; + trials[i]["b_path"] = xab_stims[i][1]; + trials[i]["timing"] = params["timing"]; + trials[i]["data"] = params["data"][i] || params["data"] || undefined; + trials[i]["left_key"] = params["left_key"] || 81; // defaults to 'q' + trials[i]["right_key"] = params["right_key"] || 80; // defaults to 'p' + } + return trials; + } + + plugin.trial = function($this, block, trial, part) + { + switch(part){ + case 1: + p1_time = (new Date()).getTime(); + $this.append($('', { + "src": trial.a_path, + "class": 'xab' + })); + setTimeout(function(){plugin.trial($this, block, trial, part + 1)}, trial.timing[0]); + break; + case 2: + p2_time = (new Date()).getTime(); + $('.xab').remove(); + setTimeout(function(){plugin.trial($this, block, trial, part + 1)}, trial.timing[1]); + break; + case 3: + p3_time = (new Date()).getTime(); + startTime = (new Date()).getTime(); + var images = [trial.a_path, trial.b_path]; + var target_left = (Math.floor(Math.random()*2)==0); // binary true/false choice + if(!target_left){ + images = [trial.b_path, trial.a_path]; + } + + // show the images + $this.append($('', { + "src": images[0], + "class": 'xab' + })); + $this.append($('', { + "src": images[1], + "class": 'xab' + })); + + + var resp_func = function(e) { + var flag = false; + var correct = false; + if(e.which== trial.left_key) // 'p' key + { + flag = true; + if(!target_left) { correct = true; } + } else if(e.which== trial.right_key) // 'q' key + { + flag = true; + if(target_left){ correct = true; } + } + if(flag) + { + 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} + block.data[block.trial_idx] = $.extend({},trial_data,trial.data); + $(document).unbind('keyup',resp_func); + $('.xab').remove(); + setTimeout(function(){block.next();}, trial.timing[2]); + } + } + $(document).keyup(resp_func); + //TODO: CHECK IF IMAGE SHOULD DISAPPEAR + //based on timings + break; + } + } + + return plugin; + })(); })(jQuery); \ No newline at end of file