npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@pcllab/plugin-core

v0.0.1

Published

This plugin handles most of the core procedures of an experiment. The tasks that tasks that it can do include (but are not limited to) showing instructions, short-answer tasks, cued-recall tasks, ratings tasks, etc.

Downloads

3

Readme

plugin-core

This plugin handles most of the core procedures of an experiment. The tasks that tasks that it can do include (but are not limited to) showing instructions, short-answer tasks, cued-recall tasks, ratings tasks, etc.

Table of contents

Parameters

Stimuli Parameters

| Parameter | Type | Default Value | Description | | ------------- | ------ | ------------- | ------------------------------------------------ | | stimuli | array | [ ] | List of stimulus objects to present sequentially | | stimulus_file | string | null | url to a file containing stimuli |

Display Parameters

| Parameter | Type | Default Value | Description | | -------------------------------------- | -------- | ------------- | ---------------------------------------------------------------------------------------------------- | | title | string | null | Title shown at the top of the screen | | show_button | boolean | false | Shows the next button | | button_text | string | 'Next' | Text of the next button | | show_i_dont_know | boolean | false | Shows an I don't know button | | response_count (rename: response_box) | number | 1 (redo: 0) | The number of response boxes presented (whether a response box is shown) | | input_size (rename: response_box_size) | string | 'medium' | Size of the input box. ('small', 'medium', 'large' or 'xlarge') | | response_box_align | string | 'center' | Alignment of text in the response boxes. ('left', 'right' or 'center') | | forced_response | boolean | false | Toggles whether a response must be provided before the next button can be clicked | | show_progress | boolean | false | Toggles the progress bar | | progress_total_time | boolean | false | If true, the progress bar will span the duration of all the stimuli, including isi for each | | cue_align | string | 'vertical' | Alignment of items in the cue_list that are presented. ('vertical' or 'horizontal') | | word_bank_align | string | 'vertical' | Alignment of the word bank, either below the cue or to the right of it. ('vertical' or 'horizontal') | | feedback | boolean | false | Toggles displaying feedback after each stimulus screen | | feedback_html | function | null | Hook function to return arbitrary html as feedback after a stimulus screen. See more |

Timing Parameters

| Parameter | Type | Default Value | Description | | ------------ | ------ | ------------- | ---------------------------------------------------- | | isi | number | 500 | isi duration | | minimum_time | number | 0 | Minimum time before the next button is displayed | | maximum_time | number | 3000 | Maximum time before the trial automatically procedes |

Miscellaneous Parameters

| Parameter | Type | Default Value | Description | | ---------------- | ------- | ------------- | ----------------------------------------------------------- | | randomize | boolean | false | Toggles the randomization of the order of presented stimuli | | scoring_strategy | string | null | Strategy used to score responses. ('exact' or 'dice') |

Stimulus Hyperparameters

In addition to the parameters passed to jsPsych, the plugin has an additional layer of parameters specific to each stimulus in the stimuli object.

A quick example:

If we wanted one stimulus of our procedure to show 2 response boxes and display panels, we can do that by including certiain hyperparameters in the stimulus object.

[
    ...
    \\ Regular boring stimuli
    ...

    {
        cue: 'The ______ is ____',
        cue_panel_title: 'Fancy cue panel header',
        target_list: ['Earth', 'flat'],
        response_panel_title: 'Enter your honest opinion',
        response_count: 2
    }
]

The core plugin supports many ways for a subject to generate a response. The type of display is controlled by the response_type hyperparameter.

| Name | Description | | ----------- | ------------------------------------------------------------------------------------------------- | | input | This is the default value if response_type is left blank. The user is presented with input fields | | radio | The user is presented with options, out of which only one can be selected | | button | The user is presented with labeled button(s) | | study_items | The user is presented with the provided cue and target to study | | slider* | The user is presented with a slider | | checkbox* | The user is presented with checkbox(es) |


* Under construction

Additional Features

Hook Functions

The core plugin exposes an interface to hook into certain events during the trial. The on_stimulus_start and on_stimulus_end functions pass in a pluginAPI object as a parameter to the provided callbacks. Read more about the pluginAPI object in the Adaptive Spacing section.

| Parameter | Type | Default Value | Description | | ----------------- | -------- | ------------- | ----------------------------------------------------------------------------------------------------------------- | | done_callback | function | null | Callback function providing access to data produced by the procedure | | on_stimulus_start | function | null | Callback function that is fired right before a stimulus screen is presented. Passes in pluginAPI as a parameter | | on_stimulus_end | function | null | Callback function that is fired right after a stimulus screen ends. Passes in pluginAPI as a parameter |

A note on done_callback

