import { JsPsych , JsPsychPlugin , ParameterType , TrialType } from "jspsych" ; const info = < const > { name : "html-keyboard-response" , parameters : { /**
         * The HTML string to be displayed.
         */ stimulus : { type : ParameterType . HTML_STRING , pretty_name : "Stimulus" , default : undefined , } , /**
         * Array containing the key(s) the subject is allowed to press to respond to the stimulus.
         */ choices : { type : ParameterType . KEYS , pretty_name : "Choices" , default : "ALL_KEYS" , } , /**
         * Any content here will be displayed below the stimulus.
         */ prompt : { type : ParameterType . HTML_STRING , pretty_name : "Prompt" , default : null , } , /**
         * How long to show the stimulus.
         */ stimulus_duration : { type : ParameterType . INT , pretty_name : "Stimulus duration" , default : null , } , /**
         * How long to show trial before it ends.
         */ trial_duration : { type : ParameterType . INT , pretty_name : "Trial duration" , default : null , } , /**
         * If true, trial will end when subject makes a response.
         */ response_ends_trial : { type : ParameterType . BOOL , pretty_name : "Response ends trial" , default : true , } , } , } ; type Info = typeof info ; author Josh de Leeuw
 *  see https class HtmlKeyboardResponsePlugin implements JsPsychPlugin < Info > { static info = info ; constructor ( private jsPsych ) { } trial ( display_element , trial ) { var new_html = '<div id="jspsych-html-keyboard-response-stimulus">' + trial . stimulus + "</div>" ; if ( trial . prompt !== null ) { new_html += trial . prompt ; } display_element . innerHTML = new_html ; var response = { rt : null , key : null , } ; const end_trial = ( ) => { this . jsPsych . pluginAPI . clearAllTimeouts ( ) ; if ( typeof keyboardListener !== "undefined" ) { this . jsPsych . pluginAPI . cancelKeyboardResponse ( keyboardListener ) ; } var trial_data = { rt : response . rt , stimulus : trial . stimulus , response : response . key , } ; display_element . innerHTML = "" ; this . jsPsych . finishTrial ( trial_data ) ; } ; var after_response = ( info ) => { display_element . querySelector ( "#jspsych-html-keyboard-response-stimulus" ) . className += " responded" ; if ( response . key == null ) { response = info ; } if ( trial . response_ends_trial ) { end_trial ( ) ; } } ; if ( trial . choices != "NO_KEYS" ) { var keyboardListener = this . jsPsych . pluginAPI . getKeyboardResponse ( { callback_function : after_response , valid_responses : trial . choices , rt_method : "performance" , persist : false , allow_held_key : false , } ) ; } if ( trial . stimulus_duration !== null ) { this . jsPsych . pluginAPI . setTimeout ( ( ) => { display_element . querySelector < HTMLElement > ( "#jspsych-html-keyboard-response-stimulus" ) . style . visibility = "hidden" ; } , trial . stimulus_duration ) ; } if ( trial . trial_duration !== null ) { this . jsPsych . pluginAPI . setTimeout ( end_trial , trial . trial_duration ) ; } } simulate ( trial , simulation_mode , simulation_options , load_callback ) { if ( simulation_mode == "data-only" ) { load_callback ( ) ; this . simulate_data_only ( trial , simulation_options ) ; } if ( simulation_mode == "visual" ) { this . simulate_visual ( trial , simulation_options , load_callback ) ; } } private create_simulation_data ( trial , simulation_options ) { const default_data = { stimulus : trial . stimulus , rt : this . jsPsych . randomization . sampleExGaussian ( 500 , 50 , 1 / 150 , true ) , response : this . jsPsych . pluginAPI . getValidKey ( trial . choices ) , } ; const data = this . jsPsych . pluginAPI . mergeSimulationData ( default_data , simulation_options ) ; this . jsPsych . pluginAPI . ensureSimulationDataConsistency ( trial , data ) ; return data ; } private simulate_data_only ( trial , simulation_options ) { const data = this . create_simulation_data ( trial , simulation_options ) ; this . jsPsych . finishTrial ( data ) ; } private simulate_visual ( trial , simulation_options , load_callback ) { const data = this . create_simulation_data ( trial , simulation_options ) ; const display_element = this . jsPsych . getDisplayElement ( ) ; this . trial ( display_element , trial ) ; load_callback ( ) ; if ( data . rt !== null ) { this . jsPsych . pluginAPI . pressKey ( data . response , data . rt ) ; } } } export default HtmlKeyboardResponsePlugin ;