From 99aad4d9d822e70cfdc8d0aea31d6a4ebd53e510 Mon Sep 17 00:00:00 2001 From: Calua de Lacerda Pataca Date: Tue, 17 Dec 2024 15:45:28 -0500 Subject: [PATCH 1/5] triple handle controller plugin --- .../plugin-triple-handle-controller/README.md | 37 + .../docs/index.md | 104 ++ .../examples/index.html | 100 ++ .../examples/videos/BulletTrainFriction.webm | Bin 0 -> 116372 bytes .../src/index.js | 1024 +++++++++++++++++ 5 files changed, 1265 insertions(+) create mode 100644 packages/plugin-triple-handle-controller/README.md create mode 100644 packages/plugin-triple-handle-controller/docs/index.md create mode 100644 packages/plugin-triple-handle-controller/examples/index.html create mode 100644 packages/plugin-triple-handle-controller/examples/videos/BulletTrainFriction.webm create mode 100644 packages/plugin-triple-handle-controller/src/index.js diff --git a/packages/plugin-triple-handle-controller/README.md b/packages/plugin-triple-handle-controller/README.md new file mode 100644 index 00000000..6a6d125b --- /dev/null +++ b/packages/plugin-triple-handle-controller/README.md @@ -0,0 +1,37 @@ +# triple-handle-controller plugin + +TODO: Add Author/Citations. + +## Overview + +This plugin collects responses to a video file in real time using a game controller. + +## Loading + +### In browser + +```js + +``` + +Using the JavaScript file downloaded from a GitHub release dist archive: + +```js + +``` + +Using NPM: + +``` +npm install @jspsych/plugin-html-audio-response +``` + +```js +import htmlAudioResponse from "@jspsych/plugin-html-audio-response"; +``` + +## Examples + +This code runs an experiment involving two levers. + + +``` + const videos = ["Test.webm"]; + + var experiment = [ + { + type: jsTripleHandleController, + axis_1: 0, + axis_2: 1, + axis_3: 2, + axis_location: ["L", "R", "H"], + axis1_labels: ["No", "Maybe", "Yes"], + axis2_labels: ["0%", "50%", "100%"], + css_clases: ["thc-override"], + axes_labels: ["axis1 (axis 1)", "axis2 (axis 2)", "item 3 (axis 3)"], + title: "Follow the instructions in the video.", + // A monitor refresh rate of 60 Hz means that + // the screen changes every 16.7 ms or higher. + rate: 1000 / 60, //16.777... + }, + ]; + + async function createExperiment() { + const videoSrc = `./videos/${videos[0]}`; + experiment[0].video_src = videoSrc; + jsPsych.run(experiment); + } + + createExperiment(); +``` + +## Demo + +See the examples folder. + +The bullet train video (BulletTrainFriction.webm) is from [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:BulletTrainFriction.webm), under the [Creative Commons CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/deed.en). diff --git a/packages/plugin-triple-handle-controller/examples/index.html b/packages/plugin-triple-handle-controller/examples/index.html new file mode 100644 index 00000000..02a5bcb7 --- /dev/null +++ b/packages/plugin-triple-handle-controller/examples/index.html @@ -0,0 +1,100 @@ + + + + + + Axis1/Axis2/Axis3 Measurements + + + + + + + + + + + + + + diff --git a/packages/plugin-triple-handle-controller/examples/videos/BulletTrainFriction.webm b/packages/plugin-triple-handle-controller/examples/videos/BulletTrainFriction.webm new file mode 100644 index 0000000000000000000000000000000000000000..65068e3c128b19e932c33ea24d0d583f5100b559 GIT binary patch literal 116372 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
    @0eR(H4Oo{^bPOj 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 literal 0 HcmV?d00001 diff --git a/packages/plugin-triple-handle-controller/src/index.js b/packages/plugin-triple-handle-controller/src/index.js new file mode 100644 index 00000000..0bb08646 --- /dev/null +++ b/packages/plugin-triple-handle-controller/src/index.js @@ -0,0 +1,1024 @@ +/** + * jspsych-triple-handle-controller + * version 0.1.0 + * + * A jsPsych plugin for real-time annotation of videos using a game controller. + * + * Created by Caluã de Lacerda Pataca and Russell Lee + * + * This plugin allows participants to watch a video and use a game controller to provide continuous ratings along three axes in real time. The plugin records the data at specified intervals and provides a visual representation of the controller's axes on the screen. + * + * Features: + * - Collects real-time responses to a video using a game controller with multiple axes. + * - Displays visual feedback of the controller's axes on the screen. + * - Allows recording, playing, and resetting of annotations. + * + * + * Parameters: + * - **title**: The title displayed above the video. + * - **video_src**: The source URL of the video to be annotated. + * - **axis_1**, **axis_2**, **axis_3**: Indices of the game controller axes to be used. + * - **axis_location**: The location of the axes on the screen. L = left, H = hidden, R = right. + * - **mode**: Mode of operation (e.g., "DEBUG"). + * - **axes_labels**: Labels for each axis. + * - **axis1_labels**, **axis2_labels**, **axis3_labels**: Labels for the scales of each axis. + * - **rate**: The sampling rate (in milliseconds) for recording data. + */ + +var jsTripleHandleController = (function (jspsych) { + "use strict"; + + /* Set up constants */ + const info = { + name: "3-axis video annotation", + version: "0.1.0", + parameters: { + title: { + type: jspsych.ParameterType.STRING, + default: undefined, + description: "The title displayed above the video", + }, + video_src: { + type: jspsych.ParameterType.STRING, + default: undefined, + description: "The source URL of the video", + }, + axis_1: { + type: jspsych.ParameterType.INT, + default: undefined, + description: + "Indices of the game controller axis that will control measurement axis 1.", + }, + axis_2: { + type: jspsych.ParameterType.INT, + default: undefined, + description: + "Indices of the game controller axis that will control measurement axis 2.", + }, + axis_3: { + type: jspsych.ParameterType.INT, + default: undefined, + description: + "Indices of the game controller axis that will control measurement axis 3.", + }, + axis_location: { + type: jspsych.ParameterType.COMPLEX, + default: ["L", "H", "R"], + description: + "The location of the axes on the screen. L = left, H = hidden, R = right.", + }, + mode: { + type: jspsych.ParameterType.STRING, + default: "DEBUG", + description: "Mode of operation (e.g., 'DEBUG').", + }, + axes_labels: { + type: jspsych.ParameterType.COMPLEX, + default: ["axis1", "axis2", "axis3"], + description: "Labels for each axis", + }, + axis1_labels: { + type: jspsych.ParameterType.COMPLEX, + default: ["low", "neutral", "high"], + description: "Labels for the scales of axis 1", + }, + axis2_labels: { + type: jspsych.ParameterType.COMPLEX, + default: ["negative", "neutral", "positive"], + description: "Labels for the scales of axis 2", + }, + axis3_labels: { + type: jspsych.ParameterType.COMPLEX, + default: ["a", "b", "c"], + description: "Labels for the scales of axis 3", + }, + rate: { + type: jspsych.ParameterType.INT, + default: 1000, + description: "The sampling rate in milliseconds", + }, + }, + }; + + /** + * **Subjective Perception Logger** + * + * This plugin collects responses to an video file in real time + * using a game controller. + * + * @author YOUR NAME + * @see {@link https://DOCUMENTATION_URL DOCUMENTATION LINK TEXT} + */ + class jsTripleHandleControllerPlugin { + constructor(jsPsych) { + this.jsPsych = jsPsych; + this.playButtonClick = this.playButtonClick.bind(this); + this.recordButtonClick = this.recordButtonClick.bind(this); + this.resetButtonClick = this.resetButtonClick.bind(this); + this.saveButtonClick = this.saveButtonClick.bind(this); + this.updateStatus = this.updateStatus.bind(this); + this.connectHandler = this.connectHandler.bind(this); + this.disconnectHandler = this.disconnectHandler.bind(this); + this.videoEnded = this.videoEnded.bind(this); + } + + /** + * Finds (seeks) out gamepads. + * @returns {Array} An Array of Gamepad objects + */ + seekGamepads() { + return navigator.getGamepads + ? navigator.getGamepads() + : webkitGetGamepads + ? webkitGetGamepads() + : []; + } + + /** + * Converts a value from one range to another. + * @param {Number} value Value to convert. + * @param {Number} in_min Minimum value of the old range. + * @param {Number} in_max Maximum value of the old range. + * @param {Number} out_min Minimum value of the new range. + * @param {Number} out_max Minimum value of the new range. + * @returns {Number} The value from the old range converted to the new range. + */ + mapValue(value, in_min, in_max, out_min, out_max) { + return ( + ((value - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min + ); + } + + /** + * Collects and update values from a controller. + * @returns {undefined} No value. + */ + updateStatus() { + if (!this.animate) { + return; + } + const gamepads = this.seekGamepads(); + if (gamepads.length == 0) { + return; + } + for (const i in gamepads) { + // this assumes only one plugged in controller + if (gamepads[i] && "axes" in gamepads[i]) { + let axis3 = gamepads[i].axes[this.axis3], + axis2 = gamepads[i].axes[this.axis2], + axis1 = gamepads[i].axes[this.axis1]; + let axis3Meter = 1 - (axis3 + 1) / 2, + axis2Meter = 1 - (axis2 + 1) / 2, + axis1Meter = 1 - (axis1 + 1) / 2; + + this.currentAxis1 = Math.max( + 0, + this.mapValue(axis1Meter, this.zeroThreshold, 1, 0, 1) + ); + this.currentAxis2 = Math.max( + 0, + this.mapValue(axis2Meter, this.zeroThreshold, 1, 0, 1) + ); + this.currentAxis3 = Math.max( + 0, + this.mapValue(axis3Meter, this.zeroThreshold, 1, 0, 1) + ); + try { + document + .getElementById("thc-measuring-dimension-2") + .style.setProperty( + `--meter-height`, + Math.ceil(100 * this.currentAxis3) / 100 + ); + } catch {} + try { + document + .getElementById("thc-measuring-dimension-1") + .style.setProperty( + `--meter-height`, + Math.ceil(100 * this.currentAxis2) / 100 + ); + } catch {} + try { + document + .getElementById("thc-measuring-dimension-0") + .style.setProperty( + `--meter-height`, + Math.ceil(100 * this.currentAxis1) / 100 + ); + } catch {} + } + } + requestAnimationFrame(this.updateStatus); + } + + /** + * Ends a trial. + */ + endIt() { + window.clearInterval(this.interval); + this.animate = false; + // end trial + this.jsPsych.finishTrial({ + data_arrays: this.dataArrays, + rate: this.rate, + video_src: this.videoSrc, + duration: this.videoDuration, + }); + } + + /** + * Checks if there is a controller with at least two axises are plugged in. + * @returns {Boolean} True if a controller with at least two axes are pluged in, false otherwise + */ + validControllerPluggedIn() { + const gamepads = this.seekGamepads(); + if (gamepads.length == 0) { + return false; + } + let foundAxis3Throttle = false, + foundAxis2Throttle = false, + foundAxis1Throttle = false; + for (const i in gamepads) { + if (gamepads[i] && "axes" in gamepads[i]) { + if (gamepads[i].axes[this.axis3] !== undefined) { + foundAxis3Throttle = true; + } + if (gamepads[i].axes[this.axis2] !== undefined) { + foundAxis2Throttle = true; + } + if (gamepads[i].axes[this.axis1] !== undefined) { + foundAxis1Throttle = true; + } + } + } + return foundAxis1Throttle && foundAxis2Throttle && foundAxis3Throttle; + } + + /** + * Connects a gamepad. + * @param {Gamepad} e The gamepad object to be connected. + */ + connectHandler(e) { + this.controllers[e.gamepad.index] = e.gamepad; + if (this.validControllerPluggedIn()) { + document.getElementById("thc-overlay").style.display = "none"; + this.startDataCollection(); + } + } + /** + * Disconnects a gamepad. + * @param {Gamepad} e The gamepad object to be disconnected. + */ + disconnectHandler(e) { + delete this.controllers[e.gamepad.index]; + if (!this.validControllerPluggedIn()) { + document.getElementById("thc-overlay").style.display = "flex"; + this.pauseRecording(); + this.pausePlaying(); + } + } + /** + * Starts the data collection + * @returns {undefined} No value if there is data collection already started. + */ + startDataCollection() { + if (this.interval != null) { + // has already started! + return; + } + + if (Object.keys(this.controllers).length > 0) { + this.animate = true; + requestAnimationFrame(this.updateStatus); + this.interval = window.setInterval(() => { + this.recordData(); + }, this.rate); + } + } + + /** + * Records data from the controller. + * @returns {undefined} No data + */ + recordData() { + if ( + this.currentAxis1 == null || + this.currentAxis2 == null || + this.currentAxis3 == null || + this.videoPlayer.paused || + !this.recordingData + ) { + this.recordingFeedback.innerText = ""; + return; + } + if (this.mode == "DEBUG") { + this.recordingFeedback.innerText = "Recording"; + } + let i = this.dataArrays.length - 1; + this.dataArrays[i].axis1Array.push(this.currentAxis1); + this.dataArrays[i].axis2Array.push(this.currentAxis2); + this.dataArrays[i].axis3Array.push(this.currentAxis3); + console.log(this.currentAxis1, this.currentAxis2, this.currentAxis3); + } + + /** + * Resets all axis data + */ + resetData() { + this.dataArrays.pop(); + this.dataArrays.push({ axis1Array: [], axis2Array: [], axis3Array: [] }); + } + + /** + * Starts the video. + */ + startPlaying() { + this.playBtn.textContent = this.pauseStr; + this.playBtn.classList.add("active-btn"); + this.videoPlayer.classList.add("playing"); + this.recordBtn.disabled = true; + this.videoPlayer.play(); + } + + /** + * Pauses the video. + */ + pausePlaying() { + this.playBtn.textContent = this.playStr; + this.playBtn.classList.remove("active-btn"); + this.videoPlayer.classList.remove("playing"); + this.recordBtn.disabled = false; + this.videoPlayer.pause(); + } + + /** + * Starts recording of data. Also starts the video in the video player. + */ + startRecording() { + if (!this.recordingData) { + this.recordingData = true; + this.videoPlayer.currentTime = 0; + } + this.resetBtn.disabled = false; + this.videoPlayer.classList.add("recording"); + this.measuringNeedles[0].classList.add("recording"); + this.measuringNeedles[1].classList.add("recording"); + this.measuringNeedles[2].classList.add("recording"); + this.recordBtn.textContent = this.pauseStr; + this.recordBtn.classList.add("active-btn"); + this.playBtn.disabled = true; + this.videoPlayer.play(); + } + + /** + * Pauses recording of data. + */ + pauseRecording() { + this.videoPlayer.pause(); + this.videoPlayer.classList.remove("recording"); + this.measuringNeedles[0].classList.remove("recording"); + this.measuringNeedles[1].classList.remove("recording"); + this.measuringNeedles[2].classList.remove("recording"); + this.recordBtn.textContent = this.recordStr; + this.recordBtn.classList.remove("active-btn"); + this.playBtn.disabled = false; + } + + /** + * Stops recording of data. + */ + stopRecording() { + this.pauseRecording(); + this.recordingData = false; + this.resetData(); + } + + /** + * Starts the video. Does not record data. + * @returns {undefined} No value + */ + playButtonClick() { + if (this.playBtn.textContent == this.playStr) { + if (this.recordingData) { + // ask user if they want to reset previous recording + /*if ( + !window.confirm( + `There is a current recording in progress. Do you want to erase it?` + ) + ) { + console.log("where is this message") + return; + }*/ + this.stopRecording(); + this.videoPlayer.currentTime = 0; + } + + this.startPlaying(); + } else { + this.pausePlaying(); + } + } + + /** + * Starts recording data. + */ + recordButtonClick() { + // when the video is playing but not recording + // this button will be disabled, so no need to + // test those cases + if (this.videoPlayer.paused) { + this.startRecording(); + } else { + this.pauseRecording(); + } + } + + /** + * Locks the video player button and unlocks the data buttons. + */ + videoEnded() { + if (this.recordingData) { + // locks player buttons + this.recordBtn.disabled = true; + this.recordBtn.textContent = this.recordStr; + this.recordBtn.classList.remove("active-btn"); + this.playBtn.disabled = true; + this.playBtn.textContent = this.playStr; + this.playBtn.classList.remove("active-btn"); + + this.videoPlayer.classList.remove("recording", "playing"); + this.measuringNeedles[0].classList.remove("recording"); + this.measuringNeedles[1].classList.remove("recording"); + this.measuringNeedles[2].classList.remove("recording"); + // unlocks data button + this.saveBtn.disabled = false; + } else { + this.videoPlayer.currentTime = 0; + this.pausePlaying(); + } + } + + /** + * Resets the video and the recording. + * @returns {undefined} No data + */ + resetButtonClick() { + if (this.recordingData) { + // this might not always be needed, but it's probably + // fine to call it just in case + this.pauseRecording(); + } + /*if ( + !window.confirm( + `This will remove the already recorded data and start again. Are you sure?` + ) + ) { + return; + }*/ + this.videoPlayer.currentTime = 0; + this.resetData(); + this.recordBtn.disabled = false; + this.playBtn.disabled = false; + this.resetBtn.disabled = true; + this.saveBtn.disabled = true; + } + + /** + * Saves data. + */ + saveButtonClick() { + this.endIt(); + } + + /** + * Combines labels together + * @param {*} labels The labels to be formatted + * @returns {String} None if no labels, + * HTML containing a span of the cominbed string otherwise. + */ + formatLabels(labels) { + if (!labels) { + return ``; + } + return labels.map((s) => "" + s + "").join(""); + } + + /*containerFormatter(){ + console.log(this.axis_location); + let leftHolder = 0; + let rightHolder = 0; + let gridBuilder = ""; + let gridIndex = 1; + for (const item of this.axis_location){ + console.log(item); + if (item == "L"){ + leftHolder++; + } else if(item == "R"){ + rightHolder++; + } + } + console.log(leftHolder, rightHolder); + + //return "50%"; + } */ + + /** + * Sets up a trial to record controller in real time + * while watching a video. + * @param {HTMLElement} display_element The DOM element + * where jsPsych content is being rendered. + * @param {object} trial Object containing all of the + * parameters specified in the corresponding TimelineNode. + */ + trial(display_element, trial) { + this.animate = false; + this.currentAxis1 = null; + this.currentAxis2 = null; + this.currentAxis3 = null; + this.controllers = {}; + this.rate = trial.rate; + this.mode = trial.mode ? trial.mode : "DEBUG"; + this.interval = null; + this.axis1 = trial.axis_1; + this.axis2 = trial.axis_2; + this.axis3 = trial.axis_3; + this.axis_location = trial.axis_location; + this.dataArrays = [{ axis1Array: [], axis2Array: [], axis3Array: [] }]; + this.videoSrc = trial.video_src; + /* actual zero on the throttle is `sticky,` so to avoid + forcing users to apply an excess of strength to move + the throttle out of 0, we slightly reduce the scale */ + this.zeroThreshold = 0.2; + + const throttleIndexesNew = [], + throttleIndexesOld = []; + + let L = 0, + R = 0; + let axisIndex = 0, + axis1Index = 0, + axis2Index = 0, + axis3Index = 0, + videoIndex = 0; + + for (const item of this.axis_location) { + //console.log("item = " + item); + if (item == "R") { + R++; + } else if (item == "L") { + L++; + } + } + console.log(L, R); + + let gridTemplateColumns = ""; + for (let i = 0; i < L; i++) { + gridTemplateColumns += + " minmax(min-content, var(--measuring-needle-w)) "; + } + gridTemplateColumns += " minmax(min-content, auto) "; + for (let i = 0; i < R; i++) { + gridTemplateColumns += + " minmax(min-content, var(--measuring-needle-w)) "; + } + + console.log(gridTemplateColumns); + //console.log("this.axis_location[0]"); + let i = 0; + for (const j of this.axis_location) { + console.log("item = " + j); + if (j == "L") { + //console.log(this.axis_location[item2]); + throttleIndexesOld[axisIndex] = i.toString(); + throttleIndexesNew[axisIndex] = j; + //console.log(i); + axisIndex++; + } + i++; + } + console.log("/////////////"); + i = 0; + for (const j of this.axis_location) { + console.log("item = " + j); + if (j == "R") { + //console.log(this.axis_location[item2]); + throttleIndexesOld[axisIndex] = i.toString(); + throttleIndexesNew[axisIndex] = j; + axisIndex++; + } + i++; + } + console.log("/////////////"); + i = 0; + for (const j of this.axis_location) { + console.log("item = " + j); + if (j == "H") { + console.log(this.axis_location[j]); + throttleIndexesOld[axisIndex] = i.toString(); + throttleIndexesNew[axisIndex] = j; + axisIndex++; + } + i++; + } + //console.log(axisIndex); + console.log(throttleIndexesOld); + console.log(throttleIndexesNew); + console.log("/////////////"); + + i = 0; + for (const [j, value] of throttleIndexesOld.entries()) { + let valueInt = parseInt(value); + // Add 1 to valueInt, as the var names are 1 indexed + let varNameNumber = valueInt + 1; + let axisColValue = 0; + console.log("The axis number is = " + varNameNumber); + // Column values are 1 indexed + if (throttleIndexesNew[j] == "L") { + //console.log(j); + axisColValue = j + 1; + } else if (throttleIndexesNew[j] == "R") { + //console.log(j + 1); + axisColValue = j + 2; + } else { + axisColValue = -1; + } + + if (varNameNumber == 1) { + axis1Index = axisColValue; + } else if (varNameNumber == 2) { + axis2Index = axisColValue; + } else if (varNameNumber == 3) { + axis3Index = axisColValue; + } + } + + display_element.innerHTML = + ` + +
    +

    + A controller with throttles has not been detected. + If you have already plugged one in, please try pressing any + of its buttons or sliding its throttles to activate it. +

    +
    +
    ...
    +
    +
    +
    + ${trial.title ? '

    ' + trial.title + "

    " : ""} + +
    +
    + + +
    + + +
    + + +
    +
    +
    +
    +
    + ${ + axis1Index != -1 + ? `
    + ${ + trial.axes_labels + ? '
    ' + + trial.axes_labels[0] + + "
    " + : "" + } +
    +
    + ${this.formatLabels(trial.axis1_labels)} +
    +
    ` + : `` + } + ${ + axis2Index != -1 + ? `
    +
    + ${ + trial.axes_labels + ? '
    ' + + trial.axes_labels[1] + + "
    " + : "" + } +
    + ${this.formatLabels(trial.axis2_labels)} +
    +
    ` + : `` + } + ${ + axis3Index != -1 + ? `
    + +
    + ${ + trial.axes_labels + ? '
    ' + trial.axes_labels[2] + "
    " + : "" + } +
    + ${this.formatLabels(trial.axis3_labels)} +
    +
    ` + : `` + } +
    `; + + this.playStr = "► Play"; + this.pauseStr = "⏸ Pause"; + this.recordStr = "● Record"; + + this.playBtn = document.getElementById("play-btn"); + this.recordBtn = document.getElementById("record-btn"); + this.resetBtn = document.getElementById("reset-btn"); + this.saveBtn = document.getElementById("save-btn"); + + this.recordingData = false; + + this.recordingFeedback = document.getElementById("recording-feedback"); + if (this.mode !== "DEBUG") { + this.recordingFeedback.style.display = "none"; + } + + this.playBtn.addEventListener("click", this.playButtonClick); + this.recordBtn.addEventListener("click", this.recordButtonClick); + this.resetBtn.addEventListener("click", this.resetButtonClick); + this.saveBtn.addEventListener("click", this.saveButtonClick); + + this.videoPlayer = document.getElementById("thc-player"); + this.videoPlayer.addEventListener("ended", this.videoEnded); + this.videoPlayer.addEventListener("loadedmetadata", () => { + this.videoDuration = this.videoPlayer.duration; + }); + + this.measuringNeedles = document.getElementsByClassName( + "thc-measuring-needle" + ); + + /** + * Looks to see if a gamepad is connected. + */ + window.addEventListener("gamepadconnected", (e) => { + this.connectHandler(e); + }); + + /** + * Looks to see if a gamepad is disconnected. + */ + window.addEventListener("gamepaddisconnected", (e) => { + this.disconnectHandler(e); + }); + } + } + jsTripleHandleControllerPlugin.info = info; + + return jsTripleHandleControllerPlugin; +})(jsPsychModule); From 641b2f547c3b623800b70915fc75fae47ec9c694 Mon Sep 17 00:00:00 2001 From: rl2939 <60378449+rl2939@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:22:27 -0500 Subject: [PATCH 2/5] Remove TODO in Readme.md --- packages/plugin-triple-handle-controller/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/plugin-triple-handle-controller/README.md b/packages/plugin-triple-handle-controller/README.md index 6a6d125b..e8dca40c 100644 --- a/packages/plugin-triple-handle-controller/README.md +++ b/packages/plugin-triple-handle-controller/README.md @@ -1,7 +1,5 @@ # triple-handle-controller plugin -TODO: Add Author/Citations. - ## Overview This plugin collects responses to a video file in real time using a game controller. From 17a975109443be37c63c9f5a1c6485ae2ac6decb Mon Sep 17 00:00:00 2001 From: rl2939 <60378449+rl2939@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:45:19 -0500 Subject: [PATCH 3/5] Update the Author/Citaitons in Readme.md --- packages/plugin-triple-handle-controller/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/plugin-triple-handle-controller/README.md b/packages/plugin-triple-handle-controller/README.md index 6a6d125b..a687a36c 100644 --- a/packages/plugin-triple-handle-controller/README.md +++ b/packages/plugin-triple-handle-controller/README.md @@ -34,4 +34,7 @@ The documentaion can be read [here](/docs/index.md). ## Author / Citation -Any author or citation info that you would like to include. +Created by [Caluã de Lacerda Pataca](https://www.caluapataca.com) and [Russell Lee](https://github.com/rl2939). + +### Citation +de Lacerda Pataca, C., & Lee, R. (2024, December 8). A jsPsych Plugin for Continuous Real-Time Valence, Arousal, and Dominance Reporting Using a Three-Handle Controller. https://doi.org/10.31234/osf.io/snr5u From a90d2d25f4fcafa9685c9c1ad4637583b2984f48 Mon Sep 17 00:00:00 2001 From: rl2939 <60378449+rl2939@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:24:01 -0500 Subject: [PATCH 4/5] Remove install section in documentation. --- .../docs/index.md | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/packages/plugin-triple-handle-controller/docs/index.md b/packages/plugin-triple-handle-controller/docs/index.md index 2d45f16a..a8f148a5 100644 --- a/packages/plugin-triple-handle-controller/docs/index.md +++ b/packages/plugin-triple-handle-controller/docs/index.md @@ -36,31 +36,6 @@ In addition to the [default data collected by all plugins](https://www.jspsych.o | duration | numeric | The length of the video, in seconds. | -## Install - -**TODO change URLS of install files** - -Using the CDN-hosted JavaScript file: - -```js - -``` - -Using the JavaScript file downloaded from a GitHub release dist archive: - -```js - -``` - -Using NPM: - -``` -npm install @jspsych/plugin-html-audio-response -``` - -```js -import htmlAudioResponse from "@jspsych/plugin-html-audio-response"; -``` ## Examples From 20b9ec9f7cb63232db706fdc1638ce76c9844b7c Mon Sep 17 00:00:00 2001 From: rl2939 <60378449+rl2939@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:31:46 -0500 Subject: [PATCH 5/5] Add files via upload --- packages/plugin-triple-handle-controller/package.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 packages/plugin-triple-handle-controller/package.json diff --git a/packages/plugin-triple-handle-controller/package.json b/packages/plugin-triple-handle-controller/package.json new file mode 100644 index 00000000..cf37c6ce --- /dev/null +++ b/packages/plugin-triple-handle-controller/package.json @@ -0,0 +1,8 @@ +{ + { + "license": "Apache-2.0" + } + "dependencies": { + "prettier": "^2.8.4" + } +}