mirror of
https://github.com/jspsych/jsPsych.git
synced 2025-05-10 11:10:54 +00:00
Merge 793b09bd81
into 861cd1e646
This commit is contained in:
commit
fa4576fd47
5
.changeset/polite-toes-roll.md
Normal file
5
.changeset/polite-toes-roll.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@jspsych/plugin-instructions": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Run on_page_change upon entering the first page
|
@ -20,7 +20,7 @@ In addition to the [parameters available in all plugins](../overview/plugins.md#
|
|||||||
| button_label_next | string | 'Next' | The text that appears on the button to go forwards. |
|
| button_label_next | string | 'Next' | The text that appears on the button to go forwards. |
|
||||||
| show_page_number | boolean | false | If true, and clickable navigation is enabled, then Page x/y will be shown between the nav buttons. |
|
| show_page_number | boolean | false | If true, and clickable navigation is enabled, then Page x/y will be shown between the nav buttons. |
|
||||||
| page_label | string | 'Page' | The text that appears before x/y pages displayed when show_page_number is true. |
|
| page_label | string | 'Page' | The text that appears before x/y pages displayed when show_page_number is true. |
|
||||||
| on_page_change | function | ``function (current_page) {}`` | The function that is called every time the page changes. This function receives a single argument `current_page`, which is the index of the current page **after page change**, and starts at `0`. The function is also called when going forward from the last page, i.e., finishing the trial. |
|
| on_page_change | function | ``function (current_page) {}`` | The function that is called upon trial start and every time the page changes afterwards. This function receives two arguments: `current_page`, which is the index of the current page **after page change**, and `from_page`, which is the index of the previous page the subject has been viewing. Both parameters start at `0`. The function is also called when going forward from the last page, i.e., finishing the trial. |
|
||||||
|
|
||||||
## Data Generated
|
## Data Generated
|
||||||
|
|
||||||
|
@ -65,13 +65,17 @@ describe("instructions plugin", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("forward and backward callback works", async () => {
|
test("forward and backward callback works", async () => {
|
||||||
let count = [0, 0, 0, 0];
|
let count = [0, 0, 0];
|
||||||
|
let from = [];
|
||||||
const { expectFinished } = await startTimeline([
|
const { expectFinished } = await startTimeline([
|
||||||
{
|
{
|
||||||
type: instructions,
|
type: instructions,
|
||||||
pages: ["page 1", "page 2", "page 3"],
|
pages: ["page 1", "page 2", "page 3"],
|
||||||
on_page_change: function (page_number: number) {
|
on_page_change: function (page_number: number | null, from_page: number | null) {
|
||||||
count[page_number]++;
|
if (page_number != null) {
|
||||||
|
count[page_number]++;
|
||||||
|
}
|
||||||
|
from.push(from_page);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
@ -88,11 +92,12 @@ describe("instructions plugin", () => {
|
|||||||
// Go to last page; count[2]++
|
// Go to last page; count[2]++
|
||||||
await pressKey("ArrowRight");
|
await pressKey("ArrowRight");
|
||||||
|
|
||||||
// Finish trial; count[3]++
|
// Finish trial
|
||||||
await pressKey("ArrowRight");
|
await pressKey("ArrowRight");
|
||||||
await expectFinished();
|
await expectFinished();
|
||||||
|
|
||||||
expect(count).toEqual([1, 2, 1, 1]);
|
expect(count).toEqual([2, 2, 1]);
|
||||||
|
expect(from).toEqual([null, 0, 1, 0, 1, 2]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ const info = <const>{
|
|||||||
on_page_change: {
|
on_page_change: {
|
||||||
type: ParameterType.FUNCTION,
|
type: ParameterType.FUNCTION,
|
||||||
pretty_name: "Page change callback",
|
pretty_name: "Page change callback",
|
||||||
default: function (current_page: number) {},
|
default: function (current_page: number | null, from_page: number | null) {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
@ -196,7 +196,7 @@ class InstructionsPlugin implements JsPsychPlugin<Info> {
|
|||||||
show_current_page();
|
show_current_page();
|
||||||
}
|
}
|
||||||
|
|
||||||
trial.on_page_change(current_page);
|
trial.on_page_change(current_page >= trial.pages.length ? null : current_page, current_page - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function back() {
|
function back() {
|
||||||
@ -206,7 +206,7 @@ class InstructionsPlugin implements JsPsychPlugin<Info> {
|
|||||||
|
|
||||||
show_current_page();
|
show_current_page();
|
||||||
|
|
||||||
trial.on_page_change(current_page);
|
trial.on_page_change(current_page, current_page + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_current_page_to_view_history() {
|
function add_current_page_to_view_history() {
|
||||||
@ -257,6 +257,7 @@ class InstructionsPlugin implements JsPsychPlugin<Info> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
show_current_page();
|
show_current_page();
|
||||||
|
trial.on_page_change(0, null);
|
||||||
|
|
||||||
if (trial.allow_keys) {
|
if (trial.allow_keys) {
|
||||||
var keyboard_listener = this.jsPsych.pluginAPI.getKeyboardResponse({
|
var keyboard_listener = this.jsPsych.pluginAPI.getKeyboardResponse({
|
||||||
|
Loading…
Reference in New Issue
Block a user