The done_callback callback provides a way to dynamically retrieve the data produced by the procedure. The callback passes back a list containing datablocks pertaining to each trial of the procedure.

Keep in mind that the data produced may or may not contain all the parameters mentioned above, depending on how the plugin is configured.

A quick example:

function list_data(data) {
    data.forEach((datablock, index) => {
        console.log(`Data for stimulus ${index + 1}: `, datablock)
    })
}

...

jsPsych.init({
    ...
    timeline: [{
        type: pcllabCore,
        ...
        done_callback: list_data
    }]
})

/*
Data for stimulus 1: {
    cue: 'Example cue'
    cue_list: ['Cue 1', 'Cue 2', ...]
    rt: 1673
    rt_first_keypress: 534
    ...
}

Feedback

The callback feedback_html provides a way to show feedback after a screen given the feedback flag is set to true. The core plugin passes in a list of all the data recorded till that point. The plugin expects the provided callback to return some html that will be rendered on the screen.

    const trial = {
        type: pcllabCore,
        stimuli: [
            {
                cue: 'Should pineapples be on pizza',
                target: 'yes',
            },
        ],
        ...,
        feedback: true,
        feedback_html: (data) => {
            const lastData = data.slice(-1)[0]
            if (lastData.response === lastData.target) {
                return `<h4 class="text-center">You answered correctly</h4>`
            } else {
                return `<h4 class="text-center">You answered incorrectly</h4>`
            }
        }
    }

Adaptive Spacing

The pluginAPI object passed into certain hook functions as a parameter provides a set of functions that can be used to get information about the trial and modify the timeline.

pluginAPI.getAllData Datablock[] getAllData(void) Returns a list of all datablocks recorded till the present time.

pluginAPI.getLastData Datablock getLastData(void) Returns the most recent datablock recorded.

pluginAPI.getCompletedStimuli Stimulus[] getCompletedStimuli(void) Returns a list of all the stimuli blocks that were run till the present time.

pluginAPI.getRemainingStimuli Stimulus[] getRemainingStimuli(void) Returns a list of all the stimuli blocks in order that are still scheduled for execution.

pluginAPI.setTimeline void setTimeline(Stimulus[]) Sets the remaining timeline items to the list of stimuli.

Data Generated

This plugin collects the following data for each stimulus:

| Name | Type | Value | | ----------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | | cue | string | Cue presented to the subject | | cue_list | array | List of cues presented to the subject | | target | string | Target to score the response against | | target_list | List of targets to score responses against | | response | string or list | Responses generated by the subject. The output will be a string if there is just one response, but will be an array if there are multiple | | response_index | number | Index of the stimulus/response in the procedure | | rt | number | Response time | | rt_first_keypress | number | Time of the first keypress | | rt_last_keypress | number | Time of the last keypress | | type | string | Type of the cue (specified in the stimuli object) | | total_score | number | Score of the response(s) in the current stimulus | | cumulative_score | number | Score of the responses till (anc including) the current stimulus |

Examples

Instructions (Study Text)

Present instructions, or study a text, with a title and text

In this example, need to note how this.instructions is set up (it's calling in instructions.json)

const lookUp = {
  type: pcllabCore,
  stimuli: [this.instructions["look-up"]],
  response_count: 0,
  show_button: true,
  button_text: "Continue",
  data: {
    phase: "instructions",
  },
};

Study Words (Study Items)

Show how words or word pairs would be in a JSON, then how Core would read in that JSON word list. (Words, word pairs, key terms)

File would be word-list.json or word-pairs.json

Also explain how to show individual stimuli

Study Word Pairs

const studyItemsTrial = {
  type: pcllabCore,
  stimuli: [
    { response_type: "study_items", cue: "Kirvis", target: "Axe" },
    { response_type: "study_items", cue: "Marco", target: "Polo" },
  ],
  maximum_time: 5000,
  show_progress: true,
  response_count: 0,
};

Cued Recall

Explain how cued recall is done. Word as cue, or a question as cue. Box size differs.

const cuedRecallTrial = {
  type: pcllabCore,
  stimuli: [
    { response_type: "study_items", cue: "A", target: "Apple" },
    {
      response_type: "study_items",
      cue: "What is the answer to life the universe and everything?",
      target: "42",
    },
    { cue: "A", target: "Apple", response_count: 1 },
    {
      cue: "What is the answer to life the universe and everything?",
      target: "42",
      response_count: 1,
    },
  ],
  input_size: "small",
  response_count: 0,
  show_button: true,
};

Free Recall of Text

The title of a text is shown, with x-large response box. (Prompts can also be shown?)

Free Recall of a Word List

We have a specific way we do this.