diff --git a/package-lock.json b/package-lock.json index 81dfff0..6da243d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "@caspingus/lt", - "version": "2.7.0", + "version": "2.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@caspingus/lt", - "version": "2.7.0", + "version": "2.7.1", "license": "MIT", "dependencies": { + "entities": "^4.5.0", "howler": "^2.2.4", "mousetrap": "^1.6.5", "platform-detect": "^3.0.1", @@ -2164,6 +2165,17 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/envinfo": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", diff --git a/package.json b/package.json index 5cdf42b..dd9f0ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@caspingus/lt", - "version": "2.7.0", + "version": "2.7.1", "description": "A utility library of helpers and tools for working with Learnosity APIs.", "main": "src/index.js", "author": "michael@learnosity.com", @@ -36,6 +36,7 @@ "collectCoverage": true }, "dependencies": { + "entities": "^4.5.0", "howler": "^2.2.4", "mousetrap": "^1.6.5", "platform-detect": "^3.0.1", diff --git a/src/assessment/extensions/validation/essayLimitByCharacter.js b/src/assessment/extensions/validation/essayLimitByCharacter.js index 722e844..b3adc71 100644 --- a/src/assessment/extensions/validation/essayLimitByCharacter.js +++ b/src/assessment/extensions/validation/essayLimitByCharacter.js @@ -4,6 +4,7 @@ import * as activity from '../../core/activity'; import * as player from '../../core/player'; import * as items from '../../core/items'; import * as questions from '../../core/questions'; +import * as entities from 'entities'; /** * Extensions add specific functionality to Items API. @@ -263,11 +264,20 @@ function setQuestionListeners() { * @ignore */ function checkLimit(questionInstance, setUI = true) { + const type = questionInstance.getQuestion().type; const maxLength = questionInstance.getQuestion().max_length; const rawResponse = questionInstance.getResponse()?.value ? questionInstance.getResponse()?.value : ''; - const response = state.includeSpaces ? stripHtml(rawResponse) : stripSpaces(stripHtml(rawResponse)); - const strLength = response.length; let validLength = true; + let response; + let strLength; + + if (type === 'plaintext') { + response = state.includeSpaces ? rawResponse : stripSpaces(rawResponse); + strLength = response.length; + } else { + response = state.includeSpaces ? stripHtml(rawResponse) : stripSpaces(stripHtml(rawResponse)); + strLength = entities.decodeHTML(response).length; + } if (maxLength) { if (strLength > maxLength) {