diff --git a/presave.js b/presave.js new file mode 100644 index 0000000..6727b1e --- /dev/null +++ b/presave.js @@ -0,0 +1,44 @@ +var H5PPresave = H5PPresave || {}; + +/** + * Resolve the presave logic for the content type Question Set + * + * @param {object} content + * @param finished + * @constructor + */ +H5PPresave['H5P.QuestionSet'] = function (content, finished) { + var presave = H5PEditor.Presave; + + if (isContentInValid()) { + throw new presave.exceptions.InvalidContentSemanticsException('Invalid Question Set Error') + } + + var score = content.questions + .filter(function (action) { + return action.hasOwnProperty('library') && action.hasOwnProperty('params'); + }) + .map(function (action) { + return (new presave).process(action.library, action.params).maxScore; + }) + .reduce(function (currentScore, scoreToAdd) { + if (presave.isInt(scoreToAdd)) { + currentScore += scoreToAdd; + } + return currentScore; + }, 0); + + presave.validateScore(score); + + if (finished) { + finished({maxScore: score}); + } + + /** + * Check if required parameters is present + * @return {boolean} + */ + function isContentInValid() { + return !presave.checkNestedRequirements(content, 'content.questions') || !Array.isArray(content.questions); + } +};