function liveRecv(data) { let messages = Array.isArray(data) ? data : [data]; for (let message of messages) { let type = message.type; let payload = Object.assign({}, message); delete payload.type; console.debug("received", type, payload); switch (type) { case "trial": otree.game.startTrial(payload); break; case "status": otree.game.updateStatus(payload); break; case "feedback": otree.game.setFeedback(payload); break; case "progress": otree.game.setProgress(payload); break; default: console.error("unsupported message received!"); } } } async function main() { let page = otree.page, game = otree.game; game.setConfig({ post_trial_pause: js_vars.post_trial_pause * 1000, media_fields: js_vars.media_fields, }); game.loadTrial = function () { page.reset(["feedback_cls", "answer"]); liveSend({ type: "load" }); }; page.onUpdate = function (upd) { if (upd.has("feedback")) { if (game.feedback.responseCorrect === true) page.update({ feedback_cls: "is-valid" }); if (game.feedback.responseCorrect === false) page.update({ feedback_cls: "is-invalid" }); } }; page.onInput = function (name, value) { page.freezeInputs(); liveSend({ type: "response", answer: value }); }; await game.playIterations(); page.submit(); }