From 96903e0266d47727c9be617078169ee946a35497 Mon Sep 17 00:00:00 2001
From: RebeccaHirst <30597180+RebeccaHirst@users.noreply.github.com>
Date: Thu, 6 Jan 2022 16:39:08 +0000
Subject: [PATCH 01/41] add linspace to util.js
---
src/util/Util.js | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/util/Util.js b/src/util/Util.js
index 2e01674..3d93bbf 100644
--- a/src/util/Util.js
+++ b/src/util/Util.js
@@ -358,6 +358,24 @@ export function shuffle(array, randomNumberGenerator = undefined)
return array;
}
+/**
+ * linspace
+ *
+ * @name module:util.linspace
+ * @function
+ * @public
+ * @param {Object[]} startValue, stopValue, cardinality
+ * @return {Object[]} an array from startValue to stopValue with cardinality steps
+ */
+export function linspace(startValue, stopValue, cardinality) {
+ var arr = [];
+ var step = (stopValue - startValue) / (cardinality - 1);
+ for (var i = 0; i < cardinality; i++) {
+ arr.push(startValue + (step * i));
+ }
+ return arr;
+}
+
/**
* Pick a random value from an array, uses `util.shuffle` to shuffle the array and returns the last value.
*
From 04669d28b3d484d2f016f1372f96d69851c6b747 Mon Sep 17 00:00:00 2001
From: Todd Parsons
left
+ center
getPos
scheduler.add(subSch
diff --git a/docs/ServerManager.html b/docs/ServerManager.html
index 7f35f0d..68ff35b 100644
--- a/docs/ServerManager.html
+++ b/docs/ServerManager.html
@@ -4656,7 +4656,7 @@ before returning
diff --git a/docs/ShapeStim.html b/docs/ShapeStim.html
index c85946e..be13260 100644
--- a/docs/ShapeStim.html
+++ b/docs/ShapeStim.html
@@ -1765,7 +1765,7 @@
diff --git a/docs/Shelf.html b/docs/Shelf.html
index 88566a8..43857c5 100644
--- a/docs/Shelf.html
+++ b/docs/Shelf.html
@@ -6999,7 +6999,7 @@ but it is locked or it is not of type LIST
diff --git a/docs/Slider.html b/docs/Slider.html
index 781b55f..1cbf4cd 100644
--- a/docs/Slider.html
+++ b/docs/Slider.html
@@ -1217,7 +1217,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -1411,7 +1411,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -1582,7 +1582,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -1958,7 +1958,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -2362,7 +2362,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -2449,7 +2449,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -2694,7 +2694,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -2781,7 +2781,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -2868,7 +2868,7 @@ which must be updated when this Slider is updated, e.g. a Form.
Source:
@@ -3200,7 +3200,7 @@ the bounding box
Source:
@@ -3358,7 +3358,7 @@ the bounding box
Source:
@@ -3517,7 +3517,7 @@ with 0 at the center of the Slider)
Source:
@@ -3691,7 +3691,7 @@ with 0 at the center of the Slider)
Source:
@@ -3778,7 +3778,7 @@ with 0 at the center of the Slider)
Source:
@@ -3865,7 +3865,7 @@ with 0 at the center of the Slider)
Source:
@@ -3952,7 +3952,7 @@ with 0 at the center of the Slider)
Source:
@@ -4039,7 +4039,7 @@ with 0 at the center of the Slider)
Source:
@@ -4126,7 +4126,7 @@ with 0 at the center of the Slider)
Source:
@@ -7154,7 +7154,7 @@ but does not change the actual rating returned by the slider.
diff --git a/docs/SoundPlayer.html b/docs/SoundPlayer.html
index 716df83..d39de67 100644
--- a/docs/SoundPlayer.html
+++ b/docs/SoundPlayer.html
@@ -1064,7 +1064,7 @@
diff --git a/docs/SpeechRecognition.html b/docs/SpeechRecognition.html
index 8bd9a3a..41c3baf 100644
--- a/docs/SpeechRecognition.html
+++ b/docs/SpeechRecognition.html
@@ -1421,7 +1421,7 @@ previously cleared by calls to getTranscripts with clear = true.
diff --git a/docs/TextBox.html b/docs/TextBox.html
index c3a61a6..f52597d 100644
--- a/docs/TextBox.html
+++ b/docs/TextBox.html
@@ -1279,7 +1279,7 @@
Source:
@@ -1342,7 +1342,7 @@
Source:
@@ -1415,7 +1415,7 @@
Source:
@@ -1502,7 +1502,7 @@
Source:
@@ -1589,7 +1589,7 @@
Source:
@@ -1700,7 +1700,7 @@
Source:
@@ -1811,7 +1811,7 @@
Source:
@@ -1898,7 +1898,7 @@
Source:
@@ -2079,7 +2079,7 @@
Source:
@@ -2384,7 +2384,7 @@
- left
+ center
@@ -2470,7 +2470,7 @@
Source:
@@ -2663,7 +2663,7 @@
Source:
@@ -2854,7 +2854,7 @@
Source:
@@ -3045,7 +3045,7 @@
Source:
@@ -3236,7 +3236,7 @@
Source:
@@ -3427,7 +3427,7 @@
Source:
@@ -3620,7 +3620,7 @@
Source:
@@ -3813,7 +3813,7 @@
Source:
@@ -4008,7 +4008,7 @@
Source:
@@ -4199,7 +4199,7 @@
Source:
@@ -4338,7 +4338,7 @@
diff --git a/docs/TextStim.html b/docs/TextStim.html
index b77c618..215fc66 100644
--- a/docs/TextStim.html
+++ b/docs/TextStim.html
@@ -2281,7 +2281,7 @@ to be instantiated, unlike getSize().
diff --git a/docs/TonePlayer.html b/docs/TonePlayer.html
index 94dc9ce..6a14583 100644
--- a/docs/TonePlayer.html
+++ b/docs/TonePlayer.html
@@ -1642,7 +1642,7 @@ we throw an exception.
diff --git a/docs/TrackPlayer.html b/docs/TrackPlayer.html
index 952f3d0..3088bf4 100644
--- a/docs/TrackPlayer.html
+++ b/docs/TrackPlayer.html
@@ -1667,7 +1667,7 @@ file
diff --git a/docs/Transcript.html b/docs/Transcript.html
index b196e51..c97a1b6 100644
--- a/docs/Transcript.html
+++ b/docs/Transcript.html
@@ -308,7 +308,7 @@
diff --git a/docs/Window.html b/docs/Window.html
index abbc7eb..3cedd7b 100644
--- a/docs/Window.html
+++ b/docs/Window.html
@@ -2312,7 +2312,7 @@ Window.
diff --git a/docs/core_EventManager.js.html b/docs/core_EventManager.js.html
index 124bf9d..a176dfc 100644
--- a/docs/core_EventManager.js.html
+++ b/docs/core_EventManager.js.html
@@ -665,7 +665,7 @@ export class BuilderKeyResponse
diff --git a/docs/core_GUI.js.html b/docs/core_GUI.js.html
index 6d863b1..98e5325 100644
--- a/docs/core_GUI.js.html
+++ b/docs/core_GUI.js.html
@@ -838,7 +838,7 @@ export class GUI
diff --git a/docs/core_Keyboard.js.html b/docs/core_Keyboard.js.html
index 0b59d26..96d7d46 100644
--- a/docs/core_Keyboard.js.html
+++ b/docs/core_Keyboard.js.html
@@ -507,7 +507,7 @@ Keyboard.KeyStatus = {
diff --git a/docs/core_Logger.js.html b/docs/core_Logger.js.html
index e4989fd..9256721 100644
--- a/docs/core_Logger.js.html
+++ b/docs/core_Logger.js.html
@@ -470,7 +470,7 @@ Logger._ServerLevelValue = {
diff --git a/docs/core_MinimalStim.js.html b/docs/core_MinimalStim.js.html
index cd401da..6544b11 100644
--- a/docs/core_MinimalStim.js.html
+++ b/docs/core_MinimalStim.js.html
@@ -253,7 +253,7 @@ export class MinimalStim extends PsychObject
diff --git a/docs/core_Mouse.js.html b/docs/core_Mouse.js.html
index b5a8362..3b9cabd 100644
--- a/docs/core_Mouse.js.html
+++ b/docs/core_Mouse.js.html
@@ -388,7 +388,7 @@ export class Mouse extends PsychObject
diff --git a/docs/core_PsychoJS.js.html b/docs/core_PsychoJS.js.html
index de12cdf..413033c 100644
--- a/docs/core_PsychoJS.js.html
+++ b/docs/core_PsychoJS.js.html
@@ -842,7 +842,7 @@ PsychoJS.Status = {
diff --git a/docs/core_ServerManager.js.html b/docs/core_ServerManager.js.html
index 916654e..6681b71 100644
--- a/docs/core_ServerManager.js.html
+++ b/docs/core_ServerManager.js.html
@@ -1521,7 +1521,7 @@ ServerManager.ResourceStatus = {
diff --git a/docs/core_Window.js.html b/docs/core_Window.js.html
index 267b4a4..b3c6b26 100644
--- a/docs/core_Window.js.html
+++ b/docs/core_Window.js.html
@@ -591,7 +591,7 @@ export class Window extends PsychObject
diff --git a/docs/core_WindowMixin.js.html b/docs/core_WindowMixin.js.html
index 047687f..5ac14b9 100644
--- a/docs/core_WindowMixin.js.html
+++ b/docs/core_WindowMixin.js.html
@@ -252,7 +252,7 @@ export let WindowMixin = (superclass) =>
diff --git a/docs/data_ExperimentHandler.js.html b/docs/data_ExperimentHandler.js.html
index 6a59258..0ed0b69 100644
--- a/docs/data_ExperimentHandler.js.html
+++ b/docs/data_ExperimentHandler.js.html
@@ -505,7 +505,7 @@ ExperimentHandler.Environment = {
diff --git a/docs/data_MultiStairHandler.js.html b/docs/data_MultiStairHandler.js.html
index f77f3b8..9fbad0e 100644
--- a/docs/data_MultiStairHandler.js.html
+++ b/docs/data_MultiStairHandler.js.html
@@ -499,7 +499,7 @@ MultiStairHandler.StaircaseStatus = {
diff --git a/docs/data_QuestHandler.js.html b/docs/data_QuestHandler.js.html
index 56a736f..16e58a3 100644
--- a/docs/data_QuestHandler.js.html
+++ b/docs/data_QuestHandler.js.html
@@ -433,7 +433,7 @@ QuestHandler.Method = {
diff --git a/docs/data_Shelf.js.html b/docs/data_Shelf.js.html
index 0d58bac..b032519 100644
--- a/docs/data_Shelf.js.html
+++ b/docs/data_Shelf.js.html
@@ -896,7 +896,7 @@ Shelf.Type = {
diff --git a/docs/data_TrialHandler.js.html b/docs/data_TrialHandler.js.html
index df179b4..3695887 100644
--- a/docs/data_TrialHandler.js.html
+++ b/docs/data_TrialHandler.js.html
@@ -803,7 +803,7 @@ TrialHandler.Method = {
diff --git a/docs/hardware_Camera.js.html b/docs/hardware_Camera.js.html
index 917b8f8..cd01b60 100644
--- a/docs/hardware_Camera.js.html
+++ b/docs/hardware_Camera.js.html
@@ -709,7 +709,7 @@ export class Camera extends PsychObject
diff --git a/docs/index.html b/docs/index.html
index 601a1ba..0ffe5df 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -126,7 +126,7 @@ It is now a collaborative effort, supported by the
diff --git a/docs/module-core.PsychoJS.html b/docs/module-core.PsychoJS.html
index 23613cc..db16989 100644
--- a/docs/module-core.PsychoJS.html
+++ b/docs/module-core.PsychoJS.html
@@ -2981,7 +2981,7 @@ considered.
diff --git a/docs/module-core.WindowMixin.html b/docs/module-core.WindowMixin.html
index 66f3471..208483e 100644
--- a/docs/module-core.WindowMixin.html
+++ b/docs/module-core.WindowMixin.html
@@ -854,7 +854,7 @@
diff --git a/docs/module-core.html b/docs/module-core.html
index 8c5e019..7101249 100644
--- a/docs/module-core.html
+++ b/docs/module-core.html
@@ -141,7 +141,7 @@
diff --git a/docs/module-data.TrialHandler.html b/docs/module-data.TrialHandler.html
index 873316f..eca4204 100644
--- a/docs/module-data.TrialHandler.html
+++ b/docs/module-data.TrialHandler.html
@@ -3383,7 +3383,7 @@ for (const thisTrial of handler) { console.log(thisTrial); }
This manager handles all communications between the experiment running in the participant's browser and the [pavlovia.org]{@link http://pavlovia.org} server, in an asynchronous manner.
- *It is responsible for reading the configuration file of an experiment, for opening and closing a session, for listing and downloading resources, and for uploading results, logs, and audio recordings.
+ *This manager handles all communications between the experiment running in the participant's browser and the + * [pavlovia.org]{@link http://pavlovia.org} server, in an asynchronous manner.
+ *It is responsible for reading the configuration file of an experiment, for opening and closing a session, for + * listing and downloading resources, and for uploading results, logs, and audio recordings.
* * @extends PsychObject */ @@ -212,7 +216,8 @@ export class ServerManager extends PsychObject * @typedef ServerManager.CloseSessionPromise * @property {string} origin the calling method * @property {string} context the context - * @property {Object.A server event is emitted by the manager to inform its listeners of either a change of status, or of a resource related event (e.g. download started, download is completed).
+ *A server event is emitted by the manager to inform its listeners of either a change of status, or of a resource + * related event (e.g. download started, download is completed).
* * @enum {Symbol} * @readonly diff --git a/src/util/Util.js b/src/util/Util.js index 2b01f96..3d7a7f1 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -8,6 +8,8 @@ * @license Distributed under the terms of the MIT License */ +import seedrandom from "seedrandom"; + /** * Syntactic sugar for Mixins * @@ -55,18 +57,30 @@ export function promiseToTupple(promise) } /** - * Get a Universally Unique Identifier (RFC4122 version 4) + * Get a Universally Unique Identifier (RFC4122 version 4) or a pseudo-uuid based on a root *See details here: https://www.ietf.org/rfc/rfc4122.txt
* + * @param {string} [root] - the root, for string dependent pseudo uuid's * @return {string} the uuid */ -export function makeUuid() +export function makeUuid(root) { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) + // bonafide uuid v4 generator: + if (typeof root === "undefined") { - const r = Math.random() * 16 | 0, v = (c === "x") ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + const r = Math.random() * 16 | 0, v = (c === "x") ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + else + { + // our in-house pseudo uuid generator: + const generator = seedrandom(root); + let digits = generator().toString().substring(2); + digits += generator().toString().substring(2); + return `${digits.substring(0, 8)}-${digits.substring(8, 12)}-4${digits.substring(12, 15)}-8${digits.substring(15, 18)}-${digits.substring(18, 30)}`; + } } /** diff --git a/src/visual/Survey.js b/src/visual/Survey.js new file mode 100644 index 0000000..f9d5e30 --- /dev/null +++ b/src/visual/Survey.js @@ -0,0 +1,431 @@ +/** + * Survey Stimulus. + * + * @author Alain Pitiot + * @version 2022.3 + * @copyright (c) 2022 Open Science Tools Ltd. (https://opensciencetools.org) + * @license Distributed under the terms of the MIT License + */ + +import * as PIXI from "pixi.js-legacy"; +import { VisualStim } from "./VisualStim.js"; +import {PsychoJS} from "../core/PsychoJS.js"; +import * as util from "../util/Util.js"; +import {ExperimentHandler} from "../data/index.js"; + +/** + * Survey Stimulus. + * + * @extends VisualStim + */ +export class Survey extends VisualStim +{ + /** + * @memberOf module:visual + * @param {Object} options + * @param {String} options.name - the name used when logging messages from this stimulus + * @param {Window} options.win - the associated Window + * @param {string} [options.surveyId] - the survey id + * @param {Object | string} [options.model] - the survey model + * @param {Object[] | string} [options.items] - the survey items + * @param {string} [options.units= "norm"] - the units of the stimulus (e.g. for size, position, vertices) + * @param {Array.Note: if TonePlayer accepts the sound but Tone.js is not available, e.g. if the browser is IE11, * we throw an exception.
* - * @param {module:sound.Sound} sound - the sound - * @return {Object|undefined} an instance of TonePlayer that can play the given sound or undefined otherwise + * @param {string|number} value - potential frequency or note + * @param {number} octave - the octave corresponding to the tone + * @return {Object|boolean} argument needed to instantiate a TonePlayer that can play the given sound + * or false otherwise */ - static accept(sound) + static accept(value, octave) { // if the sound's value is an integer, we interpret it as a frequency: - if (isNumeric(sound.value)) + if (isNumeric(value)) { - return new TonePlayer({ - psychoJS: sound.psychoJS, - note: sound.value, - duration_s: sound.secs, - volume: sound.volume, - loops: sound.loops, - }); + return { note: value } } // if the sound's value is a string, we check whether it is a note: - if (typeof sound.value === "string") + if (typeof value === "string") { // mapping between the PsychoPY notes and the standard ones: let psychopyToToneMap = new Map(); @@ -96,21 +92,15 @@ export class TonePlayer extends SoundPlayer } // check whether the sound's value is a recognised note: - const note = psychopyToToneMap.get(sound.value); + const note = psychopyToToneMap.get(value); if (typeof note !== "undefined") { - return new TonePlayer({ - psychoJS: sound.psychoJS, - note: note + sound.octave, - duration_s: sound.secs, - volume: sound.volume, - loops: sound.loops, - }); + return { note: note + octave }; } } - // TonePlayer is not an appropriate player for the given sound: - return undefined; + // the value does not seem to correspond to a tone we can play: + return false; } /** @@ -126,11 +116,11 @@ export class TonePlayer extends SoundPlayer /** * Set the duration of the tone. * - * @param {number} duration_s - the duration of the tone (in seconds) If duration_s == -1, the sound will play indefinitely. + * @param {number} secs - the duration of the tone (in seconds) If secs == -1, the sound will play indefinitely. */ - setDuration(duration_s) + setDuration(secs) { - this.duration_s = duration_s; + this.duration_s = secs; } /** @@ -172,6 +162,23 @@ export class TonePlayer extends SoundPlayer } } + /** + * Set the note for tone. + * + * @param {string|number} value - potential frequency or note + * @param {number} octave - the octave corresponding to the tone + */ + setTone(value = "C", octave = 4) + { + const args = TonePlayer.accept(value, octave); + this._note = args.note; + + if (typeof this._synth !== "undefined") + { + this._synth.setNote(this._note); + } + } + /** * Start playing the sound. * diff --git a/src/sound/TrackPlayer.js b/src/sound/TrackPlayer.js index 7451ae6..dd9774c 100644 --- a/src/sound/TrackPlayer.js +++ b/src/sound/TrackPlayer.js @@ -8,6 +8,7 @@ */ import { SoundPlayer } from "./SoundPlayer.js"; +import { Howl } from "howler"; /** *This class handles the playback of sound tracks.
@@ -54,34 +55,43 @@ export class TrackPlayer extends SoundPlayer /** * Determine whether this player can play the given sound. * - * @param {module:sound.Sound} sound - the sound, which should be the name of an audio resource - * file - * @return {Object|undefined} an instance of TrackPlayer that can play the given track or undefined otherwise + * @param {string} value - the sound, which should be the name of an audio resource file + * @return {boolean} whether or not value is supported */ - static accept(sound) + static checkValueSupport (value) { - // if the sound's value is a string, we check whether it is the name of a resource: - if (typeof sound.value === "string") + if (typeof value === "string") { - const howl = sound.psychoJS.serverManager.getResource(sound.value); + return true; + } + + return false; + } + + /** + * Determine whether this player can play the given sound. + * + * @param {module:core.PsychoJS} psychoJS - the PsychoJS instance + * @param {string} value - the sound value, which should be the name of an audio resource + * file + * @return {Object|boolean} argument needed to instantiate a TrackPlayer that can play the given sound + * or false otherwise + */ + static accept(psychoJS, value) + { + // value should be a string: + if (typeof value === "string") + { + // check whether the value is the name of a resource: + const howl = psychoJS.serverManager.getResource(value); if (typeof howl !== "undefined") { - // build the player: - const player = new TrackPlayer({ - psychoJS: sound.psychoJS, - howl: howl, - startTime: sound.startTime, - stopTime: sound.stopTime, - stereo: sound.stereo, - loops: sound.loops, - volume: sound.volume, - }); - return player; + return { howl }; } } // TonePlayer is not an appropriate player for the given sound: - return undefined; + return false; } /** @@ -142,6 +152,36 @@ export class TrackPlayer extends SoundPlayer } } + /** + * Set new track to play. + * + * @param {Object|string} track - a track resource name or Howl object (see {@link https://howlerjs.com/}) + */ + setTrack(track) + { + let newHowl = undefined; + + if (typeof track === "string") + { + newHowl = this.psychoJS.serverManager.getResource(track); + } + else if (track instanceof Howl) + { + newHowl = track; + } + + if (newHowl !== undefined) + { + this._howl.once("fade", (id) => + { + this._howl.stop(id); + this._howl.off("end"); + this._howl = newHowl; + }); + this._howl.fade(this._howl.volume(), 0, 17, this._id); + } + } + /** * Start playing the sound. * From 6a0cefb5da3439c60204ea7f75be5533080a028b Mon Sep 17 00:00:00 2001 From: Alain Pitiot${message}
`; } + if (showOK || showCancel) + { + markup += "Note: tasks are run after each animation frame.
*/ - async start() + start() { const self = this; const update = async (timestamp) => From 395e7fba41e2a9ee5574cae31feedb99adf44c8d Mon Sep 17 00:00:00 2001 From: lgtstNote: This is just a convenience wrapper around `Intl.DateTimeFormat()`.
* * @param {string|array.string} locales - A string with a BCP 47 language tag, or an array of such strings. - * @param {object} options - An object with detailed date and time styling information. + * @param {object} [options] - An object with detailed date and time styling information. * @return {string} The current timestamp in the chosen format. */ - static getDate(locales = "en-CA", optionsMaybe) + static getDate(locales = "en-CA", options) { - const date = new Date(); - const options = Object.assign({ + const dataTimeOptions = Object.assign({ hour12: false, year: "numeric", month: "2-digit", @@ -73,10 +72,10 @@ export class MonotonicClock minute: "numeric", second: "numeric", fractionalSecondDigits: 3, - }, optionsMaybe); - - const dateTimeFormat = new Intl.DateTimeFormat(locales, options); + }, options); + const dateTimeFormat = new Intl.DateTimeFormat(locales, dataTimeOptions); + const date = new Date(); return dateTimeFormat.format(date); } diff --git a/src/util/Util.js b/src/util/Util.js index 8d82efc..02a6133 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -1434,11 +1434,6 @@ export function loadCss(cssId, cssPath) link.media = "all"; head.appendChild(link); } - - /* document.getElementsByTagName("head")[0].insertAdjacentHTML( - "beforeend", - `` - ); */ } /** diff --git a/src/visual/Survey.js b/src/visual/Survey.js index 2d19909..f0261d1 100644 --- a/src/visual/Survey.js +++ b/src/visual/Survey.js @@ -52,6 +52,12 @@ export class Survey extends VisualStim { super({ name, win, units, ori, depth, pos, size, autoDraw, autoLog }); + // default size: + if (typeof size === "undefined") + { + this.size = (this.unit === "norm") ? [2.0, 2.0] : [1.0, 1.0]; + } + // init SurveyJS this._initSurveyJS(); @@ -392,7 +398,6 @@ export class Survey extends VisualStim if (typeof this._surveyModel !== "undefined") { this._startSurvey(surveyId, this._surveyModel); - // jQuery(`#${surveyId}`).Survey({model: this._surveyModel}); } } From be5292480b10c47470cff865b74c4c15284b8935 Mon Sep 17 00:00:00 2001 From: Alain Pitiot${headerCells} | |
${subHeaderCells} |
${headerCells} | |
${subHeaderCells} | |
${headerCells} | |
${subHeaderCells} |