Skip to content

Commit

Permalink
Added new extension to disable the question once the check answer but…
Browse files Browse the repository at this point in the history
…ton has been clicked.
  • Loading branch information
michaelsharman committed Oct 8, 2024
1 parent efd8d99 commit 5697232
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
51 changes: 51 additions & 0 deletions src/assessment/extensions/validation/disableOnValidate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import * as app from '../../core/app';
import { hasCheckAnswer, questionInstance, questionResponseIds } from '../../core/questions';

/**
* Extensions add specific functionality to Items API.
* They rely on modules within LT being available.
*
* --
*
* This extension is used to disable the question after it has been validated
* using the "Check Answer" button.
*
* @module Extensions/Assessment/disableOnValidate
*/

/**
* @example
* import { LT } from '@caspingus/lt/src/assessment/core';
* import * as disableOnValidate from '@caspingus/lt/src/assessment/extensions/validation/disableOnValidate
*
* LT.init(itemsApp); // Set up LT with the Items API application instance variable
*
* disableOnValidate.run();
* @since 2.17.0
*/
export function run() {
app.appInstance().on('item:load', e => {
setup(e);
});
}

/**
* Determines if the "Check Answer" button is enabled for the current question.
* If so, the question is disabled after validation (click of the button).
* @param {object} e Item event object
* @since 2.17.0
* @ignore
*/
function setup(e) {
const responses = questionResponseIds();

for (const response_id of responses) {
if (hasCheckAnswer(response_id)) {
app.appInstance()
.question(response_id)
.on('validated', ev => {
questionInstance(response_id).disable();
});
}
}
}
2 changes: 2 additions & 0 deletions src/assessment/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import * as ariaCountOnNav from './extensions/accessibility/aria/ariaCountOnNav'
import * as blockGrammarChecks from './extensions/validation/blockGrammarChecks';
import * as checkAnswerValidation from './extensions/validation/checkAnswerValidation';
import * as columnResizer from './extensions/accessibility/ux/columnResizer';
import * as disableOnValidate from './extensions/validation/disableOnValidate';
import * as essayLimitByCharacter from './extensions/validation/essayLimitByCharacter';
import * as hideAlternatives from './extensions/accessibility/ux/hideAlternatives';
import * as keyboardShortcuts from './extensions/accessibility/ux/keyboardShortcuts';
Expand All @@ -29,6 +30,7 @@ const extensions = {
blockGrammarChecks: { ...blockGrammarChecks },
checkAnswerValidation: { ...checkAnswerValidation },
columnResizer: { ...columnResizer },
disableOnValidate: { ...disableOnValidate },
essayLimitByCharacter: { ...essayLimitByCharacter },
hideAlternatives: { ...hideAlternatives },
keyboardShortcuts: { ...keyboardShortcuts },
Expand Down

0 comments on commit 5697232

Please sign in to comment.