mirror of
https://github.com/jspsych/jsPsych.git
synced 2025-05-10 11:10:54 +00:00
Rescoped everything so that jsPsych is not a jQuery plugin.
The top level object is jsPsych, and plugins are defined as jsPsych.PLUGIN. The library also loads everything dynamically now, so the user only needs to load the main jsPsych script (and specify the src for any plugins). This also changes how the library is loaded initially, since it is not based on the jQuery method anymore. See wiki.
This commit is contained in:
parent
1d1a9c7e34
commit
befdcfc1cd
@ -2,7 +2,7 @@
|
||||
// Josh de Leeuw
|
||||
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.animation = (function(){
|
||||
jsPsych.animation = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "animate";
|
||||
trials[i]["type"] = "animation";
|
||||
trials[i]["stims"] = stims[i];
|
||||
trials[i]["frame_time"] = params["frame_time"];
|
||||
trials[i]["repetitions"] = params["repetitions"];
|
||||
|
@ -6,7 +6,7 @@
|
||||
// way to provide corrective feedback
|
||||
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.categorize-feedback = (function(){
|
||||
jsPsych.categorize-feedback = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "cf";
|
||||
trials[i]["type"] = "categorize-feedback";
|
||||
trials[i]["a_path"] = cf_stims[i];
|
||||
trials[i]["timing"] = params["timing"];
|
||||
trials[i]["key_answer"] = params["key_answer"][i];
|
||||
|
@ -2,7 +2,7 @@
|
||||
// if optional length to display target is missing, then target is displayed until subject responds.
|
||||
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.categorize-unknown = (function(){
|
||||
jsPsych.categorize-unknown = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "cu";
|
||||
trials[i]["type"] = "categorize-unknown";
|
||||
trials[i]["a_path"] = cu_stims[i];
|
||||
trials[i]["timing"] = params["timing"];
|
||||
trials[i]["choices"] = params["choices"];
|
||||
|
@ -1,5 +1,5 @@
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.samedifferent = (function(){
|
||||
jsPsych.samedifferent = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "sd";
|
||||
trials[i]["type"] = "samedifferent";
|
||||
trials[i]["a_path"] = sd_stims[i][0];
|
||||
trials[i]["b_path"] = sd_stims[i][1];
|
||||
trials[i]["timing"] = params["timing"];
|
||||
|
@ -1,5 +1,5 @@
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.similarity = (function(){
|
||||
jsPsych.similarity = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "sim";
|
||||
trials[i]["type"] = "similarity";
|
||||
trials[i]["a_path"] = sim_stims[i][0];
|
||||
trials[i]["b_path"] = sim_stims[i][1];
|
||||
trials[i]["timing"] = params["timing"];
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.text = (function(){
|
||||
jsPsych.text = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.xab-touch = (function(){
|
||||
jsPsych.xab-touch = (function(){
|
||||
|
||||
var plugin = {};
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
for(var i = 0; i < trials.length; i++)
|
||||
{
|
||||
trials[i] = {};
|
||||
trials[i]["type"] = "xab_touch";
|
||||
trials[i]["type"] = "xab-touch";
|
||||
trials[i]["a_path"] = xab_stims[i][0];
|
||||
trials[i]["b_path"] = xab_stims[i][1];
|
||||
trials[i]["timing"] = params["timing"];
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych.xab = (function(){
|
||||
jsPsych.xab = (function(){
|
||||
|
||||
var plugin = {}
|
||||
|
||||
|
80
jspsych.js
80
jspsych.js
@ -1,22 +1,65 @@
|
||||
// jspsych.js - a jQuery plugin for running psychology experiments
|
||||
// jspsych.js
|
||||
//
|
||||
// Josh de Leeuw and Drew Hendrickson
|
||||
// Percepts and Concepts Lab, Indiana University
|
||||
//
|
||||
(function( $ ) {
|
||||
$.fn.jsPsych = function(options) {
|
||||
// build main options list before element iteration
|
||||
var opts = $.extend({}, $.fn.jsPsych.defaults, options);
|
||||
jsPsych = (function() {
|
||||
|
||||
//
|
||||
// public object
|
||||
//
|
||||
var core = {};
|
||||
|
||||
//
|
||||
// private class variables
|
||||
//
|
||||
|
||||
// options
|
||||
var opts = {};
|
||||
// exp structure
|
||||
var exp_blocks = [];
|
||||
// flow control
|
||||
var curr_block = 0;
|
||||
// execute experiment
|
||||
return this.each(function() {
|
||||
$this = $(this);
|
||||
// everything loaded?
|
||||
var initialized = false;
|
||||
// target DOM element
|
||||
var DOM_target;
|
||||
|
||||
//
|
||||
// public methods
|
||||
//
|
||||
|
||||
core.init = function($this, options){
|
||||
// import options
|
||||
opts = $.extend({}, jsPsych.defaults, options);
|
||||
// set target
|
||||
DOM_target = $this;
|
||||
|
||||
// load plugin script files
|
||||
var scripts_loaded = 0;
|
||||
// load all of the plugins that are defined in the opts["plugins"]
|
||||
for(var j = 0; j < opts["plugins"].length; j++)
|
||||
{
|
||||
$.getScript(opts["plugins"][j]["src"], function(){
|
||||
scripts_loaded++;
|
||||
if(scripts_loaded==opts["plugins"].length) {
|
||||
intialized = true;
|
||||
run();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// private functions //
|
||||
//
|
||||
function run()
|
||||
{
|
||||
// take the experiment structure and dynamically create a set of blocks
|
||||
exp_blocks = new Array(opts["experiment_structure"].length);
|
||||
|
||||
// iterate through block list to create trials
|
||||
for(var i = exp_blocks.length-1; i>=0; i--)
|
||||
{
|
||||
var trials = "undefined";
|
||||
@ -25,20 +68,17 @@
|
||||
{
|
||||
if(opts["experiment_structure"][i]["type"] == opts["plugins"][j]["type"])
|
||||
{
|
||||
trials = opts["plugins"][j]["src"]["create"].call(null, opts["experiment_structure"][i]);
|
||||
trials = jsPsych[opts["plugins"][j]["type"]]["create"].call(null, opts["experiment_structure"][i]);
|
||||
}
|
||||
}
|
||||
|
||||
exp_blocks[i] = createBlock(trials);
|
||||
|
||||
}
|
||||
|
||||
// run the first block
|
||||
exp_blocks[0].next();
|
||||
});
|
||||
//
|
||||
// private functions //
|
||||
//
|
||||
}
|
||||
|
||||
function nextBlock()
|
||||
{
|
||||
curr_block += 1;
|
||||
@ -94,19 +134,13 @@
|
||||
{
|
||||
if(trial.type == opts["plugins"][j]["type"])
|
||||
{
|
||||
opts["plugins"][j]["src"]["trial"].call(this, $this, block, trial, 1);
|
||||
jsPsych[opts["plugins"][j]["type"]]["trial"].call(this, DOM_target, block, trial, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
//
|
||||
// default parameters //
|
||||
//
|
||||
$.fn.jsPsych.defaults = {
|
||||
// overall experiment parameters
|
||||
experiment_structure: [],
|
||||
plugins: []
|
||||
};
|
||||
|
||||
return core;
|
||||
})();
|
||||
}) (jQuery);
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user