tao-test/app/taoQtiTest/views/js/loader/testPlugins.min.js.map

1 line
1.2 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["../runner/plugins/content/accessibility/focusOnFirstField.js","../runner/plugins/content/accessibility/jumplinks/helpers.js","../runner/plugins/content/accessibility/jumplinks/jumplinks.js","../runner/helpers/map.js","../runner/helpers/isReviewPanelEnabled.js","../runner/plugins/content/accessibility/jumplinks/shortcuts.js","../runner/plugins/content/accessibility/jumplinks/plugin.js","../runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks.js","../runner/plugins/content/accessibility/keyNavigation/strategies/index.js","../runner/plugins/content/accessibility/keyNavigation/strategiesManager.js","../runner/plugins/content/accessibility/keyNavigation/helpers.js","../runner/plugins/content/accessibility/keyNavigation/modes/defaultMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/linearMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/nativeMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/index.js","../runner/plugins/content/accessibility/keyNavigation/modesManager.js","../runner/plugins/content/accessibility/keyNavigation/keyNavigation.js","css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation","../runner/plugins/content/accessibility/keyNavigation/plugin.js","../runner/plugins/content/accessibility/mainLandmark/header.js","../runner/plugins/content/dialog/dialog.js","../runner/plugins/content/dialog/exitMessages.js","../runner/plugins/content/dialog/itemAlertMessage.js","../runner/helpers/navigation.js","../runner/plugins/content/dialog/itemInlineMessage.js","../runner/plugins/content/feedback/feedback.js","../runner/plugins/content/itemScrolling/itemScrolling.js","../runner/plugins/content/loading/loading.js","../runner/plugins/content/modalFeedback/modalFeedback.js","../runner/plugins/content/overlay/overlay.js","../runner/plugins/content/responsiveness/collapser.js","../runner/plugins/content/rubricBlock/rubricBlock.js","../runner/plugins/controls/connectivity/connectivity.js","../runner/plugins/controls/connectivity/pauseOnError.js","../runner/plugins/controls/duration/duration.js","../runner/plugins/controls/progressbar/progress.js","../runner/plugins/controls/progressbar/renderer/percentage.js","../runner/plugins/controls/progressbar/renderer/position.js","../runner/plugins/controls/progressbar/progressbar.js","../runner/plugins/controls/testState/testState.js","../runner/helpers/getTimerMessage.js","../runner/plugins/controls/timer/component/css/countdown!css","../runner/plugins/controls/timer/component/countdown.js","../runner/plugins/controls/timer/component/css/timerbox!css","../runner/plugins/controls/timer/component/timerbox.js","../runner/plugins/controls/timer/strategy/enforcedStay.js","../runner/plugins/controls/timer/strategy/extraTime.js","../runner/plugins/controls/timer/strategy/guidedNavigation.js","../runner/plugins/controls/timer/strategy/timeout.js","../runner/helpers/currentItem.js","../runner/helpers/stats.js","../runner/helpers/messages.js","../runner/config/states.js","../runner/plugins/controls/timer/strategy/warnSectionLeaving.js","../runner/plugins/controls/timer/strategy/strategyHandler.js","../runner/plugins/controls/timer/timers.js","../runner/plugins/controls/timer/plugin.js","../runner/plugins/controls/title/title.js","../runner/plugins/controls/trace/itemTraceVariables.js","../runner/plugins/navigation/allowSkipping.js","../runner/plugins/navigation/next/nextWarningHelper.js","../runner/plugins/navigation/next.js","../runner/plugins/navigation/next/dialogConfirmNext.js","../runner/plugins/navigation/next/linearNextItemWarning.js","../runner/plugins/navigation/nextSection.js","../runner/plugins/navigation/previous.js","../runner/plugins/navigation/review/navigator.js","../runner/plugins/navigation/review/review.js","../runner/plugins/navigation/skip.js","../runner/plugins/navigation/validateResponses.js","../runner/plugins/navigation/warnBeforeLeaving.js","../runner/plugins/security/disableRightClick.js","../runner/plugins/tools/answerElimination/eliminator.js","../runner/plugins/tools/answerMasking/answerMasking.js","../runner/plugins/tools/answerMasking/plugin.js","../runner/plugins/tools/apipTextToSpeech/textToSpeech.js","../runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider.js","../runner/plugins/tools/apipTextToSpeech/plugin.js","../runner/plugins/tools/areaMasking/mask.js","../runner/plugins/tools/areaMasking/areaMasking.js","../runner/plugins/tools/calculator.js","../runner/plugins/tools/comment/comment.js","../runner/plugins/tools/documentViewer/documentViewer.js","../runner/plugins/tools/highlighter/highlighter.js","../runner/plugins/tools/highlighter/collection.js","../runner/plugins/tools/highlighter/plugin.js","../runner/plugins/tools/itemThemeSwitcher/itemThemeSwitcher.js","../runner/plugins/tools/lineReader/compoundMask.js","../runner/plugins/tools/lineReader/plugin.js","../runner/plugins/tools/magnifier/magnifierPanel.js","../runner/plugins/tools/magnifier/magnifier.js","../runner/plugins/tools/zoom.js","onLayerEnd0.js","module-create.js"],"names":[],"mappings":"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","sourcesContent":["define('taoQtiTest/runner/plugins/content/accessibility/focusOnFirstField',['lodash', 'taoTests/runner/plugin', 'ckeditor'], function (_, pluginFactory, ckEditor) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n ckEditor = ckEditor && Object.prototype.hasOwnProperty.call(ckEditor, 'default') ? ckEditor['default'] : ckEditor;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA;\n */\n /**\n * Check if client uses the iOS device.\n *\n * @returns {*|boolean}\n */\n\n function isIOSDevice() {\n return /(iPhone|iPad)/i.test(navigator.userAgent);\n }\n /**\n * Returns the configured plugin\n */\n\n\n var focusOnFirstField = pluginFactory({\n name: 'focusOnFirstField',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n /**\n * When an Item is loaded - if we set the focus on any input then the ipad sets the focus on the\n * keyboard, so the windows lose focus\n * and we get an error message for the test in fullscreen mode\n */\n\n if (!isIOSDevice()) {\n this.getTestRunner().after('renderitem', function () {\n var $input = self.getAreaBroker().getContentArea().find('.qti-itemBody').find('input, textarea, select').not(':input[type=button], :input[type=submit], :input[type=reset]').first();\n var $cke = $input.closest('.qti-interaction').find('.cke');\n\n if ($cke.length) {\n _.delay(function () {\n ckEditor.instances[$cke.attr('id').replace(/^cke_/, '')].focus();\n }, 100);\n } else {\n $input.focus();\n }\n });\n }\n }\n });\n\n return focusOnFirstField;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/helpers',['exports', 'i18n'], function (exports, __) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns factory-like object.\n *\n * @param {AreaBroker} broker\n *\n * @returns {Object} - when you access properties it returns the corresponding element and move the focus on it.\n * List of availiable properties\n * - question\n * - navigation\n * - toolbox\n * - teststatus\n */\n\n var getJumpElementFactory = function getJumpElementFactory(broker) {\n return {\n get container() {\n return broker.getContainer();\n },\n\n get question() {\n return broker.getContainer().find('.content-wrapper').first();\n },\n\n get navigation() {\n return broker.getNavigationArea().find(':not(.hidden)[tabindex]').first();\n },\n\n get toolbox() {\n return broker.getToolboxArea().find(':not(.hidden)[tabindex]').first();\n },\n\n get teststatus() {\n return broker.getPanelArea().find(':not(.hidden)[tabindex]').first();\n }\n\n };\n };\n /**\n * Returns testrunner item status.\n *\n * @param {Object} item - testrunner item\n *\n * @returns {String} - localized string.\n */\n\n var getItemStatus = function getItemStatus(item) {\n if (item.flagged) {\n return __('Flagged for review');\n }\n\n if (item.answered) {\n return __('Answered');\n }\n\n if (item.viewed) {\n return __('Not answered');\n }\n\n return __('Not seen');\n };\n /**\n * Detects if review panel hidden or not.\n *\n * @param {TestRunner} testRunner\n *\n * @returns {Boolean}\n */\n\n var isReviewPanelHidden = function isReviewPanelHidden(testRunner) {\n return testRunner.getAreaBroker().getPanelArea().find('.qti-navigator').is('.hidden');\n };\n\n exports.getItemStatus = getItemStatus;\n exports.getJumpElementFactory = getJumpElementFactory;\n exports.isReviewPanelHidden = isReviewPanelHidden;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/jumplinks',['lodash', 'ui/component', 'handlebars'], function (_, component, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n \n return \"hidden\";\n }\n\n buffer += \"<nav class=\\\"jump-links-box\\\" aria-label=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump Menu\", options) : helperMissing.call(depth0, \"__\", \"Jump Menu\", options)))\n + \"\\\">\\n <ul>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"question\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Question\", options) : helperMissing.call(depth0, \"__\", \"Question\", options)))\n + \" - \";\n if (helper = helpers.questionStatus) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.questionStatus); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"navigation\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Navigation\", options) : helperMissing.call(depth0, \"__\", \"Navigation\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"toolbox\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toolbox\", options) : helperMissing.call(depth0, \"__\", \"Toolbox\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.isReviewPanelEnabled), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" >\\n <button data-jump=\\\"teststatus\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Test Status and Structure\", options) : helperMissing.call(depth0, \"__\", \"Test Status and Structure\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"shortcuts\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Open Keyboard Shortcuts\", options) : helperMissing.call(depth0, \"__\", \"Open Keyboard Shortcuts\", options)))\n + \"</b></button>\\n </li>\\n </ul>\\n</nav>\\n\";\n return buffer;\n });\n function jumplinksTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {};\n /**\n * Creates and initialize the jumplinks component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @returns {jumplinks} the component, initialized and rendered\n */\n\n function jumplinksFactory(config) {\n /**\n * @typedef {Object} jumplinksBox\n */\n var jumplinksBox = component({}, defaults).on('render', function () {\n var _this = this;\n\n // handle related Jump Links\n var behavior = [{\n selector: '[data-jump=question] ',\n eventName: 'jump',\n eventParam: 'question'\n }, {\n selector: '[data-jump=navigation]',\n eventName: 'jump',\n eventParam: 'navigation'\n }, {\n selector: '[data-jump=toolbox]',\n eventName: 'jump',\n eventParam: 'toolbox'\n }, {\n selector: '[data-jump=teststatus]',\n eventName: 'jump',\n eventParam: 'teststatus'\n }, {\n selector: '[data-jump=shortcuts]',\n eventName: 'shortcuts',\n eventParam: 'shortcuts'\n }];\n\n _.forEach(behavior, function (linkDescription) {\n var $link = _this.getElement().find(linkDescription.selector);\n\n var handleLink = function handleLink() {\n _this.trigger(linkDescription.eventName, linkDescription.eventParam);\n\n _this.getElement().find(':focus').blur();\n };\n\n if ($link) {\n $link.on('click', handleLink);\n $link.on('keyup', function (event) {\n var activationKeys = [32, 13]; // link can be activated by click or enter/space keys\n\n if (activationKeys.includes(event.keyCode)) {\n handleLink();\n }\n });\n }\n });\n });\n jumplinksBox.setTemplate(jumplinksTpl);\n\n _.defer(function () {\n jumplinksBox.init(config);\n });\n\n return jumplinksBox;\n }\n\n return jumplinksFactory;\n\n});\n\n","define('taoQtiTest/runner/helpers/map',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} itemStats\n * @property {Number} questions - the number of questions items\n * @property {Number} answered - the number of answered questions\n * @property {Number} flagged - the number of items flagged for review\n * @property {Number} viewed - the number of viewed items\n * @property {Number} total - the total number of items\n * @property {Number} questionsViewed - the number of viewed questions\n */\n\n /**\n * Gets an empty stats record\n * @returns {itemStats}\n */\n\n function getEmptyStats() {\n return {\n questions: 0,\n answered: 0,\n flagged: 0,\n viewed: 0,\n total: 0,\n questionsViewed: 0\n };\n }\n /**\n * Defines a helper that provides extractors for an assessment test map\n */\n\n\n var map = {\n /**\n * Gets the jumps table\n * @param {Object} map - The assessment test map\n * @returns {Object}\n */\n getJumps: function getJumps(map) {\n return map && map.jumps;\n },\n\n /**\n * Gets the parts table\n * @param {Object} map - The assessment test map\n * @returns {Object}\n */\n getParts: function getParts(map) {\n return map && map.parts;\n },\n\n /**\n * Get sections table\n * @param {Object} map - The assessment test map\n * @returns {Object} the sections\n */\n getSections: function getSections(map) {\n var parts = this.getParts(map),\n result = {};\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections) {\n _.forEach(sections, function (section) {\n result[section.id] = section;\n });\n }\n });\n\n return result;\n },\n\n /**\n * Get active item from the test map\n * @param {Object} map - The assessment test map\n * @returns {Object} the active item\n */\n getActiveItem: function getActiveItem(map) {\n var parts = this.getParts(map),\n result = {};\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections) {\n _.forEach(sections, function (section) {\n if (section.active) {\n var items = section.items;\n\n _.forEach(items, function (item) {\n if (item.active) {\n result = item;\n }\n });\n }\n });\n }\n });\n\n return result;\n },\n\n /**\n * Return the list of remaining sections.\n * @param {Object} map - The assessment test map\n * @param {String} sectionId - The next sections will be gathered once this sectionId has been reached\n * @returns {Object} the next sections\n */\n getNextSections: function getNextSections(map, sectionId) {\n var sections = this.getSections(map),\n result = {},\n canList = false;\n\n _.forEach(sections, function (section) {\n if (canList) {\n result[section.id] = section;\n }\n\n if (section.id === sectionId) {\n canList = true;\n }\n });\n\n return result;\n },\n\n /**\n * Gets the jump at a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getJump: function getJump(map, position) {\n var jumps = this.getJumps(map);\n return jumps && jumps[position];\n },\n\n /**\n * Gets a test part by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} partName - The identifier of the test part\n * @returns {Object}\n */\n getPart: function getPart(map, partName) {\n var parts = this.getParts(map);\n return parts && parts[partName];\n },\n\n /**\n * Gets a test section by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} sectionName - The identifier of the test section\n * @returns {Object}\n */\n getSection: function getSection(map, sectionName) {\n var parts = this.getParts(map);\n var section = null;\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections && sections[sectionName]) {\n section = sections[sectionName];\n return false;\n }\n });\n\n return section;\n },\n\n /**\n * Gets a test item by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @returns {Object}\n */\n getItem: function getItem(map, itemIdentifier) {\n var jump = _.find(this.getJumps(map), {\n identifier: itemIdentifier\n });\n\n return this.getItemAt(map, jump && jump.position);\n },\n\n /**\n * Gets a test item by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @returns {String[]} the raw list of categories\n */\n getItemCategories: function getItemCategories(map, itemIdentifier) {\n var item = this.getItem(map, itemIdentifier);\n\n if (item && Array.isArray(item.categories)) {\n return item.categories;\n }\n\n return [];\n },\n\n /**\n * Check if an item has a category\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @param {String} category - the category to check\n * @param {Boolean} [fuzzyMatch=false] - if true the prefix or the case doesn't matter\n * @returns {String[]} the raw list of categories\n */\n hasItemCategory: function hasItemCategory(map, itemIdentifier, category) {\n var fuzzyMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var taoPrefix = 'x-tao-option-';\n var categories = this.getItemCategories(map, itemIdentifier);\n\n if (!category || !category.length) {\n return false;\n }\n\n var exactMatch = categories.includes(category);\n\n if (exactMatch) {\n return true;\n }\n\n if (fuzzyMatch) {\n //check by adding the prefix first\n if (!category.startsWith(taoPrefix) && category.includes(\"\".concat(taoPrefix).concat(category))) {\n return true;\n } //compare without the prefix and any case system\n\n\n var normalize = function normalize(elt) {\n return elt.replace(taoPrefix, '').replace(/[-_\\s]/g, '').toLowerCase();\n };\n\n return categories.some(function (itemCategory) {\n return normalize(itemCategory) === normalize(category);\n });\n }\n\n return false;\n },\n\n /**\n * Gets the global stats of the assessment test\n * @param {Object} map - The assessment test map\n * @returns {itemStats}\n */\n getTestStats: function getTestStats(map) {\n return map && map.stats;\n },\n\n /**\n * Gets the stats of the test part containing a particular position\n * @param {Object} map - The assessment test map\n * @param {String} partName - The identifier of the test part\n * @returns {itemStats}\n */\n getPartStats: function getPartStats(map, partName) {\n var part = this.getPart(map, partName);\n return part && part.stats;\n },\n\n /**\n * Gets the stats of the test section containing a particular position\n * @param {Object} map - The assessment test map\n * @param {String} sectionName - The identifier of the test section\n * @returns {itemStats}\n */\n getSectionStats: function getSectionStats(map, sectionName) {\n var section = this.getSection(map, sectionName);\n return section && section.stats;\n },\n\n /**\n * Gets the stats related to a particular scope\n * @param {Object} map - The assessment test map\n * @param {Number} position - The current position\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {itemStats}\n */\n getScopeStats: function getScopeStats(map, position, scope) {\n var jump = this.getJump(map, position);\n\n switch (scope) {\n case 'section':\n case 'testSection':\n return this.getSectionStats(map, jump && jump.section);\n\n case 'part':\n case 'testPart':\n return this.getPartStats(map, jump && jump.part);\n // During calculation stats for this case,\n // we are considiring all unanswered inaccessible items as answered\n\n case 'testWithoutInaccessibleItems':\n {\n var testStats = this.getTestStats(map);\n\n var _this$getPart = this.getPart(map, jump && jump.part),\n currentPartPosition = _this$getPart.position,\n isCurrentPartLinear = _this$getPart.isLinear;\n\n var parts = Object.values(this.getParts(map)).filter(function (_ref) {\n var partPosition = _ref.position;\n return partPosition < currentPartPosition;\n }).sort(function (a, b) {\n return b - a;\n }); // Find the neirest part to which test taker can not navigate\n\n var linearPartIndex = isCurrentPartLinear ? 0 : parts.findIndex(function (_ref2) {\n var isLinear = _ref2.isLinear;\n return isLinear;\n });\n\n if (linearPartIndex === -1) {\n return testStats;\n } // Calculate all unanswered and flagged questions in inaccessible parts\n\n\n var inaccessibleParts = parts.slice(linearPartIndex);\n var countOfInaccessibleUnasweredQestions = inaccessibleParts.reduce(function (acc, _ref3) {\n var _ref3$stats = _ref3.stats,\n questions = _ref3$stats.questions,\n answered = _ref3$stats.answered;\n return acc + (questions - answered);\n }, 0);\n var countOfInaccessibleFlaggedQestions = inaccessibleParts.reduce(function (acc, _ref4) {\n var flagged = _ref4.stats.flagged;\n return acc + flagged;\n }, 0);\n return Object.assign({}, testStats, {\n answered: testStats.answered + countOfInaccessibleUnasweredQestions,\n flagged: testStats.flagged - countOfInaccessibleFlaggedQestions\n });\n }\n\n default:\n case 'test':\n return this.getTestStats(map);\n }\n },\n\n /**\n * Gets the map of a particular scope from a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The current position\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {object} The scoped map\n */\n getScopeMap: function getScopeMap(map, position, scope) {\n // need a clone of the map as we will change some properties\n var scopeMap = _.cloneDeep(map || {}); // gets the current part and section\n\n\n var jump = this.getJump(scopeMap, position);\n var part = this.getPart(scopeMap, jump && jump.part);\n var section = this.getSection(scopeMap, jump && jump.section); // reduce the map to the scope part\n\n if (scope && scope !== 'test') {\n scopeMap.parts = {};\n\n if (part) {\n scopeMap.parts[jump.part] = part;\n }\n } // reduce the map to the scope section\n\n\n if (part && (scope === 'section' || scope === 'testSection')) {\n part.sections = {};\n\n if (section) {\n part.sections[jump.section] = section;\n }\n } // update the stats to reflect the scope\n\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n scopeMap.stats = this.computeStats(scopeMap.parts);\n return scopeMap;\n },\n\n /**\n * Gets the map of a particular scope from a current context\n * @param {Object} map - The assessment test map\n * @param {Object} context - The current session context\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {object} The scoped map\n */\n getScopeMapFromContext: function getScopeMapFromContext(map, context, scope) {\n // need a clone of the map as we will change some properties\n var scopeMap = _.cloneDeep(map || {});\n\n var part;\n var section; // gets the current part and section\n\n if (context && context.testPartId) {\n part = this.getPart(scopeMap, context.testPartId);\n }\n\n if (context && context.sectionId) {\n section = this.getSection(scopeMap, context.sectionId);\n } // reduce the map to the scope part\n\n\n if (scope && scope !== 'test') {\n scopeMap.parts = {};\n\n if (part) {\n scopeMap.parts[context.testPartId] = part;\n }\n } // reduce the map to the scope section\n\n\n if (part && (scope === 'section' || scope === 'testSection')) {\n part.sections = {};\n\n if (section) {\n part.sections[context.sectionId] = section;\n }\n } // update the stats to reflect the scope\n\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n scopeMap.stats = this.computeStats(scopeMap.parts);\n return scopeMap;\n },\n\n /**\n * Gets the test part containing a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemPart: function getItemPart(map, position) {\n var jump = this.getJump(map, position);\n return this.getPart(map, jump && jump.part);\n },\n\n /**\n * Gets the test section containing a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemSection: function getItemSection(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n return sections && sections[jump && jump.section];\n },\n\n /**\n * Gets the item located at a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemAt: function getItemAt(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n var section = sections && sections[jump && jump.section];\n var items = section && section.items;\n return items && items[jump && jump.identifier];\n },\n\n /**\n * Gets the identifier of an existing item\n * @param {Object} map - The assessment test map\n * @param {Number|String} position - The position of the item, can already be the identifier\n * @returns {String}\n */\n getItemIdentifier: function getItemIdentifier(map, position) {\n var item;\n\n if (_.isFinite(position)) {\n item = this.getItemAt(map, position);\n } else {\n item = this.getItem(map, position);\n }\n\n return item && item.id;\n },\n\n /**\n * Applies a callback on each item of the provided map\n * @param {Object} map - The assessment test map\n * @param {Function} callback(item, section, part, map) - A callback to apply on each item\n * @returns {Object}\n */\n each: function each(map, callback) {\n if (_.isFunction(callback)) {\n _.forEach(map && map.parts, function (part) {\n _.forEach(part && part.sections, function (section) {\n _.forEach(section && section.items, function (item) {\n callback(item, section, part, map);\n });\n });\n });\n }\n\n return map;\n },\n\n /**\n * Update the map stats from a particular item\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n updateItemStats: function updateItemStats(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n var section = sections && sections[jump && jump.section];\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n if (map) {\n map.stats = this.computeStats(map.parts);\n }\n\n return map;\n },\n\n /**\n * Computes the stats for a list of items\n * @param {Object} items\n * @returns {itemStats}\n */\n computeItemStats: function computeItemStats(items) {\n return _.reduce(items, function accStats(acc, item) {\n if (!item.informational) {\n acc.questions++;\n\n if (item.answered) {\n acc.answered++;\n }\n\n if (item.viewed) {\n acc.questionsViewed++;\n }\n }\n\n if (item.flagged) {\n acc.flagged++;\n }\n\n if (item.viewed) {\n acc.viewed++;\n }\n\n acc.total++;\n return acc;\n }, getEmptyStats());\n },\n\n /**\n * Computes the global stats of a collection of stats\n * @param {Object} collection\n * @returns {itemStats}\n */\n computeStats: function computeStats(collection) {\n return _.reduce(collection, function accStats(acc, item) {\n acc.questions += item.stats.questions;\n acc.answered += item.stats.answered;\n acc.flagged += item.stats.flagged;\n acc.viewed += item.stats.viewed;\n acc.total += item.stats.total;\n acc.questionsViewed += item.stats.questionsViewed;\n return acc;\n }, getEmptyStats());\n },\n\n /**\n * Patch a testMap with a partial testMap.\n *\n * If the currentMap is null or the scope is test,\n * we just use the partialMap as it is.\n *\n * Indexes, position and stats will be (re)built.\n *\n * @param {Object} currentMap - the map to patch\n * @param {Object} partialMap - the patch\n * @param {String} partialMap.scope - indicate the scope of the patch (test, part or section)\n * @returns {Object} the patched testMap\n * @throws {TypeError} if the partialMap is no a map\n */\n patch: function patch(currentMap, partialMap) {\n var self = this;\n var targetMap;\n\n if (!_.isPlainObject(partialMap) || !partialMap.parts) {\n throw new TypeError('Invalid test map format');\n }\n\n if (!currentMap || partialMap.scope === 'test') {\n targetMap = _.cloneDeep(partialMap);\n } else {\n targetMap = _.cloneDeep(currentMap);\n\n _.forEach(partialMap.parts, function (partialPart, targetPartId) {\n if (partialMap.scope === 'part') {\n //replace the target part\n targetMap.parts[targetPartId] = _.cloneDeep(partialPart);\n }\n\n if (partialMap.scope === 'section') {\n _.forEach(partialPart.sections, function (partialSection, targetSectionId) {\n //replace the target section\n targetMap.parts[targetPartId].sections[targetSectionId] = _.cloneDeep(partialSection); //compte new section stats\n\n targetMap.parts[targetPartId].sections[targetSectionId].stats = self.computeItemStats(targetMap.parts[targetPartId].sections[targetSectionId].items);\n });\n } //compte new/updated part stats\n\n\n targetMap.parts[targetPartId].stats = self.computeStats(targetMap.parts[targetPartId].sections);\n }); //compte updated test stats\n\n\n targetMap.stats = this.computeStats(targetMap.parts);\n } //the updated map can have a different size than the original\n\n\n targetMap = this.reindex(targetMap);\n return targetMap;\n },\n\n /**\n * Rebuild the indexes, positions of all map parts.\n * Then recreate the jump table.\n *\n * @param {Object} map - the map to reindex\n * @returns {Object} the brand new map\n * @throws {TypeError} if the map is no a map\n */\n reindex: function reindex(map) {\n var offset = 0;\n var offsetPart = 0;\n var offsetSection = 0;\n var lastPartId;\n var lastSectionId;\n\n if (!_.isPlainObject(map) || !map.parts) {\n throw new TypeError('Invalid test map format');\n } //remove the jump table\n\n\n map.jumps = []; //browse the test map, by position\n\n _.sortBy(map && map.parts, 'position').forEach(function (part) {\n _.sortBy(part && part.sections, 'position').forEach(function (section) {\n _.sortBy(section && section.items, 'position').forEach(function (item) {\n if (lastPartId !== part.id) {\n offsetPart = 0;\n lastPartId = part.id;\n part.position = offset;\n }\n\n if (lastSectionId !== section.id) {\n offsetSection = 0;\n lastSectionId = section.id;\n section.position = offset;\n }\n\n item.position = offset;\n item.index = offsetSection + 1;\n item.positionInPart = offsetPart;\n item.positionInSection = offsetSection;\n map.jumps[offset] = {\n identifier: item.id,\n section: section.id,\n part: part.id,\n position: offset\n };\n offset++;\n offsetSection++;\n offsetPart++;\n });\n });\n });\n\n return map;\n },\n\n /**\n * Create the jump table for a test map\n *\n * @param {Object} map - the map\n * @returns {Object} the brand new map with a jump table\n * @throws {TypeError} if the map is no a map\n */\n createJumpTable: function createJumpTable(map) {\n if (!_.isPlainObject(map) || !map.parts) {\n throw new TypeError('Invalid test map format');\n }\n\n map.jumps = [];\n this.each(map, function (item, section, part) {\n var offset = item.position;\n map.jumps[offset] = {\n identifier: item.id,\n section: section.id,\n part: part.id,\n position: offset\n };\n });\n return map;\n }\n };\n\n return map;\n\n});\n\n","define('taoQtiTest/runner/helpers/isReviewPanelEnabled',['taoQtiTest/runner/helpers/map'], function (mapHelper) { 'use strict';\n\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * Tells if the review panel is enabled\n * @returns {Boolean}\n */\n\n function isReviewPanelEnabled(runner) {\n var reviewEnabled = mapHelper.hasItemCategory(runner.getTestMap(), runner.getTestContext().itemIdentifier, 'reviewScreen', true);\n var itemReviewEnabled = runner.getOptions().review.enabled;\n return reviewEnabled && itemReviewEnabled;\n }\n\n return isReviewPanelEnabled;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/shortcuts',['i18n', 'lodash', 'ui/component', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'handlebars'], function (__, _, component, keyNavigator, navigableDomElement, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <div class=\\\"shortcuts-group-wrapper\\\">\\n <h3 class=\\\"shortcuts-group-title\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</h3>\\n <ul class=\\\"shortcuts-group-list\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.shortcuts), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n </div>\\n \";\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"shortcut-item\\\">\\n <span class=\\\"shortcut-item-shortcut\\\">\\n <kbd>\";\n if (helper = helpers.shortcut) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.shortcut); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</kbd>\\n </span>\\n <span class=\\\"shortcut-item-action\\\">\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n </span>\\n </li>\\n \";\n return buffer;\n }\n\n buffer += \"<div class=\\\"shortcuts-list-wrapper\\\">\\n <div class=\\\"shortcuts-list\\\" role=\\\"dialog\\\" aria-modal=\\\"true\\\" aria-labelledby=\\\"jumplinks/shortcuts-heading\\\"\\n aria-describedby=\\\"jumplinks/shortcuts-description\\\">\\n <h2 class=\\\"shortcuts-list-title\\\" id=\\\"jumplinks/shortcuts-heading\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Keyboard Navigation\", options) : helperMissing.call(depth0, \"__\", \"Keyboard Navigation\", options)))\n + \"\\n </h2>\\n <div id=\\\"jumplinks/shortcuts-description\\\">\\n <p class=\\\"shortcuts-list-description\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Keyboard shortcuts for the Accessibility Tools are available to the Test-taker.\", options) : helperMissing.call(depth0, \"__\", \"Keyboard shortcuts for the Accessibility Tools are available to the Test-taker.\", options)))\n + \"\\n </p>\\n <p class=\\\"shortcuts-list-description\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"You can magnify the content by up to 200%. Check your browser settings to find out how to do it.\", options) : helperMissing.call(depth0, \"__\", \"You can magnify the content by up to 200%. Check your browser settings to find out how to do it.\", options)))\n + \"\\n </p>\\n </div>\\n <button aria-label=\\\"Close dialog\\\" class=\\\"btn-close small\\\" data-control=\\\"close-btn\\\" type=\\\"button\\\">\\n <span class=\\\"icon-close\\\"></span>\\n </button>\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.shortcutsGroups), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function shortcutsTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n shortcutsGroups: [{\n id: 'navigation-shortcuts',\n label: __('Navigation shortcuts'),\n shortcuts: [{\n id: 'next',\n shortcut: 'ALT + Shift + N',\n label: __('Go to the next question')\n }, {\n id: 'previous',\n shortcut: 'ALT + Shift + P',\n label: __('Go to the previous question')\n }, {\n id: 'current',\n shortcut: 'ALT + Shift + Q',\n label: __('Go to the current question')\n }, {\n id: 'top',\n shortcut: 'ALT + Shift + T',\n label: __('Go to the top of the page')\n }]\n }]\n };\n /**\n * Creates and initialize the shortcuts component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @param {Object} config\n * @returns {shortcutsBox} the component, initialized and rendered\n */\n\n function shortcutsBoxFactory(config) {\n var ESK_KEY_CODE = 27;\n var shortcutsBox = component({}, defaults).on('render', function () {\n var _this = this;\n\n var $element = this.getElement();\n var $closeBtn = $element.find('.btn-close');\n var $keyNavigationItems = this.getElement().find('.shortcuts-list, .btn-close');\n $closeBtn.on('click', function () {\n return _this.trigger('close');\n }); // handle overlay click\n\n $element.on('click', function (e) {\n if ($element.is(e.target)) {\n _this.trigger('close');\n }\n });\n $element.on('keyup', function (e) {\n if (e.keyCode === ESK_KEY_CODE) {\n _this.trigger('close');\n }\n });\n this.navigator = keyNavigator({\n elements: navigableDomElement.createFromDoms($keyNavigationItems),\n propagateTab: false\n }) // keep cursor at close button\n .on('tab', function () {\n this.setCursorAt(1);\n }).on('shift+tab', function () {\n this.setCursorAt(1);\n }) // prevent focus move from shortcuts modal\n .on('blur', function () {\n _.defer(function () {\n if (!_this.navigator.isFocused()) {\n _this.navigator.focus();\n }\n });\n }).on('activate', function (cursor) {\n cursor.navigable.getElement().click();\n });\n this.navigator.first();\n }).on('destroy', function () {\n this.navigator.destroy();\n this.getElement().remove();\n });\n shortcutsBox.setTemplate(shortcutsTpl);\n shortcutsBox.init(config);\n return shortcutsBox;\n }\n\n return shortcutsBoxFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/plugin',['i18n', 'jquery', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/isReviewPanelEnabled', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/helpers', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/jumplinks', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/shortcuts', 'util/shortcut', 'util/namespace', 'handlebars'], function (__, $$1, pluginFactory, isReviewPanelEnabled, helpers, jumplinksFactory, shortcutsFactory, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n isReviewPanelEnabled = isReviewPanelEnabled && Object.prototype.hasOwnProperty.call(isReviewPanelEnabled, 'default') ? isReviewPanelEnabled['default'] : isReviewPanelEnabled;\n jumplinksFactory = jumplinksFactory && Object.prototype.hasOwnProperty.call(jumplinksFactory, 'default') ? jumplinksFactory['default'] : jumplinksFactory;\n shortcutsFactory = shortcutsFactory && Object.prototype.hasOwnProperty.call(shortcutsFactory, 'default') ? shortcutsFactory['default'] : shortcutsFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"jump-links-container\\\"></div>\\n\";\n });\n function containerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the JumpLinks plugin.\n * adding jumplinks accessibility feature for quick navigation\n */\n\n var plugin = pluginFactory({\n name: 'jumplinks',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var item = testRunner.getCurrentItem();\n var config = {\n isReviewPanelEnabled: isReviewPanelEnabled(testRunner),\n questionStatus: helpers.getItemStatus(item)\n };\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var areaBroker = this.getAreaBroker();\n var getJumpElement = helpers.getJumpElementFactory(areaBroker);\n var shortcutsConfig = navigator.appVersion.indexOf(\"Mac\") !== -1 ? {\n shortcutsGroups: [{\n id: 'navigation-shortcuts',\n label: __('Navigation shortcuts'),\n shortcuts: [{\n id: 'next',\n shortcut: 'OPTION + Shift + N',\n label: __('Go to the next question')\n }, {\n id: 'previous',\n shortcut: 'OPTION + Shift + P',\n label: __('Go to the previous question')\n }, {\n id: 'current',\n shortcut: 'OPTION + Shift + Q',\n label: __('Go to the current question')\n }, {\n id: 'top',\n shortcut: 'OPTION + Shift + T',\n label: __('Go to the top of the page')\n }]\n }]\n } : {};\n\n if (testRunnerOptions.allowShortcuts) {\n pluginShortcuts.goToTop && shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.goToTop, this.getName(), true), function () {\n $$1('[tabindex]').first().focus();\n }, {\n avoidInput: true,\n prevent: true\n });\n pluginShortcuts.goToQuestion && shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.goToQuestion, this.getName(), true), function () {\n getJumpElement.question.focus();\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n\n this.jumplinks = jumplinksFactory(config).on('render', function () {\n _this.jumplinks.on('jump', function (jumpTo) {\n var $element = getJumpElement[jumpTo];\n $element.focus();\n });\n\n _this.jumplinks.on('shortcuts', function () {\n if (_this.shortcuts) {\n return;\n }\n\n _this.shortcuts = shortcutsFactory(shortcutsConfig);\n\n _this.shortcuts.render(_this.getAreaBroker().getControlArea());\n\n _this.shortcuts.on('close', function () {\n _this.shortcuts.destroy();\n\n _this.shortcuts = null;\n });\n });\n }).on('update', function update(params) {\n this.trigger('changeReviewPanel', params.isReviewPanelEnabled);\n this.trigger('changeQuesitionStatus', params.questionStatus);\n }).on('changeReviewPanel', function changeReviewPanel(enabled) {\n var elem = this.getElement();\n var panelJumplink = elem.find('[data-jump=\"teststatus\"]').parent();\n\n if (enabled) {\n panelJumplink.removeClass('hidden');\n } else {\n panelJumplink.addClass('hidden');\n }\n }).on('changeQuesitionStatus', function changeQuesitionStatus(questionStatus) {\n var elem = this.getElement();\n var text = \"\".concat(__('Question'), \" - \").concat(questionStatus);\n elem.find('[data-jump=\"question\"] > b').text(text);\n });\n testRunner.on('renderitem', function () {\n var currentItem = testRunner.getCurrentItem();\n var updatedConfig = {\n isReviewPanelEnabled: !helpers.isReviewPanelHidden(testRunner) && isReviewPanelEnabled(testRunner),\n questionStatus: helpers.getItemStatus(currentItem)\n };\n\n var announcedText = __('Item %s loaded', currentItem.position);\n\n var $announce = $$1('[aria-live=polite][role=alert]').first();\n\n if ($announce.length !== 1) {\n $announce = $$1('<div aria-live=\"polite\" role=\"alert\" class=\"visible-hidden\"></div>');\n $$1('main').first().append($announce);\n }\n\n $announce.text(announcedText);\n\n _this.jumplinks.trigger('update', updatedConfig);\n }).on('tool-flagitem', function () {\n var currentItem = testRunner.getCurrentItem();\n var questionStatus = helpers.getItemStatus(Object.assign({}, currentItem, {\n flagged: !currentItem.flagged\n }));\n\n _this.jumplinks.trigger('changeQuesitionStatus', questionStatus);\n }).on('tool-reviewpanel', function () {\n var wasHidden = helpers.isReviewPanelHidden(testRunner);\n\n _this.jumplinks.trigger('changeReviewPanel', wasHidden);\n }).after('renderitem', function () {\n getJumpElement.question.attr('tabindex', '-1').focus();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var jumplinksContainer = $$1(containerTpl());\n $$1('.content-wrap').prepend(jumplinksContainer);\n this.jumplinks.render(jumplinksContainer);\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'header-toolbar';\n /**\n * Key navigator strategy applying onto the header bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var headerNavigation = {\n name: 'header',\n\n /**\n * Builds the header navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig(); // we need a global selector as there is currently no way to access the delivery frame from the test runner\n\n var $headerBar = $('header');\n var $headerElements = $headerBar.find('a:visible');\n\n var registerHeaderNavigator = function registerHeaderNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false,\n defaultPosition: 0\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n\n if (config.flatNavigation) {\n $headerElements.each(function (index, element) {\n return registerHeaderNavigator(\"\".concat(groupId, \"-\").concat(index), $headerBar, $(element));\n });\n } else {\n registerHeaderNavigator(groupId, $headerBar, $headerElements);\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return headerNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation',['lodash', 'jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function (_, $, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'bottom-toolbar';\n /**\n * Key navigator strategy applying onto the tools bar\n * @type {Object} keyNavigationStrategy\n */\n\n var toolbarNavigation = {\n name: 'toolbar',\n\n /**\n * Builds the toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $navigationBar = this.getTestRunner().getAreaBroker().getContainer().find('.bottom-action-bar');\n var $toolbarElements = $navigationBar.find('.action:not(.btn-group):visible, .action.btn-group .li-inner:visible');\n\n if (config.reverseBottomToolbar) {\n $toolbarElements = $($toolbarElements.get().reverse());\n }\n\n var registerToolbarNavigator = function registerToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false,\n defaultPosition: function defaultPosition(navigableElements) {\n var pos = 0; // search for the position of the \"Next\" button if any,\n // otherwise take the position of the last element\n\n if (config.autoFocus) {\n pos = navigableElements.length - 1;\n\n _.forEach(navigableElements, function (navigable, i) {\n var $element = navigable.getElement();\n\n if ($element.data('control') === 'move-forward' || $element.data('control') === 'move-end') {\n pos = i;\n }\n });\n }\n\n return pos;\n }\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n\n if (config.flatNavigation) {\n $toolbarElements.each(function (index, element) {\n return registerToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $navigationBar, $(element));\n });\n } else {\n registerToolbarNavigator(groupId, $navigationBar, $toolbarElements);\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return toolbarNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'top-toolbar';\n /**\n * Key navigator strategy applying onto the top toolbar' bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var topToolbarNavigation = {\n name: 'top-toolbar',\n\n /**\n * Builds the top toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $topToolbar = this.getTestRunner().getAreaBroker().getContainer().find('.top-action-bar');\n var $toolbarElements = $topToolbar.find('.timer-toggler');\n\n var registerTopToolbarNavigator = function registerTopToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n $toolbarElements.each(function (index, element) {\n return registerTopToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $topToolbar, $(element));\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return topToolbarNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation',['lodash', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function (_, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * List of CSS selectors for the navigables\n * @type {Object}\n */\n\n var selectors = {\n filters: '.qti-navigator-filters .qti-navigator-filter',\n unseenItems: '.qti-navigator-tree .qti-navigator-item:not(.unseen) .qti-navigator-label',\n allItems: '.qti-navigator-tree .qti-navigator-item .qti-navigator-label'\n };\n /**\n * Key navigator strategy applying onto the navigation panel.\n * @type {Object} keyNavigationStrategy\n */\n\n var navigatorNavigation = {\n name: 'navigator',\n\n /**\n * Builds the navigator navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var config = this.getConfig();\n var $panel = this.getTestRunner().getAreaBroker().getPanelArea();\n var $navigator = $panel.find('.qti-navigator');\n var filtersNavigator;\n var itemsNavigator; //the tag to identify if the item listing has been browsed, to only \"smart jump\" to active item only on the first visit\n\n var itemListingVisited = false; //the position of the filter in memory, to only \"smart jump\" to active item only on the first visit\n\n var currentFilter;\n this.managedNavigators = [];\n this.keyNavigators = [];\n var testStatusNavigation;\n\n if ($navigator.length && !$navigator.hasClass('disabled')) {\n var $filters = $navigator.find(selectors.filters);\n var navigableFilters = navigableDomElement.createFromDoms($filters);\n var $testStatusHeader = $navigator.find('.qti-navigator-info.collapsible > .qti-navigator-label');\n var navigableTestStatus = navigableDomElement.createFromDoms($testStatusHeader);\n $testStatusHeader.addClass('key-navigation-actionable');\n\n if (navigableTestStatus.length) {\n testStatusNavigation = keyNavigator({\n keepState: config.keepState,\n id: 'navigator-test-status',\n propagateTab: false,\n elements: navigableTestStatus,\n group: $testStatusHeader\n });\n helpers.setupItemsNavigator(testStatusNavigation, {\n keyNextItem: config.keyNextTab || config.keyNextItem,\n keyPrevItem: config.keyPrevTab || config.keyPrevItem\n });\n this.keyNavigators.push(testStatusNavigation);\n this.managedNavigators.push(testStatusNavigation);\n }\n\n if (navigableFilters.length) {\n filtersNavigator = keyNavigator({\n keepState: config.keepState,\n id: 'navigator-filters',\n propagateTab: false,\n elements: navigableFilters,\n group: $navigator.find('.qti-navigator-filters')\n });\n helpers.setupItemsNavigator(filtersNavigator, {\n keyNextItem: config.keyNextTab || config.keyNextItem,\n keyPrevItem: config.keyPrevTab || config.keyPrevItem\n });\n helpers.setupClickableNavigator(filtersNavigator);\n\n if (config.keepState) {\n filtersNavigator.on('focus', function (cursor) {\n if (config.keepState) {\n var $element = cursor.navigable.getElement();\n var filter = $element.data('mode');\n $element.click();\n\n if (currentFilter !== filter) {\n itemListingVisited = false;\n }\n\n currentFilter = filter;\n }\n });\n }\n\n if (config.keyNextContent) {\n filtersNavigator.on(config.keyNextContent, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && itemsNavigator) {\n _.defer(function () {\n if (itemListingVisited) {\n itemsNavigator.first();\n } else {\n itemsNavigator.focus();\n }\n });\n }\n });\n }\n\n if (config.keyPrevContent) {\n filtersNavigator.on(config.keyPrevContent, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && itemsNavigator) {\n _.defer(function () {\n itemsNavigator.last();\n });\n }\n });\n }\n\n this.keyNavigators.push(filtersNavigator);\n this.managedNavigators.push(filtersNavigator);\n }\n\n var $navigatorTree = $panel.find('.qti-navigator-tree');\n var skipAheadEnabled = $panel.find('.qti-navigator').is('.skipahead-enabled');\n var $trees = $navigator.find(skipAheadEnabled ? selectors.allItems : selectors.unseenItems);\n var navigableTrees = navigableDomElement.createFromDoms($trees);\n $trees.first().addClass('key-navigation-scrollable-up');\n $trees.last().addClass('key-navigation-scrollable-down');\n\n if (navigableTrees.length) {\n //instantiate a key navigator but do not add it to the returned list of navigators as this is not supposed to be reached with tab key\n itemsNavigator = keyNavigator({\n id: 'navigator-items',\n elements: navigableTrees,\n group: $navigatorTree,\n defaultPosition: function defaultPosition(navigableElements) {\n var pos = 0;\n\n if (config.flatNavigation || currentFilter !== 'flagged') {\n pos = _.findIndex(navigableElements, function (navigable) {\n var $parent = navigable.getElement().parent('.qti-navigator-item');\n\n if ($parent.hasClass('active') && $parent.is(':visible')) {\n return true;\n }\n });\n }\n\n return pos;\n }\n }).on('focus', function (cursor) {\n itemListingVisited = true;\n cursor.navigable.getElement().parent().addClass('key-navigation-highlight');\n }).on('blur', function (cursor) {\n cursor.navigable.getElement().parent().removeClass('key-navigation-highlight');\n });\n helpers.setupItemsNavigator(itemsNavigator, {\n keyNextItem: config.keyNextContent || config.keyNextItem,\n keyPrevItem: config.keyPrevContent || config.keyPrevItem\n });\n helpers.setupClickableNavigator(itemsNavigator);\n\n if (config.keepState) {\n itemsNavigator.on('lowerbound upperbound', function () {\n if (filtersNavigator) {\n filtersNavigator.focus();\n }\n });\n }\n\n if (config.keyNextTab && config.keyPrevTab) {\n itemsNavigator.on(config.keyNextTab, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && filtersNavigator) {\n filtersNavigator.focus().next();\n }\n });\n itemsNavigator.on(config.keyPrevTab, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && filtersNavigator) {\n filtersNavigator.focus().previous();\n }\n });\n } else {\n this.keyNavigators.push(itemsNavigator);\n }\n\n this.managedNavigators.push(itemsNavigator);\n }\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.managedNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.managedNavigators = [];\n this.keyNavigators = [];\n return this;\n }\n };\n\n return navigatorNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'item-content-wrapper';\n /**\n * Key navigator strategy applying onto the page.\n * @type {Object} keyNavigationStrategy\n */\n\n var pageNavigation = {\n name: 'page',\n\n /**\n * Builds the page navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n this.keyNavigators = [];\n this.getTestRunner().getAreaBroker().getContainer().find('.content-wrapper').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(_this.keyNavigators.length),\n elements: navigableDomElement.createFromDoms($element),\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return pageNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'rubric-element-navigation-group';\n /**\n * Key navigator strategy applying onto the rubric blocks.\n * @type {Object} keyNavigationStrategy\n */\n\n var rubricsNavigation = {\n name: 'rubrics',\n\n /**\n * Builds the rubric blocks navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n this.keyNavigators = [];\n this.getTestRunner().getAreaBroker().getContainer().find('.qti-rubricBlock').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(_this.keyNavigators.length),\n elements: navigableDomElement.createFromDoms($element),\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return rubricsNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation',['jquery', 'ui/scroller', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, scrollHelper, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n scrollHelper = scrollHelper && Object.prototype.hasOwnProperty.call(scrollHelper, 'default') ? scrollHelper['default'] : scrollHelper;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Add aria-labelledby attribute to choice interaction\n *\n * @param {Navigator} cursor\n */\n\n var addLabelledByAttribute = function addLabelledByAttribute(cursor) {\n var $element = cursor.navigable.getElement();\n var value = $element.attr('value');\n var name = $element.attr('name');\n\n if (name) {\n $element.attr('aria-labelledby', \"\".concat(name.replace('response-', 'choice-'), \"-\").concat(value));\n }\n };\n /**\n * Add aria-labelledby attribute from choice interaction\n *\n * @param {Navigator} cursor\n */\n\n\n var removeLabelledByAttribute = function removeLabelledByAttribute(cursor) {\n var $element = cursor.navigable.getElement();\n $element.removeAttr('aria-labelledby', '');\n };\n /**\n * Adds attributes on navigation focus and blur\n *\n * @param {Navigator} navigator\n */\n\n\n var manageLabelledByAttribute = function manageLabelledByAttribute(navigator) {\n if (navigator) {\n navigator.on('focus', addLabelledByAttribute);\n navigator.on('blur', removeLabelledByAttribute); // applies WCAG behavior for the radio buttons\n }\n };\n /**\n * Key navigator strategy applying inside the item.\n * Navigable item content are interaction choices and body element with the special class \"key-navigation-focusable\".\n * @type {Object} keyNavigationStrategy\n */\n\n\n var itemNavigation = {\n name: 'item',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n this.keyNavigators = [];\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n /**\n * Gets the QTI choice element from the current position in the keyNavigation\n * @param {Object} cursor - The cursor definition supplied by the keyNavigator\n * @returns {jQuery} - The selected choice element\n */\n\n var getQtiChoice = function getQtiChoice(cursor) {\n return cursor && cursor.navigable.getElement().closest('.qti-choice');\n };\n /**\n * Creates and registers a keyNavigator for the supplied list of elements\n * @param {jQuery} $elements - The list of navigable elements\n * @param {jQuery} group - The group container\n * @param {Boolean} [loop=false] - Allow cycling the list when a boundary is reached\n * @param {Number|Function} [defaultPosition=0] - The default position the group should set the focus on\n * @returns {keyNavigator} - the created navigator, if the list of element is not empty\n */\n\n\n var addNavigator = function addNavigator($elements, group) {\n var loop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var defaultPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n elements: elements,\n group: group,\n loop: loop,\n defaultPosition: defaultPosition,\n propagateTab: false\n });\n\n _this.keyNavigators.push(navigator);\n\n return navigator;\n }\n };\n /**\n * Creates and setups a keyNavigator for the interaction inputs.\n * @param {jQuery} $elements - The list of navigable elements\n * @param {jQuery} group - The group container\n * @param {Boolean} [loop=false] - Allow cycling the list when a boundary is reached\n * @param {Number|Function} [defaultPosition=0] - The default position the group should set the focus on\n * @returns {keyNavigator} - The supplied keyNavigator\n */\n\n\n var addInputsNavigator = function addInputsNavigator($elements, group, loop) {\n var defaultPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var navigator = addNavigator($elements, group, loop, defaultPosition);\n\n if (navigator) {\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator); // each choice is represented by more than the input, the style must be spread to the actual element\n\n navigator.on('focus', function (cursor) {\n return scrollHelper.scrollTo(getQtiChoice(cursor).addClass('key-navigation-highlight'), $content.closest('.content-wrapper'));\n }).on('blur', function (cursor) {\n return getQtiChoice(cursor).removeClass('key-navigation-highlight');\n });\n }\n\n return navigator;\n }; // list the navigable areas inside the item. This could be either the interactions choices or the prompts\n\n\n var $qtiInteractions = $content.find('.key-navigation-focusable,.qti-interaction') //filter out interaction as it will be managed separately\n .filter(function (i, node) {\n return !$(node).parents('.qti-interaction').length;\n }); // the item focusable body elements are considered scrollable\n\n $content.find('.key-navigation-focusable').addClass('key-navigation-scrollable'); // each navigable area will get its own keyNavigator\n\n $qtiInteractions.each(function (itemPos, itemElement) {\n var $itemElement = $(itemElement); // detect the type of choices: checkbox or radio\n\n var $choiceInput = $itemElement.find('.qti-choice input');\n var choiceType = $choiceInput.attr('type');\n\n if ($itemElement.hasClass('qti-interaction')) {\n //add navigable elements from prompt\n $itemElement.find('.key-navigation-focusable').each(function (navPos, nav) {\n var $nav = $(nav);\n\n if (!$nav.closest('.qti-choice').length) {\n addNavigator($nav, $nav);\n }\n }); //reset interaction custom key navigation to override the behaviour with the new one\n\n $itemElement.off('.keyNavigation'); //search for inputs that represent the interaction focusable choices\n\n var $inputs = $itemElement.is(':input') ? $itemElement : $itemElement.find(':input');\n\n if (config.flatNavigation && (config.flatRadioNavigation || choiceType !== 'radio')) {\n $inputs.each(function (i, input) {\n var navigator = addInputsNavigator($(input), $itemElement);\n manageLabelledByAttribute(navigator);\n });\n } else {\n var navigator = addInputsNavigator($inputs, $itemElement, true, function () {\n // keep default positioning for now\n var position = -1; // autofocus the selected radio button if any\n\n $inputs.each(function (index, input) {\n if (input.checked) {\n position = index;\n }\n });\n return position;\n });\n manageLabelledByAttribute(navigator); // applies WCAG behavior for the radio buttons\n\n if (navigator && config.wcagBehavior) {\n navigator.on('focus', function (cursor) {\n var $element = cursor.navigable.getElement();\n\n if (!$element.is(':checked')) {\n $element.click();\n }\n });\n }\n }\n } else {\n addNavigator($itemElement, $itemElement);\n }\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return itemNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Key navigator strategy applying inside the item.\n * Navigable item content are interaction choices with the special class \"key-navigation-focusable\".\n * @type {Object} keyNavigationStrategy\n */\n\n var linearItemNavigation = {\n name: 'linearItem',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n var $qtiInteractions = $content.find('.key-navigation-focusable,.qti-interaction') //filter out interaction as it will be managed separately\n .filter(function (i, node) {\n return !$(node).parents('.qti-interaction').length;\n });\n var $qtiChoices = $qtiInteractions.find('.qti-choice');\n var $lastParent = null;\n var list = [];\n\n var setupListNavigator = function setupListNavigator() {\n var navigator = keyNavigator({\n elements: list,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.choicesNavigators.push(navigator);\n }; // this strategy manages 2 navigators:\n // - keyNavigators lists all elements separately, allowing to navigate among them as identified groups\n // - choicesNavigators lists elements with the same parent, allowing to navigate \"horizontally\" among them\n\n\n this.keyNavigators = [];\n this.choicesNavigators = []; // the item focusable body elements are considered scrollable\n\n $content.find('.key-navigation-focusable').addClass('key-navigation-scrollable');\n $qtiChoices.each(function (i, el) {\n var $itemElement = $(el);\n var $parent = $itemElement.parent();\n var choiceNavigator = keyNavigator({\n elements: navigableDomElement.createFromDoms($itemElement),\n group: $itemElement,\n propagateTab: false\n });\n helpers.setupClickableNavigator(choiceNavigator);\n\n if ($lastParent && !$parent.is($lastParent)) {\n setupListNavigator();\n list = [];\n }\n\n _this.keyNavigators.push(choiceNavigator);\n\n list.push(choiceNavigator);\n $lastParent = $parent;\n });\n\n if (list.length) {\n setupListNavigator();\n list = [];\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.choicesNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.choicesNavigators = [];\n this.keyNavigators = [];\n return this;\n }\n };\n\n return linearItemNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation',['jquery', 'i18n', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, __, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'stimulus-element-navigation-group';\n /**\n * Key navigator strategy applying on stimulus items with scrollbar.\n * Navigable item content are body elements with the special class \"stimulus-container\".\n * @type {Object} keyNavigationStrategy\n */\n\n var stimulusNavigation = {\n name: 'stimulus',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n this.keyNavigators = []; // decorate isEnabled navigableDomElement method to check for dom node height\n\n var isEnabledDecorator = function isEnabledDecorator(element) {\n var originalIsEnabled = element.isEnabled;\n\n element.isEnabled = function isEnabled() {\n if (originalIsEnabled.call(this)) {\n var node = this.getElement().get(0);\n return node.scrollHeight > node.clientHeight;\n }\n\n return false;\n };\n\n return element;\n };\n\n $content.find('.stimulus-container').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var elements = navigableDomElement.createFromDoms($element).map(isEnabledDecorator); // assign aria attributes\n\n $element.attr('aria-label', __('Passage'));\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(i),\n elements: elements,\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return stimulusNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'jump-links';\n /**\n * Key navigator strategy applying onto the top toolbar' bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var jumpLinks = {\n name: 'jump-links',\n\n /**\n * Builds the top toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $jumpLinksBox = $('.content-wrap');\n var $links = $jumpLinksBox.find('.jump-link');\n this.keyNavigators = [];\n\n var registerTopToolbarNavigator = function registerTopToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n $links.each(function (index, element) {\n return registerTopToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $jumpLinksBox, $(element));\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return jumpLinks;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/index',['exports', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks'], function (exports, headerNavigation, toolbarNavigation, topToolbarNavigation, navigatorNavigation, pageNavigation, rubricsNavigation, itemNavigation, linearItemNavigation, stimulusNavigation, jumpLinks) { 'use strict';\n\n\theaderNavigation = headerNavigation && Object.prototype.hasOwnProperty.call(headerNavigation, 'default') ? headerNavigation['default'] : headerNavigation;\n\ttoolbarNavigation = toolbarNavigation && Object.prototype.hasOwnProperty.call(toolbarNavigation, 'default') ? toolbarNavigation['default'] : toolbarNavigation;\n\ttopToolbarNavigation = topToolbarNavigation && Object.prototype.hasOwnProperty.call(topToolbarNavigation, 'default') ? topToolbarNavigation['default'] : topToolbarNavigation;\n\tnavigatorNavigation = navigatorNavigation && Object.prototype.hasOwnProperty.call(navigatorNavigation, 'default') ? navigatorNavigation['default'] : navigatorNavigation;\n\tpageNavigation = pageNavigation && Object.prototype.hasOwnProperty.call(pageNavigation, 'default') ? pageNavigation['default'] : pageNavigation;\n\trubricsNavigation = rubricsNavigation && Object.prototype.hasOwnProperty.call(rubricsNavigation, 'default') ? rubricsNavigation['default'] : rubricsNavigation;\n\titemNavigation = itemNavigation && Object.prototype.hasOwnProperty.call(itemNavigation, 'default') ? itemNavigation['default'] : itemNavigation;\n\tlinearItemNavigation = linearItemNavigation && Object.prototype.hasOwnProperty.call(linearItemNavigation, 'default') ? linearItemNavigation['default'] : linearItemNavigation;\n\tstimulusNavigation = stimulusNavigation && Object.prototype.hasOwnProperty.call(stimulusNavigation, 'default') ? stimulusNavigation['default'] : stimulusNavigation;\n\tjumpLinks = jumpLinks && Object.prototype.hasOwnProperty.call(jumpLinks, 'default') ? jumpLinks['default'] : jumpLinks;\n\n\n\n\texports.headerNavigationStrategy = headerNavigation;\n\texports.toolbarNavigationStrategy = toolbarNavigation;\n\texports.topToolbarNavigationStrategy = topToolbarNavigation;\n\texports.navigatorNavigationStrategy = navigatorNavigation;\n\texports.pageNavigationStrategy = pageNavigation;\n\texports.rubricsNavigationStrategy = rubricsNavigation;\n\texports.itemNavigationStrategy = itemNavigation;\n\texports.linearItemNavigationStrategy = linearItemNavigation;\n\texports.stimulusNavigationStrategy = stimulusNavigation;\n\texports.jumpLinksNavigationStrategy = jumpLinks;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategiesManager',['core/providerRegistry', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/index'], function (providerRegistry, strategies) { 'use strict';\n\n providerRegistry = providerRegistry && Object.prototype.hasOwnProperty.call(providerRegistry, 'default') ? providerRegistry['default'] : providerRegistry;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Defines the strategies API\n * @typedef {Object} keyNavigationStrategy\n * @property {Function} init\n * @property {Function} destroy\n * @property {Function} getNavigators\n * @property {Function} getName\n * @property {Function} getConfig\n * @property {Function} getTestRunner\n */\n\n /**\n * Defines the config structure for the navigation strategies\n * @typedef {Object} keyNavigationStrategyConfig\n * @property {Boolean} autoFocus - auto select the main action when available in a group\n * @property {Boolean} wcagBehavior - apply WCAG recommended behavior for radio buttons and similar elements\n * @property {Boolean} keepState - for strategies able to keep the state, allow to keep the position of the focused\n * element when moving away from the group and restore it when the group retrieves the focus\n * @property {Boolean} propagateTab - propagate the Tab key to the upper level\n * @property {Boolean} flatNavigation - flatten the navigation between groups, allowing to forward the focus to the\n * following group when a group boundary is reached. If disabled, the only way to move between groups is to use the\n * related key combination\n * @property {String} keyNextItem - the keyboard shortcut to move to the next item (inside the scope)\n * @property {String} keyPrevItem - the keyboard shortcut to move to the previous item (inside the scope)\n * @property {String} keyNextGroup - the keyboard shortcut to move to the next group (outside the scope)\n * @property {String} keyPrevGroup - the keyboard shortcut to move to the previous group (outside the scope)\n * @property {String} keyNextTab - the keyboard shortcut to move to the next tab of the bar\n * @property {String} keyPrevTab - the keyboard shortcut to move to the previous tab of the bar\n * @property {String} keyNextContent - the keyboard shortcut to move to the next content element\n * @property {String} keyPrevContent - the keyboard shortcut to move to the previous content element\n */\n\n /**\n * Builds a key navigator strategies manager.\n *\n * @param {String} name - the name of the strategy to build\n * @param {testRunner} testRunner - the test runner instance to control\n * @param {keyNavigationStrategyConfig} config - the config to apply\n * @returns {keyNavigationStrategy}\n */\n\n function strategyFactory(name, testRunner, config) {\n var strategy = strategyFactory.getProvider(name);\n /**\n * @type {Object} keyNavigationStrategy\n */\n\n return {\n /**\n * Setup the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n strategy.init.call(this);\n return this;\n },\n\n /**\n * Gets the name of the applied strategy\n * @returns {String}\n */\n getName: function getName() {\n return name;\n },\n\n /**\n * Gets the config of the strategy\n * @returns {keyNavigationStrategyConfig}\n */\n getConfig: function getConfig() {\n return config;\n },\n\n /**\n * Gets the test runner\n * @returns {testRunner}\n */\n getTestRunner: function getTestRunner() {\n return testRunner;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n if ('function' === typeof strategy.getNavigators) {\n return strategy.getNavigators.call(this);\n }\n\n return [];\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n if ('function' === typeof strategy.destroy) {\n strategy.destroy.call(this);\n }\n\n return this;\n }\n };\n } // bootstrap the manager and register the strategies\n\n providerRegistry(strategyFactory);\n Object.values(strategies).forEach(function (strategy) {\n return strategyFactory.registerProvider(strategy.name, strategy);\n });\n\n return strategyFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers',['exports', 'jquery', 'lodash', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategiesManager'], function (exports, $, _, strategyFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n strategyFactory = strategyFactory && Object.prototype.hasOwnProperty.call(strategyFactory, 'default') ? strategyFactory['default'] : strategyFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * When either an element or its parents have this class - navigation from it would be disabled.\n *\n * @type {String}\n */\n\n var ignoredClass = 'no-key-navigation';\n /**\n * Checks whether element is navigable from\n *\n * @param {HTMLElement|keyNavigator} from\n * @returns {boolean}\n */\n\n function allowedToNavigateFrom(from) {\n var element = from;\n\n if (element && 'function' === typeof element.getCursor) {\n var _element$getCursor = element.getCursor(),\n navigable = _element$getCursor.navigable;\n\n element = navigable;\n }\n\n if (element && 'function' === typeof element.getElement) {\n element = element.getElement();\n }\n\n var $element = $(element);\n\n if ($element.hasClass(ignoredClass) || $element.parents(\".\".concat(ignoredClass)).length > 0) {\n return false;\n }\n\n return true;\n }\n /**\n * Applies an items' navigation scheme on a keyNavigator.\n * @param {keyNavigator} navigator\n * @param {keyNavigationStrategyConfig} config - the config to apply\n * @returns {keyNavigator}\n */\n\n function setupItemsNavigator(navigator, config) {\n return navigator.on(config.keyNextItem, function navigateToNextItem(elem) {\n if (allowedToNavigateFrom(elem)) {\n this.next();\n }\n }).on(config.keyPrevItem, function navigateToPrevItem(elem) {\n if (allowedToNavigateFrom(elem)) {\n this.previous();\n }\n });\n }\n /**\n * Applies an items' navigation scheme on a keyNavigator.\n * @param {keyNavigator} navigator\n * @returns {keyNavigator}\n */\n\n function setupClickableNavigator(navigator) {\n return navigator.on('activate', function activateItem(cursor) {\n var $elt = cursor.navigable.getElement(); // jQuery <= 1.9.0\n // the checkbox values are set after the click event if triggered with jQuery\n\n if ($elt.is(':checkbox')) {\n $elt.each(function () {\n this.click();\n });\n } else {\n $elt.click().mousedown();\n }\n });\n }\n /**\n * Build the strategies related to a key navigation mode\n * @param {keyNavigationMode} navigationMode\n * @param {testRunner} testRunner\n * @returns {keyNavigationStrategy[]}\n */\n\n function getStrategies(navigationMode, testRunner) {\n return navigationMode.strategies.map(function (area) {\n return strategyFactory(area, testRunner, navigationMode.config).init();\n });\n }\n /**\n * Gets the key navigators from the provided strategies\n * @param {keyNavigationStrategy[]} strategies\n * @returns {keyNavigator[]}\n */\n\n function getNavigators(strategies) {\n return _.flatten(strategies.map(function (strategy) {\n return strategy.getNavigators();\n }));\n }\n\n exports.allowedToNavigateFrom = allowedToNavigateFrom;\n exports.getNavigators = getNavigators;\n exports.getStrategies = getStrategies;\n exports.setupClickableNavigator = setupClickableNavigator;\n exports.setupItemsNavigator = setupItemsNavigator;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/defaultMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Default key navigation mode\n */\n var defaultMode = {\n name: 'default',\n\n /**\n * Builds the key navigation config for the \"default\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n strategies: ['rubrics', 'stimulus', 'item', 'toolbar', 'header', 'top-toolbar', 'navigator', 'page'],\n config: Object.assign({\n autoFocus: true,\n wcagBehavior: false,\n keepState: true,\n propagateTab: false,\n flatNavigation: false,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: 'right',\n keyPrevTab: 'left',\n keyNextContent: 'down',\n keyPrevContent: 'up'\n }, config)\n };\n }\n };\n\n return defaultMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/linearMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Linear key navigation mode\n */\n var linearMode = {\n name: 'linear',\n\n /**\n * Builds the key navigation config for the \"linear\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n strategies: ['rubrics', 'stimulus', 'linearItem', 'toolbar', 'header', 'top-toolbar', 'navigator', 'page'],\n config: Object.assign({\n autoFocus: true,\n wcagBehavior: false,\n keepState: true,\n propagateTab: false,\n flatNavigation: false,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: 'right',\n keyPrevTab: 'left',\n keyNextContent: 'down',\n keyPrevContent: 'up'\n }, config)\n };\n }\n };\n\n return linearMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/nativeMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Native key navigation mode\n */\n var nativeMode = {\n name: 'native',\n\n /**\n * Builds the key navigation config for the \"native\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n // todo: add access to the page and the rubric blocks\n strategies: ['jump-links', 'header', 'top-toolbar', 'navigator', 'page', 'rubrics', 'stimulus', 'item', 'toolbar'],\n config: Object.assign({\n autoFocus: false,\n wcagBehavior: false,\n keepState: false,\n propagateTab: true,\n flatNavigation: true,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: '',\n keyPrevTab: '',\n keyNextContent: '',\n keyPrevContent: ''\n }, config)\n };\n }\n };\n\n return nativeMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/index',['exports', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/defaultMode', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/linearMode', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/nativeMode'], function (exports, defaultMode, linearMode, nativeMode) { 'use strict';\n\n\tdefaultMode = defaultMode && Object.prototype.hasOwnProperty.call(defaultMode, 'default') ? defaultMode['default'] : defaultMode;\n\tlinearMode = linearMode && Object.prototype.hasOwnProperty.call(linearMode, 'default') ? linearMode['default'] : linearMode;\n\tnativeMode = nativeMode && Object.prototype.hasOwnProperty.call(nativeMode, 'default') ? nativeMode['default'] : nativeMode;\n\n\n\n\texports.defaultModeProvider = defaultMode;\n\texports.linearModeProvider = linearMode;\n\texports.nativeModeProvider = nativeMode;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modesManager',['core/providerRegistry', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/index'], function (providerRegistry, modes) { 'use strict';\n\n providerRegistry = providerRegistry && Object.prototype.hasOwnProperty.call(providerRegistry, 'default') ? providerRegistry['default'] : providerRegistry;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Defines the mode config\n * @typedef {Object} keyNavigationMode\n * @property {String[]} strategies\n * @property {keyNavigationStrategyConfig} config\n */\n\n /**\n * Builds a key navigator modes manager.\n *\n * @param {String} mode - the name of the mode to get\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n\n function modeFactory(mode) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var instance = modeFactory.getProvider(mode);\n return instance.init(config);\n } // bootstrap the manager and register the strategies\n\n providerRegistry(modeFactory);\n Object.values(modes).forEach(function (mode) {\n return modeFactory.registerProvider(mode.name, mode);\n });\n\n return modeFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/keyNavigation',['ui/keyNavigation/navigator', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modesManager', 'util/shortcut'], function (keyNavigator, helpers, modeFactory, shortcut) { 'use strict';\n\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n modeFactory = modeFactory && Object.prototype.hasOwnProperty.call(modeFactory, 'default') ? modeFactory['default'] : modeFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The event namespace used to register removable listeners\n * @type {String}\n */\n\n var eventNS = '.keyNavigation';\n /**\n * Builds a key navigator that can apply onto a test runner\n * @param {testRunner} testRunner - the test runner instance to control\n * @param {Object} config - the config to apply\n * @param {String} config.contentNavigatorType - the keyboard navigation mode\n * @returns {testRunnerKeyNavigator}\n */\n\n function keyNavigationFactory(testRunner) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var contentNavigatorType = config.contentNavigatorType;\n var groupNavigator = null;\n var strategies = [];\n /**\n * @typedef {Object} testRunnerKeyNavigator\n */\n\n return {\n /**\n * Setup the keyNavigator\n * @returns {testRunnerKeyNavigator}\n */\n init: function init() {\n var navigationMode = modeFactory(contentNavigatorType, config);\n var navigationConfig = navigationMode.config;\n strategies = helpers.getStrategies(navigationMode, testRunner);\n var navigators = helpers.getNavigators(strategies); //blur current focused element, to reinitialize keyboard navigation\n\n if (document.activeElement) {\n document.activeElement.blur();\n }\n\n groupNavigator = keyNavigator({\n id: 'test-runner',\n loop: true,\n elements: navigators,\n propagateTab: navigationConfig.propagateTab\n });\n helpers.setupItemsNavigator(groupNavigator, {\n keyNextItem: navigationConfig.keyNextGroup,\n keyPrevItem: navigationConfig.keyPrevGroup\n });\n shortcut.remove(eventNS).add(\"tab\".concat(eventNS, \" shift+tab\").concat(eventNS), function (e) {\n if (!helpers.allowedToNavigateFrom(e.target)) {\n return false;\n }\n\n if (!groupNavigator.isFocused()) {\n groupNavigator.focus();\n }\n });\n return this;\n },\n\n /**\n * Gets the attached testRunner\n * @returns {testRunner}\n */\n getTestRunner: function getTestRunner() {\n return testRunner;\n },\n\n /**\n * Switches the navigation mode\n * @param {String} newMode\n * @returns {testRunnerKeyNavigator}\n */\n setMode: function setMode(newMode) {\n contentNavigatorType = newMode;\n return this;\n },\n\n /**\n * Gets the active navigation mode\n * @returns {String}\n */\n getMode: function getMode() {\n return contentNavigatorType;\n },\n\n /**\n * Returns keyNavigation active state\n * @returns {Boolean}\n */\n isActive: function isActive() {\n return groupNavigator !== null;\n },\n\n /**\n * Tears down the keyNavigator\n * @returns {testRunnerKeyNavigator}\n */\n destroy: function destroy() {\n shortcut.remove(eventNS);\n strategies.forEach(function (strategy) {\n return strategy.destroy();\n });\n\n if (groupNavigator) {\n groupNavigator.destroy();\n }\n\n groupNavigator = null;\n strategies = [];\n return this;\n }\n };\n }\n\n return keyNavigationFactory;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation',[],function(){});\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/plugin',['lodash', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/keyNavigation', 'taoTests/runner/plugin', 'css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation.css'], function (_, keyNavigatorFactory, pluginFactory, keyNavigation_css) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n keyNavigatorFactory = keyNavigatorFactory && Object.prototype.hasOwnProperty.call(keyNavigatorFactory, 'default') ? keyNavigatorFactory['default'] : keyNavigatorFactory;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * If we have now config from backend side - we set this default dataset\n *\n * @typedef {object}\n * @properties {string} contentNavigatorType - ('default' | 'linear') - type of content navigation\n */\n\n var defaultPluginConfig = {\n contentNavigatorType: 'default'\n };\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: 'keyNavigation',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n\n var pluginConfig = _.defaults(this.getConfig(), defaultPluginConfig);\n\n var keyNavigator = keyNavigatorFactory(testRunner, pluginConfig);\n /**\n * Update plugin state based on changes\n */\n\n testRunner.after('renderitem', function () {\n // make sure that keyNavigator is destroyed\n // to preevent multiple instances to be active at the same time\n if (keyNavigator.isActive()) {\n keyNavigator.destroy();\n }\n\n keyNavigator.init();\n }).on('unloaditem', function () {\n keyNavigator.destroy();\n })\n /**\n * @param {string} type - type of content tab navigation,\n * can be: 'default', 'linear', 'native'\n */\n .on('setcontenttabtype', function (type) {\n keyNavigator.setMode(type);\n pluginConfig.contentNavigatorType = type;\n });\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/mainLandmark/header',['jquery', 'i18n', 'taoTests/runner/plugin', 'handlebars'], function ($$1, __, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<span data-control=\\\"qti-test-item-title\\\"></span>\\n<span data-control=\\\"qti-test-item-state\\\"></span>\\n\";\n });\n function headerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n function getState(item) {\n var state = __('Unseen');\n\n if (item.flagged) {\n state = __('Flagged');\n } else if (item.answered) {\n state = __('Answered');\n } else if (item.viewed) {\n state = __('Viewed');\n }\n\n return state;\n }\n\n var header = pluginFactory({\n name: 'mainLandmark',\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n\n var updateTitle = function updateTitle(item) {\n _this.$title.text(\"\".concat(item.label)).show();\n };\n\n var updateState = function updateState(item) {\n _this.$state.text(\"\".concat(getState(item))).show();\n };\n\n testRunner.after('renderitem', function () {\n var item = testRunner.getCurrentItem();\n updateTitle(item);\n updateState(item);\n }).on('tool-flagitem', function () {\n var item = testRunner.getCurrentItem();\n item = _objectSpread2(_objectSpread2({}, item), {}, {\n flagged: !item.flagged\n });\n updateState(item);\n });\n },\n render: function render() {\n var $container = this.getAreaBroker().getArea('mainLandmark');\n this.$element = $$1(headerTpl());\n $container.append(this.$element);\n this.$title = $container.find(\"[data-control=\\\"qti-test-item-title\\\"]\");\n this.$state = $container.find(\"[data-control=\\\"qti-test-item-state\\\"]\");\n }\n });\n\n return header;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/dialog',['jquery', 'lodash', 'taoTests/runner/plugin', 'ui/dialog/alert', 'ui/dialog/confirm', 'util/shortcut/registry', 'util/shortcut', 'util/namespace'], function ($, _, pluginFactory, dialogAlert, dialogConfirm, shortcutRegistry, globalShortcut, namespaceHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n dialogAlert = dialogAlert && Object.prototype.hasOwnProperty.call(dialogAlert, 'default') ? dialogAlert['default'] : dialogAlert;\n dialogConfirm = dialogConfirm && Object.prototype.hasOwnProperty.call(dialogConfirm, 'default') ? dialogConfirm['default'] : dialogConfirm;\n shortcutRegistry = shortcutRegistry && Object.prototype.hasOwnProperty.call(shortcutRegistry, 'default') ? shortcutRegistry['default'] : shortcutRegistry;\n globalShortcut = globalShortcut && Object.prototype.hasOwnProperty.call(globalShortcut, 'default') ? globalShortcut['default'] : globalShortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'dialog';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultOptions = {\n alert: {\n focus: 'ok'\n },\n confirm: {\n focus: 'ok'\n }\n };\n /**\n * Returns the configured plugin\n */\n\n var dialog = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultOptions, this.getConfig());\n var pluginShortcuts = (testOptions.shortcuts || {})[pluginName] || {};\n var alerts = [];\n var confirms = [];\n var opened = [];\n var dialogShortcut = shortcutRegistry($('body'), {\n propagate: false,\n prevent: true\n });\n /**\n * Closes a dialog with accept\n * @param {dialog} dialog - The instance of the dialog\n */\n\n function closeAccept(dialog) {\n // TODO: improve the dialog implementation in order to provide a better API\n dialog.trigger('okbtn.modal').hide();\n }\n /**\n * Closes a dialog with rejection\n * @param {dialog} dialog - The instance of the dialog\n */\n\n\n function closeReject(dialog) {\n dialog.hide();\n }\n /**\n * Closes the last opened dialog\n * @param {Boolean} accept Whether the dialog should be accepted or not\n * @param {String} [shortcut] The shortcut that caused the action\n */\n\n\n function closeLast(accept, shortcut) {\n var handle = opened.length && opened[opened.length - 1];\n\n if (handle) {\n handle.shortcut = shortcut;\n\n if (accept) {\n closeAccept(handle.dialog);\n } else {\n closeReject(handle.dialog);\n }\n }\n }\n /**\n * Add dialog on top of the provided stack\n * @param {String} namespace - The event namespace that scope the dialog\n * @param {Array} stack - The dialogs stack on which push the new instance\n * @param {Function} dialog - The constructor of the dialog\n * @param {String} message - The message to display\n * @param {Function} accept - The callback for accept\n * @param {Function} reject - The callback for reject\n * @param {Object} options - Dialog options\n */\n\n\n function addHandle(namespace, stack, dialog, message, accept, reject, options) {\n var handle = {\n context: namespace,\n dialog: dialog(message, doAccept, doReject, options)\n };\n\n function doAccept(e, reason) {\n if (_.isFunction(accept)) {\n accept(handle.shortcut || reason);\n }\n }\n\n function doReject(e, reason) {\n if (_.isFunction(reject)) {\n reject(handle.shortcut || reason);\n }\n } // prevents all registered shortcuts to be triggered\n // and brings back the dialog shortcuts\n\n\n globalShortcut.disable();\n dialogShortcut.enable();\n stack.push(handle);\n opened.push(handle);\n handle.dialog.focus(options.focus);\n handle.dialog.on('closed.modal', function () {\n removeHandle(stack, handle.dialog);\n removeHandle(opened, handle.dialog); // if all dialogs have been closed allows all registered shortcuts to be triggered\n // also disables the dialog shortcuts\n\n if (!opened.length) {\n globalShortcut.enable();\n dialogShortcut.disable();\n }\n });\n }\n /**\n * Remove a dialog from the provided stack\n * @param {Array} stack - The dialogs stack from which remove the dialog instance\n * @param {dialog} dialog - The instance of the dialog\n */\n\n\n function removeHandle(stack, dialog) {\n if (dialog) {\n _.remove(stack, function (handle) {\n if (handle && dialog === handle.dialog) {\n return true;\n }\n });\n }\n }\n /**\n * Closes all dialogs within the provided stack\n * @param {String} namespace - The event namespace that scope the dialogs to close\n * @param {Boolean} accept - Whether (`true`) or not (`false`) to close the dialogs with accept\n * @param {Array} stack - The dialogs stack in which close the dialogs\n */\n\n\n function closeDialogs(namespace, accept, stack) {\n if (stack) {\n _.forEach(stack, function (handle) {\n if (handle && (namespace === '@' || namespace === handle.context)) {\n if (accept) {\n closeAccept(handle.dialog);\n } else {\n closeReject(handle.dialog);\n }\n }\n });\n } else {\n closeDialogs(namespace, accept, alerts);\n closeDialogs(namespace, accept, confirms);\n }\n } // starts with shortcuts disabled, prevents the TAB key to be used to move outside the dialog box\n\n\n dialogShortcut.disable().set('Tab Shift+Tab'); // handle the plugin's shortcuts\n\n if (testOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n dialogShortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function (e, shortcut) {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key, shortcut);\n });\n });\n } //change plugin state\n\n\n testRunner.before('alert.*', function (e, msg, accept, options) {\n addHandle(e.namespace, alerts, dialogAlert, msg, accept, accept, _.merge({}, pluginConfig.alert, options));\n }).before('confirm.*', function (e, msg, accept, reject, options) {\n addHandle(e.namespace, confirms, dialogConfirm, msg, accept, reject, _.merge({}, pluginConfig.confirm, options));\n }).before('closedialog.*', function (e, accept) {\n closeDialogs(e.namespace, accept);\n }).on(\"\".concat(actionPrefix, \"accept\"), function (shortcut) {\n closeLast(true, shortcut);\n }).on(\"\".concat(actionPrefix, \"reject\"), function (shortcut) {\n closeLast(false, shortcut);\n }).on('destroy', function () {\n closeDialogs('.@');\n dialogShortcut.clear();\n dialogShortcut = null;\n });\n }\n });\n\n return dialog;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/exitMessages',['lodash', 'taoTests/runner/plugin'], function (_, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the testState plugin.\n * Displays exit message, then leaves the runner once the user has acknowledged\n */\n\n var exitMessages = pluginFactory({\n name: 'exitMessages',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {// this function is mandatory\n },\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n install: function install() {\n var testRunner = this.getTestRunner(); // intercepts the `leave` event,\n // then if a message needs to be displayed displays it and waits the user acknowledges it\n\n testRunner.before('leave', function leave(e, data) {\n if (_.isObject(data) && data.message) {\n return new Promise(function (resolve) {\n var context = testRunner.getTestContext(); // the leave can occurs when the runner is in inconsistent state (i.e. error)\n // prevent side error with item disabling\n\n if (context && context.itemIdentifier) {\n testRunner.disableItem(context.itemIdentifier);\n } // wait for the message acknowledge before leaving the runner\n\n\n testRunner.trigger('disablefeedbackalerts').trigger('alert.leave', data.message, function () {\n testRunner.trigger('enablefeedbackalerts');\n resolve();\n });\n });\n }\n });\n }\n });\n\n return exitMessages;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/itemAlertMessage',['jquery', 'ui/hider', 'taoTests/runner/plugin'], function ($, hider, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * Returns the configured plugin\n */\n\n var itemAlertMessage = pluginFactory({\n name: 'itemAlertMessage',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n this.$element = $(this.getContent().dom);\n this.$element // for GUI actions\n .on('closed.modal', function () {\n $(this).modal('destroy');\n }).on('destroyed.modal', function () {\n self.$element = null;\n self.trigger('resume', self);\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var testRunner = this.getTestRunner();\n var itemRunner = testRunner.itemRunner;\n var $modalsContainer = this.getContent().$container;\n\n if (!$modalsContainer) {\n $modalsContainer = $('#modalFeedbacks', itemRunner._item.container);\n }\n\n $modalsContainer.append(this.$element);\n this.$element.modal({\n startClosed: false,\n top: 200\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n if (this.$element && this.$element.length) {\n this.$element.modal('close');\n }\n }\n });\n\n return itemAlertMessage;\n\n});\n\n","define('taoQtiTest/runner/helpers/navigation',['lodash', 'taoQtiTest/runner/helpers/map'], function (_, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} navigationHelper\n */\n\n var navigationHelper = {\n /**\n * Check whether the test taker is leaving a section\n *\n * @param {Object} testContext - the actual test context\n * @param {String} testContext.itemIdentifier - the id of the current item\n * @param {String} testContext.sectionId - the id of the current section\n * @param {Object} testMap - the actual test map\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean} true if the action leads to a section leave\n * @throws {TypeError} if the context or the map are incorrect\n */\n isLeavingSection: function isLeavingSection(testContext, testMap, direction, scope, position) {\n var section;\n var sectionStats;\n var nbItems;\n var item;\n\n if (_.isPlainObject(testContext) && _.isPlainObject(testMap) && !_.isEmpty(testContext.sectionId) && !_.isEmpty(testContext.itemIdentifier)) {\n section = mapHelper.getSection(testMap, testContext.sectionId);\n sectionStats = mapHelper.getSectionStats(testMap, testContext.sectionId);\n nbItems = sectionStats && sectionStats.total;\n item = mapHelper.getItem(testMap, testContext.itemIdentifier);\n return scope === 'section' || scope === 'testPart' || direction === 'next' && item.positionInSection + 1 === nbItems || direction === 'previous' && item.positionInSection === 0 || direction === 'jump' && position > 0 && (position < section.position || position >= section.position + nbItems);\n }\n\n throw new TypeError('Invalid test context and test map');\n },\n\n /**\n * Check whether the test taker is leaving a test part\n *\n * @param {Object} testContext - the actual test context\n * @param {String} testContext.itemIdentifier - the id of the current item\n * @param {String} testContext.sectionId - the id of the current section\n * @param {String} testContext.testPartId - the id of the current testPart\n * @param {Object} testMap - the actual test map\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean} true if the action leads to a section leave\n * @throws {TypeError} if the context or the map are incorrect\n */\n isLeavingTestPart: function isLeavingTestPart(testContext, testMap, direction, scope, position) {\n var testPart;\n var testPartStats;\n var nbItems;\n var item;\n var section;\n var sectionStats;\n\n if (_.isPlainObject(testContext) && _.isPlainObject(testMap) && !_.isEmpty(testContext.testPartId) && !_.isEmpty(testContext.sectionId) && !_.isEmpty(testContext.itemIdentifier)) {\n testPart = mapHelper.getPart(testMap, testContext.testPartId);\n testPartStats = mapHelper.getPartStats(testMap, testContext.testPartId);\n nbItems = testPartStats && testPartStats.total;\n item = mapHelper.getItem(testMap, testContext.itemIdentifier);\n\n if (scope === 'section') {\n section = mapHelper.getSection(testMap, testContext.sectionId);\n sectionStats = mapHelper.getSectionStats(testMap, testContext.sectionId);\n }\n\n return scope === 'testPart' || direction === 'next' && scope === 'item' && item.positionInPart + 1 === nbItems || direction === 'next' && scope === 'section' && section.position + sectionStats.total >= nbItems || direction === 'previous' && scope === 'item' && item.positionInPart === 0 || direction === 'previous' && scope === 'section' && section.position === testPart.position || direction === 'jump' && position > 0 && (position < testPart.position || position >= testPart.position + nbItems);\n }\n\n throw new TypeError('Invalid test context and test map');\n },\n\n /**\n * Check if the given item is the last of the test\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @returns {Boolean} true if the item is the last one\n */\n isLast: function isLast(testMap, itemIdentifier) {\n return this.isLastOf(testMap, itemIdentifier, 'test');\n },\n\n /**\n * Check if the given item is the first of a test\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @returns {Boolean} true if the item is the first one\n */\n isFirst: function isFirst(testMap, itemIdentifier) {\n return this.isFirstOf(testMap, itemIdentifier, 'test');\n },\n\n /**\n * Check if the given item is the last of a the given scope\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @param {String} [scope = 'test'] - the target scope\n * @returns {Boolean} true if the item is the last one\n */\n isLastOf: function isLastOf(testMap, itemIdentifier, scope) {\n var item;\n var stats;\n\n if (!_.isPlainObject(testMap)) {\n throw new TypeError('Invalid test map');\n }\n\n if (_.isEmpty(itemIdentifier)) {\n throw new TypeError('Invalid item identifier');\n }\n\n scope = scope || 'test';\n item = mapHelper.getItem(testMap, itemIdentifier);\n stats = mapHelper.getScopeStats(testMap, item.position, scope);\n\n if (stats && _.isNumber(stats.total)) {\n if (scope === 'test') {\n return item.position + 1 === stats.total;\n }\n\n if (scope === 'section' || scope === 'assessmentSection' || scope === 'testSection') {\n return item.positionInSection + 1 === stats.total;\n }\n\n if (scope === 'part' || scope === 'testPart') {\n return item.positionInPart + 1 === stats.total;\n }\n }\n\n return false;\n },\n\n /**\n * Check if the given item is the first of a the given scope\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @param {String} [scope = 'test'] - the target scope\n * @returns {Boolean} true if the item is the first one\n */\n isFirstOf: function isFirstOf(testMap, itemIdentifier, scope) {\n var item;\n\n if (!_.isPlainObject(testMap)) {\n throw new TypeError('Invalid test map');\n }\n\n if (_.isEmpty(itemIdentifier)) {\n throw new TypeError('Invalid item identifier');\n }\n\n scope = scope || 'test';\n item = mapHelper.getItem(testMap, itemIdentifier);\n\n if (scope === 'test') {\n return item.position === 0;\n }\n\n if (scope === 'section' || scope === 'assessmentSection' || scope === 'testSection') {\n return item.positionInSection === 0;\n }\n\n if (scope === 'part' || scope === 'testPart') {\n return item.positionInPart === 0;\n }\n\n return false;\n },\n\n /**\n * Gets the map descriptors of the sibling items\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @param {String} [direction='both'] - previous/next/both\n * @param {Number} [size=3] - will be 2xsize if direction is both\n * @returns {Object[]} the collections of items\n */\n getSiblingItems: function getSiblingItems(testMap, itemPosition, direction, size) {\n var itemId = mapHelper.getItemIdentifier(testMap, itemPosition);\n var previous = null;\n var siblings = [];\n var directions;\n\n var itemChain = _.reduce(testMap && testMap.jumps, function (map, jump) {\n var ref = jump.identifier;\n\n if (previous) {\n map[previous].next = ref;\n }\n\n map[ref] = {\n identifier: ref,\n previous: previous,\n next: null\n };\n previous = ref;\n return map;\n }, {});\n\n size = _.isFinite(size) ? parseInt(size, 10) : 3;\n\n if (!direction || direction === 'both') {\n directions = ['previous', 'next'];\n } else {\n directions = [direction];\n }\n\n _.forEach(directions, function walkDirection(link) {\n var id = itemId;\n\n _.times(size, function getNeighbor() {\n id = itemChain[id] && itemChain[id][link];\n\n if (id) {\n siblings.push(mapHelper.getItem(testMap, id));\n } else {\n return false;\n }\n });\n });\n\n return siblings;\n },\n\n /**\n * Gets the map descriptor of the next item\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @returns {Object}\n */\n getNextItem: function getNextItem(testMap, itemPosition) {\n var siblings = navigationHelper.getSiblingItems(testMap, itemPosition, 'next', 1);\n\n if (siblings.length) {\n return siblings[0];\n }\n\n return null;\n },\n\n /**\n * Gets the map descriptor of the previous item\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @returns {Object}\n */\n getPreviousItem: function getPreviousItem(testMap, itemPosition) {\n var siblings = navigationHelper.getSiblingItems(testMap, itemPosition, 'previous', 1);\n\n if (siblings.length) {\n return siblings[0];\n }\n\n return null;\n },\n\n /**\n * Checks if an action will move forward.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isMovingToNextItem: function isMovingToNextItem(action, params) {\n params = params || {};\n return action === 'timeout' || action === 'skip' || action === 'move' && params.direction === 'next' && params.scope === 'item';\n },\n\n /**\n * Checks if an action will move backward.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isMovingToPreviousItem: function isMovingToPreviousItem(action, params) {\n params = params || {};\n return action === 'move' && params.direction === 'previous' && params.scope === 'item';\n },\n\n /**\n * Checks if an action will jump on another item.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isJumpingToItem: function isJumpingToItem(action, params) {\n params = params || {};\n return action === 'move' && params.direction === 'jump' && params.scope === 'item';\n }\n };\n\n return navigationHelper;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/itemInlineMessage',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'handlebars', 'taoQtiTest/runner/helpers/navigation'], function ($$1, __, hider, pluginFactory, Handlebars, navigationHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * The display of the next button\n */\n\n var buttonData = {\n next: {\n control: 'move-forward',\n title: __('Submit and go to the next item'),\n icon: 'forward',\n text: __('OK')\n },\n end: {\n control: 'move-end',\n title: __('Submit and go to the end of the test'),\n icon: 'fast-forward',\n text: __('OK & End test')\n }\n };\n /**\n * Returns the configured plugin\n */\n\n var itemInlineMessage = pluginFactory({\n name: 'itemInlineMessage',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n /**\n * Create the button based on the current context\n * @returns {*|jQuery|HTMLElement} the button\n */\n\n var createOkButton = function createElement() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var dataType = navigationHelper.isLast(testMap, testContext.itemIdentifier) ? 'end' : 'next';\n var $btn = $$1(buttonTpl(buttonData[dataType]));\n $btn.addClass('modalFeedback-button'); //plugin behavior\n\n $btn.on('click', function (e) {\n e.preventDefault();\n self.disable();\n\n if ($$1(this).data('control') === 'move-end') {\n self.trigger('end');\n }\n\n $btn.remove();\n self.$element.remove();\n self.trigger('resume', self);\n });\n return $btn;\n };\n\n this.$button = createOkButton();\n this.$element = $$1(this.getContent().dom);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $navigationContainer = this.getAreaBroker().getNavigationArea();\n var testRunner = this.getTestRunner();\n var itemRunner = testRunner.itemRunner;\n var $inlineContainer = this.getContent().$container;\n\n if (!$inlineContainer && itemRunner._item.container) {\n $inlineContainer = $$1('.qti-itemBody', itemRunner._item.container);\n }\n\n $inlineContainer.append(this.$element); // hide all navigation buttons, create new instead of\n\n if (!$$1('.modalFeedback-button', $navigationContainer).length) {\n $navigationContainer.append(this.$button);\n }\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$button.removeProp('disabled').removeClass('disabled');\n },\n disable: function disable() {\n this.$button.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$button.click();\n }\n });\n\n return itemInlineMessage;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/feedback/feedback',['i18n', 'taoTests/runner/plugin', 'ui/feedback'], function (__, pluginFactory, feedback$1) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n feedback$1 = feedback$1 && Object.prototype.hasOwnProperty.call(feedback$1, 'default') ? feedback$1['default'] : feedback$1;\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n /**\n * Returns the configured plugin\n */\n\n var feedback = pluginFactory({\n name: 'feedback',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this; //keep a ref of the feedbacks\n\n var currentFeedback;\n var testRunner = this.getTestRunner();\n /**\n * Close the current feedback\n */\n\n var closeCurrent = function closeCurrent() {\n if (currentFeedback) {\n currentFeedback.close();\n }\n };\n\n this.setState('enabled', true); //change plugin state\n\n testRunner.on('error', function (err) {\n var message = err;\n var type = 'error';\n\n if (self.getState('enabled')) {\n if ('object' === _typeof(err)) {\n message = err.message;\n type = err.type;\n }\n\n if (!message) {\n switch (type) {\n case 'TestState':\n message = __('The test has been closed/suspended!');\n break;\n\n case 'FileNotFound':\n message = __('File not found!');\n break;\n\n default:\n message = __('An error occurred!');\n }\n }\n\n currentFeedback = feedback$1().error(message);\n }\n }).on('danger', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().danger(message);\n }\n }).on('warning', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().warning(message);\n }\n }).on('info', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().info(message);\n }\n }).on('alert.* confirm.* unloaditem', closeCurrent).on('disablefeedbackalerts', function () {\n closeCurrent();\n self.setState('enabled', false);\n }).on('enablefeedbackalerts', function () {\n self.setState('enabled', true);\n });\n }\n });\n\n return feedback;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/itemScrolling/itemScrolling',['jquery', 'util/typeCaster', 'taoTests/runner/plugin'], function ($, typeCaster, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n typeCaster = typeCaster && Object.prototype.hasOwnProperty.call(typeCaster, 'default') ? typeCaster['default'] : typeCaster;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA;\n */\n /**\n * Creates the loading bar plugin.\n * Displays a loading bar when a blocking task is running\n */\n\n var itemScrolling = pluginFactory({\n name: 'itemScrolling',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var $contentArea = testRunner.getAreaBroker().getContentArea();\n var gridRowBottomMargin = 12,\n qtiItemPadding = 30 * 2;\n testRunner.on('renderitem', function () {\n adaptItemHeight();\n $(window).off('resize.adaptItemHeight');\n $(window).on('resize.adaptItemHeight', adaptItemHeight);\n });\n\n function adaptItemHeight() {\n var $itemContainer = $contentArea.find('[data-scrolling=\"true\"]');\n var contentHeight = getItemRunnerHeight() - getExtraGridRowHeight() - getSpaceAboveQtiContent() - gridRowBottomMargin - qtiItemPadding;\n $itemContainer.each(function () {\n var $item = $(this);\n var isScrollable = typeCaster.strToBool($item.attr('data-scrolling') || 'false');\n var selectedHeight = parseFloat($item.attr('data-scrolling-height')) || 100;\n var containerParent = $item.parent().closest('[data-scrolling=\"true\"]');\n\n if ($item.length && isScrollable) {\n $item.data('scrollable', true);\n $item.css({\n 'overflow-y': 'scroll'\n });\n\n if (containerParent.length > 0) {\n $item.css('max-height', \"\".concat(containerParent.height() * (selectedHeight * 0.01), \"px\"));\n } else {\n $item.css('max-height', \"\".concat(contentHeight * (selectedHeight * 0.01), \"px\"));\n }\n }\n });\n } // depending on the context (item preview, new/old test runner...) available height is computed differently\n\n\n function getItemRunnerHeight() {\n var $testRunnerSections = $('.test-runner-sections'); // exists only in the new test runner\n\n if ($testRunnerSections.length) {\n return $testRunnerSections.get(0).getBoundingClientRect().height;\n } // otherwise, we assume that we are in an iframe with all space available (= item preview, old test runner)\n\n\n return $(window).height();\n } // extra grid row are there in case of a vertical layout (item on top/bottom of the question)\n\n\n function getExtraGridRowHeight() {\n var $gridRows = $('.qti-itemBody > .grid-row'),\n extraHeight = 0;\n $gridRows.each(function () {\n var $gridRow = $(this),\n $itemContainer = $gridRow.find('[data-scrolling=\"true\"]');\n\n if (!$itemContainer.length) {\n extraHeight += $gridRow.outerHeight(true);\n }\n });\n return extraHeight;\n } // most of the time this will be rubrick's block height in the new test runner\n\n\n function getSpaceAboveQtiContent() {\n var $testRunnerSections = $('.test-runner-sections'),\n $qtiContent = $('#qti-content');\n\n if ($testRunnerSections.length && $qtiContent.length) {\n return $qtiContent.get(0).getBoundingClientRect().top - $testRunnerSections.get(0).getBoundingClientRect().top;\n }\n\n return 0;\n }\n }\n });\n\n return itemScrolling;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/loading/loading',['layout/loading-bar', 'taoTests/runner/plugin'], function (loadingBar, pluginFactory) { 'use strict';\n\n loadingBar = loadingBar && Object.prototype.hasOwnProperty.call(loadingBar, 'default') ? loadingBar['default'] : loadingBar;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the loading bar plugin.\n * Displays a loading bar when a blocking task is running\n */\n\n var loading = pluginFactory({\n name: 'loading',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n testRunner.on('unloaditem', function () {\n loadingBar.start();\n }).on('renderitem', function () {\n loadingBar.stop();\n });\n }\n });\n\n return loading;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/modalFeedback/modalFeedback',['jquery', 'lodash', 'module', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/content/dialog/itemInlineMessage', 'taoQtiTest/runner/plugins/content/dialog/itemAlertMessage', 'ui/autoscroll'], function ($, _, module, pluginFactory, inlineMessage, alertMessage, autoscroll) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n inlineMessage = inlineMessage && Object.prototype.hasOwnProperty.call(inlineMessage, 'default') ? inlineMessage['default'] : inlineMessage;\n alertMessage = alertMessage && Object.prototype.hasOwnProperty.call(alertMessage, 'default') ? alertMessage['default'] : alertMessage;\n autoscroll = autoscroll && Object.prototype.hasOwnProperty.call(autoscroll, 'default') ? autoscroll['default'] : autoscroll;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * Modal or inline type of the messages\n */\n\n var inlineMode;\n /**\n * Form of the feedback\n * by default dialog (modal) form\n */\n\n var messagePlugin;\n /**\n * All feedback messages\n */\n\n var renderedFeedbacks;\n /**\n * modalFeedback was resolved and all components were destroyed\n */\n\n var isDestroyed;\n /**\n * Method which should be halted after modalFeedbacks confirmation action\n */\n\n var nextStep;\n\n function destroyFeedback(feedback) {\n var removed = false;\n\n _.remove(renderedFeedbacks, function (storedFeedback) {\n var found = storedFeedback === feedback;\n\n if (found) {\n removed = true;\n }\n\n return found;\n });\n\n if (removed) {\n feedback.destroy();\n\n if (!renderedFeedbacks.length) {\n nextStep();\n }\n }\n }\n\n function defineMode(inline) {\n inlineMode = inline;\n messagePlugin = inlineMode ? inlineMessage : alertMessage;\n }\n /**\n * Returns the configured plugin\n */\n\n\n var modalFeedback = pluginFactory({\n name: 'QtiModalFeedback',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n nextStep = function nextStep() {};\n\n defineMode(!!module.config().inlineModalFeedback);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var self = this;\n var testRunner = this.getTestRunner();\n\n var createMessages = function createMessages(renderingQueue, inline) {\n var bInlineMode = inlineMode;\n isDestroyed = false;\n renderedFeedbacks = [];\n\n if (_.isBoolean(inline)) {\n defineMode(inline);\n }\n\n if (renderingQueue.length) {\n _.forEach(renderingQueue, function (renderingToken) {\n var feedback = messagePlugin(testRunner, testRunner.getAreaBroker());\n feedback.init({\n dom: renderingToken.feedback.render({\n inline: inlineMode\n }),\n // for alerts will be used #modalMessages container\n $container: inlineMode ? renderingToken.$container : null\n });\n feedback.render();\n renderedFeedbacks.push(feedback);\n }); // auto scroll to the first feedback, only for the \"inline\" mode\n\n\n if (inlineMode && renderedFeedbacks) {\n autoscroll($('.qti-modalFeedback', testRunner.getAreaBroker().getContentArea()).first(), testRunner.getAreaBroker().getContentArea().parents('.content-wrapper'));\n }\n } else {\n nextStep();\n } // restore global feedback mode\n\n\n defineMode(bInlineMode);\n };\n\n if (inlineMode) {\n testRunner.off('plugin-resume.itemInlineMessage').on('plugin-resume.itemInlineMessage', function () {\n self.destroy();\n });\n } else {\n testRunner.off('plugin-resume.itemAlertMessage').on('plugin-resume.itemAlertMessage', function (feedback) {\n destroyFeedback(feedback);\n });\n }\n\n testRunner.on('modalFeedbacks', function (renderingQueue, done, inline) {\n nextStep = done;\n createMessages(renderingQueue, inline);\n });\n },\n\n /**\n * Called during the runner's destroy phase\n * allow to run that function only once\n */\n destroy: function destroy() {\n var tFeedbacks, i;\n\n if (!isDestroyed) {\n isDestroyed = true;\n\n if (!renderedFeedbacks) {\n nextStep();\n } else {\n tFeedbacks = renderedFeedbacks.slice(0);\n\n for (i in tFeedbacks) {\n destroyFeedback(tFeedbacks[i]);\n }\n }\n }\n }\n });\n\n return modalFeedback;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/overlay/overlay',['jquery', 'taoTests/runner/plugin'], function ($, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var overlay = pluginFactory({\n name: 'overlay',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n this.$element = $('<div />');\n this.$element.on('click mousedown mouseup touchstart touchend keyup keydow keypress scroll drop', function (e) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n });\n\n var shield = function shield() {\n self.enable();\n };\n\n var unshield = function unshield() {\n self.disable();\n }; //change plugin state\n\n\n testRunner.on('disableitem', shield).on('enableitem unloaditem modalFeedbacks', unshield);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $contentArea = this.getTestRunner().getAreaBroker().getContentArea();\n $contentArea.after(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the overlay\n */\n enable: function enable() {\n var overlayConfig = this.getConfig();\n this.$element.addClass('overlay');\n\n if (overlayConfig.full) {\n this.$element.addClass('overlay-full');\n }\n },\n\n /**\n * Disable the overlay\n */\n disable: function disable() {\n this.$element.removeClass('overlay overlay-full');\n },\n\n /**\n * Show the overlay\n */\n show: function show() {\n this.enable();\n },\n\n /**\n * Hide the overlay\n */\n hide: function hide() {\n this.disable();\n }\n });\n\n return overlay;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/responsiveness/collapser',['lodash', 'jquery', 'taoTests/runner/plugin'], function (_, $, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Event namespace\n * @type {String}\n */\n\n var ns = '.collapser';\n /**\n * Name of the CSS class used to collapse the buttons\n * @type {String}\n */\n\n var noLabelCls = 'tool-label-collapsed';\n /**\n * Name of the CSS class used to collapse the buttons and allow to expand on mouse over\n * @type {String}\n */\n\n var noLabelHoverCls = 'tool-label-collapsed-hover';\n /**\n * Name of the CSS class used to hide the label of the button independently of responsiveness\n * @type {string}\n */\n\n var labelHiddenCls = 'no-tool-label';\n /**\n * Name of the CSS class for separators\n * @type {string}\n */\n\n var separatorCls = 'separator';\n /**\n * Default plugin options\n * @type {Object}\n */\n\n var defaults = {\n collapseTools: true,\n // collapse the tools buttons\n collapseNavigation: false,\n // collapse the navigation buttons\n collapseInOrder: false,\n // collapse any button in the given order\n hover: false,\n // expand when the mouse is over a button,\n\n /**\n * Allow to set manually which buttons should collapse and in which order.\n * This can be set by triggering the \"collapser-set-order\" event on the testRunner.\n * Given as an array of jQuery selectors: first index will be the first to be collapsed, and so on.\n * If no selector is given for a button, then this one will never collapse.\n * ex:\n * var collapseOrder = [\n * '[data-control=\"highlight-clear\"],[data-control=\"highlight-trigger\"]', // those will collapse first...\n * '[data-control=\"hide-review\"]', // this one second...\n * '[data-control=\"set-item-flag\"]', // third...\n * ... // ...\n * ];\n * @type {String[]}\n */\n collapseOrder: []\n };\n var $window = $(window);\n /**\n * Creates the responsiveness collapser plugin.\n * Reduce the size of the action bar tools when the available space is below the needed one.\n */\n\n var collapser = pluginFactory({\n name: 'collapser',\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var config = Object.assign({}, defaults, this.getConfig());\n var collapseCls = config.hover ? noLabelHoverCls : noLabelCls;\n var areaBroker = testRunner.getAreaBroker();\n var $actionsBar = areaBroker.getArea('actionsBar'),\n $toolbox = areaBroker.getToolboxArea(),\n $navigation = areaBroker.getNavigationArea();\n var allCollapsibles, availableWidth, previousAvailableWidth;\n /**\n * Get a reference of all collapsibles\n */\n\n function buildCollapsiblesList() {\n // use the given order to build the collapsibles list or generate on in natural order\n if (config.collapseInOrder && config.collapseOrder.length) {\n allCollapsibles = getCollapsiblesFromConfig();\n } // get values from DOM, grouped by prefix\n else if (config.collapseInOrder) {\n allCollapsibles = getSortedCollapsiblesFromDom();\n } // get all in one chunk\n else {\n allCollapsibles = getUnsortedCollapsiblesFromDom();\n }\n }\n /**\n * @param {jQuery} $element\n * @returns {number} Size difference, in pixels, between collapsed and expanded state of $element\n */\n\n\n function getExtraWidth($element) {\n var expandedWidth, collapsedWidth;\n $element.removeClass(collapseCls);\n expandedWidth = $element.outerWidth(true);\n $element.addClass(collapseCls);\n collapsedWidth = $element.outerWidth(true);\n $element.removeClass(collapseCls);\n return expandedWidth - collapsedWidth;\n }\n /**\n * Expand or collapse elements\n */\n\n\n function toggleCollapsibles() {\n availableWidth = getAvailableWidth();\n availableWidth < previousAvailableWidth ? collapseInOrder() : expandInOrder();\n previousAvailableWidth = availableWidth;\n }\n\n function collapseInOrder() {\n var collapsiblesCopy = _.clone(allCollapsibles),\n toCollapse;\n\n while (collapseNeeded() && collapsiblesCopy.length) {\n toCollapse = collapsiblesCopy.shift();\n toCollapse.$elements.addClass(collapseCls);\n }\n }\n\n function collapseNeeded() {\n return getToolbarWidth() > getAvailableWidth();\n }\n\n function expandInOrder() {\n _.forEachRight(allCollapsibles, function (toExpand) {\n if (toExpand.$elements.hasClass(collapseCls)) {\n if (expandPossible(toExpand.extraWidth)) {\n toExpand.$elements.removeClass(collapseCls);\n } else {\n return false;\n }\n }\n });\n }\n\n function expandPossible(extraWidth) {\n return getToolbarWidth() + extraWidth < getAvailableWidth();\n }\n\n function getAvailableWidth() {\n // Scrollbars are commonly between ~12px and ~18px in width. Subtracting 20px from the available width\n // makes sure that scrollbars are always taken in account. The worst case scenario is that the buttons\n // start to collapse, although they would still have had 20px available.\n return $actionsBar.width() - 20;\n }\n\n function getToolbarWidth() {\n return $toolbox.outerWidth(true) + $navigation.outerWidth(true);\n }\n /**\n * Parse DOM for controls that can be collapsed\n * @returns {*|jQuery|HTMLElement}\n */\n\n\n function getControlsFromDom() {\n var $controls = $(),\n selector = '>ul>[data-control]';\n\n if (config.collapseTools) {\n $controls = $controls.add($toolbox.find(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls)));\n }\n\n if (config.collapseNavigation) {\n $controls = $controls.add($navigation.find(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls)));\n }\n\n return $controls;\n }\n /**\n * Get allCollapsibles based on configuration\n *\n * @returns {Array}\n */\n\n\n function getCollapsiblesFromConfig() {\n return _.compact(config.collapseOrder.map(function (selector) {\n // some buttons are collapsed by configuration, some other are only separators: we should leave them alone\n var $elements = $(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls));\n var extraWidth = 0;\n\n if ($elements.length) {\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n return {\n $elements: $elements,\n extraWidth: extraWidth\n };\n }\n\n return false;\n }));\n }\n /**\n * Get allCollapsibles based on DOM\n * Build the collapse order from the left to the right, related elements are grouped.\n *\n * @returns {Array}\n */\n\n\n function getSortedCollapsiblesFromDom() {\n var $elements = getControlsFromDom(),\n _allCollapsibles = [],\n order = {}; // group items by prefix\n // eg. zoomIn and zoomOut -> zoom\n\n $elements.each(function () {\n var ctrl = this.dataset.control,\n // re makes group `foo` from `foo-bar`, `fooBar` and `foo_bar`\n // if we do not have a prefix use the control name as key to ensure uniqueness\n key = ctrl.substring(0, ctrl.search(/[A-Z-_]/)) || ctrl;\n order[key] = order[key] || $();\n order[key] = order[key].add($(this));\n }); // move items to allCollapsibles\n\n _.forOwn(order, function ($elements) {\n var extraWidth = 0;\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n\n _allCollapsibles.push({\n $elements: $elements,\n extraWidth: extraWidth\n });\n });\n\n return _.compact(_allCollapsibles);\n }\n /**\n * Get allCollapsibles based on DOM, all buttons will be collapsed at once\n *\n * @returns {Array}\n */\n\n\n function getUnsortedCollapsiblesFromDom() {\n var $elements = getControlsFromDom(),\n _allCollapsibles = [],\n extraWidth = 0;\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n\n _allCollapsibles.push({\n $elements: $elements,\n extraWidth: extraWidth\n });\n\n return _.compact(_allCollapsibles);\n }\n\n $window.on(\"resize\".concat(ns), _.throttle(function () {\n testRunner.trigger('collapseTools');\n }, 40));\n testRunner.after('renderitem loaditem', function () {\n previousAvailableWidth = Infinity;\n buildCollapsiblesList();\n testRunner.trigger('collapseTools');\n }).on(\"collapseTools\".concat(ns), function () {\n toggleCollapsibles();\n });\n },\n destroy: function destroy() {\n $window.off(ns);\n }\n });\n\n return collapser;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/rubricBlock/rubricBlock',['jquery', 'ui/hider', 'taoTests/runner/plugin', 'handlebars'], function ($$1, hider, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div id=\\\"qti-rubrics\\\"></div>\\n\";\n });\n function containerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Ensure the <a> links opens to blank pages\n * @param {jQueryElement} $container - lookup scope\n */\n\n var blankifyLinks = function blankifyLinks($container) {\n $$1('a', $container).attr('target', '_blank');\n };\n /**\n * Apply mathjax\n */\n\n\n var mathify = function mathify($container) {\n return new Promise(function (resolve) {\n if ($$1('math', $container).length > 0) {\n //load mathjax only if necessary\n require(['mathJax'], function (MathJax) {\n if (MathJax) {\n MathJax.Hub.Queue(['Typeset', MathJax.Hub], $container[0]);\n MathJax.Hub.Queue(resolve);\n } else {\n resolve();\n }\n }, resolve);\n } else {\n resolve();\n }\n });\n };\n /**\n * Returns the configured plugin\n */\n\n\n var rubricBlock = pluginFactory({\n name: 'rubricBlock',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n this.$element = $$1(containerTpl());\n this.hide(); //change plugin state\n\n testRunner.on('ready', function () {\n self.hide();\n }).on('loaditem', function () {\n var context = testRunner.getTestContext();\n\n if (context.rubrics) {\n self.$element.html(context.rubrics);\n blankifyLinks(self.$element);\n mathify(self.$element).then(function () {\n // notify that the rubric blocks are loaded\n testRunner.trigger('rubricblock');\n });\n }\n }).on('renderitem', function () {\n self.show();\n }).on('unloaditem', function () {\n self.hide();\n self.$element.empty();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element before the content area\n var $container = this.getAreaBroker().getContentArea();\n $container.before(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the container\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the container\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the container\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the container\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return rubricBlock;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/connectivity/connectivity',['jquery', 'lodash', 'i18n', 'core/polling', 'ui/waitingDialog/waitingDialog', 'taoTests/runner/plugin', 'handlebars', 'util/namespace'], function ($$1, _, __, pollingFactory, waitingDialog, pluginFactory, Handlebars, namespaceHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pollingFactory = pollingFactory && Object.prototype.hasOwnProperty.call(pollingFactory, 'default') ? pollingFactory['default'] : pollingFactory;\n waitingDialog = waitingDialog && Object.prototype.hasOwnProperty.call(waitingDialog, 'default') ? waitingDialog['default'] : waitingDialog;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n \n return \" with-message\";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"<span class=\\\"message-connect\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Online\", options) : helperMissing.call(depth0, \"__\", \"Online\", options)))\n + \"</span>\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"<span class=\\\"message-disconnected\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Offline\", options) : helperMissing.call(depth0, \"__\", \"Offline\", options)))\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"connectivity-box \";\n if (helper = helpers.state) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.state); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"<span data-control=\\\"connectivity-connected\\\" class=\\\"qti-controls icon-connect\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Connected to server\", options) : helperMissing.call(depth0, \"__\", \"Connected to server\", options)))\n + \"\\\"></span>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"<span data-control=\\\"connectivity-disconnected\\\" class=\\\"qti-controls icon-disconnect\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Disconnected from server\", options) : helperMissing.call(depth0, \"__\", \"Disconnected from server\", options)))\n + \"\\\"></span>\\n</div>\\n\";\n return buffer;\n });\n function connectivityTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2021 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The plugin default configuration\n * @type {Object}\n * @property {Number} checkInterval - when offline, interval to check if we're back online\n * @property {Boolean} indicator - do we display the indicator in the test UI\n * @property {Boolean} message - do we display the message in the test UI\n */\n\n var defaultConfig = {\n checkInterval: 30 * 1000,\n indicator: true,\n message: false\n };\n /**\n * Creates the connectivity plugin.\n * Detects connectivity issues\n */\n\n var connectivity = pluginFactory({\n name: 'connectivity',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var proxy = testRunner.getProxy();\n var config = Object.assign({}, defaultConfig, this.getConfig()); //Displays a connectivity indicator\n\n if (config && config.indicator) {\n //create the indicator\n this.$element = $$1(connectivityTpl({\n state: proxy.isOnline() ? 'connected' : 'disconnected',\n message: config.message\n }));\n testRunner.on('disconnect', function () {\n self.$element.removeClass('connected').addClass('disconnected');\n }).on('reconnect', function () {\n self.$element.removeClass('disconnected').addClass('connected');\n });\n } //update the interval, with the new value\n\n\n if (this.polling && _.isNumber(config.checkInterval)) {\n this.polling.setInterval(config.checkInterval);\n }\n },\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n * We do it before init to catch even offline during the init sequence\n */\n install: function install() {\n var self = this;\n var waiting = false;\n var testRunner = this.getTestRunner();\n var proxy = testRunner.getProxy();\n /**\n * Display the waiting dialog, while waiting the connection to be back\n * @param {String} [messsage] - additional message for the dialog\n * @returns {Promise} resolves once the wait is over and the user click on 'proceed'\n */\n\n this.displayWaitingDialog = function displayWaitingDialog() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var dialog;\n return new Promise(function (resolve) {\n if (!waiting) {\n waiting = true; //if a pause event occurs while waiting,\n //we also wait the connection to be back\n\n testRunner.before('pause.waiting', function () {\n return new Promise(function (pauseResolve) {\n proxy.off('reconnect.pausing').after('reconnect.pausing', pauseResolve);\n });\n }); //creates the waiting modal dialog\n\n dialog = waitingDialog({\n message: __('You are encountering a prolonged connectivity loss. ') + message,\n waitContent: __('Please wait while we try to restore the connection.'),\n proceedContent: __('The connection seems to be back, please proceed')\n }).on('proceed', function () {\n resolve();\n }).on('render', function () {\n proxy.off('reconnect.waiting').after('reconnect.waiting', function () {\n testRunner.off('pause.waiting');\n waiting = false;\n dialog.endWait();\n });\n });\n }\n });\n }; //Last chance to check the connection,\n //by regular polling on the \"up\" signal\n\n\n this.polling = pollingFactory({\n action: function action() {\n testRunner.getProxy().telemetry(testRunner.getTestContext().itemIdentifier, 'up').catch(_.noop);\n },\n interval: defaultConfig.checkInterval,\n autoStart: false\n }); //the Proxy is the only one to know something about connectivity\n\n proxy.on('disconnect', function disconnect(source) {\n if (!testRunner.getState('disconnected')) {\n testRunner.setState('disconnected', true);\n testRunner.trigger('disconnect', source);\n self.polling.start();\n }\n }).on('reconnect', function reconnect() {\n if (testRunner.getState('disconnected')) {\n testRunner.setState('disconnected', false);\n testRunner.trigger('reconnect');\n self.polling.stop();\n }\n }); //intercept tries to leave while offline\n //this could be caused by pauses for example.\n //If caused by an action like exitTest it will be handled\n //by navigation errors (see below)\n\n testRunner.before('leave', function (e, data) {\n if (proxy.isOffline()) {\n self.displayWaitingDialog(data.message).then(function () {\n testRunner.trigger('leave', data);\n }).catch(function (generalErr) {\n testRunner.trigger('error', generalErr);\n });\n return false;\n }\n }); //intercept offline navigation errors\n\n testRunner.before('error.connectivity', function (e, err) {\n // detect and prevent connectivity errors\n if (proxy.isConnectivityError(err)) {\n return false;\n }\n\n if (proxy.isOffline()) {\n self.displayWaitingDialog().then(function () {\n if (err.type === 'nav') {\n testRunner.loadItem(testRunner.getTestContext().itemIdentifier);\n }\n\n if (err.type === 'finish') {\n testRunner.finish();\n }\n\n if (err.type === 'pause') {\n testRunner.trigger('pause', {\n reasons: err.data && err.data.reasons,\n message: err.data && err.data.comment\n });\n }\n }).catch(function (generalErr) {\n testRunner.trigger('error', generalErr);\n });\n return false;\n }\n });\n testRunner.before('loaditem.connectivity', function (e, itemRef, item) {\n var testContext = testRunner.getTestContext();\n\n if (item.flags && item.flags.hasFeedbacks) {\n testContext.hasFeedbacks = true;\n }\n\n if (proxy.isOffline() && item.flags && item.flags.containsNonPreloadedAssets) {\n self.displayWaitingDialog().then(function () {\n testRunner.loadItem(itemRef);\n });\n return false;\n }\n });\n testRunner.before(namespaceHelper.namespaceAll('move skip timeout', 'connectivity'), function (e) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var testContext = testRunner.getTestContext();\n var currentItem = testRunner.getCurrentItem();\n\n if (proxy.isOffline() && (currentItem.hasFeedbacks || testContext.hasFeedbacks)) {\n testRunner.trigger('disableitem');\n self.displayWaitingDialog().then(function () {\n var _testRunner$trigger;\n\n (_testRunner$trigger = testRunner.trigger('enableitem')).trigger.apply(_testRunner$trigger, [e.name].concat(args));\n });\n return false;\n }\n });\n },\n destroy: function destroy() {\n this.getTestRunner().off('.connectivity');\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n\n if (this.$element) {\n $container.append(this.$element);\n }\n }\n });\n\n return connectivity;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/connectivity/pauseOnError',['i18n', 'taoTests/runner/plugin', 'handlebars'], function (__, pluginFactory, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<b>\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b><br><br>\\n\";\n if (helper = helpers.message) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.message); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n });\n function dialogTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n var name = 'pauseOnError';\n var dialogMessage = {\n title: __('Something unexpected happened.'),\n message: __('Please try reloading the page or pause the test. If you pause, you will be able to resume the test from this page.')\n };\n var dialogConfig = {\n focus: 'cancel',\n buttons: {\n labels: {\n ok: __('Pause the test'),\n cancel: __('Reload the page')\n }\n }\n };\n var pauseContext = {\n reasons: {\n category: 'technical',\n subCategory: 'error'\n },\n originalMessage: 'Due to an unexpected issue the test has been suspended.'\n };\n var pauseOnError = pluginFactory({\n name: name,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n\n var returnToHome = function returnToHome() {\n return testRunner.trigger('pause', pauseContext);\n };\n\n var reloadPage = function reloadPage() {\n return testRunner.trigger('reloadpage');\n };\n\n var processError = function processError(error) {\n testRunner.on('reloadpage', function () {\n return window.location.reload();\n }).trigger('disablenav disabletools hidenav').trigger(\"confirm.\".concat(name), dialogTpl(dialogMessage), returnToHome, reloadPage, dialogConfig);\n\n if (error.code === 500) {\n error.originalCode = error.code;\n delete error.code;\n testRunner.trigger(\"disablefeedbackalerts\");\n testRunner.after('error.pauseOnError', function () {\n testRunner.off('error.pauseOnError');\n testRunner.trigger(\"enablefeedbackalerts\");\n });\n }\n };\n\n testRunner.before('error', function (e, error) {\n return processError(error);\n });\n }\n });\n\n return pauseOnError;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/duration/duration',['lodash', 'taoTests/runner/plugin', 'core/logger'], function (_, pluginFactory, loggerFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n var logger = loggerFactory('taoQtiTest/runner/plugins/controls/duration/duration');\n /**\n * Creates the timer plugin\n */\n\n var duration = pluginFactory({\n name: 'duration',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n // define the \"duration\" store as \"volatile\" (removed on browser change).\n this.getTestRunner().getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n *\n * @returns {Promise}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var currentUpdatePromise = Promise.resolve();\n\n var getItemAttempt = function getItemAttempt() {\n var context = testRunner.getTestContext();\n return \"\".concat(context.itemIdentifier, \"#\").concat(context.attempt);\n };\n\n var getPositiveNumber = function getPositiveNumber(value) {\n if (!_.isNumber(value) || value < 0) {\n return 0;\n }\n\n return value;\n }; //where the duration of attempts are stored\n\n\n return testRunner.getPluginStore(this.getName()).then(function (durationStore) {\n /**\n * Gets the duration of a particular item from the store\n *\n * @param {String} attemptId - the attempt id to get the duration for\n * @returns {Promise}\n */\n var getItemDuration = function getItemDuration(attemptId) {\n if (!/^(.*)+#+\\d+$/.test(attemptId)) {\n return Promise.reject(new Error('Is it really an attempt id, like \"itemid#attempt\"'));\n }\n\n return durationStore.getItem(attemptId);\n };\n /**\n * Updates the duration of a particular item\n *\n * @param {Number} elapsed - time elapsed since previous tick\n * @returns {Promise}\n */\n\n\n var updateDuration = function updateDuration(elapsed) {\n var itemAttemptId = getItemAttempt();\n currentUpdatePromise = currentUpdatePromise.then(function () {\n return getItemDuration(itemAttemptId);\n }).then(function (duration) {\n return durationStore.setItem(itemAttemptId, getPositiveNumber(duration) + getPositiveNumber(elapsed) / 1000);\n }).catch(function (err) {\n logger.warn(\"Error updating item duration! \".concat(err && err.message));\n });\n return currentUpdatePromise;\n };\n /**\n * Adds the current duration to the next action request.\n * The duration will be sent to the server with the next request,\n * usually submitItem() or callItemAction()\n *\n * @returns {Promise}\n */\n\n\n var addDurationToCallActionParams = function addDurationToCallActionParams() {\n var itemAttemptId = getItemAttempt();\n return currentUpdatePromise.then(function () {\n return getItemDuration(itemAttemptId);\n }).then(function (duration) {\n return testRunner.getProxy().addCallActionParams({\n itemDuration: getPositiveNumber(duration)\n });\n }).catch(function (err) {\n logger.warn(\"Error retrieving item duration! \".concat(err && err.message));\n });\n }; //change plugin state\n\n\n testRunner.on('tick', updateDuration).before('move skip exit timeout pause', addDurationToCallActionParams)\n /**\n * @event duration.get\n * @param {String} attemptId - the attempt id to get the duration for\n * @param {getDuration} getDuration - a receiver callback\n */\n .on('plugin-get.duration', function (attemptId, getDuration) {\n if (_.isFunction(getDuration)) {\n getDuration(getItemDuration(attemptId));\n }\n });\n });\n }\n });\n\n return duration;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/progress',['lodash', 'i18n', 'core/format', 'taoQtiTest/runner/helpers/map'], function (_, __, format, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} progressDetails\n * @property {Number} position - the position in the current element\n * @property {Number} reached - the number of reached elements (at least one item viewed)\n * @property {Number} viewed - the number of viewed elements (all items viewed)\n * @property {Number} completed - the number of completed elements (all questions answered)\n * @property {Number} total - the total number of elements\n */\n\n /**\n * @typedef {itemStats} progressData\n * @property {Number} position - the position in the scope\n * @property {Number} overallCompleted - the number of completed items in the test\n * @property {Number} overall - the total number of items in the test\n * @property {progressDetails} sections - the details of testSections in the scope\n * @property {progressDetails} parts - the details of testParts in the scope\n * @property {progressDetails} answerableSections - the details of testSections that contain questions in the scope\n * @property {progressDetails} answerableParts - the details of testParts that contain questions in the scope\n * @property {progressDetails} matchedCategories - the details of items that match the expected categories in the scope\n */\n\n /**\n * @typedef {Object} progressIndicator\n * @property {Number} position - the position in the scope\n * @property {Number} total - the length of the scope\n * @property {Number} ratio - the progress ratio of the indicator\n * @property {String} label - the text to display for the indicator\n */\n\n /**\n * @typedef {Object} progressConfig\n * @property {String} scope - the scope of the progression\n * @property {String} indicator - the type of progression\n * @property {Bool} showTotal - display 'item x of y' (true) | 'item x'\n * @property {Array} categories - categories to count by them\n */\n\n /**\n * Default progress config\n * @type {Object}\n */\n\n var defaultConfig = {\n scope: 'test',\n indicator: 'percentage',\n showTotal: true,\n categories: []\n };\n /**\n * List of labels by types\n * @type {Object}\n */\n\n var labels = {\n item: {\n long: __('Item %d of %d'),\n short: __('Item %d')\n },\n section: {\n long: __('Section %d of %d'),\n short: __('Section %d')\n }\n };\n /**\n * Simple map of progress stats computers\n * @type {Object}\n */\n\n var scopes = {\n /**\n * Gets stats for the whole test\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n test: function test(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'test');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.position + 1;\n return stats;\n },\n\n /**\n * Gets stats for the current test part\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n testPart: function testPart(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'testPart');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.positionInPart + 1;\n return stats;\n },\n\n /**\n * Gets stats for the current test section\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n testSection: function testSection(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'testSection');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.positionInSection + 1;\n return stats;\n }\n };\n /**\n * Simple map of progress indicator computers\n * @type {Object}\n */\n\n var indicators = {\n /**\n * Indicator that shows the percentage of completed items\n * @param {progressData} stats\n * @returns {progressIndicator}\n */\n percentage: function percentage(stats) {\n return getRatioProgression(stats.answered, stats.questions);\n },\n\n /**\n * Indicator that shows the position of current item\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n position: function position(stats, config) {\n return getPositionProgression(stats.position, stats.total, 'item', config);\n },\n\n /**\n * Indicator that shows the number of viewed questions\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n questions: function questions(stats, config) {\n return getPositionProgression(stats.questionsViewed, stats.questions, 'item', config);\n },\n\n /**\n * Indicator that shows the number of reached answerable sections\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n sections: function sections(stats, config) {\n return getPositionProgression(stats.answerableSections.reached, stats.answerableSections.total, 'section', config);\n },\n\n /**\n * Indicator that shows the number of viewed items which have categories from the configuration\n * (show all if categories are not set)\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n */\n categories: function categories(stats, config) {\n return getPositionProgression(stats.matchedCategories.position, stats.matchedCategories.total, 'item', config);\n }\n };\n /**\n * Fix the test map if the current test part is linear, as the current item should not be answered.\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @returns {Object} The fixed test map\n */\n\n function getFixedMap(testMap, testContext) {\n var currentTestPart = mapHelper.getPart(testMap, testContext.testPartId);\n var currentItem = mapHelper.getItemAt(testMap, testContext.itemPosition);\n\n if (currentItem.answered && currentTestPart.isLinear) {\n var fixedTestMap = _.cloneDeep(testMap);\n\n var fixedCurrentItem = mapHelper.getItemAt(fixedTestMap, testContext.itemPosition);\n fixedCurrentItem.answered = false;\n return fixedTestMap;\n }\n\n return testMap;\n }\n /**\n * Gets an empty stats record\n * @returns {progressDetails}\n */\n\n\n function getEmptyStats() {\n return {\n position: 0,\n reached: 0,\n viewed: 0,\n completed: 0,\n total: 0\n };\n }\n /**\n * Updates the progress stats from the given element\n * @param {progressDetails} stats - The stats details to update\n * @param {Object} element - The element from which take the details\n * @param {Number} position - The current item position\n */\n\n\n function updateStats(stats, element, position) {\n if (element.position <= position) {\n stats.position++;\n }\n\n if (element.stats.viewed) {\n stats.reached++;\n\n if (element.stats.viewed === element.stats.total) {\n stats.viewed++;\n }\n }\n\n if (element.stats.answered) {\n if (element.stats.answered === element.stats.questions) {\n stats.completed++;\n }\n }\n\n stats.total++;\n }\n /**\n * Updates the progress stats from the given element\n * @param {progressDetails} stats - The stats details to update\n * @param {Object} element - The element from which take the details\n * @param {Number} position - The current item position\n */\n\n\n function updateItemStats(stats, element, position) {\n if (element.position <= position) {\n stats.position++;\n }\n\n if (element.viewed) {\n stats.reached++;\n stats.viewed++;\n }\n\n if (element.answered) {\n stats.completed++;\n }\n\n stats.total++;\n }\n /**\n * Convert list of the categories to the hashtable to improve performance\n * @param categories\n * @returns {*}\n */\n\n\n function getCategoriesToMatch(categories) {\n var matchSize = categories && categories.length;\n return matchSize && _.reduce(categories, function (map, category) {\n map[category] = true;\n return map;\n }, {});\n }\n /**\n * Completes the progression stats\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {progressData}\n */\n\n\n function getProgressStats(testMap, testContext, config, scope) {\n var fixedMap = getFixedMap(testMap, testContext);\n var scopedMap = mapHelper.getScopeMap(fixedMap, testContext.itemPosition, scope);\n\n var stats = _.clone(scopedMap.stats);\n\n var categoriesToMatch;\n var matchSize;\n\n if (config.indicator === 'categories') {\n categoriesToMatch = getCategoriesToMatch(config.categories);\n matchSize = config.categories && config.categories.length;\n stats.matchedCategories = getEmptyStats();\n }\n\n stats.parts = getEmptyStats();\n stats.sections = getEmptyStats();\n stats.answerableParts = getEmptyStats();\n stats.answerableSections = getEmptyStats();\n\n _.forEach(scopedMap.parts, function (part) {\n updateStats(stats.parts, part, testContext.itemPosition);\n\n if (part.stats.questions > 0) {\n updateStats(stats.answerableParts, part, testContext.itemPosition);\n }\n\n _.forEach(part.sections, function (section) {\n updateStats(stats.sections, section, testContext.itemPosition);\n\n if (section.stats.questions > 0) {\n updateStats(stats.answerableSections, section, testContext.itemPosition);\n }\n\n if (config.indicator === 'categories') {\n _.forEach(section.items, function (item) {\n if (matchCategories(item.categories, categoriesToMatch, matchSize)) {\n updateItemStats(stats.matchedCategories, item, testContext.itemPosition);\n }\n });\n }\n });\n });\n\n return stats;\n }\n /**\n *\n * @param {Array} categories - List of categories to check\n * @param {Object} expectedCategories - Hashtable of expected categories\n * @param {Number} minWanted - Minimal number of expected categories that should match\n * @returns {Boolean}\n */\n\n\n function matchCategories(categories, expectedCategories, minWanted) {\n var matched = 0;\n\n if (expectedCategories) {\n _.forEach(categories, function (category) {\n if (expectedCategories[category]) {\n matched++;\n\n if (matched >= minWanted) {\n return false;\n }\n }\n });\n }\n\n return matched === minWanted;\n }\n /**\n * Gets the progression ratio\n * @param {Number} position\n * @param {Number} total\n * @returns {Number}\n */\n\n\n function getRatio(position, total) {\n if (position && total > 0) {\n return Math.floor(position / total * 100);\n }\n\n return 0;\n }\n /**\n * Gets the label of the progress bar for an item\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @param {String} type - the type of element that is represented\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {String}\n */\n\n\n function getProgressionLabel(position, total, type, config) {\n var patterns = labels[type] || labels.item;\n var pattern = config.showTotal ? patterns.long : patterns.short;\n return format(pattern, position || '0', total || '0');\n }\n /**\n * Gets the progression based on position\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @param {String} type - the type of element that is represented\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n\n\n function getPositionProgression(position, total, type, config) {\n return {\n position: position || 0,\n total: total || 0,\n ratio: getRatio(position, total),\n label: getProgressionLabel(position, total, type, config)\n };\n }\n /**\n * Gets the progression based on a ratio\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @returns {progressIndicator}\n */\n\n\n function getRatioProgression(position, total) {\n var ratio = getRatio(position, total);\n return {\n position: position || 0,\n total: total || 0,\n ratio: ratio,\n label: \"\".concat(ratio, \"%\")\n };\n }\n\n var progress = {\n /**\n * Checks that categories matched\n * @param categories\n * @param expectedCategories\n * @returns {Boolean}\n */\n isMatchedCategories: function validCategories(categories, expectedCategories) {\n var categoriesToMatch = getCategoriesToMatch(expectedCategories);\n var matchSize = expectedCategories && expectedCategories.length;\n return matchCategories(categories, categoriesToMatch, matchSize);\n },\n\n /**\n * Computes the progress stats for the specified scope\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n computeStats: function computeStats(testMap, testContext, config) {\n var testPart = mapHelper.getPart(testMap, testContext.testPartId);\n var statsComputer = config.scope && scopes[config.scope] || scopes.test;\n var stats = statsComputer(testMap, testContext, config || defaultConfig);\n stats.overall = testMap.stats.total;\n\n if (testPart && testPart.isLinear) {\n stats.overallCompleted = testMap.stats.answered - 1;\n } else {\n stats.overallCompleted = testMap.stats.answered;\n }\n\n return stats;\n },\n\n /**\n * Computes the specified progress indicator\n * @param {progressData} stats - the progress stats\n * @param {String} type - the [type=\"percentage\"] of indicator to compute (could be: percentage, position, questions, sections)\n * @param {progressConfig} [config] - a config object\n * @param {Boolean} [config.showTotal] - display 'item x of y' (true) | 'item x'\n * @returns {progressIndicator}\n */\n computeIndicator: function computeIndicator(stats, type, config) {\n var indicatorComputer = type && indicators[type] || indicators.percentage;\n return indicatorComputer(stats || {}, config || defaultConfig);\n },\n\n /**\n *\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.indicator - the type of progression\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @param {Boolean} [config.showTotal=true] - display 'item x of y' (true) | 'item x'\n */\n computeProgress: function computeProgress(testMap, testContext, config) {\n var progressData;\n config = _.defaults(config || {}, defaultConfig);\n progressData = this.computeStats(testMap, testContext, config);\n return this.computeIndicator(progressData, config.indicator, config);\n }\n };\n\n return progress;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/renderer/percentage',['ui/component', 'handlebars', 'ui/progressbar'], function (component, Handlebars, progressbar) { 'use strict';\n\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"progress-box\\\">\\n <div data-control=\\\"progress-bar\\\" class=\\\"qti-controls progressbar info\\\"></div>\\n <div data-control=\\\"progress-label\\\" class=\\\"qti-controls\\\"></div>\\n</div>\\n\";\n });\n function percentageTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values\n * @type {Object}\n */\n\n var defaults = {\n showLabel: true\n };\n /**\n * Builds percentage indicator renderer\n * @param {Object} [config] - a config object\n * @param {Boolean} [config.showLabel=true] - show/hide the progress label\n * @param {Object} [progressData] - the initial dataset\n */\n\n function percentageIndicatorRenderer(config, progressData) {\n var rendererApi = {\n /**\n * Update the progress bar according to the provided indicator data\n * @param {progressIndicator} data\n */\n update: function update(data) {\n progressData = data;\n\n if (this.is('rendered') && this.controls) {\n this.controls.$label.text(progressData.label);\n this.controls.$bar.progressbar('value', progressData.ratio);\n }\n /**\n * Executes extra tasks on update\n * @event percentageIndicatorRenderer#update\n * @param {progressIndicator} data\n */\n\n\n this.trigger('update', data);\n }\n };\n return component(rendererApi, defaults).setTemplate(percentageTpl).on('render', function () {\n // get access to the controls\n this.controls = {\n $label: this.getElement().find('[data-control=\"progress-label\"]'),\n $bar: this.getElement().find('[data-control=\"progress-bar\"]')\n }; // apply option\n\n if (!this.config.showLabel) {\n this.controls.$label.hide();\n } // and initialize the progress bar component\n\n\n this.controls.$bar.progressbar(); // set the right progression according to init data\n\n if (progressData) {\n this.update(progressData);\n } // forward the hidden state if it has been set before render\n\n\n if (this.is('hidden')) {\n this.hide();\n }\n }).on('destroy', function () {\n this.controls = null;\n }).init(config);\n }\n\n return percentageIndicatorRenderer;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/renderer/position',['lodash', 'ui/component', 'handlebars'], function (_, component, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"progress-box\\\">\\n <div data-control=\\\"progress-bar\\\" class=\\\"qti-controls progressbar\\\">\\n <div class=\\\"progressbar-points\\\"></div>\\n </div>\\n <div data-control=\\\"progress-label\\\" class=\\\"qti-controls\\\"></div>\\n</div>\\n\";\n });\n function positionTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\";\n buffer += \"\\n<span class=\\\"progressbar-point\\\" data-index=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"></span>\\n\";\n return buffer;\n }\n\n stack1 = helpers.each.call(depth0, depth0, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function pointTpl(data, options, asString) {\n var html = Template$1(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values\n * @type {Object}\n */\n\n var defaults = {\n showLabel: true\n };\n /**\n * Builds percentage indicator renderer\n * @param {Object} [config] - a config object\n * @param {Boolean} [config.showLabel=true] - show/hide the progress label\n * @param {Object} [progressData] - the initial dataset\n */\n\n function positionIndicatorRenderer(config, progressData) {\n var count = 0;\n var rendererApi = {\n /**\n * Update the progress bar according to the provided indicator data\n * @param {progressIndicator} data\n */\n update: function update(data) {\n progressData = data;\n\n if (this.is('rendered') && this.controls) {\n if (count !== progressData.total) {\n // the number of points have changed, regenerate the full bar\n count = progressData.total;\n this.controls.$bar.empty().append(pointTpl(_.range(count)));\n }\n\n this.controls.$label.text(progressData.label);\n this.controls.$bar // remove progression from all points\n .children().removeClass('reached current') // set progression to each reached point\n .slice(0, progressData.position).addClass('reached') // set current position\n .slice(-1).addClass('current');\n }\n /**\n * Executes extra tasks on update\n * @event positionIndicatorRenderer#update\n * @param {progressIndicator} data\n */\n\n\n this.trigger('update', data);\n }\n };\n return component(rendererApi, defaults).setTemplate(positionTpl).on('render', function () {\n // get access to the controls\n this.controls = {\n $label: this.getElement().find('[data-control=\"progress-label\"]'),\n $bar: this.getElement().find('[data-control=\"progress-bar\"] .progressbar-points')\n }; // apply option\n\n if (!this.config.showLabel) {\n this.controls.$label.hide();\n } // set the right progression according to init data\n\n\n if (progressData) {\n this.update(progressData);\n } // forward the hidden state if it has been set before render\n\n\n if (this.is('hidden')) {\n this.hide();\n }\n }).on('destroy', function () {\n this.controls = null;\n }).init(config);\n }\n\n return positionIndicatorRenderer;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/progressbar',['taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/controls/progressbar/progress', 'taoQtiTest/runner/plugins/controls/progressbar/renderer/percentage', 'taoQtiTest/runner/plugins/controls/progressbar/renderer/position'], function (pluginFactory, mapHelper, progressHelper, percentageRendererFactory, positionRendererFactory) { 'use strict';\n\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n progressHelper = progressHelper && Object.prototype.hasOwnProperty.call(progressHelper, 'default') ? progressHelper['default'] : progressHelper;\n percentageRendererFactory = percentageRendererFactory && Object.prototype.hasOwnProperty.call(percentageRendererFactory, 'default') ? percentageRendererFactory['default'] : percentageRendererFactory;\n positionRendererFactory = positionRendererFactory && Object.prototype.hasOwnProperty.call(positionRendererFactory, 'default') ? positionRendererFactory['default'] : positionRendererFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * List of available progress indicator renderers\n * @type {Object}\n */\n\n var renderers = {\n percentage: percentageRendererFactory,\n position: positionRendererFactory\n };\n /**\n * Returns the configured plugin\n */\n\n var progressbar = pluginFactory({\n name: 'progressBar',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerConfig = testRunner.getOptions();\n var config = Object.assign({}, testRunnerConfig.progressIndicator || {}, this.getConfig());\n var self = this;\n var rendererFactory = renderers[config.renderer] || renderers.percentage;\n var progressConfig = {\n indicator: config.type || 'percentage',\n scope: config.scope || 'test',\n showLabel: config.showLabel,\n showTotal: config.showTotal,\n categories: config.categories\n };\n\n var hiddenByQuestions = function hiddenByQuestions(item) {\n return item && item.informational && progressConfig.indicator === 'questions';\n };\n\n var hiddenByCategories = function hiddenByCategories(item) {\n return item && progressConfig.indicator === 'categories' && !progressHelper.isMatchedCategories(item.categories, progressConfig.categories);\n };\n /**\n * Check if progress bar should be hidden\n */\n\n\n var isProgressbarHidden = function isProgressbarHidden(item) {\n return hiddenByQuestions(item) || hiddenByCategories(item);\n };\n /**\n * Update the progress bar\n */\n\n\n var update = function update() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n\n if (isProgressbarHidden(item)) {\n self.renderer.hide();\n } else {\n self.renderer.show();\n self.renderer.update(progressHelper.computeProgress(testMap, testContext, progressConfig));\n }\n }; //create the progressbar\n\n\n this.renderer = rendererFactory(progressConfig); //let update the progression\n\n update();\n testRunner.on('ready loaditem', update);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n this.renderer.render($container);\n },\n\n /**\n * Called during the runner's render phase\n */\n destroy: function destroy() {\n if (this.renderer) {\n this.renderer.destroy();\n }\n\n this.renderer = null;\n },\n\n /**\n * Show the progress bar\n */\n show: function show() {\n if (this.renderer) {\n this.renderer.show();\n }\n },\n\n /**\n * Hide the progress bar\n */\n hide: function hide() {\n if (this.renderer) {\n this.renderer.hide();\n }\n }\n });\n\n return progressbar;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/testState/testState',['lodash', 'taoTests/runner/plugin'], function (_, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the testState plugin.\n * Handle particular states of the assessment test\n */\n\n var testState = pluginFactory({\n name: 'testState',\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n install: function install() {\n var testRunner = this.getTestRunner(); // middleware invoked on every requests\n\n testRunner.getProxy().use(function qtiFilter(req, res, next) {\n var data = res && res.data; // test has been closed/suspended => redirect to the index page after message acknowledge\n\n if (data && data.type && data.type === 'TestState' && !testRunner.getState('closedOrSuspended')) {\n // spread the world about the reason of the leave\n testRunner.setState('closedOrSuspended', true);\n\n if (!testRunner.getState('ready')) {\n // if we open an inconsistent test just leave\n // should happen if we refresh an auto paused test\n testRunner.trigger('destroy');\n } else if (_.isEmpty(data.messages) || !_.find(data.messages, {\n channel: 'teststate'\n })) {\n testRunner.trigger('leave', data);\n } // break the chain to avoid uncaught exception in promise...\n // this will lead to unresolved promise, but the browser will be redirected soon!\n\n\n return;\n }\n\n next();\n });\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var isLeaving = false; // immediate handling of proctor's actions\n\n testRunner.getProxy().channel('teststate', function (data) {\n if (!isLeaving && data && ('close' === data.type || 'pause' === data.type) && !testRunner.getState('closedOrSuspended')) {\n isLeaving = true;\n\n if ('pause' === data.type) {\n testRunner.trigger('pause', data);\n } else {\n testRunner.setState('closedOrSuspended', true);\n testRunner.trigger('leave', data);\n }\n }\n });\n }\n });\n\n return testState;\n\n});\n\n","define('taoQtiTest/runner/helpers/getTimerMessage',['i18n'], function (__) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n\n /**\n * Returns timer information string\n * @returns {Boolean}\n */\n\n function getTimerMessage(hours, minutes, seconds, unansweredQuestions, scope) {\n var timerMessage;\n var timeArr = [hours, minutes, seconds];\n var timeArgArr = [];\n [__('hours'), __('minutes'), __('seconds')].forEach(function (unit, idx) {\n if (timeArr[idx] > 0) {\n timeArgArr.push(\"\".concat(timeArr[idx], \" \").concat(unit));\n }\n });\n var answeredMessage;\n\n if (!unansweredQuestions || scope === 'item') {\n answeredMessage = __('the current question');\n } else {\n var questionsMessage = __('questions');\n\n if (unansweredQuestions === 1) {\n questionsMessage = __('question');\n }\n\n answeredMessage = __('remaining %s %s', unansweredQuestions, questionsMessage);\n }\n\n if (timeArgArr.length === 0) {\n timerMessage = __('%s to answer %s', 'no time left', answeredMessage);\n } else {\n timerMessage = __('%s to answer %s', timeArgArr.join(', '), answeredMessage);\n }\n\n return timerMessage;\n }\n\n return getTimerMessage;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/controls/timer/component/css/countdown',[],function(){});\n","define('taoQtiTest/runner/plugins/controls/timer/component/countdown',['jquery', 'lodash', 'core/encoder/time', 'ui/component', 'handlebars', 'taoQtiTest/runner/helpers/getTimerMessage', 'ui/tooltip', 'css!taoQtiTest/runner/plugins/controls/timer/component/css/countdown.css', 'moment'], function ($$1, _, timeEncoder, component, Handlebars, getTimerMessage, tooltip, countdown_css, moment) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n timeEncoder = timeEncoder && Object.prototype.hasOwnProperty.call(timeEncoder, 'default') ? timeEncoder['default'] : timeEncoder;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n getTimerMessage = getTimerMessage && Object.prototype.hasOwnProperty.call(getTimerMessage, 'default') ? getTimerMessage['default'] : getTimerMessage;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"countdown\\\" data-control=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-type=\\\"\";\n if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-scope=\\\"\";\n if (helper = helpers.scope) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.scope); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" disabled>\\n <span aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"label truncate\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"time\\\" aria-hidden=\\\"true\\\"></span>\\n <div class=\\\"time--screenreader visible-hidden\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function countdownTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n\n var precision = 1000;\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n showBeforeStart: true,\n displayWarning: true\n };\n /**\n * time to display warnings\n */\n\n var warningTimeout = {\n info: 2000,\n success: 2000,\n warning: 4000,\n danger: 4000,\n error: 8000\n };\n /**\n * Creates, initialize and render a countdown component.\n *\n * @param {jQueryElement|HTMLElement} $container - where to append the countdown\n * @param {Object} config\n * @param {String} config.id - the timer unique identifier\n * @param {String} config.label - the text to display above the timer\n * @param {String} config.type - the type of countdown (to categorize them)\n * @param {String} [config.scope] - scope of a timer\n * @param {Number} [config.unansweredQuestions] - number of unanswered options\n * @param {Number} [config.remainingTime] - the current value of the countdown, in milliseconds\n * @param {Boolean} [config.showBeforeStart = true] - do we show the time before starting\n * @param {Boolean} [config.displayWarning = true] - do we display the warnings or trigger only the event\n * @param {Object[]} [config.warnings] - define warnings thresholds\n * @param {Number} [config.warnings.threshold] - when the warning is shown, in milliseconds\n * @param {String} [config.warnings.message] - the warning message\n * @param {String} [config.warnings.level = warn] - the feedback level in (success, info, warn, danger and error)\n * @returns {countdown} the component, initialized and rendered\n */\n\n function countdownFactory($container, config) {\n var $time;\n var $timeScreenreader;\n /**\n * @typedef {Object} countdown\n */\n\n var countdown = component({\n /**\n * Update the countdown\n * @param {Number} remainingTime - the time remaining (milliseconds)\n * @param {Number} unansweredQuestions\n * @returns {countdown} chains\n * @fires countdown#change - when the value has changed\n * @fires countdown#warn - when a threshold is reached\n */\n update: function udpate(remainingTime, unansweredQuestions) {\n var self = this;\n var encodedTime;\n var warningId;\n var warningMessage;\n\n if (!this.is('completed')) {\n if (remainingTime <= 0) {\n this.remainingTime = 0;\n } else {\n this.remainingTime = parseInt(remainingTime, 10);\n }\n\n if (this.is('rendered') && this.is('running')) {\n encodedTime = timeEncoder.encode(this.remainingTime / precision);\n\n if (encodedTime !== this.encodedTime) {\n this.encodedTime = encodedTime;\n var time = moment.duration(this.remainingTime / precision, 'seconds');\n var hours = time.get('hours');\n var minutes = time.get('minutes');\n var seconds = time.get('seconds');\n $time.text(this.encodedTime);\n $timeScreenreader.text(getTimerMessage(hours, minutes, seconds, unansweredQuestions, this.config.scope));\n }\n\n if (this.warnings) {\n //the warnings have already be sorted\n warningId = _.findLastKey(this.warnings, function (warning) {\n return warning && !warning.shown && warning.threshold > 0 && warning.threshold >= self.remainingTime;\n });\n\n if (warningId) {\n this.warnings[warningId].shown = true;\n\n if (_.isFunction(this.warnings[warningId].message)) {\n warningMessage = this.warnings[warningId].message(this.remainingTime);\n } else {\n warningMessage = this.warnings[warningId].message;\n }\n /**\n * Warn user the timer reach a threshold\n * @event countdown#warn\n * @param {String} message\n * @param {String} level\n */\n\n\n this.trigger('warn', warningMessage, this.warnings[warningId].level);\n }\n }\n\n if (this.warningsForScreenreader) {\n //the warnings have already be sorted\n var screenreaderWarningId = _.findLastKey(this.warningsForScreenreader, function (warning) {\n return warning && !warning.shown && warning.threshold > 0 && warning.threshold >= self.remainingTime;\n });\n\n if (screenreaderWarningId) {\n this.warningsForScreenreader[screenreaderWarningId].shown = true;\n /**\n * Warn user the timer reach a threshold\n * @event countdown#warnscreenreader\n * @param {Function} message\n * @param {Number} remainingTime\n * @param {String} scope\n */\n\n this.trigger('warnscreenreader', this.warningsForScreenreader[screenreaderWarningId].message, self.remainingTime, this.warningsForScreenreader[screenreaderWarningId].scope);\n }\n }\n /**\n * The current value has changed\n * @event countdown#change\n * @param {Number} remainingTime - the updated time\n * @param {String} displayed - the displayed value\n */\n\n\n this.trigger('change', this.remainingTime, encodedTime);\n }\n\n if (this.remainingTime === 0) {\n this.complete();\n }\n }\n\n return this;\n },\n\n /**\n * Starts the countdown\n * @returns {countdown} chains\n * @fires countdown#start\n */\n start: function start() {\n if (this.is('rendered') && !this.is('running') && !this.is('completed')) {\n this.enable();\n this.setState('running', true);\n /**\n * The count has started\n * @event countdown#start\n */\n\n this.trigger('start');\n }\n\n return this;\n },\n\n /**\n * Stops the countdown (can be restarted then)\n * @returns {countdown} chains\n * @fires countdown#stop\n */\n stop: function stop() {\n if (this.is('rendered') && this.is('running')) {\n this.setState('running', false);\n /**\n * The count is stopped\n * @event countdown#stop\n */\n\n this.trigger('stop');\n }\n\n return this;\n },\n\n /**\n * Calls to complete the countdown,\n * it can't be resumed after.\n *\n * @returns {countdown} chains\n *\n * @fires countdown#complete\n * @fires countdown#end\n */\n complete: function complete() {\n if (this.is('rendered') && this.is('running') && !this.is('completed')) {\n this.stop();\n this.setState('completed', true);\n /**\n * The countdown has ended, is completed\n * @event countdown#complete\n * @event countdown#end (alias)\n */\n\n this.trigger('complete end');\n }\n\n return this;\n }\n }, defaults).on('init', function () {\n this.remainingTime = this.config.remainingTime;\n this.unansweredQuestions = this.config.unansweredQuestions;\n\n if (this.config.warnings) {\n this.warnings = _.sortBy(this.config.warnings, 'threshold');\n }\n\n if (this.config.warningsForScreenreader) {\n this.warningsForScreenreader = _.sortBy(this.config.warningsForScreenreader, 'threshold');\n } //auto renders\n\n\n this.render($container);\n }).on('render', function () {\n $time = $$1('.time', this.getElement());\n $timeScreenreader = $$1('.time--screenreader', this.getElement());\n\n if (this.config.showBeforeStart === true) {\n $time.text(timeEncoder.encode(this.remainingTime / precision));\n }\n }).on('warn', function (message, level) {\n var countdownTooltip;\n level = level || 'warning';\n\n if (this.is('rendered') && this.is('running') && _.isString(message) && !_.isEmpty(message)) {\n $time.removeClass('txt-success txt-info txt-warning txt-danger txt-error').addClass(\"txt-\".concat(level));\n\n if (this.config.displayWarning === true) {\n countdownTooltip = tooltip.create(this.getElement(), message, {\n trigger: 'manual',\n theme: level,\n placement: 'bottom'\n });\n countdownTooltip.show();\n setTimeout(function () {\n countdownTooltip.hide();\n countdownTooltip.dispose();\n }, warningTimeout[level] || 2000);\n }\n }\n });\n countdown.setTemplate(countdownTpl);\n\n _.defer(function () {\n countdown.init(config);\n });\n\n return countdown;\n }\n\n return countdownFactory;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/controls/timer/component/css/timerbox',[],function(){});\n","define('taoQtiTest/runner/plugins/controls/timer/component/timerbox',['jquery', 'lodash', 'i18n', 'ui/component', 'ui/hider', 'taoQtiTest/runner/plugins/controls/timer/component/countdown', 'handlebars', 'css!taoQtiTest/runner/plugins/controls/timer/component/css/timerbox.css'], function ($$1, _, __, component, hider, countdownFactory, Handlebars, timerbox_css) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n countdownFactory = countdownFactory && Object.prototype.hasOwnProperty.call(countdownFactory, 'default') ? countdownFactory['default'] : countdownFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this, functionType=\"function\";\n\n function program1(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"\\n <a href=\\\"#\\\" class=\\\"timer-toggler hidden\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Hide timers\", options) : helperMissing.call(depth0, \"__\", \"Hide timers\", options)))\n + \"\\\" role=\\\"button\\\"><span class=\\\"icon-clock\\\"></span></a>\\n \";\n return buffer;\n }\n\n buffer += \"<div class=\\\"timer-box\\\">\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.zenMode)),stack1 == null || stack1 === false ? stack1 : stack1.enabled), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"timer-wrapper\\\" aria-hidden=\\\"\";\n if (helper = helpers.ariaHidden) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.ariaHidden); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function timerboxTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n zenMode: {\n enabled: true,\n startHidden: false\n }\n };\n /**\n * Creates and initialize the timerbox component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @param {Object} config\n * @param {Boolean} [config.zenMode = true] - zen mode adds a button to hide the countdowns to stay zen\n * @param {Object[]} [config.timers] - the timers to start with\n * @param {Boolean} [config.displayWarning = true] - let the countdown display their warning (contextual)\n * @returns {timerbox} the component, initialized and rendered\n */\n\n function timerboxFactory(config) {\n var $zenModeToggler;\n var $countdownContainer;\n /**\n * @typedef {Object} timerbox\n */\n\n var timerbox = component({\n /***\n * Update the displayed timers.\n * Compare the current and the given, it will add,remove and update timers.\n *\n * @param {Object[]} timers - the new timers\n * @returns {Promise<Array>} resolves when all timers are up to date (with the result of all the update operations)\n *\n * @fires timerbox#update the update is done\n */\n update: function update(timers) {\n var self = this;\n var updating = []; //remove timers\n\n var timerIdsToRemove = _.difference(_.keys(this.timers), _.keys(timers));\n\n if (timerIdsToRemove.length) {\n _.forEach(timerIdsToRemove, function (timerId) {\n updating.push(self.removeTimer(timerId));\n });\n } //add/update\n\n\n _.forEach(timers, function (timer, id) {\n if (typeof self.timers[id] === 'undefined') {\n updating.push(self.addTimer(id, timer));\n } else {\n updating.push(self.updateTimer(id, timer));\n }\n });\n\n return Promise.all(updating).then(function (results) {\n //show the toggler only if there's timers\n if (_.size(self.timers) > 0) {\n hider.show($zenModeToggler);\n } else {\n hider.hide($zenModeToggler);\n }\n /**\n * The timer box update is done\n * @event timerbox#update\n * @param {Object[]} timers - ALL update results (includes removals)\n */\n\n\n self.trigger('update', results);\n return results;\n });\n },\n\n /**\n * Get the current timers\n * @return {Object[]} the timers\n */\n getTimers: function getTimers() {\n return this.timers;\n },\n\n /**\n * Adds a new timer to the box\n * @param {String} id - the timer unique identifier\n * @param {Object} timer - the new timer\n * @return {Promise<Object|Boolean>} resolves with the timer once added or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timeradd a new timer is in the box\n * @fires timerbox#timerstart a timer get started\n * @fires timerbox#timerstop a timer get stopped\n * @fires timerbox#timerend a timer get completed\n * @fires timerbox#change spread from the countdown\n */\n addTimer: function addTimer(id, timer) {\n var self = this;\n\n if (this.is('rendered') && typeof this.timers[id] === 'undefined') {\n return new Promise(function (resolve) {\n var countdown = countdownFactory($countdownContainer, _.defaults(timer, {\n displayWarning: self.config.displayWarning\n })).on('render', function () {\n //keep track of the new timer\n //and the countdown component\n self.timers[id] = _.clone(timer);\n self.timers[id].countdown = this;\n /**\n * The timers have changed (add, update, remove)\n * @event timerbox#timerchange\n * @param {String} action - add, update, remove\n * @param {Object} timer\n */\n\n self.trigger('timerchange', 'add', self.timers[id]);\n /**\n * A new timer is added\n * @event timerbox#timeradd\n * @param {Object} timer\n */\n\n self.trigger('timeradd', self.timers[id]);\n resolve(self.timers[id]);\n }).on('start', function () {\n /**\n * A timer starts\n * @event timerbox#timerstart\n * @param {Object} timer\n */\n self.trigger('timerstart', self.timers[id]);\n }).on('stop', function () {\n /**\n * A timer stops\n * @event timerbox#timerstop\n * @param {Object} timer\n */\n self.trigger('timerstop', self.timers[id]);\n }).on('end', function () {\n /**\n * A timer ends\n * @event timerbox#timerend\n * @param {Object} timer\n */\n self.trigger('timerend', self.timers[id]);\n }).on('change', function (value) {\n if (self.timers[id]) {\n self.trigger('timertick', this.remainingTime, self.timers[id].scope, self.timers[id].unansweredQuestions); // propogate current timer data\n //keep the current timer data in sync\n\n self.timers[id].remainingTime = value;\n }\n });\n countdown.spread(self, ['error', 'change', 'warn', 'warnscreenreader']);\n });\n }\n\n return Promise.resolve(false);\n },\n\n /**\n * Updates an existing timer\n * @param {String} id - the timer unique identifier\n * @param {Object} timer - the new timer\n * @return {Promise<Object|Boolean>} resolves with the timer once updated or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timerupdate an existing timer is updated\n */\n updateTimer: function updateTimer(id, timer) {\n if (this.is('rendered') && typeof this.timers[id] !== 'undefined') {\n this.timers[id].remainingTime = timer.remainingTime;\n this.timers[id].unansweredQuestions = timer.unansweredQuestions;\n this.timers[id].extraTime = timer.extraTime;\n\n if (_.isNumber(timer.remainingWithoutExtraTime)) {\n this.timers[id].remainingWithoutExtraTime = timer.remainingWithoutExtraTime;\n }\n\n if (this.timers[id].countdown) {\n this.timers[id].countdown.update(timer.remainingTime, timer.unansweredQuestions);\n }\n\n this.trigger('timerchange', 'update', this.timers[id]);\n /**\n * A timer has been updated with external values\n * @event timerbox#timerupdate\n * @param {Object} timer\n */\n\n this.trigger('timerupdate', this.timers[id]);\n return Promise.resolve(this.timers[id]);\n }\n\n return Promise.resolve(false);\n },\n\n /**\n * Remove a timer\n * @param {String} id - the timer unique identifier\n * @return {Promise<Object|Boolean>} resolves with the timer once removed or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timerremove a timer is removed\n */\n removeTimer: function removeTimer(id) {\n var self = this;\n\n if (this.is('rendered') && typeof this.timers[id] !== 'undefined') {\n return new Promise(function (resolve) {\n /**\n * Artifact function, remove the timer from the component index\n */\n var deindex = function deindex() {\n //keep a clone, without the component, for the event\n var removed = _.omit(self.timers[id], 'countdown'); //remove the timer from the list\n\n\n self.timers = _.omit(self.timers, id);\n self.trigger('timerchange', 'remove', removed);\n /**\n * A timer has been updated with external values\n * @event timerbox#timerupdate\n * @param {Object} timer\n */\n\n self.trigger('timerremove', removed);\n resolve(removed);\n };\n\n if (self.timers[id].countdown) {\n self.timers[id].countdown.on('destroy', deindex).destroy();\n } else {\n deindex();\n }\n });\n }\n\n return Promise.resolve();\n },\n\n /**\n * Starts all the timers contained in the box\n * @returns {timerbox} chains\n */\n start: function start() {\n _.forEach(this.timers, function (timer) {\n if (timer.countdown) {\n timer.countdown.start();\n }\n });\n\n return this;\n },\n\n /**\n * Stops all the timers contained in the box\n * @returns {timerbox} chains\n */\n stop: function stop() {\n _.forEach(this.timers, function (timer) {\n if (timer.countdown) {\n timer.countdown.stop();\n }\n });\n\n return this;\n },\n\n /**\n * Show/hide the timers aka \"zen mode\"\n * @returns {timerbox} chains\n * @fires timerbox#zenchange\n */\n toggleZenMode: function toggleZenMode() {\n if (this.is('rendered') && this.config.zenMode.enabled) {\n if (this.is('zen')) {\n this.setState('zen', false);\n $zenModeToggler.attr('title', __('Hide timers'));\n } else {\n this.setState('zen', true);\n $zenModeToggler.attr('title', __('Show timers'));\n }\n /**\n * @event timerbox#zenchange\n * @param {Boolean} isZen\n */\n\n\n this.trigger('zenchange', this.is('zen'));\n }\n\n return this;\n }\n }, defaults).on('init', function () {\n //index the current timers\n this.timers = {};\n }).on('render', function () {\n var self = this;\n var $element = this.getElement(); //where we append the countdowns components\n\n $countdownContainer = $$1('.timer-wrapper', $element); //set up the zen mode toggler\n\n if (this.config.zenMode.enabled) {\n $zenModeToggler = $$1('.timer-toggler', $element);\n self.setState('zen', !!self.config.zenMode.startHidden);\n $zenModeToggler.on('click', function (e) {\n e.preventDefault();\n self.toggleZenMode();\n });\n } //if timers are provided with the config, we perform the 1st update\n\n\n if (this.config.timers) {\n this.update(this.config.timers);\n }\n });\n timerbox.setTemplate(timerboxTpl);\n\n _.defer(function () {\n timerbox.init(config);\n });\n\n return timerbox;\n }\n\n return timerboxFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/enforcedStay',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timer strategy that enforce the test taker to stay in\n * front of the item until the timer completes,\n * by disabling the navigation elements.\n *\n * Applies on item scope, min timers if the testPart is linear\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function enforcedStayStrategy(testRunner, timer) {\n var testPart = testRunner.getCurrentPart();\n\n if (timer && timer.type === 'min' && timer.scope === 'item' && testPart && testPart.isLinear) {\n return {\n name: 'enforcedStay',\n\n /**\n * setUp entry point : disable the navigation\n */\n setUp: function setUp() {\n testRunner.on('enablenav.enforcestay', function () {\n testRunner.trigger('disablenav');\n });\n testRunner.trigger('disablenav');\n },\n\n /**\n * complete entry point : enables back the navigation\n */\n complete: function complete() {\n this.tearDown();\n testRunner.trigger('enablenav');\n },\n\n /**\n * tearDown entry point : remove the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('enablenav.enforcestay');\n }\n };\n }\n\n return false;\n }\n\n return enforcedStayStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/extraTime',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n var precision = 1000;\n var lastConsumedExtraTime = 0;\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n\n function extraTimeStrategy(testRunner, timer) {\n /**\n * Apply the extra time to the timer 'once' and\n * listen for test movment to add the consumed extrat time as parameter\n * Since the extra time is global, if multiple timers use the extra time part,\n * we take the biggest consumed extra time.\n */\n var applyExtraTime = function applyExtraTime() {\n if (_.isNumber(timer.extraTime) && timer.extraTime > 0 && !timer.extraTimeSetup) {\n timer.extraTimeSetup = true;\n testRunner.before('move.extra skip.extra exit.extra timeout.extra', function () {\n var consumedExtraTime = 0;\n var testContext = testRunner.getTestContext();\n\n if (timer.remainingTime < timer.extraTime) {\n consumedExtraTime = Math.max(timer.extraTime - timer.remainingTime, 0) / precision;\n lastConsumedExtraTime = Math.max(consumedExtraTime, lastConsumedExtraTime, testContext.extraTime.consumed);\n testRunner.getProxy().addCallActionParams({\n consumedExtraTime: lastConsumedExtraTime\n });\n }\n }).after('move.extra skip.extra exit.extra timeout.extra', function () {\n lastConsumedExtraTime = 0;\n });\n }\n };\n\n if (timer && timer.type === 'max') {\n return {\n name: 'extraTime',\n\n /**\n * setUp entry point : adds the extratime to the timer\n */\n setUp: function setUp() {\n applyExtraTime();\n },\n\n /**\n * setUp entry point : adds the extratime to the timer\n */\n start: function start() {\n //apply at start also in case the extra time is added in between\n applyExtraTime();\n },\n\n /**\n * tearDown entry point : remove the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('move.extra skip.extra exit.extra timeout.extra');\n }\n };\n }\n\n return false;\n }\n\n return extraTimeStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/guidedNavigation',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timer strategy that enforce the test taker to stay in\n * front of the item until the timer completes,\n * by hidding the navigation elements.\n * Once the timer completes, the test moves to the next item.\n *\n * Applies on item scope, locked timers only, linear test part and\n * the test configuration \"guidedNavigation\"\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function guidedNavigationStrategy(testRunner, timer) {\n var testRunnerOptions = testRunner.getOptions();\n var testPart = testRunner.getCurrentPart();\n\n if (timer && timer.type === 'locked' && timer.scope === 'item' && testRunnerOptions.guidedNavigation === true && testPart && testPart.isLinear) {\n return {\n name: 'guidedNavigation',\n\n /**\n * setUp entry point : hides the navigation\n */\n setUp: function setUp() {\n testRunner.trigger('hidenav');\n },\n\n /**\n * complete entry point : enables back the navigation\n */\n complete: function complete() {\n testRunner.trigger('disableitem disablenav shownav');\n setTimeout(function () {\n testRunner.trigger('move', 'next', 'item');\n }, 500);\n }\n };\n }\n\n return false;\n }\n\n return guidedNavigationStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/timeout',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timeout strategy, the given scope is timedout when the timer completes.\n *\n * Applies on all max timers\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function timeoutStrategy(testRunner, timer) {\n if (timer && timer.type === 'max') {\n return {\n name: 'timeout',\n\n /**\n * complete entry point : timeout\n */\n complete: function complete() {\n if (timer.qtiClassName && timer.source) {\n return testRunner.timeout(timer.qtiClassName, timer.source, timer);\n }\n }\n };\n }\n\n return false;\n }\n\n return timeoutStrategy;\n\n});\n\n","define('taoQtiTest/runner/helpers/currentItem',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * List of QTI model cardinalities\n * @type {Object}\n */\n\n var responseCardinalities = {\n single: 'base',\n multiple: 'list',\n ordered: 'list',\n record: 'record'\n };\n /**\n * List of QTI interaction minConstraint properties\n * @type {Object}\n */\n\n var interactionMinConstraintProperties = {\n matchInteraction: 'minAssociations',\n choiceInteraction: 'minChoices',\n orderInteraction: 'minChoices',\n associateInteraction: 'minAssociations',\n hottextInteraction: 'minChoices',\n hotspotInteraction: 'minChoices',\n graphicOrderInteraction: 'minChoices',\n graphicAssociateInteraction: 'minAssociations',\n selectPointInteraction: 'minChoices'\n };\n /**\n * @typedef {currentItemHelper}\n */\n\n var currentItemHelper = {\n /**\n * Gets the responses declarations of the current item.\n * @param {Object} runner - testRunner instance\n * @returns {Object}\n */\n getDeclarations: function getDeclarations(runner) {\n var itemRunner = runner.itemRunner;\n return itemRunner._item && itemRunner._item.responses;\n },\n\n /**\n * Gets a response declaration by the identifier of the response\n * @param {Object} runner - testRunner instance\n * @param {String} identifier - The identifier of the response\n * @returns {Object|null}\n */\n getResponseDeclaration: function getResponseDeclaration(runner, identifier) {\n var found = null;\n\n _.forEach(currentItemHelper.getDeclarations(runner), function (declaration) {\n var attributes = declaration.attributes || {};\n\n if (attributes.identifier === identifier) {\n found = declaration;\n return false;\n }\n });\n\n return found;\n },\n\n /**\n * Convert a value to a response object\n * @param {Array|String} value\n * @param {String} baseType\n * @param {String} cardinality\n * @returns {Object}\n */\n toResponse: function toResponse(value, baseType, cardinality) {\n var mappedCardinality = responseCardinalities[cardinality];\n var response = {};\n\n if (_.isString(value)) {\n value = [value];\n }\n\n var transform = function transform(v) {\n return v;\n };\n\n if (baseType === 'boolean') {\n transform = function transform(v) {\n return v === true || v === 'true';\n };\n } else if (baseType === 'directedPair' || baseType === 'pair') {\n transform = function transform(v) {\n if (_.isString(v)) {\n return v.split(' ');\n }\n\n return v;\n };\n }\n\n value = _.map(value || [], transform);\n\n if (mappedCardinality) {\n if (mappedCardinality === 'base') {\n if (value.length === 0) {\n //return empty response:\n response.base = null;\n } else {\n response.base = {};\n response.base[baseType] = value[0];\n }\n } else {\n response[mappedCardinality] = {};\n response[mappedCardinality][baseType] = value;\n }\n }\n\n return response;\n },\n\n /**\n * Checks if the provided value can be considered as null\n * @param {Object} value\n * @param {String} baseType\n * @param {String} cardinality\n * @returns {boolean}\n */\n isQtiValueNull: function isQtiValueNull(value, baseType, cardinality) {\n var mappedCardinality = responseCardinalities[cardinality];\n\n if (_.isObject(value) && value[mappedCardinality] === null) {\n value = null;\n }\n\n if (_.isObject(value) && value[mappedCardinality] && 'undefined' !== typeof value[mappedCardinality][baseType]) {\n value = value[mappedCardinality][baseType];\n }\n\n return null === value || 'string' === baseType && _.isEmpty(value) || cardinality !== 'single' && _.isEmpty(value);\n },\n\n /**\n * Tells if an item question has been answered or not\n * @param {Object} response\n * @param {String} baseType\n * @param {String} cardinality\n * @param {Object} [defaultValue]\n * @param {Object} constraintValue\n * @returns {*}\n */\n isQuestionAnswered: function isQuestionAnswered(response, baseType, cardinality, defaultValue, constraintValue) {\n var answered, currentCardinality, responses;\n var fullyAnswered = true;\n defaultValue = defaultValue || null;\n constraintValue = constraintValue || 0;\n\n if (currentItemHelper.isQtiValueNull(response, baseType, cardinality)) {\n answered = false;\n } else {\n answered = !_.isEqual(response, currentItemHelper.toResponse(defaultValue, baseType, cardinality));\n\n if (constraintValue !== 0) {\n currentCardinality = responseCardinalities[cardinality];\n responses = response[currentCardinality][baseType] || [];\n fullyAnswered = responses && responses.length >= constraintValue;\n }\n\n answered = answered && fullyAnswered;\n }\n\n return answered;\n },\n guessInteractionConstraintValues: function guessInteractionConstraintValues(runner) {\n var itemRunner = runner.itemRunner;\n var itemBody = itemRunner._item && itemRunner._item.bdy || {};\n var interactions = itemBody.elements || {};\n var constraintValues = {};\n\n _.forEach(interactions, function (interaction) {\n var attributes = interaction.attributes || {};\n var qtiClass = interaction.__proto__.qtiClass;\n var constraintProperty;\n\n if (Object.prototype.hasOwnProperty.call(interactionMinConstraintProperties, qtiClass)) {\n constraintProperty = interactionMinConstraintProperties[qtiClass];\n constraintValues[attributes.responseIdentifier] = attributes[constraintProperty];\n }\n });\n\n return constraintValues;\n },\n\n /**\n * Tells is the current item has been answered or not\n * The item is considered answered when at least one response has been set to not empty {base : null}\n * @param {Object} runner - testRunner instance\n * @param {Boolean} [partially=true] - if false all questions must have been answered\n * @returns {Boolean}\n */\n isAnswered: function isAnswered(runner, partially) {\n var itemRunner = runner.itemRunner;\n var responses = itemRunner && itemRunner.getResponses();\n var count = 0;\n var empty = 0;\n var declarations, constraintValues;\n\n if (itemRunner) {\n declarations = currentItemHelper.getDeclarations(runner);\n constraintValues = currentItemHelper.guessInteractionConstraintValues(runner);\n\n _.forEach(declarations, function (declaration) {\n var attributes = declaration.attributes || {};\n var response = responses[attributes.identifier];\n var baseType = attributes.baseType;\n var cardinality = attributes.cardinality;\n count++;\n\n if (!currentItemHelper.isQuestionAnswered(response, baseType, cardinality, declaration.defaultValue, constraintValues[attributes.identifier])) {\n empty++;\n }\n });\n }\n\n if (partially === false) {\n return count > 0 && empty === 0;\n }\n\n return count > 0 && empty < count;\n },\n\n /**\n * Gets list of shared stimuli hrefs in the current item\n *\n * @param {Object} runner - testRunner instance\n * @returns {Array}\n */\n getStimuliHrefs: function getStimuliHrefs(runner) {\n var itemRunner = runner.itemRunner;\n var itemBody = itemRunner._item && itemRunner._item.bdy || {};\n var interactions = itemBody.elements || {};\n return _(interactions).values().filter(function (element) {\n return element.qtiClass === 'include';\n }).pluck('attributes').pluck('href').value();\n },\n\n /**\n * Find the list of text stimulus ids in the current item\n * Depends on the DOM already being loaded\n * @param {Object} runner - testRunner instance\n * @returns {Array}\n */\n getTextStimuliHrefs: function getTextStimuliHrefs(runner) {\n var stimuli = this.getStimuliHrefs(runner);\n var textStimuli;\n\n if (stimuli.length > 0) {\n // Filter the ones containing text:\n textStimuli = stimuli.filter(function (stimulusHref) {\n var domNode = document.querySelector(\".qti-include[data-href=\\\"\".concat(stimulusHref, \"\\\"]\"));\n return _(domNode.childNodes).some(function (child) {\n return child.nodeType === child.TEXT_NODE;\n });\n });\n return textStimuli;\n }\n\n return [];\n }\n };\n\n return currentItemHelper;\n\n});\n\n","define('taoQtiTest/runner/helpers/stats',['lodash', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/currentItem'], function (_, mapHelper, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n var stats = {\n /**\n * Return scope stats that takes into account any test taker interaction made since the item has been loaded\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox. Default false\n * @returns {Object} the stats\n */\n getInstantStats: function getInstantStats(scope, runner, sync) {\n var map = runner.getTestMap();\n var context = runner.getTestContext();\n var item = runner.getCurrentItem();\n var testPart = runner.getCurrentPart();\n\n var stats = _.clone(mapHelper.getScopeStats(map, context.itemPosition, scope));\n\n if (!item.informational) {\n var isItemCurrentlyAnswered = currentItemHelper.isAnswered(runner);\n\n if (!isItemCurrentlyAnswered && item.answered) {\n stats.answered--;\n } else if ((isItemCurrentlyAnswered || sync) && !item.answered) {\n stats.answered++;\n } else if (sync && !isItemCurrentlyAnswered && item.answered && testPart.isLinear) {\n stats.answered++;\n }\n }\n\n return stats;\n }\n };\n\n return stats;\n\n});\n\n","define('taoQtiTest/runner/helpers/messages',['i18n', 'taoQtiTest/runner/helpers/stats', 'handlebars'], function (__, statsHelper, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<b>\";\n if (helper = helpers.header) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.header); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b><br><br>\";\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.header), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function messageHeaderTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2021 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Completes an exit message\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {String} message - custom message that will be appended to the unanswered stats count\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox\n * @param {String|undefined} submitButtonLabel - point the user to the submit button\n * @returns {String} Returns the message text\n */\n\n function getExitMessage(scope, runner) {\n var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var sync = arguments.length > 3 ? arguments[3] : undefined;\n var submitButtonLabel = arguments.length > 4 ? arguments[4] : undefined;\n var itemsCountMessage = '';\n var testRunnerOptions = runner.getOptions();\n var messageEnabled = testRunnerOptions.enableUnansweredItemsWarning;\n\n if (messageEnabled) {\n itemsCountMessage = getUnansweredItemsWarning(scope, runner, sync).trim();\n\n if (itemsCountMessage) {\n itemsCountMessage += '.';\n }\n }\n\n return \"\".concat(getHeader(scope)).concat(itemsCountMessage, \" \").concat(getActionMessage(scope, submitButtonLabel)).concat(message).trim();\n }\n /**\n * Build message if not all items have answers\n * @param {String} scope - scope to consider for calculating the stats\n * @returns {String} Returns the message text\n */\n\n\n function getHeader(scope) {\n var header = '';\n\n if (scope === 'section' || scope === 'testSection') {\n header = __('You are about to leave this section.');\n } else if (scope === 'test' || scope === 'testWithoutInaccessibleItems') {\n header = __('You are about to submit the test.');\n } else if (scope === 'part') {\n header = __('You are about to submit this test part.');\n }\n\n return messageHeaderTpl({\n header: header.trim()\n });\n }\n /**\n * Generates the message to help users perform the action\n * @param {String} scope - scope to consider for calculating the stats\n * @param {String} [submitButtonLabel] - Pointed user perform click on given button\n * @returns {String} Returns the message text\n */\n\n\n function getActionMessage(scope) {\n var submitButtonLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __('OK');\n var msg;\n\n switch (scope) {\n case 'section':\n case 'testSection':\n case 'part':\n msg = __('Click \"%s\" to continue', submitButtonLabel).trim();\n\n if (msg) {\n msg += '.';\n }\n\n return msg;\n\n case 'test':\n case 'testWithoutInaccessibleItems':\n return \"\".concat(__('You will not be able to access this test once submitted. Click \"%s\" to continue and submit the test.', submitButtonLabel));\n }\n\n return '';\n }\n /**\n * Build message for the flagged items if any.\n * @param {Object} stats - The stats for the current context\n * @param {String} [message] - The existing message to complete\n * @returns {string|*}\n */\n\n\n function getFlaggedItemsWarning(stats) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var flaggedCount = stats && stats.flagged;\n\n if (!flaggedCount) {\n return message;\n }\n\n if (message) {\n return \"\".concat(message, \" \").concat(__('and you flagged %s item(s) that you can review now', flaggedCount.toString()));\n }\n\n return __('You flagged %s item(s) that you can review now', flaggedCount.toString());\n }\n /**\n * Build message if not all items have answers\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox. Default false\n * @returns {String} Returns the message text\n */\n\n\n function getUnansweredItemsWarning(scope, runner, sync) {\n var stats = statsHelper.getInstantStats(scope, runner, sync);\n var unansweredCount = stats && stats.questions - stats.answered;\n var flaggedCount = stats && stats.flagged;\n var itemsCountMessage = '';\n\n if (scope === 'section' || scope === 'testSection') {\n itemsCountMessage = __('You answered %s of %s question(s) for this section of the test', stats.answered.toString(), stats.questions.toString());\n\n if (flaggedCount) {\n itemsCountMessage += \", \".concat(__('and flagged %s of them', flaggedCount.toString()));\n }\n } else if (scope === 'test' || scope === 'testWithoutInaccessibleItems') {\n if (unansweredCount > 1) {\n itemsCountMessage = __('There are %s unanswered questions', unansweredCount.toString());\n } else if (unansweredCount === 1) {\n itemsCountMessage = __('There is %s unanswered question', unansweredCount.toString());\n }\n\n if (flaggedCount) {\n itemsCountMessage = getFlaggedItemsWarning(stats, itemsCountMessage);\n }\n } else if (scope === 'part') {\n if (unansweredCount > 1) {\n itemsCountMessage = __('There are %s unanswered questions in this part of the test', unansweredCount.toString());\n } else if (unansweredCount === 1) {\n itemsCountMessage = __('There is %s unanswered question in this part of the test', unansweredCount.toString());\n }\n\n if (flaggedCount) {\n itemsCountMessage = getFlaggedItemsWarning(stats, itemsCountMessage);\n }\n }\n\n itemsCountMessage = itemsCountMessage.trim();\n return itemsCountMessage;\n }\n\n var messages = {\n getExitMessage: getExitMessage\n };\n\n return messages;\n\n});\n\n","define('taoQtiTest/runner/config/states',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * The possible states\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n var states = {\n //the test session states\n testSession: Object.freeze({\n initial: 0,\n interacting: 1,\n modalFeedback: 2,\n suspended: 3,\n closed: 4\n }),\n //the item session states\n itemSession: Object.freeze({\n initial: 0,\n interacting: 1,\n modalFeedback: 2,\n suspended: 3,\n closed: 4,\n solution: 5,\n notSelected: 255\n })\n };\n\n return states;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/warnSectionLeaving',['lodash', 'i18n', 'taoQtiTest/runner/helpers/messages', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/config/states', 'taoQtiTest/runner/helpers/map'], function (_, __, messages, navigationHelper, states, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n states = states && Object.prototype.hasOwnProperty.call(states, 'default') ? states['default'] : states;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The message to display when exiting\n */\n\n var exitMessage = __('Once you close this section, you cannot return to it or change your answers.');\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n\n\n function warnSectionLeavingStrategy(testRunner, timer) {\n /**\n * Check if the movment leads to leaving an active timed section\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean}\n */\n var leaveTimedSection = function leaveTimedSection(direction, scope, position) {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n\n if (!context.isTimeout && context.itemSessionState !== states.itemSession.closed && context.sectionId === timer.source) {\n return navigationHelper.isLeavingSection(context, map, direction, scope, position);\n }\n\n return false;\n };\n\n if (timer && timer.scope === 'section' && timer.type === 'max') {\n return {\n name: 'warnSectionLeaving',\n\n /**\n * setUp entry point : blocks the move to display a message if needed\n */\n setUp: function setUp() {\n testRunner.off('move.warntimedsection skip.warntimedsection').before('move.warntimedsection skip.warntimedsection', function (e, type, scope, position) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testRunnerOptions = testRunner.getOptions();\n var timerConfig = testRunnerOptions.timer || {};\n var itemIdentifier = testContext.itemIdentifier;\n var isLast = navigationHelper.isLast(testMap, itemIdentifier);\n var endTestWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'endTestWarning', true);\n var noExitTimedSectionWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'noExitTimedSectionWarning', true);\n var movePromise = new Promise(function (resolve, reject) {\n // endTestWarning has already been displayed, so we don't repeat the warning\n if (isLast && endTestWarning) {\n resolve(); // display a message if we exit a timed section\n } else if (leaveTimedSection(type || 'next', scope, position) && !noExitTimedSectionWarning && !timerConfig.keepUpToTimeout) {\n var submitButtonLabel = __('Close this Section');\n\n testRunner.trigger('confirm.exittimed', messages.getExitMessage('section', testRunner, exitMessage, false, submitButtonLabel), resolve, reject, {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('Review my Answers')\n }\n }\n });\n } else {\n resolve();\n }\n });\n movePromise.catch(function cancelMove() {\n // Use `defer` to be sure the timer resume will occur after the move event is\n // finished to be handled. Otherwise, the duration plugin will be frozen and\n // the additional time will not be taken into account!\n _.defer(function () {\n testRunner.trigger('enableitem enablenav');\n });\n });\n return movePromise;\n });\n },\n\n /**\n * complete entry point : removes the listeners\n */\n complete: function complete() {\n return this.tearDown();\n },\n\n /**\n * tearDown entry point : removes the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('move.warntimedsection skip.warntimedsection');\n }\n };\n }\n\n return false;\n }\n\n return warnSectionLeavingStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/strategyHandler',['lodash', 'taoQtiTest/runner/plugins/controls/timer/strategy/enforcedStay', 'taoQtiTest/runner/plugins/controls/timer/strategy/extraTime', 'taoQtiTest/runner/plugins/controls/timer/strategy/guidedNavigation', 'taoQtiTest/runner/plugins/controls/timer/strategy/timeout', 'taoQtiTest/runner/plugins/controls/timer/strategy/warnSectionLeaving'], function (_, extraTimeStrategy, enforcedStayStrategy, guidedNavigationStrategy, timeoutStrategy, warnSectionLeavingStrategy) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n extraTimeStrategy = extraTimeStrategy && Object.prototype.hasOwnProperty.call(extraTimeStrategy, 'default') ? extraTimeStrategy['default'] : extraTimeStrategy;\n enforcedStayStrategy = enforcedStayStrategy && Object.prototype.hasOwnProperty.call(enforcedStayStrategy, 'default') ? enforcedStayStrategy['default'] : enforcedStayStrategy;\n guidedNavigationStrategy = guidedNavigationStrategy && Object.prototype.hasOwnProperty.call(guidedNavigationStrategy, 'default') ? guidedNavigationStrategy['default'] : guidedNavigationStrategy;\n timeoutStrategy = timeoutStrategy && Object.prototype.hasOwnProperty.call(timeoutStrategy, 'default') ? timeoutStrategy['default'] : timeoutStrategy;\n warnSectionLeavingStrategy = warnSectionLeavingStrategy && Object.prototype.hasOwnProperty.call(warnSectionLeavingStrategy, 'default') ? warnSectionLeavingStrategy['default'] : warnSectionLeavingStrategy;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The list of available strategies\n * TODO this list could come from the configuration\n */\n\n var defaultAvailableStrategies = [extraTimeStrategy, enforcedStayStrategy, guidedNavigationStrategy, timeoutStrategy, warnSectionLeavingStrategy];\n /**\n * Get a strategyHandler object for a testRunner instance\n * @param {runner} testRunner - the test runner instance\n * @param {strategy[]} strategies - the list of available strategies, to override the defaults\n * @returns {strategyHandler} the handler\n */\n\n function getStrategyHandler(testRunner, strategies) {\n var strategyHandler;\n /**\n * To keep track of the active strategies, per timer\n */\n\n var actives = {};\n /**\n * Artifact function to apply an action to a list of strategy\n * @param {String} timerId - the id of the timer to run the actions against\n * @param {String} action -\n */\n\n var applyToStrategies = function applyToStrategies(timerId, action) {\n var api = _.keys(strategyHandler);\n\n if (_.isEmpty(timerId) || _.isEmpty(action) || !_.contains(api, action)) {\n throw new TypeError('Invalid timer id or unauthorized action');\n }\n\n if (!_.isArray(actives[timerId])) {\n return Promise.resolve();\n }\n\n return Promise.all(_.map(actives[timerId], function (strategy) {\n if (_.isFunction(strategy[action])) {\n return strategy[action]();\n }\n }));\n };\n\n var availableStrategies = strategies || defaultAvailableStrategies; //quick validation of the test runner\n\n if (!testRunner || !_.isFunction(testRunner.on) || !_.isFunction(testRunner.getTestContext)) {\n throw new TypeError('The strategy handler needs a valid test runner.');\n }\n /**\n * @typedef {Object} strategyHandler\n */\n\n\n strategyHandler = {\n /**\n * Try to set up strategies for the given timer\n * @param {Object} timer\n * @returns {Promise} resolves once the set up is done\n */\n setUp: function setUp(timer) {\n _.forEach(availableStrategies, function (availableStrategy) {\n var strategy = availableStrategy(testRunner, timer);\n\n if (strategy !== false) {\n actives[timer.id] = actives[timer.id] || [];\n actives[timer.id].push(strategy);\n }\n });\n\n return applyToStrategies(timer.id, 'setUp');\n },\n\n /**\n * Get the actives strategies for the given timer\n * @returns {strategy[]} the actives strategies\n */\n getActives: function getActives(timer) {\n if (timer && timer.id && _.isArray(actives[timer.id])) {\n return actives[timer.id];\n }\n\n return [];\n },\n\n /**\n * Call the timer's strategies \"start\"\n * @param {Object} timer\n * @returns {Promise}\n */\n start: function start(timer) {\n return applyToStrategies(timer.id, 'start');\n },\n\n /**\n * Call the timer's strategies \"stop\"\n * @param {Object} timer\n * @returns {Promise}\n */\n stop: function stop(timer) {\n return applyToStrategies(timer.id, 'stop');\n },\n\n /**\n * Call the timer's strategies \"complete\"\n * @param {Object} timer\n * @returns {Promise}\n */\n complete: function complete(timer) {\n return applyToStrategies(timer.id, 'complete');\n },\n\n /**\n * Call the timer's strategies \"tearDown\"\n * will also un-reference the strategies\n * @param {Object} timer\n * @returns {Promise}\n */\n tearDown: function tearDown(timer) {\n return applyToStrategies(timer.id, 'tearDown').then(function () {\n actives = _.omit(actives, timer.id);\n });\n }\n };\n return strategyHandler;\n }\n\n return getStrategyHandler;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/timers',['lodash', 'i18n', 'moment', 'core/format', 'core/logger'], function (_, __, moment, format, loggerFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n var logger = loggerFactory('taoQtiTest/runner/plugins/controls/timer/timers');\n /**\n * We receive values in seconds, so we convert them to milliseconds\n */\n\n var precision = 1000;\n /**\n * The timer's scope\n */\n\n var scopes = ['item', 'section', 'testPart', 'test'];\n /**\n * Map qti class names to scopes\n */\n\n var scopeMapping = {\n assessmentTest: 'test',\n assessmentSection: 'section',\n assessmentItemRef: 'item'\n };\n /**\n * helps you get the scope from a scope or qti class name\n * @param {String} value - scope or qti class name\n * @returns {String?} the scope\n */\n\n var getScope = function getScope(value) {\n if (scopeMapping[value]) {\n return scopeMapping[value];\n }\n\n if (_.contains(scopes, value)) {\n return value;\n }\n\n return null;\n };\n /**\n * The text of warning messages\n * TODO add warning messages for other timers types\n */\n\n\n var warningMessages = {\n item: __('Warning You have %s remaining to complete this item.'),\n section: __('Warning You have %s remaining to complete this section.'),\n testPart: __('Warning You have %s remaining to complete this test part.'),\n test: __('Warning You have %s remaining to complete this test.')\n };\n /**\n * The text of warning messages for screenreader\n */\n\n var warningMessagesForScreenraeder = {\n item: __('You have %s remaining to complete the current item.'),\n section: __('You have %s left to answer remaining %s questions.'),\n testPart: __('You have %s left to answer remaining %s questions.'),\n test: __('You have %s left to answer remaining %s questions.')\n };\n /**\n * Get the timers objects from the time constraints andt the given config\n * @param {Object[]} timeConstraints - as defined in the testContext\n * @param {Boolean} isLinear - is the current navigation mode linear\n * @param {Object} [config] - timers config\n * @param {Object[]} [config.warnings] - the warnings to apply to the timers (max only for now)\n * @param {Object[]} [config.warnings] - the warnings to apply to the timers (max only for now)\n * @returns {timer[]} the timers\n */\n\n function getTimers(timeConstraints, isLinear, config) {\n var timers = {};\n /**\n * The warnings comes in a weird format (ie. {scope:{threshold:level}}) , so we reformat them\n */\n\n var constraintsWarnings = _.reduce(config.warnings, function (acc, warnings, qtiScope) {\n var scope = getScope(qtiScope);\n acc[scope] = _.map(warnings, function (value, key) {\n return {\n threshold: parseInt(key, 10) * precision,\n message: function applyMessage(remainingTime) {\n var displayRemaining = moment.duration(remainingTime / precision, 'seconds').humanize();\n return format(warningMessages[scope], displayRemaining);\n },\n level: value,\n shown: false\n };\n });\n return acc;\n }, {});\n /**\n * The warnings comes in a weird format (ie. {scope:[threshold, ...]}) , so we reformat them\n */\n\n\n var constraintsWarningsForScreenreader = _.reduce(config.warningsForScreenreader, function (acc, warnings, qtiScope) {\n var scope = getScope(qtiScope);\n acc[scope] = _.map(warnings, function (value) {\n return {\n threshold: parseInt(value, 10) * precision,\n message: function applyMessage(remainingTime, unansweredQuestions) {\n var displayRemaining = moment.duration(remainingTime / precision, 'seconds').humanize();\n return format(warningMessagesForScreenraeder[scope], displayRemaining, unansweredQuestions);\n },\n scope: scope,\n shown: false\n };\n });\n return acc;\n }, {});\n /**\n * Build a timer of a given type from a time constraints\n * @param {String} type - min, max, locked\n * @param {Object} constraintData\n * @returns {timer} timer\n */\n\n\n var buildTimer = function buildTimer(type, constraintData) {\n /**\n * @typedef {Object} timer\n * @property {String} id - identify the timer (for max, it's the source for backward compat)\n * @property {String} type - min, max or locked\n * @property {String} label - the title to display\n * @property {String} scope - the timer's scope (item, section, etc.)\n * @property {String} qtiClassName - the QTI class of the timers applies to\n * @property {String} source - the ID of the element the timers belongs to\n * @property {Number} extraTime - additional time data, object\n * @property {Number} originalTime - the starting value of the timer, never changes, in ms.\n * @property {Number} remainingTime - current value, in ms.\n * @property {Number} remainingWithoutExtraTime - remaining time without extra time, in ms.\n * @property {Number} total - total time (original time + extra time), in ms.\n */\n var timer = _.pick(constraintData, ['label', 'scope', 'source', 'extraTime', 'qtiClassName']);\n\n timer.type = type;\n timer.allowLateSubmission = constraintData.allowLateSubmission;\n\n if (type === 'min') {\n timer.id = \"\".concat(type, \"-\").concat(constraintData.scope, \"-\").concat(constraintData.source);\n timer.originalTime = constraintData.minTime * precision;\n timer.remainingTime = constraintData.minTimeRemaining * precision;\n } else {\n timer.id = constraintData.source;\n timer.originalTime = constraintData.maxTime * precision;\n timer.remainingTime = constraintData.maxTimeRemaining * precision;\n }\n\n timer.remainingWithoutExtraTime = timer.remainingTime;\n\n if (timer.extraTime) {\n timer.extraTime.consumed = timer.extraTime.consumed * precision;\n timer.extraTime.remaining = timer.extraTime.remaining * precision;\n timer.extraTime.total = timer.extraTime.total * precision;\n timer.total = timer.originalTime + timer.extraTime.total;\n timer.remainingTime += timer.extraTime.remaining;\n } //TODO supports warnings for other types\n\n\n if (type === 'max' && _.isArray(constraintsWarnings[timer.scope])) {\n timer.warnings = constraintsWarnings[timer.scope];\n }\n\n if (_.isArray(constraintsWarningsForScreenreader[timer.scope])) {\n timer.warningsForScreenreader = constraintsWarningsForScreenreader[timer.scope];\n }\n\n var stats = config.questionsStats[timer.scope];\n timer.unansweredQuestions = stats && stats.questions - stats.answered;\n return timer;\n };\n\n _.forEach(timeConstraints, function (timeConstraint) {\n var constraintData = _.clone(timeConstraint);\n\n var newTimer;\n constraintData.scope = getScope(timeConstraint.scope || timeConstraint.qtiClassName);\n\n if (!constraintData.scope) {\n logger.warn('Wrong data, a time constraint should apply to a valid scope, skipping');\n } else if (constraintData.minTime === false && constraintData.maxTime === false) {\n logger.warn('Time constraint defined with no time, skipping'); // minTime = maxTime -> one locked timer\n } else if (config.guidedNavigation && isLinear && constraintData.maxTime && constraintData.minTime && constraintData.minTime === constraintData.maxTime && constraintData.maxTime > 0) {\n newTimer = buildTimer('locked', constraintData);\n timers[newTimer.id] = newTimer;\n } else {\n //minTime -> min timer\n if (isLinear && constraintData.minTime && constraintData.minTime > 0) {\n newTimer = buildTimer('min', constraintData);\n timers[newTimer.id] = newTimer;\n } //maxTime -> max timer\n\n\n if (constraintData.maxTime && constraintData.maxTime > 0) {\n newTimer = buildTimer('max', constraintData);\n timers[newTimer.id] = newTimer;\n }\n }\n });\n\n logger.debug('Timers built from timeConstraints', timers);\n return timers;\n }\n\n return getTimers;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/plugin',['jquery', 'lodash', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/controls/timer/strategy/strategyHandler', 'taoQtiTest/runner/plugins/controls/timer/component/timerbox', 'taoQtiTest/runner/plugins/controls/timer/timers', 'taoQtiTest/runner/helpers/isReviewPanelEnabled', 'taoQtiTest/runner/helpers/stats', 'handlebars'], function ($$1, _, pluginFactory, getStrategyHandler, timerboxFactory, timersFactory, isReviewPanelEnabled, statsHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n getStrategyHandler = getStrategyHandler && Object.prototype.hasOwnProperty.call(getStrategyHandler, 'default') ? getStrategyHandler['default'] : getStrategyHandler;\n timerboxFactory = timerboxFactory && Object.prototype.hasOwnProperty.call(timerboxFactory, 'default') ? timerboxFactory['default'] : timerboxFactory;\n timersFactory = timersFactory && Object.prototype.hasOwnProperty.call(timersFactory, 'default') ? timersFactory['default'] : timersFactory;\n isReviewPanelEnabled = isReviewPanelEnabled && Object.prototype.hasOwnProperty.call(isReviewPanelEnabled, 'default') ? isReviewPanelEnabled['default'] : isReviewPanelEnabled;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div aria-live=\\\"polite\\\" class=\\\"visible-hidden\\\"></div>\\n\";\n });\n function screenreaderNotificationTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var screenreaderNotificationTimeout = 20000;\n /**\n * Creates the plugin\n */\n\n var plugin = pluginFactory({\n name: 'timer',\n\n /**\n * Install step, add behavior before the lifecycle\n */\n install: function install() {\n var testRunner = this.getTestRunner();\n /**\n * Load the timers, from the given timeConstraints and reading the current value in the store\n * @param {store} timeStore - where the values are read\n * @param {Object} config - the current config, especially for the warnings\n * @returns {Promise<Object[]>} the list of timers for the current context\n */\n\n this.loadTimers = function loadTimers(timeStore, config) {\n var testContext = testRunner.getTestContext();\n var testPart = testRunner.getCurrentPart();\n var isLinear = testPart && testPart.isLinear;\n var timeConstraints = testContext.timeConstraints;\n var timers = timersFactory(timeConstraints, isLinear, config);\n return Promise.all(_.map(timers, function (timer) {\n return timeStore.getItem(\"consumed_\".concat(timer.id)).then(function (savedConsumedTime) {\n if (_.isNumber(savedConsumedTime) && savedConsumedTime >= 0 && config.restoreTimerFromClient) {\n timer.remainingTime = timer.originalTime + timer.extraTime.total - savedConsumedTime;\n }\n });\n })).then(function () {\n return timers;\n });\n };\n /**\n * Save consumed time values into the store\n * @param {store} timeStore - where the values are saved\n * @param {Object[]} timers - the timers to save\n * @returns {Promise} resolves once saved\n */\n\n\n this.saveTimers = function saveTimers(timeStore, timers) {\n return Promise.all(_.map(timers, function (timer) {\n return timeStore.setItem(\"consumed_\".concat(timer.id), timer.originalTime + timer.extraTime.total - timer.remainingTime);\n }));\n }; //define the \"timer\" store as \"volatile\" (removed on browser change).\n\n\n testRunner.getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n *\n * @returns {Promise}\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var screenreaderNotifcationTimeoutId;\n var stats = {};\n ['test', 'testPart', 'section', 'item'].forEach(function (scope) {\n return Object.assign(stats, _defineProperty({}, scope, statsHelper.getInstantStats(scope, testRunner)));\n });\n /**\n * Plugin config,\n */\n\n var config = Object.assign({\n /**\n * An option to control is the warnings are contextual or global\n */\n contextualWarnings: false,\n\n /**\n * The list of configured warnings\n */\n warnings: testRunnerOptions.timerWarning || {},\n\n /**\n * The list of configured warnings for screenreaders\n */\n warningsForScreenreader: testRunnerOptions.timerWarningForScreenreader || {},\n\n /**\n * The guided navigation option\n */\n guidedNavigation: testRunnerOptions.guidedNavigation,\n\n /**\n * Restore timer from client.\n */\n restoreTimerFromClient: testRunnerOptions.timer && testRunnerOptions.timer.restoreTimerFromClient,\n\n /**\n * Questions stats\n */\n questionsStats: stats\n }, this.getConfig());\n /**\n * Set up the strategy handler\n */\n\n var strategyHandler = getStrategyHandler(testRunner);\n /**\n * dispatch errors to the test runner\n * @param {Error} err - to dispatch\n */\n\n var handleError = function handleError(err) {\n testRunner.trigger('error', err);\n };\n\n function loadSavedTimers(timeStore) {\n var testContext = testRunner.getTestContext(); //update the timers before each item\n\n if (self.timerbox && testContext.timeConstraints) {\n return self.loadTimers(timeStore, config).then(function (timers) {\n return self.timerbox.update(timers);\n }).catch(handleError);\n }\n }\n\n return new Promise(function (resolve) {\n //load the plugin store\n return testRunner.getPluginStore(self.getName()).then(function (timeStore) {\n testRunner.before('renderitem', function () {\n return loadSavedTimers(timeStore);\n }).before('enableitem', function () {\n if (config.restoreTimerFromClient) {\n return loadSavedTimers(timeStore);\n }\n }).on('tick', function (elapsed) {\n if (self.timerbox) {\n var timers = self.timerbox.getTimers();\n var updatedTimers = Object.keys(timers).reduce(function (acc, timerName) {\n var statsScope = statsHelper.getInstantStats(timers[timerName].scope, testRunner);\n var unansweredQuestions = statsScope && statsScope.questions - statsScope.answered;\n acc[timerName] = Object.assign({}, timers[timerName], {\n remainingTime: timers[timerName].remainingTime - elapsed,\n unansweredQuestions: unansweredQuestions\n });\n return acc;\n }, {});\n self.timerbox.update(updatedTimers).catch(handleError);\n }\n }).after('renderitem', function () {\n if (self.timerbox) {\n $$1(self.timerbox.getElement()).find('.timer-wrapper').attr('aria-hidden', isReviewPanelEnabled(testRunner));\n self.timerbox.start();\n }\n\n self.$screenreaderWarningContainer.text('');\n }).after('enableitem', function () {\n if (self.timerbox && config.restoreTimerFromClient) {\n //this will \"resume\" the countdowns if timers have client mode\n self.timerbox.start();\n }\n }).on('move skip', function () {\n if (self.timerbox) {\n //this will \"pause\" the countdowns\n self.timerbox.stop();\n }\n }).on('disableitem', function () {\n if (self.timerbox && config.restoreTimerFromClient) {\n //this will \"pause\" the countdowns if timers have client mode\n self.timerbox.stop();\n }\n });\n timeStore.getItem('zen-mode').then(function (startZen) {\n //set up the timerbox\n self.timerbox = timerboxFactory({\n ariaHidden: isReviewPanelEnabled(testRunner),\n zenMode: {\n enabled: true,\n startHidden: !!startZen\n },\n displayWarning: config.contextualWarnings\n }).on('change', _.throttle(function () {\n //update the store with the current timer values\n self.saveTimers(timeStore, this.getTimers());\n }, 1000)).on('timeradd', function (timer) {\n strategyHandler.setUp(timer).catch(handleError);\n }).on('timerremove', function (timer) {\n strategyHandler.tearDown(timer).catch(handleError);\n }).on('timerstart', function (timer) {\n strategyHandler.start(timer).catch(handleError);\n }).on('timerstop', function (timer) {\n strategyHandler.stop(timer).catch(handleError);\n }).on('timerend', function (timer) {\n strategyHandler.complete(timer).catch(handleError);\n }).on('timerchange', function (action, timer) {\n //backward compatible events\n self.trigger(\"\".concat(action, \"timer\"), timer.qtiClassName, timer);\n }).on('zenchange', function (isZen) {\n timeStore.setItem('zen-mode', !!isZen);\n }).on('init', resolve).on('error', handleError); // share this timer values to use in other components\n\n self.timerbox.spread(testRunner, 'timertick');\n\n if (!config.contextualWarnings) {\n self.timerbox.on('warn', function (message, level) {\n if (level && message) {\n testRunner.trigger(level, message);\n }\n }); // debounce used to prevent multiple invoking at the same time\n\n self.timerbox.on('warnscreenreader', _.debounce(function (message, remainingTime, scope) {\n var statsScope = statsHelper.getInstantStats(scope, testRunner);\n var unansweredQuestions = statsScope && statsScope.questions - statsScope.answered;\n\n if (screenreaderNotifcationTimeoutId) {\n clearTimeout(screenreaderNotifcationTimeoutId);\n }\n\n self.$screenreaderWarningContainer.text(message(remainingTime, unansweredQuestions));\n screenreaderNotifcationTimeoutId = setTimeout(function () {\n return self.$screenreaderWarningContainer.text('');\n }, screenreaderNotificationTimeout);\n }, 1000, {\n 'leading': true,\n 'trailing': false\n }));\n }\n }).catch(handleError);\n });\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n this.$screenreaderWarningContainer = $$1(screenreaderNotificationTpl());\n this.timerbox.render($container);\n $container.append(this.$screenreaderWarningContainer);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n if (this.timerbox) {\n this.timerbox.stop().destroy();\n }\n },\n\n /**\n * Shows the timers\n */\n show: function show() {\n if (this.timerbox) {\n this.timerbox.show();\n }\n },\n\n /**\n * Hides the timers\n */\n hide: function hide() {\n if (this.timerbox) {\n this.timerbox.hide();\n }\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/title/title',['jquery', 'lodash', 'taoTests/runner/plugin', 'handlebars', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/getTimerMessage', 'moment', 'taoQtiTest/runner/helpers/stats'], function ($$1, _, pluginFactory, Handlebars, mapHelper, getTimerMessage, moment, statsHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n getTimerMessage = getTimerMessage && Object.prototype.hasOwnProperty.call(getTimerMessage, 'default') ? getTimerMessage['default'] : getTimerMessage;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <span data-control=\\\"\";\n if (helper = helpers.attribute) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.attribute); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-controls \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"></span>\\n <div data-control=\\\"\";\n if (helper = helpers.attribute) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.attribute); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"-timer\\\" class=\\\"visible-hidden\\\"></div>\\n \";\n return buffer;\n }\n\n buffer += \"<div role=\\\"heading\\\" aria-level=\\\"1\\\" class=\\\"title-box truncate\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.titles), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\\n\";\n return buffer;\n });\n function titleTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n var precision = 1000;\n var title = pluginFactory({\n name: 'title',\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testMap = testRunner.getTestMap();\n\n var updateTitles = function updateTitles() {\n var testContext = testRunner.getTestContext();\n var currentPart = mapHelper.getItemPart(testMap, testContext.itemPosition);\n var currentItem = mapHelper.getItem(testMap, testContext.itemIdentifier); // update test title\n\n if (testMap.title) {\n _this.titles.test.$title.text(testMap.title).show();\n } // update part title\n\n\n if (currentPart && currentPart.label) {\n _this.titles.testPart.$title.text(\" - \".concat(currentPart.label)).show();\n } // update section title\n //@deprecated the following block seems to\n //be very specific and need to be reworked\n\n\n if (testContext.isDeepestSectionVisible) {\n var section = mapHelper.getItemSection(testMap, testContext.itemPosition); //testContext.sectionTitle is kept only for backward compat\n\n _this.titles.section.$title.text(\" - \".concat(section.label || testContext.sectionTitle)).show();\n } // update item title\n\n\n if (currentItem.label) {\n _this.titles.item.$title.text(\" - \".concat(currentItem.label)).show();\n }\n };\n\n testRunner.after('renderitem', function () {\n _.forOwn(_this.titles, function (options, scope) {\n _this.titles[scope].$title.text('');\n\n _this.titles[scope].$timer.text('');\n\n if (scope !== 'item') {\n _this.titles[scope].stats = statsHelper.getInstantStats(scope, testRunner);\n }\n });\n\n updateTitles();\n }).on('timertick', function (remainingTime, scope) {\n var title = _this.titles[scope];\n\n if (!title) {\n return;\n }\n\n var _this$titles$scope = _this.titles[scope],\n $timer = _this$titles$scope.$timer,\n stats = _this$titles$scope.stats;\n var time = moment.duration(remainingTime / precision, 'seconds');\n var hours = time.get('hours');\n var minutes = time.get('minutes');\n var seconds = time.get('seconds');\n var unansweredQuestions = stats && stats.questions - stats.answered; // check if notification should be updated\n\n if ($timer) {\n $timer.text(getTimerMessage(hours, minutes, seconds, unansweredQuestions));\n }\n }).on('unloaditem', function () {\n $$1('.qti-controls', _this.$element).hide();\n });\n },\n render: function render() {\n var _this2 = this;\n\n var $container = this.getAreaBroker().getControlArea();\n this.titles = {\n test: {\n attribute: 'qti-test-title',\n className: ''\n },\n testPart: {\n attribute: 'qti-test-part-title',\n className: 'visible-hidden'\n },\n section: {\n attribute: 'qti-test-position',\n className: ''\n },\n item: {\n attribute: 'qti-test-item-title',\n className: 'visible-hidden'\n }\n };\n this.$element = $$1(titleTpl({\n titles: _.values(this.titles)\n })); // hide titles by default\n\n $$1('.qti-controls', this.$element).hide();\n $container.append(this.$element);\n\n _.forOwn(this.titles, function (_ref, scope) {\n var attribute = _ref.attribute;\n _this2.titles[scope].$title = $container.find(\"[data-control=\\\"\".concat(attribute, \"\\\"]\"));\n _this2.titles[scope].$timer = $container.find(\"[data-control=\\\"\".concat(attribute, \"-timer\\\"]\"));\n });\n }\n });\n\n return title;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/trace/itemTraceVariables',['lodash', 'moment', 'taoTests/runner/plugin'], function (_, moment, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Duration of a second in the timer's base unit\n * @type {Number}\n */\n\n var precision = 1000;\n /**\n * Gets the current timestamp\n * @returns {Number}\n */\n\n function timestamp() {\n return Date.now() / precision;\n }\n /**\n * Creates the timer plugin\n */\n\n\n var itemTraceVariables = pluginFactory({\n name: 'itemTraceVariables',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n //define the \"trace\" store as \"volatile\" (removed on browser change).\n // the store name is \"trace\" for backward compatibility,\n // best practice is to use the plugin name\n this.getTestRunner().getTestStore().setVolatile('trace');\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var variables = {};\n\n function onError(err) {\n testRunner.trigger('error', err);\n }\n\n return testRunner.getPluginStore('trace').then(function (tracesStore) {\n testRunner.after('renderitem enableitem', function () {\n var context = testRunner.getTestContext();\n variables = {\n ITEM_START_TIME_CLIENT: timestamp()\n };\n tracesStore.getItem(context.itemIdentifier).then(function (data) {\n if (data) {\n _.merge(variables, data);\n }\n\n return tracesStore.setItem(context.itemIdentifier, variables);\n }).catch(onError);\n }).before('move skip exit timeout', function () {\n var context = testRunner.getTestContext();\n variables.ITEM_END_TIME_CLIENT = timestamp();\n variables.ITEM_TIMEZONE = moment().utcOffset(moment().utcOffset()).format('Z');\n return tracesStore.setItem(context.itemIdentifier, variables).catch(onError);\n }).before('unloaditem', function () {\n var context = testRunner.getTestContext();\n return testRunner.getProxy().callItemAction(context.itemIdentifier, 'storeTraceData', {\n traceData: JSON.stringify(variables)\n }, true);\n });\n });\n }\n });\n\n return itemTraceVariables;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/allowSkipping',['lodash', 'i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/currentItem'], function (_, __, pluginFactory, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default plugin options\n * @type {Object}\n */\n\n var defaults = {\n allowPartial: true // whether all interactions must be answered to count an item as answered\n\n };\n /**\n * Plugin factory\n * @returns {Object}\n */\n\n var allowSkipping = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: 'allowSkipping',\n\n /**\n * Initialize plugin (called during runner's initialization)\n * @returns {this}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaults, this.getConfig());\n testRunner.before('nav-next move', function () {\n var testContext = testRunner.getTestContext();\n var isInteracting = !testRunner.getItemState(testContext.itemIdentifier, 'disabled');\n var warning = pluginConfig.allowPartial ? __('A response to this item is required.') : __('A response to every question in this item is required.');\n\n if (isInteracting && testRunnerOptions.enableAllowSkipping) {\n var currenItem = testRunner.getCurrentItem(); //@deprecated use allowSkipping from testMap instead of the testContext\n\n var allowSkipping = typeof currenItem.allowSkipping === 'boolean' ? currenItem.allowSkipping : testContext.allowSkipping;\n\n if (!allowSkipping) {\n return new Promise(function (resolve, reject) {\n if (_.size(currentItemHelper.getDeclarations(testRunner)) === 0) {\n return resolve();\n }\n\n if (currentItemHelper.isAnswered(testRunner, pluginConfig.allowPartial)) {\n return resolve();\n }\n\n if (!testRunner.getState('alerted.notallowed')) {\n // Only show one alert for itemSessionControl\n testRunner.setState('alerted.notallowed', true);\n testRunner.trigger('alert.notallowed', warning, function () {\n testRunner.trigger('resumeitem');\n reject();\n testRunner.setState('alerted.notallowed', false);\n });\n }\n });\n }\n }\n });\n }\n });\n\n return allowSkipping;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/nextWarningHelper',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * This is a helper for navigation plugins. It decides if a warning should be displayed\n * before actually moving to the next item\n *\n * @author Christophe Noël <christophe@taotesting.com>\n */\n\n /**\n * Convert a value to a boolean\n * @param {*} value\n * @param {Boolean} defaultValue\n * @returns {Boolean}\n */\n var toBoolean = function toBoolean(value, defaultValue) {\n if (typeof value === 'undefined') {\n return defaultValue;\n } else {\n return value === true || value === 'true';\n }\n };\n /**\n * @param {Object} options\n * @param {Boolean} options.endTestWarning - enables the end test warning, when applicable\n * @param {Boolean} options.isLast - if the item is the last of the test\n * @param {Boolean} options.isLinear - if the current part is linear\n * @param {Boolean} options.nextItemWarning - enables the next item warning, when applicable\n * @param {Boolean} options.nextPartWarning - enables the next item warning on part change\n * @param {Boolean} options.stats - current state of the test\n * @param {Object} options.nextPart - description of the next part of the test\n * @param {Number} options.remainingAttempts - remaining attempts for the current item\n * @param {String} options.testPartId - current test part identifier\n * @param {Boolean} options.unansweredOnly - warn only if there are unanswered/flagged items\n * @returns {Object}\n */\n\n\n var nextWarningHelper = function nextWarningHelper(options) {\n var endTestWarning = toBoolean(options.endTestWarning, false),\n isLast = toBoolean(options.isLast, false),\n isLinear = toBoolean(options.isLinear, false),\n nextItemWarning = toBoolean(options.nextItemWarning, false),\n nextPartWarning = toBoolean(options.nextPartWarning, false),\n stats = options.stats,\n nextPart = options.nextPart || {},\n remainingAttempts = typeof options.remainingAttempts === 'undefined' ? -1 : options.remainingAttempts,\n testPartId = options.testPartId || '',\n unansweredOnly = toBoolean(options.unansweredOnly, false),\n warnBeforeNext = shouldWarnBeforeNext(),\n warnBeforeEnd = shouldWarnBeforeEnd(),\n warnBeforeEndPart = shouldWarnBeforeEndPart();\n /**\n * Decide if we should display a warning before moving to the next item.\n * This is useful to prevent accidental navigation (for example by pressing a shortcut) that would occur\n * before the test taker actually gets a chance to answer an item\n */\n\n function shouldWarnBeforeNext() {\n return nextItemWarning && !itemCanBeTriedAtWill(); //&& !exitTimedSectionWarning(); //todo: this should be implemented to prevent a double warning!\n }\n /**\n * We try to decide if the test taker has the freedom to come back to this item as many times as he wants\n */\n\n\n function itemCanBeTriedAtWill() {\n return isLast === false && // the test is not over\n isLinear === false && // the context is not linear\n remainingAttempts === -1 && // the item doesn't have a configured max attempts number\n !isNextItemInLinearPart() // the next item is not in a linear part\n ;\n }\n /**\n * Check if the next item is in a linear part, as this would prevent the test taker to come back to the current item\n */\n\n\n function isNextItemInLinearPart() {\n return nextPart && typeof nextPart.isLinear !== 'undefined' && isLastOfPart() && nextPart.isLinear === true;\n }\n /**\n * Decide if we should display a warning before ending the test\n */\n\n\n function shouldWarnBeforeEnd() {\n return shouldWarnOnTestEnd();\n }\n /**\n * Decide if we should display a warning before ending the test part\n */\n\n\n function shouldWarnBeforeEndPart() {\n return shouldWarnOnPartChange();\n }\n /**\n * Are we on the last test item?\n * @returns {Boolean}\n */\n\n\n function shouldWarnOnTestEnd() {\n return isLast && (endTestWarning || // warning is explicitly required by endTestWarning category\n warnBeforeNext) && // warning is implicitly triggered by the next item warning being true (prevent double warning)\n shouldWarnForUnansweredItems();\n }\n /**\n * Provide the opportunity to cancel the display of the warning if there are no unanswered/flagged item\n * for this to work, the unansweredOnly option has to be set\n * @returns {Boolean}\n */\n\n\n function shouldWarnForUnansweredItems() {\n var hasUnanswered = stats && stats.questions - stats.answered !== 0,\n hasFlagged = stats && stats.flagged !== 0;\n\n if (unansweredOnly) {\n return hasUnanswered || hasFlagged;\n } else {\n return true;\n }\n }\n /**\n * Are we on the last part item?\n * @returns {Boolean}\n */\n\n\n function shouldWarnOnPartChange() {\n return nextPartWarning && isLastOfPart() && shouldWarnForUnansweredItems();\n }\n /**\n * Check if the next item belong to a different part\n * @returns {Boolean}\n */\n\n\n function isLastOfPart() {\n return nextPart && nextPart.id && testPartId !== nextPart.id;\n }\n /**\n * The helper object\n */\n\n\n return {\n shouldWarnBeforeEndPart: function shouldWarnBeforeEndPart() {\n return warnBeforeEndPart;\n },\n shouldWarnBeforeEnd: function shouldWarnBeforeEnd() {\n return warnBeforeEnd;\n },\n shouldWarnBeforeNext: function shouldWarnBeforeNext() {\n return warnBeforeNext;\n }\n };\n };\n\n return nextWarningHelper;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/navigation/next/nextWarningHelper', 'taoQtiTest/runner/helpers/messages', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/stats', 'util/shortcut', 'util/namespace', 'handlebars'], function ($$1, __, hider, pluginFactory, nextWarningHelper, messages, mapHelper, navigationHelper, statsHelper, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n nextWarningHelper = nextWarningHelper && Object.prototype.hasOwnProperty.call(nextWarningHelper, 'default') ? nextWarningHelper['default'] : nextWarningHelper;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display of the next button\n */\n\n var buttonData = {\n next: {\n control: 'move-forward',\n title: __('Submit and go to the next item'),\n specificTitle: __('Submit and go to the item %s'),\n icon: 'forward',\n text: __('Next')\n },\n end: {\n control: 'move-end',\n title: __('Submit and go to the end of the test'),\n icon: 'fast-forward',\n text: __('End test')\n }\n };\n /**\n * Create the button based on the current context\n * @param {Boolean} [isLast=false] - is the current item the last\n * @returns {jQueryElement} the button\n */\n\n var createElement = function createElement() {\n var isLast = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var dataType = isLast ? 'end' : 'next';\n return $$1(buttonTpl(buttonData[dataType]));\n };\n /**\n * Makes an element enabled\n * @param {jQuery} $element\n * @returns {jQuery}\n */\n\n\n var enableElement = function enableElement($element) {\n return $element.removeProp('disabled').removeClass('disabled');\n };\n /**\n * Makes an element disabled\n * @param {jQuery} $element\n * @returns {jQuery}\n */\n\n\n var disableElement = function disableElement($element) {\n return $element.prop('disabled', true).addClass('disabled');\n };\n /**\n * Update the button based on the context\n * @param {jQueryElement} $element - the element to update\n * @param {TestRunner} [testRunner] - the test runner instance\n * @param {Boolean} [isLast=false] - is the current item the last\n */\n\n\n var updateElement = function updateElement($element, testRunner) {\n var isLast = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var dataType = isLast ? 'end' : 'next';\n var testContext = testRunner.getTestContext();\n\n if (dataType === 'next' && !testContext.isAdaptive && !testContext.isCatAdaptive) {\n var testMap = testRunner.getTestMap();\n var nextItem = navigationHelper.getNextItem(testMap, testContext.itemPosition);\n $element.attr('title', __(buttonData.next.specificTitle, nextItem.label));\n } else {\n $element.attr('title', buttonData[dataType].title);\n }\n\n if ($element.attr('data-control') !== buttonData[dataType].control) {\n $element.attr('data-control', buttonData[dataType].control).find('.text').text(buttonData[dataType].text);\n\n if (dataType === 'next') {\n $element.find(\".icon-\".concat(buttonData.end.icon)).removeClass(\"icon-\".concat(buttonData.end.icon)).addClass(\"icon-\".concat(buttonData.next.icon));\n } else {\n $element.find(\".icon-\".concat(buttonData.next.icon)).removeClass(\"icon-\".concat(buttonData.next.icon)).addClass(\"icon-\".concat(buttonData.end.icon));\n }\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var next = pluginFactory({\n name: 'next',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Check if the current item is the last item\n * @returns {Boolean} true if the last\n */\n\n var isLastItem = function isLastItem() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var itemIdentifier = testContext.itemIdentifier;\n return navigationHelper.isLast(testMap, itemIdentifier);\n }; //plugin behavior\n\n /**\n * @param {Boolean} nextItemWarning - enable the display of a warning when going to the next item.\n * Note: the actual display of the warning depends on other conditions (see nextWarningHelper)\n */\n\n\n var doNext = function doNext(nextItemWarning) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testPart = testRunner.getCurrentPart();\n var nextItemPosition = testContext.itemPosition + 1;\n var itemIdentifier = testContext.itemIdentifier; // x-tao-option-unansweredWarning is a deprecated option whose behavior now matches the one of\n\n var unansweredWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'unansweredWarning', true); // x-tao-option-nextPartWarning with the unansweredOnly option\n\n var nextPartWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'nextPartWarning', true) || unansweredWarning;\n var endTestWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'endTestWarning', true); // this check to avoid an edge case where having both endTestWarning\n // and unansweredWarning options would prevent endTestWarning to behave normally\n\n var unansweredOnly = !endTestWarning && unansweredWarning;\n var warningScope = nextPartWarning ? 'part' : 'test';\n\n var enableNav = function enableNav() {\n return testRunner.trigger('enablenav');\n };\n\n var triggerNextAction = function triggerNextAction() {\n if (isLastItem()) {\n _this.trigger('end');\n }\n\n testRunner.next();\n };\n\n testRunner.trigger('disablenav');\n\n if (_this.getState('enabled') !== false) {\n var warningHelper = nextWarningHelper({\n endTestWarning: endTestWarning,\n isLast: isLastItem(),\n isLinear: testPart.isLinear,\n nextItemWarning: nextItemWarning,\n nextPartWarning: nextPartWarning,\n nextPart: mapHelper.getItemPart(testMap, nextItemPosition),\n remainingAttempts: testContext.remainingAttempts,\n testPartId: testContext.testPartId,\n unansweredWarning: unansweredWarning,\n stats: statsHelper.getInstantStats(warningScope, testRunner),\n unansweredOnly: unansweredOnly\n });\n\n if (warningHelper.shouldWarnBeforeEndPart()) {\n var submitButtonLabel = __('SUBMIT THIS PART');\n\n testRunner.trigger('confirm.endTestPart', messages.getExitMessage(warningScope, testRunner, '', false, submitButtonLabel), triggerNextAction, // if the test taker accept\n enableNav, // if he refuse\n {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else if (warningHelper.shouldWarnBeforeEnd()) {\n var _submitButtonLabel = __('SUBMIT THE TEST');\n\n testRunner.trigger('confirm.endTest', messages.getExitMessage(warningScope, testRunner, '', false, _submitButtonLabel), triggerNextAction, // if the test taker accept\n enableNav, // if he refuse\n {\n buttons: {\n labels: {\n ok: _submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else if (warningHelper.shouldWarnBeforeNext()) {\n testRunner.trigger('confirm.next', __('You are about to go to the next item. Click OK to continue and go to the next item.'), triggerNextAction, // if the test taker accept\n enableNav // if he refuse\n );\n } else {\n triggerNextAction();\n }\n }\n }; //create the button (detached)\n\n\n this.$element = createElement(isLastItem()); //attach behavior\n\n this.$element.on('click', function (e) {\n e.preventDefault();\n disableElement(_this.$element);\n testRunner.trigger('nav-next');\n });\n\n var registerShortcut = function registerShortcut(kbdShortcut) {\n if (testRunnerOptions.allowShortcuts && kbdShortcut) {\n shortcut.add(namespaceHelper.namespaceAll(kbdShortcut, _this.getName(), true), function () {\n if (_this.getState('enabled') === true) {\n testRunner.trigger('nav-next', true);\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n };\n\n registerShortcut(pluginShortcuts.trigger); //disabled by default\n\n this.disable(); //change plugin state\n\n testRunner.on('loaditem', function () {\n updateElement(_this.$element, testRunner, isLastItem());\n }).on('enablenav', function () {\n return _this.enable();\n }).on('disablenav', function () {\n return _this.disable();\n }).on('hidenav', function () {\n return _this.hide();\n }).on('shownav', function () {\n return _this.show();\n }).on('nav-next', function (nextItemWarning) {\n return doNext(nextItemWarning);\n }).on('enableaccessibilitymode', function () {\n var kbdShortcut = pluginShortcuts.triggerAccessibility;\n\n if (kbdShortcut && !_this.getState('eaccessibilitymode')) {\n shortcut.remove(\".\".concat(_this.getName()));\n registerShortcut(kbdShortcut);\n\n _this.setState('eaccessibilitymode');\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element to the navigation area\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n enableElement(this.$element);\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n disableElement(this.$element);\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return next;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/dialogConfirmNext',['jquery', 'lodash', 'i18n', 'ui/dialog', 'handlebars'], function ($$1, _, __, dialog, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n dialog = dialog && Object.prototype.hasOwnProperty.call(dialog, 'default') ? dialog['default'] : dialog;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n return \"checked\";\n }\n\n buffer += \"<label for=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <input type=\\\"checkbox\\\" id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" name=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.checked), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" />\\n <span class=\\\"icon-checkbox\\\"></span>\\n \";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</label>\";\n return buffer;\n });\n function checkboxTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Displays a confirmation dialog with a checkbox in it\n *\n * @param {String} heading - Above the main message\n * @param {String} message - The displayed message\n * @param {Function} accept - An action called when the dialog is accepted\n * @param {Function} refuse - An action called when the dialog is refused\n * @param {Object} checkboxParams - Checkbox options\n * @param {Boolean} [checkboxParams.checked] - True to render it checked\n * @param {Function} [checkboxParams.submitChecked] - Action called when dialog accepted with checkbox checked\n * @param {Function} [checkboxParams.submitUnchecked] - Action called when dialog accepted with checkbox unchecked\n * @returns {dialog} - Returns the dialog instance\n */\n\n function dialogConfirmNext(heading, message, accept, refuse, checkboxParams, dialogOptions) {\n var accepted = false;\n var dlg;\n var content = null;\n\n if (checkboxParams && checkboxParams.checked !== true) {\n content = checkboxTpl({\n checked: false,\n text: \"Don't show this again next time\",\n id: 'dont-show-again'\n });\n }\n\n dialogOptions = _.defaults({\n heading: heading,\n message: message,\n content: content,\n autoRender: true,\n autoDestroy: true,\n buttons: [{\n id: 'cancel',\n type: 'regular',\n label: __('Cancel'),\n close: true\n }, {\n id: 'ok',\n type: 'info',\n label: __('Go to next item'),\n close: true\n }],\n onOkBtn: function onOkBtn() {\n var $checkbox;\n accepted = true;\n\n if (_.isFunction(accept)) {\n accept.call(this);\n\n if (checkboxParams) {\n // handle checkbox callbacks:\n $checkbox = $$1('input[name=\"dont-show-again\"]', this);\n\n if ($checkbox.prop('checked') && _.isFunction(checkboxParams.submitChecked)) {\n checkboxParams.submitChecked();\n } else if (!$checkbox.prop('checked') && _.isFunction(checkboxParams.submitUnchecked)) {\n checkboxParams.submitUnchecked();\n }\n }\n }\n }\n }, dialogOptions);\n dlg = dialog(dialogOptions);\n\n if (_.isFunction(refuse)) {\n dlg.on('closed.modal', function () {\n if (!accepted) {\n refuse.call(this);\n }\n });\n }\n\n return dlg;\n }\n\n return dialogConfirmNext;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/linearNextItemWarning',['i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/currentItem', 'taoQtiTest/runner/plugins/navigation/next/dialogConfirmNext', 'taoQtiTest/runner/helpers/navigation'], function (__, pluginFactory, mapHelper, currentItemHelper, dialogConfirmNext, navigationHelper) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n dialogConfirmNext = dialogConfirmNext && Object.prototype.hasOwnProperty.call(dialogConfirmNext, 'default') ? dialogConfirmNext['default'] : dialogConfirmNext;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var linearNextItemWarning = pluginFactory({\n name: 'linearNextItemWarning',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var testStore = testRunner.getTestStore(); // we'll store user's checkbox choice in here\n\n testStore.setVolatile(self.getName());\n /**\n * Retrieve the required categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getNextItemCategories() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n return {\n nextPartWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextPartWarning', true),\n nextSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSectionWarning', true)\n };\n }\n /**\n * Provides different variants of message text\n * @param {String} action - 'next' or 'skip'\n * @returns {String}\n */\n\n\n function getCustomNextMessage(action) {\n var customNextMessage;\n var itemPartiallyAnswered = currentItemHelper.isAnswered(testRunner, true);\n\n if (!itemPartiallyAnswered) {\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back and provide an answer.');\n } else if (action === 'next') {\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back and change your answer.');\n } else if (action === 'skip') {\n customNextMessage = __('Are you sure you want to clear your answer and go to the next item? You will not be able to go back and provide an answer.');\n } else {\n // more generic message for default case:\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back.');\n }\n\n return customNextMessage;\n } //plugin behavior\n\n /**\n * Checks configuration, shows a dialog asking to confirm the nav action\n *\n * @param {String} action - 'next' or 'skip'\n * @returns {Promise} - resolves if dialog accepted or not shown, rejects if dialog cancelled\n */\n\n\n function doNextWarning(action) {\n testRunner.trigger('disablenav'); // Load testStore checkbox value (async)\n\n return testStore.getStore(self.getName()).then(function (store) {\n return store.getItem('dontShowLinearNextItemWarning').then(function (checkboxValue) {\n var checkboxParams = null; // Show the warning unless user has turned it off:\n\n if (checkboxValue !== true) {\n // Define checkbox only if enabled by config:\n if (testRunnerOptions.enableLinearNextItemWarningCheckbox) {\n checkboxParams = {\n checked: checkboxValue,\n submitChecked: function submitChecked() {\n store.setItem('dontShowLinearNextItemWarning', true);\n },\n submitUnchecked: function submitUnchecked() {\n store.setItem('dontShowLinearNextItemWarning', false);\n }\n };\n }\n\n return new Promise(function (resolve, reject) {\n // show special dialog:\n dialogConfirmNext(__('Go to the next item?'), getCustomNextMessage(action), resolve, // if the test taker accepts\n function cancel() {\n // if he refuses\n reject({\n cancel: true\n });\n }, checkboxParams);\n });\n }\n });\n }).catch(function (err) {\n // if the rejection is due to an error, rethrow it\n if (err && err instanceof Error) {\n throw err;\n }\n\n if (err && err.cancel === true) {\n testRunner.trigger('enablenav');\n return Promise.reject(); // to cancel the move\n }\n });\n } // Attach this plugin to 'next' & 'skip' events\n\n\n testRunner.on('init', function () {\n // Clear the stored checkbox value before each test:\n testStore.getStore(self.getName()).then(function (store) {\n store.setItem('dontShowLinearNextItemWarning', null);\n });\n }).before('move skip', function (e, type, scope) {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n var item = testRunner.getCurrentItem();\n var currentPart = testRunner.getCurrentPart();\n var categories = getNextItemCategories();\n var isLast = navigationHelper.isLast(map, context.itemIdentifier);\n\n if (currentPart && currentPart.isLinear) {\n // Do nothing if nextSection warning imminent:\n if (scope === 'section' && categories.nextSectionWarning) {\n return; // Do nothing if endOfPart warning imminent:\n } else if (categories.nextPartWarning) {\n return; // Do nothing if 'informational item':\n } else if (item.informational) {\n return; // Show dialog if conditions met:\n } else if (type === 'next' && !isLast && testRunnerOptions.forceEnableLinearNextItemWarning) {\n return doNextWarning('next');\n } else if (e.name === 'skip' && !isLast && testRunnerOptions.forceEnableLinearNextItemWarning) {\n return doNextWarning('skip');\n }\n }\n });\n }\n });\n\n return linearNextItemWarning;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/nextSection',['jquery', 'lodash', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/messages', 'handlebars', 'taoQtiTest/runner/helpers/map'], function ($$1, _, __, hider, pluginFactory, messages, Handlebars, mapHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015-2019 (original work) Open Assessment Technologies SA ;\n */\n var nextSection = pluginFactory({\n name: 'nextsection',\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n /**\n * Retrieve the nexSection categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getNextSectionCategories() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n return {\n nextSection: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSection', true),\n nextSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSectionWarning', true),\n noExitTimedSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'noExitTimedSectionWarning', true)\n };\n }\n\n function toggle() {\n var categories = getNextSectionCategories();\n\n if (testRunnerOptions.nextSection && (categories.nextSection || categories.nextSectionWarning)) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function nextSection() {\n testRunner.next('section');\n }\n /**\n * Check if warn section leaving dialog enabled to prevent showing double dialogs\n * @returns {Boolean}\n */\n\n\n var isWarnSectionLeavingEabled = function isWarnSectionLeavingEabled() {\n var testContext = testRunner.getTestContext();\n var categories = getNextSectionCategories();\n var timeConstraints = testContext.timeConstraints || [];\n return timeConstraints.some(function (_ref) {\n var source = _ref.source;\n return source === testContext.sectionId;\n }) && !categories.noExitTimedSectionWarning && !(testRunnerOptions.timer || {}).keepUpToTimeout;\n };\n\n this.$element = $$1(buttonTpl({\n control: 'next-section',\n title: __('Skip to the next section'),\n icon: 'fast-forward',\n text: __('Next Section')\n }));\n this.$element.on('click', function (e) {\n var enable = _.bind(self.enable, self);\n\n var categories = getNextSectionCategories();\n e.preventDefault();\n\n if (self.getState('enabled') !== false) {\n self.disable();\n\n if (categories.nextSectionWarning && !isWarnSectionLeavingEabled()) {\n var submitButtonLabel = __('CONTINUE TO THE NEXT SECTION');\n\n testRunner.trigger('confirm.nextsection', messages.getExitMessage('section', testRunner, '', false, submitButtonLabel), nextSection, // if the test taker accept\n enable, // if the test taker refuse\n {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else {\n nextSection();\n }\n }\n });\n this.disable();\n toggle();\n testRunner.on('loaditem', toggle).on('enablenav', function () {\n self.enable();\n }).on('disablenav', function () {\n self.disable();\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n self.show();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element to the navigation area\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return nextSection;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/previous',['jquery', 'lodash', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/map', 'handlebars'], function ($$1, _, __, hider, pluginFactory, shortcut, namespaceHelper, navigationHelper, mapHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var previous = pluginFactory({\n name: 'previous',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Check if the \"Previous\" functionality should be available or not\n */\n\n var canDoPrevious = function canDoPrevious() {\n var testMap = testRunner.getTestMap();\n var context = testRunner.getTestContext();\n var currentSection = testRunner.getCurrentSection();\n var noExitTimedSectionWarning = mapHelper.hasItemCategory(testMap, context.itemIdentifier, 'noExitTimedSectionWarning', true);\n var currentPart = testRunner.getCurrentPart();\n var previousSection;\n var previousPart; // check TestMap if empty\n\n if (_.isPlainObject(testMap) && _.size(testMap) === 0) {\n return false;\n } //first item of the test\n\n\n if (navigationHelper.isFirst(testMap, context.itemIdentifier)) {\n return false;\n } //first item of a section\n\n\n if (navigationHelper.isFirstOf(testMap, context.itemIdentifier, 'section')) {\n //when entering an adaptive section,\n //you can't leave the section from the beginning\n if (currentSection.isCatAdaptive) {\n return false;\n } //if the previous section is adaptive or a timed section\n\n\n previousSection = mapHelper.getItemSection(testMap, context.itemPosition - 1);\n\n if (previousSection.isCatAdaptive || previousSection.timeConstraint && !noExitTimedSectionWarning) {\n return false;\n }\n }\n\n if (navigationHelper.isFirstOf(testMap, context.itemIdentifier, 'part')) {\n //if the previous part is linear, we don't enter it too\n previousPart = mapHelper.getItemPart(testMap, context.itemPosition - 1);\n\n if (previousPart.isLinear) {\n return false;\n }\n }\n\n return currentPart.isLinear === false && context.canMoveBackward === true;\n };\n /**\n * Hide the plugin if the Previous functionality shouldn't be available\n */\n\n\n var toggle = function toggle() {\n if (canDoPrevious()) {\n self.show();\n } else {\n self.hide();\n }\n }; //build element (detached)\n\n\n this.$element = $$1(buttonTpl({\n control: 'move-backward',\n title: __('Submit and go to the previous item'),\n icon: 'backward',\n text: __('Previous')\n })); //attach behavior\n\n function doPrevious(previousItemWarning) {\n var context = testRunner.getTestContext();\n\n function enableNav() {\n testRunner.trigger('enablenav');\n }\n\n function triggerAction() {\n testRunner.previous();\n }\n\n testRunner.trigger('disablenav');\n\n if (self.getState('enabled') !== false) {\n if (previousItemWarning && context.remainingAttempts !== -1) {\n testRunner.trigger('confirm.previous', __('You are about to go to the previous item. Click OK to continue and go to the previous item.'), triggerAction, // if the test taker accept\n enableNav // if he refuses\n );\n } else {\n triggerAction();\n }\n }\n }\n\n this.$element.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('nav-previous');\n });\n\n var registerShortcut = function registerShortcut(kbdShortcut) {\n if (testRunnerOptions.allowShortcuts && kbdShortcut) {\n shortcut.add(namespaceHelper.namespaceAll(kbdShortcut, _this.getName(), true), function () {\n if (canDoPrevious() && self.getState('enabled') === true) {\n testRunner.trigger('nav-previous', [true]);\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n };\n\n registerShortcut(pluginShortcuts.trigger); //start disabled\n\n toggle();\n self.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', toggle).on('enablenav', function () {\n self.enable();\n }).on('disablenav', function () {\n self.disable();\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n self.show();\n }).on('nav-previous', function (previousItemWarning) {\n doPrevious(previousItemWarning);\n }).on('enableaccessibilitymode', function () {\n var kbdShortcut = pluginShortcuts.triggerAccessibility;\n\n if (kbdShortcut && !_this.getState('eaccessibilitymode')) {\n shortcut.remove(\".\".concat(_this.getName()));\n registerShortcut(kbdShortcut);\n\n _this.setState('eaccessibilitymode');\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return previous;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/review/navigator',['jquery', 'lodash', 'ui/component', 'ui/autoscroll', 'taoQtiTest/runner/helpers/map', 'handlebars'], function ($$1, _, component, autoscroll, mapHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n autoscroll = autoscroll && Object.prototype.hasOwnProperty.call(autoscroll, 'default') ? autoscroll['default'] : autoscroll;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n return \" hidden\";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"\\n <div class=\\\"qti-navigator-info collapsible\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Test status\", options) : helperMissing.call(depth0, \"__\", \"Test status\", options)))\n + \"</span>\\n <span class=\\\"icon-up\\\"></span>\\n <span class=\\\"icon-down\\\"></span>\\n </span>\\n <ul class=\\\"collapsible-panel plain\\\">\\n <li class=\\\"qti-navigator-viewed\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Viewed items\", options) : helperMissing.call(depth0, \"__\", \"Viewed items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-viewed\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Viewed\", options) : helperMissing.call(depth0, \"__\", \"Viewed\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-answered\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Completed items\", options) : helperMissing.call(depth0, \"__\", \"Completed items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-answered\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Answered\", options) : helperMissing.call(depth0, \"__\", \"Answered\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-unanswered\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered items\", options) : helperMissing.call(depth0, \"__\", \"Unanswered items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-unanswered\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered\", options) : helperMissing.call(depth0, \"__\", \"Unanswered\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-flagged\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Items marked for later review\", options) : helperMissing.call(depth0, \"__\", \"Items marked for later review\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-flagged\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Flagged\", options) : helperMissing.call(depth0, \"__\", \"Flagged\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n </ul>\\n </div>\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n \n return \"(<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n }\n\n function program7(depth0,data) {\n \n \n return \"icon-unanswered \";\n }\n\n function program9(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered\", options) : helperMissing.call(depth0, \"__\", \"Unanswered\", options)))\n + \" (<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n return buffer;\n }\n\n function program11(depth0,data) {\n \n \n return \"icon-flagged \";\n }\n\n function program13(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Flagged\", options) : helperMissing.call(depth0, \"__\", \"Flagged\", options)))\n + \" (<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-panel qti-navigator\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.hidden), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n <div class=\\\"qti-navigator-collapsible\\\">\\n <span class=\\\"qti-navigator-collapse icon icon-left\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Collapse the review panel\", options) : helperMissing.call(depth0, \"__\", \"Collapse the review panel\", options)))\n + \"\\\"></span>\\n <span class=\\\"qti-navigator-expand icon icon-right\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Expand the review panel\", options) : helperMissing.call(depth0, \"__\", \"Expand the review panel\", options)))\n + \"\\\"></span>\\n </div>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n\\n\\n <div class=\\\"qti-navigator-filters\\\">\\n <ul role=\\\"tablist\\\" class=\\\"plain clearfix\\\">\\n <li role=\\\"tab\\\" aria-selected=\\\"true\\\" class=\\\"qti-navigator-filter active\\\" data-mode=\\\"all\\\">\\n <span title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Reset filters\", options) : helperMissing.call(depth0, \"__\", \"Reset filters\", options)))\n + \"\\\" class=\\\"qti-navigator-tab\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"All\", options) : helperMissing.call(depth0, \"__\", \"All\", options)))\n + \"\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n\\n <li role=\\\"tab\\\" class=\\\"qti-navigator-filter\\\" data-mode=\\\"unanswered\\\">\\n <span class=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"qti-navigator-tab\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Only display the unanswered items\", options) : helperMissing.call(depth0, \"__\", \"Only display the unanswered items\", options)))\n + \"\\\">\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n\\n <li role=\\\"tab\\\" class=\\\"qti-navigator-filter\\\" data-mode=\\\"flagged\\\">\\n <span class=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"qti-navigator-tab\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Only display the items marked for review\", options) : helperMissing.call(depth0, \"__\", \"Only display the items marked for review\", options)))\n + \"\\\">\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n </ul>\\n </div>\\n\\n <nav class=\\\"qti-navigator-tree\\\"></nav>\\n\\n <div id=\\\"qti-navigator-linear\\\" class=\\\"qti-navigator-linear\\\">\\n <span class=\\\"icon icon-info\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\\"></span>\\n <p class=\\\"qti-navigator-message\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\n </p>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function navigatorTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-part collapsible \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"icon-up\\\"></span>\\n <span class=\\\"icon-down\\\"></span>\\n </span>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.isLinear), {hash:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </li>\\n \";\n return buffer;\n }\n function program2(depth0,data) {\n \n \n return \"active\";\n }\n\n function program4(depth0,data) {\n \n \n return \"collapsed\";\n }\n\n function program6(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <div class=\\\"qti-navigator-linear-part collapsible-panel\\\">\\n <span class=\\\"icon icon-info\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\\"></span>\\n <p class=\\\"qti-navigator-message\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\n </p>\\n <p class=\\\"qti-navigator-actions\\\">\\n <button class=\\\"btn-info small\\\" data-position=\\\"\";\n if (helper = helpers.position) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.position); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Start Test-part\", options) : helperMissing.call(depth0, \"__\", \"Start Test-part\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Start Test-part\", options) : helperMissing.call(depth0, \"__\", \"Start Test-part\", options)))\n + \"</span>\\n <span class=\\\"icon-play r\\\"></span>\\n </button>\\n </p>\\n </div>\\n \";\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <ul aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-navigator-sections collapsible-panel plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.sections), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n \";\n return buffer;\n }\n function program9(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-section collapsible \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.stats)),stack1 == null || stack1 === false ? stack1 : stack1.answered)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"/\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.stats)),stack1 == null || stack1 === false ? stack1 : stack1.total)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"</span>\\n </span>\\n <ul aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-navigator-items collapsible-panel plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.items), {hash:{},inverse:self.noop,fn:self.programWithDepth(10, program10, data, depth0),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n </li>\\n \";\n return buffer;\n }\n function program10(depth0,data,depth1) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-item \";\n if (helper = helpers.cls) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.cls); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-position=\\\"\";\n if (helper = helpers.position) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.position); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label truncate\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"link\\\" aria-disabled=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.viewed), {hash:{},inverse:self.program(13, program13, data),fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n aria-label=\\\"\";\n if (helper = helpers.index) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.index); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \" of \"\n + escapeExpression(((stack1 = ((stack1 = (depth1 && depth1.stats)),stack1 == null || stack1 === false ? stack1 : stack1.total)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" \";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"></span>\\n <span class=\\\"qti-navigator-number\\\">\";\n if (helper = helpers.index) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.index); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n </span>\\n </li>\\n \";\n return buffer;\n }\n function program11(depth0,data) {\n \n \n return \"false\";\n }\n\n function program13(depth0,data) {\n \n \n return \"true\";\n }\n\n function program15(depth0,data) {\n \n \n return \"aria-current=\\\"page\\\"\";\n }\n\n buffer += \"<ul class=\\\"qti-navigator-parts plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.parts), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</ul>\\n\";\n return buffer;\n });\n function navigatorTreeTpl(data, options, asString) {\n var html = Template$1(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Some default values\n * @type {Object}\n * @private\n */\n\n var _defaults = {\n scope: 'test',\n canCollapse: false,\n preventsUnseen: true,\n hidden: false\n };\n /**\n * List of CSS classes\n * @type {Object}\n * @private\n */\n\n var _cssCls = {\n active: 'active',\n collapsed: 'collapsed',\n collapsible: 'collapsible',\n hidden: 'hidden',\n disabled: 'disabled',\n flagged: 'flagged',\n answered: 'answered',\n viewed: 'viewed',\n unseen: 'unseen',\n info: 'info',\n icon: 'qti-navigator-icon',\n scope: {\n test: 'scope-test',\n testPart: 'scope-test-part',\n testSection: 'scope-test-section'\n }\n };\n /**\n * List of icon CSS classes\n * @type {Array}\n * @private\n */\n\n var _iconCls = [_cssCls.info, _cssCls.flagged, _cssCls.answered, _cssCls.viewed];\n /**\n * List of common CSS selectors\n * @type {Object}\n * @private\n */\n\n var _selectors = {\n component: '.qti-navigator',\n filterBar: '.qti-navigator-filters',\n filter: '.qti-navigator-filter',\n tree: '.qti-navigator-tree',\n collapseHandle: '.qti-navigator-collapsible',\n linearState: '.qti-navigator-linear',\n infoAnswered: '.qti-navigator-answered .qti-navigator-counter',\n infoViewed: '.qti-navigator-viewed .qti-navigator-counter',\n infoUnanswered: '.qti-navigator-unanswered .qti-navigator-counter',\n infoFlagged: '.qti-navigator-flagged .qti-navigator-counter',\n infoPanel: '.qti-navigator-info',\n infoPanelLabels: '.qti-navigator-info > .qti-navigator-label',\n tabInfoAll: '[data-mode=\"all\"] .qti-navigator-counter',\n tabInfoUnanswered: '[data-mode=\"unanswered\"] .qti-navigator-counter',\n tabInfoFlagged: '[data-mode=\"flagged\"] .qti-navigator-counter',\n parts: '.qti-navigator-part',\n partLabels: '.qti-navigator-part > .qti-navigator-label',\n sections: '.qti-navigator-section',\n sectionLabels: '.qti-navigator-section > .qti-navigator-label',\n items: '.qti-navigator-item',\n itemLabels: '.qti-navigator-item > .qti-navigator-label',\n itemIcons: '.qti-navigator-item > .qti-navigator-icon',\n activeItem: '.qti-navigator-item.active',\n icons: '.qti-navigator-icon',\n linearStart: '.qti-navigator-linear-part button',\n counters: '.qti-navigator-counter',\n actives: '.active',\n collapsible: '.collapsible',\n collapsiblePanels: '.collapsible-panel',\n unseen: '.unseen',\n answered: '.answered',\n flagged: '.flagged',\n notFlagged: ':not(.flagged)',\n notAnswered: ':not(.answered)',\n notInformational: ':not(.info)',\n informational: '.info',\n hidden: '.hidden',\n disabled: '.disabled'\n };\n /**\n * Maps the filter mode to filter criteria.\n * Each filter criteria is a CSS selector used to find and mask the items to be discarded by the filter.\n * @type {Object}\n * @private\n */\n\n var _filterMap = {\n all: '',\n unanswered: [_selectors.answered, _selectors.informational].join(','),\n flagged: _selectors.notFlagged,\n answered: _selectors.notAnswered,\n filtered: _selectors.hidden\n };\n /**\n *\n * @type {Object}\n */\n\n var navigatorApi = {\n /**\n * Updates the stats on the flagged items in the current map\n * @param {Number} position\n * @param {Boolean} flag\n */\n updateStats: function updateStats(position, flag) {\n var map = this.map;\n var item;\n\n if (map) {\n item = mapHelper.getItemAt(map, position);\n\n if (item) {\n item.flagged = flag;\n mapHelper.updateItemStats(map, position);\n }\n }\n },\n\n /**\n * Gets the total number of items for the provided target\n * @param {Object} progression\n * @param {String} target\n * @returns {Number}\n */\n getProgressionTotal: function getProgressionTotal(progression, target) {\n var total;\n\n if ('questions' === target) {\n total = progression.questions;\n } else {\n total = progression.total;\n }\n\n return total;\n },\n\n /**\n * Set the marked state of an item\n * @param {Number|String|jQuery} position\n * @param {Boolean} flag\n */\n setItemFlag: function setItemFlag(position, flag) {\n var $item = position && position.jquery ? position : this.controls.$tree.find(\"[data-position=\".concat(position, \"]\"));\n var progression = this.progression;\n var icon; // update the map stats\n\n this.updateStats(position, flag); // update the item flag\n\n $item.toggleClass(_cssCls.flagged, flag); // set the item icon according to its state\n\n icon = _.find(_iconCls, _.bind($item.hasClass, $item)) || _cssCls.unseen;\n $item.find(_selectors.icons).attr('class', \"\".concat(_cssCls.icon, \" icon-\").concat(icon)); // update the info panel\n\n progression.flagged = this.controls.$tree.find(_selectors.flagged).length;\n this.writeCount(this.controls.$infoFlagged, progression.flagged, this.getProgressionTotal(progression, 'questions')); // recompute the filters\n\n this.filter(this.currentFilter);\n },\n\n /**\n * Filters the items by a criteria\n * @param {String} criteria\n */\n filter: function filter(criteria) {\n var self = this; // remove the current filter by restoring all items\n\n var $items = this.controls.$tree.find(_selectors.items).removeClass(_cssCls.hidden); // filter the items according to the provided criteria\n\n var filterCb = _filterMap[criteria];\n\n if (filterCb) {\n $items.filter(filterCb).addClass(_cssCls.hidden);\n } // update the section counters\n\n\n this.controls.$tree.find(_selectors.sections).each(function () {\n var $section = $$1(this);\n var $itemsFound = $section.find(_selectors.items).not(_selectors.hidden);\n var $filtered = $itemsFound.not(_selectors.disabled);\n self.writeCount($section.find(_selectors.counters), $filtered.length, $itemsFound.length);\n });\n this.currentFilter = criteria;\n },\n\n /**\n * Update the config\n * @param {Object} [config]\n * @returns {navigatorApi}\n */\n updateConfig: function updateConfig(config) {\n var $component = this.getElement();\n var scopeClass = _cssCls.scope[this.config.scope || _defaults.scope]; // apply the new config\n\n config = _.merge(this.config, config || {}); // enable/disable the collapsing of the panel\n\n $component.toggleClass(_cssCls.collapsible, config.canCollapse); // update the component CSS class according to the scope\n\n $component.removeClass(scopeClass);\n scopeClass = _cssCls.scope[this.config.scope || _defaults.scope];\n $component.addClass(scopeClass);\n return this;\n },\n\n /**\n * Keep the active item visible, auto scroll if needed\n */\n autoScroll: function autoScroll() {\n autoscroll(this.controls.$tree.find(_selectors.activeItem), this.controls.$tree);\n },\n\n /**\n * Updates the review screen\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {navigatorApi}\n * @fires navigator#update\n */\n update: function update(map, context) {\n var scopedMap = this.getScopedMap(map, context);\n var testPart = mapHelper.getPart(map, context.testPartId);\n var progression = scopedMap.stats || {\n questions: 0,\n answered: 0,\n flagged: 0,\n viewed: 0,\n total: 0\n };\n var totalQuestions = this.getProgressionTotal(progression, 'questions');\n this.map = map;\n this.progression = progression; // update the info panel\n\n this.writeCount(this.controls.$infoAnswered, progression.answered, totalQuestions);\n this.writeCount(this.controls.$infoUnanswered, totalQuestions - progression.answered, totalQuestions);\n this.writeCount(this.controls.$infoViewed, progression.viewed, this.getProgressionTotal(progression, 'total'));\n this.writeCount(this.controls.$infoFlagged, progression.flagged, totalQuestions);\n this.writeCount(this.controls.$infoAll, totalQuestions, null); // rebuild the tree\n\n if (!testPart.isLinear) {\n this.controls.$filterBar.show();\n this.controls.$linearState.hide();\n this.controls.$tree.html(navigatorTreeTpl(scopedMap));\n this.autoScroll();\n var activeItem = mapHelper.getActiveItem(scopedMap);\n this.setState('prevents-unseen', this.config.preventsUnseen);\n var isSkipaheadEnabled = activeItem && activeItem.categories && _.indexOf(activeItem.categories, 'x-tao-option-review-skipahead') >= 0;\n this.setState('skipahead-enabled', isSkipaheadEnabled);\n\n if (this.config.preventsUnseen && !isSkipaheadEnabled) {\n // disables all unseen items to prevent the test taker has access to.\n this.controls.$tree.find(_selectors.unseen).addClass(_cssCls.disabled);\n }\n } else {\n this.controls.$filterBar.hide();\n this.controls.$linearState.show();\n this.controls.$tree.empty();\n } // apply again the current filter\n\n\n this.filter(this.controls.$filters.filter(_selectors.actives).data('mode'));\n /**\n * @event navigator#update the navigation data have changed\n */\n\n this.trigger('update');\n return this;\n },\n\n /**\n * Gets the scoped map\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {object} The scoped map\n */\n getScopedMap: function getScopedMap(map, context) {\n var scopedMap = mapHelper.getScopeMapFromContext(map, context, this.config.scope);\n var testPart = mapHelper.getPart(scopedMap, context.testPartId) || {};\n var section = mapHelper.getSection(scopedMap, context.sectionId) || {};\n var item = mapHelper.getItem(scopedMap, context.itemIdentifier) || {}; // set the active part/section/item\n\n testPart.active = true;\n section.active = true;\n item.active = true; // adjust each item with additional meta\n\n return mapHelper.each(scopedMap, function (itm) {\n var cls = [];\n var icon = '';\n\n if (itm.active) {\n cls.push('active');\n }\n\n if (itm.informational) {\n cls.push('info');\n icon = icon || 'info';\n }\n\n if (itm.flagged) {\n cls.push('flagged');\n icon = icon || 'flagged';\n }\n\n if (itm.answered) {\n cls.push('answered');\n icon = icon || 'answered';\n }\n\n if (itm.viewed) {\n cls.push('viewed');\n icon = icon || 'viewed';\n } else {\n cls.push('unseen');\n icon = icon || 'unseen';\n }\n\n itm.cls = cls.join(' ');\n itm.icon = icon;\n });\n },\n\n /**\n * Updates a counter\n * @param {jQuery} $place\n * @param {Number} count\n * @param {Number|Null} total\n * @private\n */\n writeCount: function writeCount($place, count, total) {\n var display = 0;\n\n if ($place.parent().hasClass('qti-navigator-tab')) {\n display = Math.max(count, 0);\n } else if (total > 0) {\n display = \"\".concat(Math.min(count, total), \"/\").concat(total);\n }\n\n $place.text(display);\n },\n\n /**\n * Selects an item\n * @param {String|jQuery} position The item's position\n * @param {Boolean} [open] Forces the tree to be opened on the selected item\n * @returns {jQuery} Returns the selected item\n */\n select: function select(position, open) {\n // find the item to select and extract its hierarchy\n var $tree = this.controls.$tree;\n var selected = position && position.jquery ? position : $tree.find(\"[data-position=\".concat(position, \"]\"));\n var hierarchy = selected.parentsUntil($tree);\n var previousPosition = 0;\n var $previous = $tree.find(_selectors.activeItem);\n\n if ($previous.length) {\n previousPosition = $previous.data('position');\n } // collapse the full tree and open only the hierarchy of the selected item\n\n\n if (open) {\n this.openOnly(hierarchy);\n } // select the item\n\n\n $tree.find(_selectors.actives).removeClass(_cssCls.active);\n hierarchy.add(selected).addClass(_cssCls.active);\n position = selected.data('position');\n /**\n * An item is selected\n *\n * @param {Number} position - The item position on which select\n * @param {Number} previousPosition - The item position from which select\n * @event navigator#selected\n */\n\n this.trigger('selected', position, previousPosition);\n return selected;\n },\n\n /**\n * Opens the tree on the selected item only\n * @returns {jQuery} Returns the selected item\n */\n openSelected: function openSelected() {\n // find the selected item and extract its hierarchy\n var $tree = this.controls.$tree;\n var selected = $tree.find(_selectors.items + _selectors.actives);\n var hierarchy = selected.parentsUntil($tree); // collapse the full tree and open only the hierarchy of the selected item\n\n this.openOnly(hierarchy);\n return selected;\n },\n\n /**\n * Collapses the full tree and opens only the provided branch\n * @param {jQuery} opened The element to be opened\n * @param {jQuery} [root] The root element from which collapse the panels\n */\n openOnly: function openOnly(opened, root) {\n (root || this.controls.$tree).find(_selectors.collapsible).addClass(_cssCls.collapsed);\n opened.removeClass(_cssCls.collapsed);\n },\n\n /**\n * Toggles a panel\n * @param {jQuery} panel The panel to toggle\n * @param {String} [collapseSelector] Selector of panels to collapse\n * @returns {Boolean} Returns `true` if the panel just expanded now\n */\n togglePanel: function togglePanel(panel, collapseSelector) {\n var collapsed = panel.hasClass(_cssCls.collapsed);\n\n if (collapseSelector) {\n this.controls.$tree.find(collapseSelector).addClass(_cssCls.collapsed);\n }\n\n if (collapsed) {\n panel.removeClass(_cssCls.collapsed);\n } else {\n panel.addClass(_cssCls.collapsed);\n }\n\n return collapsed;\n },\n\n /**\n * Toggles the display state of the component\n * @param {Boolean} [show] External condition that's tells if the component must be shown or hidden\n * @returns {navigatorApi}\n */\n toggle: function toggle(show) {\n if (typeof show === 'undefined') {\n show = this.is('hidden');\n }\n\n if (show) {\n this.show();\n } else {\n this.hide();\n }\n\n return this;\n }\n };\n /**\n *\n * @param {Object} config\n * @param {String} [config.scope] Limit the review screen to a particular scope: test, testPart, testSection\n * @param {Boolean} [config.preventsUnseen] Prevents the test taker to access unseen items\n * @param {Boolean} [config.canCollapse] Allow the test taker to collapse the component\n * @param {Boolean} [config.canFlag] Allow the test taker to flag items\n * @param {Boolean} [config.hidden] Hide the component at init\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {*}\n */\n\n function navigatorFactory(config, map, context) {\n var navigator;\n /**\n * Flags an item\n * @param {jQuery} $item\n */\n\n function flagItem($item) {\n var position = $item.data('position');\n var flagged = !$item.hasClass(_cssCls.flagged); // update the display\n\n navigator.setItemFlag(position, flagged);\n /**\n * An item is flagged\n * @event navigator#flag\n * @param {Number} position - The item position on which jump\n * @param {Boolean} flag - Tells whether the item is marked for review or not\n */\n\n navigator.trigger('flag', position, flagged);\n }\n /**\n * Jumps to an item\n * @param {jQuery} $item\n * @private\n */\n\n\n function jump($item) {\n var position = $item.data('position');\n /**\n * A jump to a particular item is required\n * @event navigator#jump\n * @param {Number} position - The item position on which jump\n */\n\n navigator.trigger('jump', position);\n }\n\n navigator = component(navigatorApi, _defaults).setTemplate(navigatorTpl) // uninstalls the component\n .on('destroy', function () {\n this.controls = null;\n }) // keep the activ item visible\n .on('show', function () {\n this.autoScroll();\n }) // renders the component\n .on('render', function () {\n var self = this; // main component elements\n\n var $component = this.getElement();\n var $filterBar = $component.find(_selectors.filterBar);\n var $filters = $filterBar.find('li');\n var $tree = $component.find(_selectors.tree); // links the component to the underlying DOM elements\n\n this.controls = {\n // access to info panel displaying counters\n $infoAnswered: $component.find(_selectors.infoAnswered),\n $infoViewed: $component.find(_selectors.infoViewed),\n $infoAll: $component.find(_selectors.tabInfoAll),\n $infoUnanswered: this.config.showLegend ? $component.find(_selectors.infoUnanswered) : $component.find(_selectors.tabInfoUnanswered),\n $infoFlagged: this.config.showLegend ? $component.find(_selectors.infoFlagged) : $component.find(_selectors.tabInfoFlagged),\n // access to filter switches\n $filterBar: $filterBar,\n $filters: $filters,\n // access to the tree of parts/sections/items\n $tree: $tree,\n // access to the panel displayed when a linear part is reached\n $linearState: $component.find(_selectors.linearState)\n }; // apply options\n\n this.updateConfig(); // click on the collapse handle: collapse/expand the review panel\n\n $component.on(\"click\".concat(_selectors.component), _selectors.collapseHandle, function () {\n if (!self.is('disabled')) {\n $component.toggleClass(_cssCls.collapsed);\n\n if ($component.hasClass(_cssCls.collapsed)) {\n self.openSelected();\n }\n }\n }); // click on the info panel title: toggle the related panel\n\n $component.on(\"click\".concat(_selectors.component), _selectors.infoPanelLabels, function () {\n if (!self.is('disabled')) {\n self.togglePanel($$1(this).closest(_selectors.infoPanel), _selectors.infoPanel);\n }\n }); // click on a part title: toggle the related panel\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.partLabels, function () {\n var $panel;\n\n if (!self.is('disabled')) {\n $panel = $$1(this).closest(_selectors.parts);\n\n if (self.togglePanel($panel, _selectors.parts)) {\n if ($panel.hasClass(_cssCls.active)) {\n self.openSelected();\n } else {\n self.openOnly($panel.find(_selectors.sections).first(), $panel);\n }\n }\n }\n }); // click on a section title: toggle the related panel\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.sectionLabels, function () {\n if (!self.is('disabled')) {\n self.togglePanel($$1(this).closest(_selectors.sections), _selectors.sections);\n }\n }); // click on an item: jump to the position\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.itemLabels, function (event) {\n var $item, $target;\n\n if (!self.is('disabled')) {\n $item = $$1(this).closest(_selectors.items);\n\n if (!$item.hasClass(_cssCls.disabled)) {\n $target = $$1(event.target);\n\n if (self.config.canFlag && $target.is(_selectors.icons) && !$component.hasClass(_cssCls.collapsed)) {\n // click on the icon, just flag the item, unless the panel is collapsed\n if (!$item.hasClass(_cssCls.unseen) && !$item.hasClass(_cssCls.info)) {\n flagItem($item);\n }\n } else if (!$item.hasClass(_cssCls.active)) {\n // go to the selected item\n self.select($item);\n jump($item);\n }\n }\n }\n }); // click on the start button inside a linear part: jump to the position\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.linearStart, function () {\n var $btn;\n\n if (!self.is('disabled')) {\n $btn = $$1(this); // go to the first item of the linear part\n\n if (!$btn.hasClass(_cssCls.disabled)) {\n $btn.addClass(_cssCls.disabled);\n jump($btn);\n }\n }\n }); // click on a filter button\n\n $filterBar.on(\"click\".concat(_selectors.component), _selectors.filter, function () {\n var $btn, mode;\n\n if (!self.is('disabled')) {\n $btn = $$1(this);\n mode = $btn.data('mode'); // select the button\n\n $filters.removeClass(_cssCls.active);\n $filters.attr('aria-selected', false);\n $component.removeClass(_cssCls.collapsed);\n $btn.addClass(_cssCls.active);\n $btn.attr('aria-selected', true); // filter the items\n\n self.filter(mode); //after filtering, ensure that the active item (if exists) is visible\n\n self.autoScroll();\n }\n });\n this.update(map, context);\n }); // set default filter\n\n navigator.currentFilter = 'all'; // the component will be ready\n\n return navigator.init(config);\n }\n\n return navigatorFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/review/review',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/navigation/review/navigator'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, mapHelper, navigatorFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n navigatorFactory = navigatorFactory && Object.prototype.hasOwnProperty.call(navigatorFactory, 'default') ? navigatorFactory['default'] : navigatorFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display states of the buttons\n */\n\n var buttonData = {\n setFlag: {\n control: 'set-item-flag',\n title: __('Flag the current item for later review'),\n icon: 'anchor',\n text: __('Flag for Review')\n },\n unsetFlag: {\n control: 'unset-item-flag',\n title: __('Do not flag the current item for later review'),\n icon: 'anchor',\n text: __('Unflag for Review')\n },\n showReview: {\n control: 'show-review',\n title: __('Show the review screen'),\n icon: 'right',\n text: __('Show Review')\n },\n hideReview: {\n control: 'hide-review',\n title: __('Hide the review screen'),\n icon: 'left',\n text: __('Hide Review')\n }\n };\n /**\n * Gets the definition of the flagItem button related to the context\n * @param {Boolean} flag - the flag status\n * @returns {Object}\n */\n\n function getFlagItemButtonData(flag) {\n var dataType = flag ? 'unsetFlag' : 'setFlag';\n return buttonData[dataType];\n }\n /**\n * Get the flagged value for the item at that position\n * @param {Object} testMap\n * @param {Number} position - the item position\n * @returns {Boolean}\n */\n\n\n function isItemFlagged(testMap, position) {\n var item = mapHelper.getItemAt(testMap, position);\n return !!item.flagged;\n }\n /**\n * Gets the definition of the toggleNavigator button related to the context\n * @param {Object} navigator - the navigator component\n * @returns {Object}\n */\n\n\n function getToggleButtonData(navigator) {\n var dataType = navigator.is('hidden') ? 'showReview' : 'hideReview';\n return buttonData[dataType];\n }\n /**\n * Update the button based on the provided data\n * @param {Component} button - the element to update\n * @param {Object} data - the button data\n */\n\n\n function updateButton(button, data) {\n var $button = button.getElement();\n\n if (button.is('rendered')) {\n if ($button.data('control') !== data.control) {\n $button.data('control', data.control).attr('title', data.title);\n $button.find('.icon').attr('class', \"icon icon-\".concat(data.icon));\n $button.find('.text').text(data.text);\n\n if (_.contains(data.control, 'flag')) {\n if (button.is('active')) {\n button.turnOff();\n } else {\n button.turnOn();\n }\n }\n }\n }\n }\n /**\n * Checks if the current context allows to mark the item for review\n * @param {Object} testRunner\n * @returns {Boolean}\n */\n\n\n function canFlag(testRunner) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var item = testRunner.getCurrentItem();\n var testPart = testRunner.getCurrentPart();\n var markReviewCategory = mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'markReview', true);\n return !!(!testPart.isLinear && markReviewCategory && !(item && item.informational));\n }\n /**\n * Creates the timer plugin\n */\n\n\n var review = pluginFactory({\n name: 'review',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var navigatorConfig = testRunnerOptions.review || {\n defaultOpen: false\n };\n var previousItemPosition;\n /**\n * Retrieve the review categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getReviewCategories() {\n var currentContext = testRunner.getTestContext();\n var currentMap = testRunner.getTestMap();\n return {\n reviewScreen: mapHelper.hasItemCategory(currentMap, currentContext.itemIdentifier, 'reviewScreen', true),\n markReview: mapHelper.hasItemCategory(currentMap, currentContext.itemIdentifier, 'markReview', true)\n };\n }\n /**\n * Tells if the component is enabled\n * @returns {Boolean}\n */\n\n\n function isPluginAllowed() {\n var categories = getReviewCategories();\n return navigatorConfig.enabled && categories.reviewScreen;\n }\n /**\n * Mark an item for review\n * @param {Number} position\n * @param {Boolean} flag\n * @returns {Promise}\n */\n\n\n function flagItem(position, flag) {\n self.disable();\n return testRunner.getProxy().callTestAction('flagItem', {\n position: position,\n flag: flag\n }).then(function () {\n var item = mapHelper.getItemAt(testRunner.getTestMap(), position); //update the value in the current testMap\n\n item.flagged = flag; // update the display of the flag button\n\n updateButton(self.flagItemButton, getFlagItemButtonData(flag)); // update the item state\n\n self.navigator.setItemFlag(position, flag);\n self.enable();\n }).catch(function () {\n // rollback on the item flag\n self.navigator.setItemFlag(position, !flag);\n self.enable();\n });\n }\n /**\n * Mark the current item for review\n */\n\n\n function flagCurrentItem() {\n if (self.getState('enabled') !== false) {\n var itemPosition = testRunner.getTestContext().itemPosition;\n var flagStatus = isItemFlagged(testRunner.getTestMap(), itemPosition);\n flagItem(itemPosition, !flagStatus);\n }\n }\n /**\n * Shows/hides the review panel\n *\n * @param [{Boolean} forcedState], true will show the panel\n */\n\n\n function togglePanel(forcedState) {\n var isHidden = _.isUndefined(forcedState) ? self.navigator.is('hidden') : forcedState;\n\n if (isHidden) {\n self.explicitlyHidden = false;\n self.navigator.show();\n } else {\n self.explicitlyHidden = true;\n self.navigator.hide();\n }\n\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n }\n\n this.navigator = navigatorFactory(navigatorConfig, testMap, testContext).on('selected', function (position, previousPosition) {\n previousItemPosition = previousPosition;\n }).on('jump', function (position) {\n if (self.getState('enabled') !== false) {\n self.disable();\n testRunner.jump(position, 'item');\n }\n }).on('flag', function (position, flag) {\n if (self.getState('enabled') !== false) {\n flagItem(position, flag);\n }\n }).render(); // restore current item in the navigator if movement not allowed\n\n testRunner.on('alert.notallowed', function () {\n self.navigator.select(previousItemPosition);\n });\n this.explicitlyHidden = false; // register buttons in the toolbox component\n\n this.toggleButton = this.getAreaBroker().getToolbox().createEntry(getToggleButtonData(this.navigator));\n this.toggleButton.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-reviewpanel');\n });\n this.flagItemButton = this.getAreaBroker().getToolbox().createEntry(getFlagItemButtonData(isItemFlagged(testMap, testContext.itemPosition)));\n this.flagItemButton.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-flagitem');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.flag) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.flag, this.getName(), true), function () {\n testRunner.trigger('tool-flagitem');\n }, {\n avoidInput: true\n });\n }\n\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-reviewpanel');\n }, {\n avoidInput: true\n });\n }\n }\n\n if (!isPluginAllowed()) {\n this.hide();\n } //disabled by default\n\n\n this.disable();\n togglePanel(navigatorConfig.defaultOpen); //change plugin state\n\n testRunner.on('render', function () {\n if (isPluginAllowed()) {\n self.show();\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n } else {\n self.hide();\n }\n }).on('loaditem', function () {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n var testPart = testRunner.getCurrentPart();\n var categories = getReviewCategories();\n\n if (isPluginAllowed()) {\n updateButton(self.flagItemButton, getFlagItemButtonData(isItemFlagged(map, context.itemPosition)));\n self.navigator.update(map, context).updateConfig({\n canFlag: !testPart.isLinear && categories.markReview\n });\n self.show();\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n } else {\n self.hide();\n }\n }).on('enabletools enablenav', function () {\n if (isPluginAllowed()) {\n self.enable();\n }\n }).on('disabletools disablenav', function () {\n if (isPluginAllowed()) {\n self.disable();\n }\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n if (isPluginAllowed()) {\n self.show();\n }\n }).on('tool-flagitem', function () {\n if (isPluginAllowed() && canFlag(testRunner)) {\n flagCurrentItem();\n }\n }).on('tool-reviewpanel', function () {\n if (isPluginAllowed() && self.getState('enabled')) {\n togglePanel();\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var areaBroker = this.getAreaBroker();\n var $panelContainer = areaBroker.getPanelArea();\n $panelContainer.append(this.navigator.getElement());\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.navigator.destroy();\n },\n\n /**\n * Enables the button\n */\n enable: function enable() {\n var testRunner = this.getTestRunner();\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n this.flagItemButton.enable();\n this.toggleButton.enable();\n this.navigator.enable();\n\n if (isItemFlagged(testMap, testContext.itemPosition)) {\n this.flagItemButton.turnOn();\n } else {\n this.flagItemButton.turnOff();\n }\n },\n\n /**\n * Disables the button\n */\n disable: function disable() {\n this.flagItemButton.disable();\n this.flagItemButton.turnOff();\n this.toggleButton.disable();\n this.navigator.disable();\n },\n\n /**\n * Shows the button\n */\n show: function show() {\n var testRunner = this.getTestRunner();\n\n if (canFlag(testRunner)) {\n this.flagItemButton.show();\n } else {\n this.flagItemButton.hide();\n }\n\n this.toggleButton.show();\n\n if (!this.explicitlyHidden) {\n this.navigator.show();\n } else {\n this.navigator.hide();\n }\n },\n\n /**\n * Hides the button\n */\n hide: function hide() {\n this.flagItemButton.hide();\n this.toggleButton.hide();\n this.navigator.hide();\n }\n });\n\n return review;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/skip',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/messages', 'handlebars', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/map'], function ($$1, __, hider, pluginFactory, messages, Handlebars, navigationHelper, mapHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display of the skip\n */\n\n var buttonData = {\n skip: {\n control: 'skip',\n title: __('Skip and go to the next item'),\n icon: 'external',\n text: __('Skip')\n },\n end: {\n control: 'skip-end',\n title: __('Skip and go to the end of the test'),\n icon: 'external',\n text: __('Skip and end test')\n }\n };\n /**\n * Create the button based on the current context\n * @param {Object} testRunner - testRunner\n * @returns {jQueryElement} the button\n */\n\n var createElement = function createElement(testRunner) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n var dataType = isLast ? 'end' : 'skip';\n return $$1(buttonTpl(buttonData[dataType]));\n };\n /**\n * Update the button based on the context\n * @param {jQueryElement} $element - the element to update\n * @param {Boolean} [isLast=false] - are we on the last item ?\n */\n\n\n var updateElement = function updateElement($element) {\n var isLast = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var dataType = isLast ? 'end' : 'skip';\n var button = buttonData[dataType];\n\n if (button && $element.attr('data-control') !== button.control) {\n $element.attr('data-control', button.control).attr('title', button.title).find('.text').text(button.text);\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var skip = pluginFactory({\n name: 'skip',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n\n var toggle = function toggle() {\n var testContext = testRunner.getTestContext();\n\n if (testContext.allowSkipping === true) {\n _this.show();\n\n return true;\n }\n\n _this.hide();\n\n return false;\n };\n\n function doSkip() {\n testRunner.skip();\n }\n\n this.$element = createElement(testRunner);\n this.$element.on('click', function (e) {\n var enable = _this.enable.bind(_this);\n\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n var endTestWarning = mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'endTestWarning', true);\n e.preventDefault();\n\n if (_this.getState('enabled') !== false) {\n _this.disable();\n\n if (endTestWarning && isLast) {\n testRunner.trigger('confirm.endTest', messages.getExitMessage('test', testRunner), doSkip, // if the test taker accept\n enable // if the test taker refuse\n );\n } else {\n doSkip();\n }\n }\n });\n toggle();\n this.disable();\n testRunner.on('loaditem', function () {\n if (toggle()) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n updateElement(_this.$element, isLast);\n }\n }).on('enablenav', function () {\n return _this.enable();\n }).on('disablenav', function () {\n return _this.disable();\n }).on('hidenav', function () {\n return _this.hide();\n }).on('shownav', function () {\n return _this.show();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return skip;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/validateResponses',['lodash', 'i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/currentItem'], function (_, __, pluginFactory, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017-2019 (original work) Open Assessment Technologies SA ;\n */\n var pluginName = 'validateResponses';\n /**\n * Plugin\n * @returns {Object}\n */\n\n var validateResponses = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: pluginName,\n\n /**\n * Initialize plugin (called during runner's initialization)\n * @returns {this}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = this.getConfig();\n testRunner.before('move', function (e, direction) {\n var testContext = testRunner.getTestContext();\n var isInteracting = !testRunner.getItemState(testContext.itemIdentifier, 'disabled');\n\n if (!pluginConfig.validateOnPreviousMove && direction === 'previous') {\n return Promise.resolve();\n }\n\n if (isInteracting && testRunnerOptions.enableValidateResponses) {\n var currenItem = testRunner.getCurrentItem(); //@deprecated use validateResponses from testMap instead of the testContext\n\n var validateResponses = typeof currenItem.validateResponses === 'boolean' ? currenItem.validateResponses : testContext.validateResponses;\n\n if (validateResponses) {\n return new Promise(function (resolve, reject) {\n if (_.size(currentItemHelper.getDeclarations(testRunner)) === 0) {\n return resolve();\n }\n\n if (currentItemHelper.isAnswered(testRunner, false)) {\n return resolve();\n }\n\n if (!testRunner.getState('alerted.notallowed')) {\n // Only show one alert for itemSessionControl\n testRunner.setState('alerted.notallowed', true);\n testRunner.trigger('alert.notallowed', __('A valid response to this item is required.'), function () {\n testRunner.trigger('resumeitem');\n reject();\n testRunner.setState('alerted.notallowed', false);\n });\n }\n });\n }\n }\n });\n return this;\n }\n });\n\n return validateResponses;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/warnBeforeLeaving',['i18n', 'taoTests/runner/plugin'], function (__, pluginFactory) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * There's only a few chance to have this message displayed.\n * Most browsers doesn't support custom message anymore.\n * See https://www.chromestatus.com/feature/5349061406228480\n */\n\n var warnMessage = __('Please confirm you want to leave the test.');\n /**\n * The beforeunload listener\n * @param {Event} e\n * @returns {String} the custom message (for some browser, just need to be a string)\n */\n\n\n var warnListener = function warnListener(e) {\n e.returnValue = warnMessage;\n return warnMessage;\n };\n /**\n * Plugin factory\n * @returns {Object}\n */\n\n\n var warnBeforeLeaving = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: 'warnBeforeLeaving',\n\n /**\n * Initialize plugin (called during runner's initialization)\n */\n init: function init() {\n this.enable();\n },\n\n /**\n * Destroy plugin (called during runner's destruction)\n */\n destroy: function destroy() {\n this.disable();\n },\n\n /**\n * Enables the warning\n */\n enable: function enable() {\n window.addEventListener('beforeunload', warnListener);\n },\n\n /**\n * Disables the warning\n */\n disable: function disable() {\n window.removeEventListener('beforeunload', warnListener);\n }\n });\n\n return warnBeforeLeaving;\n\n});\n\n","define('taoQtiTest/runner/plugins/security/disableRightClick',['taoTests/runner/plugin'], function (pluginFactory) { 'use strict';\n\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n var disableRightClick = pluginFactory({\n name: 'disableRightClick',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var rightClickEvents = ['contextmenu', 'mousedown', 'mouseup'];\n rightClickEvents.forEach(function (eventName) {\n window.document.addEventListener(eventName, function disableRightClick(event) {\n if (event.button === 2) {\n event.preventDefault();\n }\n });\n });\n }\n });\n\n return disableRightClick;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerElimination/eliminator',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoTests/runner/plugin'], function (_, __, hider, shortcut, namespaceHelper, mapHelper, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'eliminator';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultConfig = {\n // when hiding the buttons, don't remove existing eliminations\n removeEliminationsOnClose: false,\n // when showing the buttons, restore previously set eliminations\n restoreEliminationsOnOpen: false\n };\n /**\n * Returns the configured plugin\n */\n\n var eliminator = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var config = Object.assign({}, defaultConfig, this.getConfig()); // register the button in the toolbox\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'eliminator',\n title: __('Eliminate choices'),\n icon: 'eliminate',\n text: __('Answer Eliminator')\n });\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-eliminator\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'eliminator', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePluginButton() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function togglePlugin() {\n if (!self.$choiceInteractions) {\n return;\n }\n\n self.$choiceInteractions.toggleClass('eliminable');\n\n if (isEliminable()) {\n enableEliminator();\n } else {\n disableEliminator();\n }\n }\n\n function isEliminable() {\n if (!self.$choiceInteractions) {\n return;\n }\n\n return self.$choiceInteractions.hasClass('eliminable');\n }\n\n function enableEliminator() {\n var $choices;\n\n if (!self.$choiceInteractions) {\n return;\n }\n\n $choices = self.$choiceInteractions.find('.qti-choice');\n self.button.turnOn();\n self.trigger('start');\n\n if (config.restoreEliminationsOnOpen) {\n $choices.each(function () {\n var input = this.querySelector('.real-label input');\n\n if (this.dataset.wasEliminated) {\n this.dataset.wasEliminated = null;\n this.classList.add('eliminated');\n input.setAttribute('disabled', 'disabled');\n input.checked = false;\n }\n });\n }\n }\n\n function disableEliminator() {\n var $choices;\n\n if (!self.$choiceInteractions) {\n return;\n }\n\n $choices = self.$choiceInteractions.find('.qti-choice');\n self.$choiceInteractions.removeClass('eliminable');\n self.button.turnOff();\n self.trigger('end');\n $choices.each(function () {\n if (this.classList.contains('eliminated')) {\n this.dataset.wasEliminated = true;\n this.classList.remove('eliminated');\n this.querySelector('.real-label input').removeAttribute('disabled');\n }\n });\n } //add a new mask each time the button is pressed\n\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePluginButton).on('renderitem', function conditionalInit() {\n // show button only when in the presence of choice interactions\n self.$choiceInteractions = $container.find('.qti-choiceInteraction');\n\n if (!self.$choiceInteractions.length) {\n self.hide();\n return;\n }\n\n if (isPluginEnabled()) {\n self.show();\n }\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n disableEliminator();\n }) // commands that controls the plugin\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isPluginEnabled()) {\n togglePlugin();\n }\n }) // Answer-eliminator and Answer-masking are mutually exclusive tools\n .on('tool-answer-masking-toggle', function () {\n if (isEliminable()) {\n disableEliminator();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return eliminator;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerMasking/answerMasking',['lodash', 'jquery', 'core/statifier', 'ui/component', 'handlebars'], function (_, $$1, statifier, componentFactory, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n statifier = statifier && Object.prototype.hasOwnProperty.call(statifier, 'default') ? statifier['default'] : statifier;\n componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"answer-mask\\\">\\n <span class=\\\"answer-mask-toggle\\\"></span>\\n</div>\";\n });\n function maskTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA;\n */\n var ns = '.answerMasking';\n /**\n * @param {jQuery} $contentArea - DOM element containing the rendered item\n */\n\n function answerMaskingFactory($contentArea) {\n var answerMasking,\n allMasks = [],\n maskApi = {\n /**\n * Toggle mask visibility\n * @returns {component}\n */\n toggle: function toggle() {\n if (this.is('masked')) {\n return this.reveal();\n } else {\n return this.mask();\n }\n },\n\n /**\n * Show the choice under the current mask\n * @returns {component}\n */\n reveal: function reveal() {\n var $container = this.getContainer();\n $container.removeClass('masked');\n $container.find('input').removeAttr('disabled');\n this.setState('masked', false);\n return this;\n },\n\n /**\n * Cover the whole choice with the mask\n * @returns {component}\n */\n mask: function mask() {\n var $container = this.getContainer();\n $container.addClass('masked');\n $container.find('input').attr('disabled', 'disabled');\n this.setState('masked', true);\n return this;\n }\n };\n /**\n * Creates a ui/component to serve as a mask over a QTI Choice\n * @param {jQuery} $container - the qti-choice element\n * @returns {component}\n */\n\n function createMask($container) {\n return componentFactory(maskApi).setTemplate(maskTpl).on('render', function () {\n var self = this,\n $component = this.getElement();\n $component.on(\"click\".concat(ns), function (e) {\n e.stopPropagation();\n e.preventDefault();\n self.toggle();\n });\n }).on('destroy', function () {\n var $component = this.getElement();\n $component.off(ns);\n }).init().render($container).mask();\n }\n /**\n * The answer masking helper\n */\n\n\n answerMasking = {\n /**\n * Enable the answer masking functionality by creating masks over the Qti Choices\n */\n enable: function enable() {\n var $choiceInteractions = $contentArea.find('.qti-choiceInteraction'),\n $qtiChoices = $contentArea.find('.qti-choice');\n allMasks = [];\n $choiceInteractions.addClass('maskable');\n $qtiChoices.each(function () {\n var $choice = $$1(this);\n allMasks.push(createMask($choice));\n });\n this.setState('enabled', true);\n },\n\n /**\n * Remove any answerMasking-related markup from the rendered item\n */\n disable: function disable() {\n var $choiceInteractions = $contentArea.find('.qti-choiceInteraction');\n $choiceInteractions.removeClass('maskable');\n allMasks.forEach(function (mask) {\n mask.reveal(); // remove class on container\n\n mask.destroy();\n });\n allMasks = [];\n this.setState('enabled', false);\n },\n\n /**\n * Return the current state of the masks\n * @returns {Boolean[]} - true if the choice is masked, false if the choice is revealed\n */\n getMasksState: function getMasksState() {\n var state = allMasks.map(function (mask) {\n return mask.is('masked');\n });\n return state;\n },\n\n /**\n * Restore a previously saved state for the masked choices\n * @param {Boolean[]} state - array of boolean, most probably given by the getMasksState method\n */\n setMasksState: function setMasksState(state) {\n state = state || [];\n state.forEach(function (masked, index) {\n var mask = allMasks[index];\n\n if (_.isObject(mask) && _.isFunction(mask.reveal) && !masked) {\n mask.reveal();\n }\n });\n }\n };\n statifier(answerMasking);\n return answerMasking;\n }\n\n return answerMaskingFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerMasking/plugin',['i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/tools/answerMasking/answerMasking'], function (__, pluginFactory, hider, shortcut, namespaceHelper, mapHelper, answerMaskingFactory) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n answerMaskingFactory = answerMaskingFactory && Object.prototype.hasOwnProperty.call(answerMaskingFactory, 'default') ? answerMaskingFactory['default'] : answerMaskingFactory;\n\n /*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'answer-masking';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Stores the masking state for each item in the test\n * @type {Object}\n */\n\n var itemStates = {};\n /**\n * Default Configuration\n */\n\n var defaultConfig = {\n restoreStateOnToggle: true,\n restoreStateOnMove: true\n };\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultConfig, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var $contentArea = this.getAreaBroker().getContentArea();\n var answerMasking = answerMaskingFactory($contentArea);\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-answerMasking\n var answerMaskingCategory = mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'answerMasking', true);\n return answerMaskingCategory && itemContainsChoiceInteraction();\n }\n\n function itemContainsChoiceInteraction() {\n var $container = self.getAreaBroker().getContentArea().parent();\n return $container.find('.qti-choiceInteraction').length;\n }\n\n function togglePluginButton() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function togglePlugin() {\n if (!answerMasking.getState('enabled')) {\n enableMasking();\n } else {\n disableMasking();\n }\n }\n\n function enableMasking() {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n answerMasking.enable();\n\n if (pluginConfig.restoreStateOnToggle) {\n answerMasking.setMasksState(itemStates[itemId]);\n }\n\n self.button.turnOn();\n self.trigger('start');\n }\n\n function disableMasking() {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n\n if (answerMasking.getState('enabled')) {\n itemStates[itemId] = answerMasking.getMasksState();\n }\n\n answerMasking.disable();\n self.button.turnOff();\n self.trigger('end');\n } // create buttons\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n title: __('Answer Masking'),\n icon: 'result-nok',\n control: 'answer-masking',\n text: __('Answer Masking')\n }); // attach user events\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n\n if (!pluginConfig.restoreStateOnMove) {\n itemStates[itemId] = [];\n }\n\n togglePluginButton();\n }).on('enabletools renderitem', function () {\n togglePluginButton(); // we repeat this here as we need the rendered item markup in order to decide whether the plugin is enabled\n\n self.enable();\n }).on('beforeunloaditem', function () {\n disableMasking();\n }).on('disabletools unloaditem', function () {\n self.disable();\n disableMasking();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isPluginEnabled()) {\n togglePlugin();\n }\n }) // Answer-eliminator and Answer-masking are mutually exclusive tools\n .on('tool-eliminator-toggle', function () {\n disableMasking();\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/textToSpeech',['jquery', 'i18n', 'handlebars', 'ui/component', 'interact', 'ui/component/stackable', 'ui/component/placeable', 'ui/feedback', 'nouislider'], function ($$1, __, Handlebars, component, interact, makeStackable, makePlaceable, feedback, nouislider) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n makeStackable = makeStackable && Object.prototype.hasOwnProperty.call(makeStackable, 'default') ? makeStackable['default'] : makeStackable;\n makePlaceable = makePlaceable && Object.prototype.hasOwnProperty.call(makePlaceable, 'default') ? makePlaceable['default'] : makePlaceable;\n feedback = feedback && Object.prototype.hasOwnProperty.call(feedback, 'default') ? feedback['default'] : feedback;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"tts-container\\\">\\n <div class=\\\"tts-controls\\\">\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-close\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close\", options) : helperMissing.call(depth0, \"__\", \"Close\", options)))\n + \"\\\">\\n <span class=\\\"icon-result-nok tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-drag\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Move\", options) : helperMissing.call(depth0, \"__\", \"Move\", options)))\n + \"\\\">\\n <span class=\\\"icon-grip tts-icon\\\"></span>\\n <span class=\\\"tts-control-label\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Text to Speech\", options) : helperMissing.call(depth0, \"__\", \"Text to Speech\", options)))\n + \"\\n </span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-playback\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toggle playback\", options) : helperMissing.call(depth0, \"__\", \"Toggle playback\", options)))\n + \"\\\">\\n <span class=\\\"icon-play tts-icon\\\"></span>\\n <span class=\\\"icon-pause tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-mode\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toggle start from here mode\", options) : helperMissing.call(depth0, \"__\", \"Toggle start from here mode\", options)))\n + \"\\\">\\n <span class=\\\"icon-play-from-here tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-settings\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Settings\", options) : helperMissing.call(depth0, \"__\", \"Settings\", options)))\n + \"\\\">\\n <span class=\\\"icon-property-advanced tts-icon\\\"></span>\\n </a>\\n <div class=\\\"tts-slider-container\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Speed\", options) : helperMissing.call(depth0, \"__\", \"Speed\", options)))\n + \"<div class=\\\"tts-slider\\\"></div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function ttsTemplate(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var defaultConfig = {\n activeElementClass: 'tts-active-content-node',\n elementClass: 'tts-content-node',\n left: -10,\n maxPlaybackRate: 2,\n minPlaybackRate: 0.5,\n playbackRate: 1,\n top: 50\n };\n var stackingOptions = {\n stackingScope: 'test-runner'\n };\n /**\n * Creates an instance of Text to Speech component\n *\n * @param {Element} container\n * @param {Object} config - component configurations\n * @param {String} config.activeElementClass - class applied to active content element. Default value 'tts-active-content-node'\n * @param {String} config.elementClass - class applied to content element. Default value 'tts-content-node'\n * @param {Number} config.left - initial left position of component. Default value 50\n * @param {Number} config.maxPlaybackRate - max playback rate. Default value 2\n * @param {Number} config.minPlaybackRate - min playback rate. Default value 0.5\n * @param {Number} config.playbackRate - playback rate. Default value 1\n * @param {Number} config.top - initial top position of component. Default value 50\n * @returns {ttsComponent} the textToSpeech component (uninitialized)\n */\n\n function maskingComponentFactory(container, config) {\n var audio = new Audio();\n var currentPlayback = [];\n var currentItem;\n var mediaContentData = [];\n var playbackRate; // Browser does not support selection Api If getSelection is not defined\n\n var selection = window.getSelection && window.getSelection(); // component API\n\n var spec = {\n /**\n * Remove APIP element class and click handlers from APIP elements\n */\n clearAPIPElements: function clearAPIPElements() {\n var elementClass = this.config.elementClass;\n var $contentNodes = $$1(mediaContentData.map(function (_ref) {\n var selector = _ref.selector;\n return selector;\n }).join(', '), container);\n $contentNodes.removeClass(elementClass);\n $contentNodes.off('click', this.handleContentNodeClick);\n },\n\n /**\n * Update componet state and stop playback\n *\n * @fires close\n */\n close: function close() {\n this.setTTSStateOnContainer('playing', false);\n this.setTTSStateOnContainer('sfhMode', false);\n this.setState('settings', false);\n this.stop();\n this.trigger('close');\n },\n\n /**\n * Get current active APIP item\n *\n * @returns {Object} active APIP item\n */\n getCurrentItem: function getCurrentItem() {\n return currentItem;\n },\n\n /**\n * When component in start from here mode, switch to clicked content element\n *\n * @param {Object} e - event object\n */\n handleContentNodeClick: function handleContentNodeClick(e) {\n var $target = $$1(e.target); // Allow default behaviour for inputs\n\n if ($target.hasClass('icon-checkbox') || $target.hasClass('icon-radio') || $target.is('input')) {\n return;\n } // Prevent default behaviour for lables and links\n\n\n e.stopPropagation();\n e.preventDefault();\n\n if (!this.is('sfhMode')) {\n return;\n }\n\n var $currentTarget = $$1(e.currentTarget); // Find APIP item associated with clicked element\n\n var selectedItemIndex = mediaContentData.findIndex(function (_ref2) {\n var selector = _ref2.selector;\n return $currentTarget.is(selector);\n });\n currentPlayback = mediaContentData.slice(selectedItemIndex);\n this.stop();\n this.initNextItem();\n this.togglePlayback();\n },\n\n /**\n * Select APIP item for default mode\n */\n initDefaultModeItem: function initDefaultModeItem() {\n this.initItemWithTextSelection();\n\n if (!currentItem) {\n this.initDefaultModePlayback();\n }\n },\n\n /**\n * Check if there is some selected content inside APIP elelemts on the page\n */\n initItemWithTextSelection: function initItemWithTextSelection() {\n // Check if there is selected content\n if (this.is('sfhMode') || !selection || !selection.toString()) {\n return;\n } // Get APIP item by current selection\n\n\n var currentSelection = selection.getRangeAt(0);\n var commonAncestorContainer = currentSelection.commonAncestorContainer;\n var selectedItem = mediaContentData.find(function (_ref3) {\n var selector = _ref3.selector;\n var $item = $$1(selector, container);\n return $item.is(commonAncestorContainer) || $$1.contains($item[0], commonAncestorContainer);\n });\n\n if (selectedItem && selectedItem !== currentItem) {\n currentPlayback = [selectedItem];\n this.initNextItem();\n }\n },\n\n /**\n * Check if there is next APIP item to play and start playback if component in playing state.\n * If there is no APIP item to play stop playback\n *\n * @fires finish\n * @fires next\n */\n initNextItem: function initNextItem() {\n var activeElementClass = this.config.activeElementClass;\n currentItem && $$1(currentItem.selector, container).removeClass(activeElementClass);\n currentItem = currentPlayback.shift();\n\n if (currentItem) {\n var _currentItem = currentItem,\n selector = _currentItem.selector,\n url = _currentItem.url;\n $$1(selector, container).addClass(activeElementClass);\n audio.setAttribute('src', url);\n audio.load();\n audio.playbackRate = playbackRate;\n\n if (this.is('playing')) {\n audio.play();\n }\n\n this.trigger('next');\n return;\n }\n\n this.trigger('finish');\n this.stop();\n },\n\n /**\n * Init default mode playback\n */\n initDefaultModePlayback: function initDefaultModePlayback() {\n currentPlayback = _toConsumableArray(mediaContentData);\n this.initNextItem();\n },\n\n /**\n * Set APIP data. Apply handlers to APIP elements. Stop current playback\n *\n * @param {Array} data - APIP data items\n */\n setMediaContentData: function setMediaContentData(data) {\n this.clearAPIPElements();\n var elementClass = this.config.elementClass;\n mediaContentData = data;\n var $contentNodes = $$1(mediaContentData.map(function (_ref4) {\n var selector = _ref4.selector;\n return selector;\n }).join(', '), container);\n $contentNodes.addClass(elementClass);\n $contentNodes.on('click', this.handleContentNodeClick);\n this.stop();\n },\n\n /**\n * Set playback rate\n *\n * @param {Object} e - event object\n * @param {Number} value - playback rate\n */\n setPlaybackRate: function setPlaybackRate(e, value) {\n playbackRate = value;\n audio.playbackRate = value;\n },\n\n /**\n * Update component state. Toggle state class on page body\n *\n * @param {String} name\n * @param {Boolean} value\n */\n setTTSStateOnContainer: function setTTSStateOnContainer(name, value) {\n this.setState(name, value);\n $$1(container).toggleClass(\"tts-\".concat(name), value);\n },\n\n /**\n * Pause playback and update component state. Set current item to null\n */\n stop: function stop() {\n var activeElementClass = this.config.activeElementClass;\n audio.pause();\n audio.currentTime = 0;\n currentItem && $$1(currentItem.selector, container).removeClass(activeElementClass);\n currentItem = null;\n this.setTTSStateOnContainer('playing', false);\n },\n\n /**\n * Toggle playback\n *\n * @param {Object} e - event object\n */\n togglePlayback: function togglePlayback(e) {\n e && e.preventDefault();\n var isPlaying = this.is('playing');\n this.initDefaultModeItem();\n\n if (!isPlaying && currentItem) {\n audio.play();\n this.setTTSStateOnContainer('playing', true);\n } else {\n audio.pause();\n this.setTTSStateOnContainer('playing', false);\n }\n },\n\n /**\n * Toggle start from here mode\n */\n toggleSFHMode: function toggleSFHMode() {\n var isSFHMode = this.is('sfhMode');\n this.setTTSStateOnContainer('sfhMode', !isSFHMode);\n this.stop();\n },\n\n /**\n * Toggle settings element\n */\n toggleSettings: function toggleSettings() {\n var isSettings = this.is('settings');\n this.setState('settings', !isSettings); // if settings was enabled make sure that component still inside the container\n\n if (!isSettings) {\n this.handleResize();\n }\n },\n\n /**\n * Handle browser resize\n */\n handleResize: function handleResize() {\n // offset from right\n var offsetFromRight = 10;\n\n var _this$getPosition = this.getPosition(),\n x = _this$getPosition.x,\n y = _this$getPosition.y;\n\n var maxXPosition = window.innerWidth - this.getElement().width() - offsetFromRight;\n this.moveTo(x > maxXPosition ? maxXPosition : x, y);\n }\n };\n var ttsComponent = component(spec, defaultConfig);\n makePlaceable(ttsComponent);\n makeStackable(ttsComponent, stackingOptions);\n ttsComponent.setTemplate(ttsTemplate).on('init', function () {\n if (container.hasClass('tts-component-container')) {\n throw new Error('Container already has assigned text to speech component');\n }\n\n container.addClass('tts-component-container');\n this.render(container);\n }).on('render', function () {\n var _this = this;\n\n var _this$getConfig = this.getConfig(),\n left = _this$getConfig.left,\n maxPlaybackRate = _this$getConfig.maxPlaybackRate,\n minPlaybackRate = _this$getConfig.minPlaybackRate,\n defaultPlaybackRate = _this$getConfig.playbackRate,\n top = _this$getConfig.top;\n\n if (left < 0) {\n left = window.innerWidth - this.getElement().width() + left;\n }\n\n var $element = this.getElement();\n var $closeElement = $$1('.tts-control-close', $element);\n var $dragElement = $$1('.tts-control-drag', $element);\n var $playbackElement = $$1('.tts-control-playback', $element);\n var $sfhModeElement = $$1('.tts-control-mode', $element);\n var $sliderElement = $$1('.tts-slider', $element);\n var $settingsElement = $$1('.tts-control-settings', $element);\n playbackRate = defaultPlaybackRate;\n $element.css('touch-action', 'none'); // make component dragable\n\n var interactElement = interact($element).draggable({\n autoScroll: true,\n manualStart: true,\n restrict: {\n restriction: container[0],\n elementRect: {\n left: 0,\n right: 1,\n top: 0,\n bottom: 1\n }\n },\n onmove: function onmove(event) {\n var xOffset = Math.round(event.dx),\n yOffset = Math.round(event.dy);\n\n _this.moveBy(xOffset, yOffset);\n }\n });\n interact($dragElement[0]).on('down', function (event) {\n var interaction = event.interaction;\n interaction.start({\n name: 'drag'\n }, interactElement, $element[0]);\n }); // initialise slider\n\n $sliderElement.noUiSlider({\n animate: true,\n connected: true,\n range: {\n min: minPlaybackRate,\n max: maxPlaybackRate\n },\n start: defaultPlaybackRate,\n step: 0.1\n }).on('change', this.setPlaybackRate); // handle controls\n\n $closeElement.on('click', this.close); // handle mousedown instead of click to prevent selection lose\n\n $playbackElement.on('mousedown touchstart', this.togglePlayback);\n $sfhModeElement.on('click', this.toggleSFHMode);\n $settingsElement.on('click', this.toggleSettings);\n audio.addEventListener('ended', this.initNextItem);\n audio.addEventListener('error', function () {\n feedback().error(__('Can not playback media file!'));\n\n _this.initNextItem();\n });\n window.addEventListener('resize', this.handleResize); // move to initial position\n\n this.moveTo(left, top);\n }).on('hide', function () {\n this.setTTSStateOnContainer('visible', false);\n }).on('show', function () {\n this.setTTSStateOnContainer('visible', true);\n }).on('destroy', function () {\n container.removeClass('tts-component-container');\n this.clearAPIPElements();\n this.stop();\n window.removeEventListener('resize', this.handleResize);\n });\n ttsComponent.init(config);\n return ttsComponent;\n }\n\n return maskingComponentFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Anton Tsymuk <anton@taotesting.com>\n */\n\n /**\n * Extract TTS data from APIP item data\n *\n * @param {Object} apipElement - APIP item Data\n * @returns {Object}\n */\n var getTTSItemData = function getTTSItemData(apipElement) {\n var identifier = apipElement['@attributes'].identifier;\n var _apipElement$contentL = apipElement.contentLinkInfo,\n contentLinkInfo = _apipElement$contentL === void 0 ? {\n '@attributes': {}\n } : _apipElement$contentL,\n _apipElement$relatedE = apipElement.relatedElementInfo;\n _apipElement$relatedE = _apipElement$relatedE === void 0 ? {} : _apipElement$relatedE;\n var _apipElement$relatedE2 = _apipElement$relatedE.spoken;\n _apipElement$relatedE2 = _apipElement$relatedE2 === void 0 ? {} : _apipElement$relatedE2;\n var _apipElement$relatedE3 = _apipElement$relatedE2.audioFileInfo,\n audioFileInfo = _apipElement$relatedE3 === void 0 ? [] : _apipElement$relatedE3;\n\n var _ref = audioFileInfo.find(function (audioFile) {\n return audioFile['@attributes'].mimeType === 'audio/mpeg';\n }) || {},\n _ref$fileHref = _ref.fileHref,\n fileHref = _ref$fileHref === void 0 ? '' : _ref$fileHref;\n\n var elementId = contentLinkInfo['@attributes'].qtiLinkIdentifierRef;\n return {\n identifier: identifier,\n selector: elementId && \"#\".concat(elementId),\n url: fileHref.replace('assets/', '')\n };\n };\n /**\n * Get APIP item order from APIP order data\n *\n * @param {String} identifier - APIP item identifier\n * @param {Object} elementOrder - APIP order data\n * @returns {Number}\n */\n\n\n var getTTSItemOrder = function getTTSItemOrder(identifier, elementOrder) {\n var _ref2 = elementOrder.find(function (apipElementOrder) {\n return apipElementOrder['@attributes'].identifierRef === identifier;\n }) || {},\n order = _ref2.order;\n\n return parseInt(order) || Number.POSITIVE_INFINITY;\n };\n /**\n * Extract data related to Text To Speech from item APIP data\n * @param {Object} apipData\n * @returns {Object}\n */\n\n\n var ttsApipDataProvider = (function (apipData) {\n var _apipData$accessibili = apipData.accessibilityInfo;\n _apipData$accessibili = _apipData$accessibili === void 0 ? {} : _apipData$accessibili;\n var _apipData$accessibili2 = _apipData$accessibili.accessElement,\n accessElement = _apipData$accessibili2 === void 0 ? [] : _apipData$accessibili2,\n _apipData$inclusionOr = apipData.inclusionOrder;\n _apipData$inclusionOr = _apipData$inclusionOr === void 0 ? {} : _apipData$inclusionOr;\n var _apipData$inclusionOr2 = _apipData$inclusionOr.textGraphicsDefaultOrder;\n _apipData$inclusionOr2 = _apipData$inclusionOr2 === void 0 ? {} : _apipData$inclusionOr2;\n var _apipData$inclusionOr3 = _apipData$inclusionOr2.elementOrder,\n elementOrder = _apipData$inclusionOr3 === void 0 ? [] : _apipData$inclusionOr3;\n return accessElement.map(getTTSItemData).filter(function (_ref3) {\n var url = _ref3.url;\n return !!url;\n }).sort(function (a, b) {\n return getTTSItemOrder(a.identifier, elementOrder) - getTTSItemOrder(b.identifier, elementOrder);\n });\n });\n\n return ttsApipDataProvider;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/plugin',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/tools/apipTextToSpeech/textToSpeech', 'taoQtiTest/runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, mapHelper, keyNavigator, navigableDomElement, ttsComponentFactory, ttsApipDataProvider) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n ttsComponentFactory = ttsComponentFactory && Object.prototype.hasOwnProperty.call(ttsComponentFactory, 'default') ? ttsComponentFactory['default'] : ttsComponentFactory;\n ttsApipDataProvider = ttsApipDataProvider && Object.prototype.hasOwnProperty.call(ttsApipDataProvider, 'default') ? ttsApipDataProvider['default'] : ttsApipDataProvider;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Anton Tsymuk <anton@taotesting.com>\n */\n var pluginName = 'apiptts';\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var ttsComponent;\n var ttsApipData;\n\n var createNavigationGroup = function createNavigationGroup() {\n var $container = testRunner.getAreaBroker().getContainer();\n\n var $navigationGroupElement = _this.button.getElement();\n\n var groupNavigationId = \"\".concat(pluginName, \"_navigation_group\");\n var $navigationElements = $container.find(ttsApipData.map(function (_ref) {\n var selector = _ref.selector;\n return selector;\n }).join(', '));\n _this.navigationGroup = keyNavigator({\n id: groupNavigationId,\n group: $navigationGroupElement,\n elements: navigableDomElement.createFromDoms($navigationElements.add($navigationGroupElement)),\n propagateTab: false,\n loop: true,\n keepState: true\n }).on('tab', function () {\n if (ttsComponent.is('sfhMode')) {\n _this.navigationGroup.next();\n\n testRunner.trigger(\"\".concat(actionPrefix, \"next\"));\n }\n }).on('shift+tab', function () {\n if (ttsComponent.is('sfhMode')) {\n _this.navigationGroup.previous();\n\n testRunner.trigger(\"\".concat(actionPrefix, \"previous\"));\n }\n }).on('activate', function () {\n if (ttsComponent.is('sfhMode')) {\n testRunner.trigger(\"\".concat(actionPrefix, \"togglePlayback\"));\n }\n }).on('blur', function () {\n setTimeout(function () {\n if (!_this.navigationGroup.isFocused()) {\n _this.navigationGroup.focus();\n }\n }, 0);\n }).setCursorAt($navigationElements.length);\n ttsComponent.on('next finish', function () {\n if (ttsComponent.is('sfhMode')) {\n var $currentElement = _this.navigationGroup.getCursor().navigable.getElement();\n\n var _ref2 = ttsComponent.getCurrentItem() || {},\n selector = _ref2.selector;\n\n if (!selector || !$currentElement.is(selector)) {\n _this.navigationGroup.next();\n }\n }\n });\n };\n /**\n * Creates the tts component on demand\n * @returns {textToSpeech}\n */\n\n\n var getTTSComponent = function getTTSComponent() {\n if (!ttsComponent) {\n var $container = testRunner.getAreaBroker().getContainer();\n ttsComponent = ttsComponentFactory($container, {}).on('close', function () {\n if (_this.getState('active')) {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }\n }).hide();\n }\n\n return ttsComponent;\n };\n /**\n * Checks if the plugin is currently available.\n * To be activated with the special category x-tao-option-apiptts\n *\n * @returns {Boolean}\n */\n\n\n var isConfigured = function isConfigured() {\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'apiptts', true);\n };\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n var togglePlugin = function togglePlugin() {\n if (isConfigured()) {\n _this.show();\n } else {\n _this.hide();\n }\n };\n /**\n * Show the plugin panel\n *\n * @fires plugin-open.apiptts\n */\n\n\n var enablePlugin = function enablePlugin() {\n createNavigationGroup();\n\n _this.button.turnOn();\n\n _this.setState('active', true);\n\n _this.trigger('open');\n\n if (ttsComponent.is('hidden')) {\n ttsComponent.show();\n }\n };\n /**\n * Hide the plugin panel\n *\n * @fires plugin-close.apiptts\n */\n\n\n var disablePlugin = function disablePlugin() {\n if (_this.getState('active')) {\n _this.navigationGroup.blur();\n\n _this.navigationGroup.destroy();\n\n _this.setState('active', false);\n\n _this.button.turnOff();\n\n _this.trigger('close');\n\n if (ttsComponent && !ttsComponent.is('hidden')) {\n ttsComponent.close();\n ttsComponent.hide();\n }\n }\n };\n /**\n * Shows/hides the plugin\n */\n\n\n var toggleTool = function toggleTool() {\n if (_this.getState('enabled')) {\n if (_this.getState('active')) {\n disablePlugin();\n\n _this.setState('sleep', true);\n } else {\n enablePlugin();\n\n _this.setState('sleep', false);\n }\n }\n }; // Add plugin button to toolbox\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n className: \"\".concat(this.getName(), \"-plugin\"),\n control: this.getName(),\n icon: 'headphones',\n text: __('Text To Speech'),\n title: __('Enable text to speech')\n }); // Handle plugin button click\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // Register plugin shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n if (key === 'spaceTogglePlayback' && ttsComponent && ttsComponent.is('sfhMode')) {\n return;\n }\n\n var eventKey = key.endsWith('TogglePlayback') ? 'togglePlayback' : key;\n testRunner.trigger(actionPrefix + eventKey);\n }, {\n avoidInput: true\n });\n });\n } // Hide plugin by default\n\n\n togglePlugin();\n this.disable();\n this.hide(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n togglePlugin();\n\n _this.disable();\n }).on('enabletools renderitem', function () {\n _this.enable();\n }).on('disabletools unloaditem', function () {\n disablePlugin();\n\n _this.disable();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isConfigured()) {\n toggleTool();\n }\n }).on(\"\".concat(actionPrefix, \"togglePlayback\"), function () {\n if (_this.getState('enabled')) {\n if (_this.getState('active')) {\n if (ttsComponent.is('sfhMode')) {\n var $currentElement = _this.navigationGroup.getCursor().navigable.getElement();\n\n var _ref3 = ttsComponent.getCurrentItem() || {},\n selector = _ref3.selector;\n\n if (!$currentElement.is(selector)) {\n if (_this.button.getElement()[0] !== $currentElement[0]) {\n $currentElement.trigger('click');\n }\n\n return;\n }\n }\n\n ttsComponent.togglePlayback();\n }\n }\n }).on('renderitem', function () {\n if (!isConfigured()) {\n return;\n }\n\n ttsApipData = ttsApipDataProvider(testRunner.itemRunner.getData().apipAccessibility || {}).map(function (apipItemData) {\n return Object.assign({}, apipItemData, {\n url: testRunner.itemRunner.assetManager.resolve(apipItemData.url)\n });\n });\n\n if (!ttsApipData.length) {\n disablePlugin();\n\n _this.hide();\n\n return;\n }\n\n getTTSComponent().setMediaContentData(ttsApipData);\n\n _this.show();\n\n if (!_this.getState('sleep')) {\n _this.setState('enabled', true);\n\n toggleTool();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/areaMasking/mask',['lodash', 'handlebars', 'ui/dynamicComponent'], function (_, Handlebars, dynamicComponent) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n dynamicComponent = dynamicComponent && Object.prototype.hasOwnProperty.call(dynamicComponent, 'default') ? dynamicComponent['default'] : dynamicComponent;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"mask\\\">\\n <div class=\\\"inner\\\"></div>\\n <div class=\\\"controls\\\">\\n <a href=\\\"#\\\" class=\\\"view\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Preview the covered area\", options) : helperMissing.call(depth0, \"__\", \"Preview the covered area\", options)))\n + \"\\\"><span class=\\\"icon-preview\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"close\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close the mask\", options) : helperMissing.call(depth0, \"__\", \"Close the mask\", options)))\n + \"\\\"><span class=\\\"icon-result-nok\\\"></span></a>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function areaMaskingTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n var defaultConfig = {\n draggable: true,\n resizable: true,\n preserveAspectRatio: false,\n width: 250,\n minWidth: 160,\n maxWidth: 1000,\n minHeight: 60,\n height: 100,\n stackingScope: 'test-runner',\n top: 50,\n left: 10,\n previewDelay: 3000\n };\n /**\n * Creates a new masking component\n * @returns {maskComponent} the component (uninitialized)\n */\n\n function maskingComponentFactory() {\n var dynamicComponentInstance;\n /**\n * @typedef {Object} dynamicComponent\n */\n\n dynamicComponentInstance = dynamicComponent({\n /**\n * Preview the content under the masked area\n * @returns {maskComponent} chains\n *\n * @fires maskComponent#preview\n */\n preview: function preview() {\n var self = this;\n var delay = this.config.previewDelay || 1000;\n\n if (this.is('rendered') && !this.is('disabled') && !this.is('previewing')) {\n this.setState('previewing', true);\n this.trigger('preview');\n\n _.delay(function () {\n self.setState('previewing', false);\n }, delay);\n }\n\n return this;\n }\n }, defaultConfig).on('rendercontent', function ($content) {\n var self = this;\n var $element = this.getElement();\n $content.append(areaMaskingTpl({}));\n $element.addClass('mask-container');\n $element.on('click touchstart', '.view', function (e) {\n e.preventDefault();\n self.preview();\n }).on('click touchend', '.close', function (e) {\n e.preventDefault();\n self.destroy();\n });\n }).init();\n return dynamicComponentInstance;\n }\n\n return maskingComponentFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/areaMasking/areaMasking',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/tools/areaMasking/mask', 'taoQtiTest/runner/helpers/map'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, maskComponent, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n maskComponent = maskComponent && Object.prototype.hasOwnProperty.call(maskComponent, 'default') ? maskComponent['default'] : maskComponent;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'area-masking';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultConfig = {\n max: 5,\n foo: true\n };\n /**\n * Returns the configured plugin\n */\n\n var areaMasking = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n var testRunnerOptions = testRunner.getOptions();\n var config = Object.assign({}, defaultConfig, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n\n function addMask() {\n maskComponent().on('render', function () {\n self.masks.push(this);\n self.button.turnOn();\n /**\n * @event areaMasking#maskadd\n */\n\n self.trigger('maskadd');\n }).on('destroy', function () {\n self.masks = _.without(self.masks, this);\n\n if (self.masks.length < config.max) {\n self.enable();\n }\n\n if (self.masks.length === 0) {\n self.button.turnOff();\n self.trigger('close');\n }\n /**\n * @event areaMasking#maskclose\n */\n\n\n self.trigger('maskclose');\n }).init({\n renderTo: $container,\n draggableContainer: $container\n });\n } //keep a ref to all masks\n\n\n this.masks = []; // register the element in the Toolbox\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'area-masking',\n text: __('Masking'),\n title: __('Covers parts of the item'),\n icon: 'eye-slash'\n }); //add a new mask each time the button is pressed\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n this.disable();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-areaMasking\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'areaMasking', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n } //update plugin state based on changes\n\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable(); //remove all masks\n\n _.invoke(self.masks, 'destroy');\n }) // commands that controls the plugin\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n if (self.masks.length === 0) {\n self.trigger('open');\n }\n\n if (self.masks.length < config.max) {\n addMask();\n } else if (config.max === 1) {\n _.invoke(self.masks, 'destroy');\n }\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return areaMasking;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/calculator',['jquery', 'lodash', 'i18n', 'ui/hider', 'ui/calculator', 'ui/maths/calculator/basicCalculator', 'ui/maths/calculator/scientificCalculator', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map'], function ($, _, __, hider, calculatorFactory, basicCalculatorFactory, scientificCalculatorFactory, shortcut, namespaceHelper, pluginFactory, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n calculatorFactory = calculatorFactory && Object.prototype.hasOwnProperty.call(calculatorFactory, 'default') ? calculatorFactory['default'] : calculatorFactory;\n basicCalculatorFactory = basicCalculatorFactory && Object.prototype.hasOwnProperty.call(basicCalculatorFactory, 'default') ? basicCalculatorFactory['default'] : basicCalculatorFactory;\n scientificCalculatorFactory = scientificCalculatorFactory && Object.prototype.hasOwnProperty.call(scientificCalculatorFactory, 'default') ? scientificCalculatorFactory['default'] : scientificCalculatorFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config for calculator components\n * @type {Object}\n */\n\n var defaultCalcConfig = {\n height: 380,\n width: 280,\n top: 50,\n left: 10,\n stackingScope: 'test-runner',\n proportionalResize: true\n };\n /**\n * Default config for BODMAS calculator component\n * @type {Object}\n */\n\n var bodmasCalcConfig = _.defaults({\n height: 380,\n width: 280\n }, defaultCalcConfig);\n /**\n * Default config for scientific calculator component\n * @type {Object}\n */\n\n\n var scientificCalcConfig = _.defaults({\n width: 490,\n height: 420,\n calculator: {\n maths: {\n degree: true\n }\n }\n }, defaultCalcConfig);\n /**\n * Returns the configured plugin\n */\n\n\n var calculator = pluginFactory({\n name: 'calculator',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var areaBroker = this.getAreaBroker();\n var testRunnerOptions = testRunner.getOptions();\n var config = this.getConfig();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Retrieve the calculators categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getCalculatorCategories() {\n var testContext = testRunner.getTestContext();\n var itemIdentifier = testContext.itemIdentifier;\n var testMap = testRunner.getTestMap();\n return {\n calculator: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator', true),\n bodmas: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator-bodmas', true),\n scientific: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator-scientific', true)\n };\n }\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n\n function isEnabled() {\n //to be activated with a special category from:\n // - x-tao-option-calculator\n // - x-tao-option-calculator-bodmas\n // - x-tao-option-calculator-scientific\n var categories = getCalculatorCategories();\n return categories.calculator || categories.bodmas || categories.scientific;\n }\n /**\n * Is calculator activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n //allow calculator\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Build the calculator component\n * @param {Function} [calcTpl] - An optional alternative template for the calculator.\n * Only compatible with the four-functions version\n */\n\n\n function buildCalculator(calcTpl) {\n var categories = getCalculatorCategories();\n var factory, calcConfig;\n\n if (categories.scientific) {\n factory = scientificCalculatorFactory;\n calcConfig = scientificCalcConfig;\n calcConfig.calculator.maths.degree = _.isUndefined(config.degree) ? scientificCalcConfig.calculator.maths.degree : config.degree;\n } else if (categories.bodmas) {\n factory = basicCalculatorFactory;\n calcConfig = bodmasCalcConfig;\n } else {\n factory = calculatorFactory;\n calcConfig = defaultCalcConfig;\n }\n\n self.calculator = factory(_.defaults({\n renderTo: self.$calculatorContainer,\n replace: true,\n draggableContainer: areaBroker.getContainer(),\n alternativeTemplate: calcTpl || null\n }, calcConfig)).on('show', function () {\n self.trigger('open');\n self.button.turnOn();\n }).on('hide', function () {\n self.trigger('close');\n self.button.turnOff();\n }).after('render', function () {\n this.show();\n });\n }\n /**\n * Show/hide the calculator\n */\n\n\n function toggleCalculator() {\n if (self.getState('enabled') !== false) {\n if (self.calculator) {\n //just show/hide the calculator widget\n if (self.calculator.is('hidden')) {\n self.calculator.show();\n } else {\n self.calculator.hide();\n }\n } else {\n //build calculator widget\n if (config.template) {\n require([\"tpl!\".concat(config.template.replace(/\\.tpl$/, ''))], function (calcTpl) {\n buildCalculator(calcTpl);\n }, function () {\n //in case of error, display the default calculator:\n buildCalculator();\n });\n } else {\n buildCalculator();\n }\n }\n }\n } //build element (detached)\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'calculator',\n title: __('Open Calculator'),\n icon: 'table',\n text: __('Calculator')\n });\n this.$calculatorContainer = $('<div class=\"widget-calculator\">'); //init calculator instance var, it will be created only necessary\n\n this.calculator = null; //attach behavior\n\n this.button.on('click', function (e) {\n //prevent action if the click is made inside the form which is a sub part of the button\n if ($(e.target).closest('.widget-calculator').length) {\n return;\n }\n\n e.preventDefault();\n testRunner.trigger('tool-calculator');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-calculator');\n }, {\n avoidInput: true,\n allowIn: '.widget-calculator'\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n\n if (self.calculator) {\n //destroy calculator to create a new instance of calculator each time\n self.calculator.destroy();\n self.calculator = null;\n }\n }).on('tool-calculator', function () {\n if (isEnabled()) {\n toggleCalculator();\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var areaBroker = this.getAreaBroker();\n areaBroker.getContainer().append(this.$calculatorContainer);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$calculatorContainer.remove();\n\n if (this.calculator) {\n this.calculator.destroy();\n }\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n\n if (this.calculator) {\n this.calculator.hide();\n }\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n\n if (this.calculator) {\n this.calculator.hide();\n }\n }\n });\n\n return calculator;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/comment/comment',['jquery', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'ui/stacker', 'util/shortcut', 'util/namespace', 'handlebars'], function ($$1, __, pluginFactory, hider, stackerFactory, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n stackerFactory = stackerFactory && Object.prototype.hasOwnProperty.call(stackerFactory, 'default') ? stackerFactory['default'] : stackerFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div data-control=\\\"qti-comment\\\" class=\\\"hidden\\\">\\n <textarea data-control=\\\"qti-comment-text\\\" placeholder=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Your comment…\", options) : helperMissing.call(depth0, \"__\", \"Your comment…\", options)))\n + \"\\\"></textarea>\\n <button data-control=\\\"qti-comment-cancel\\\" class=\\\"btn-info small\\\"></span>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Cancel\", options) : helperMissing.call(depth0, \"__\", \"Cancel\", options)))\n + \"</button>\\n <button data-control=\\\"qti-comment-send\\\" class=\\\"btn-info small\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Send\", options) : helperMissing.call(depth0, \"__\", \"Send\", options)))\n + \"</button>\\n</div>\\n\";\n return buffer;\n });\n function commentTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var comment = pluginFactory({\n name: 'comment',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var stacker = stackerFactory('test-runner');\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n var currentItem = testRunner.getCurrentItem();\n\n if (typeof currentItem.allowComment === 'boolean') {\n return currentItem.allowComment;\n } //@deprecated use allowComment from the testMap\n\n\n var testContext = testRunner.getTestContext();\n var contextOptions = testContext.options || {};\n return !!contextOptions.allowComment;\n }\n /**\n * Can we comment ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Show/hide the comment panel\n */\n\n\n function toggleComment() {\n if (self.getState('enabled') !== false) {\n //just show/hide the form\n hider.toggle(self.$form);\n\n if (!hider.isHidden(self.$form)) {\n //reset the form on each display\n self.$input.val('').focus();\n self.button.turnOn();\n stacker.bringToFront(self.$form);\n } else {\n self.button.turnOff();\n }\n }\n } // register button in toolbox\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'comment',\n title: __('Leave a comment'),\n icon: 'tag',\n text: __('Comment')\n }); //get access to controls\n\n this.button.on('render', function () {\n self.$button = self.button.getElement();\n self.$form = $$1(commentTpl()).appendTo(self.$button);\n self.$input = self.$button.find('[data-control=\"qti-comment-text\"]');\n self.$cancel = self.$button.find('[data-control=\"qti-comment-cancel\"]');\n self.$submit = self.$button.find('[data-control=\"qti-comment-send\"]');\n stacker.autoBringToFront(self.$form); //hide the form without submit\n\n self.$cancel.on('click', function () {\n hider.hide(self.$form);\n self.button.turnOff();\n }); //submit the comment, then hide the form\n\n self.$submit.on('click', function () {\n var comment = self.$input.val();\n\n if (comment) {\n self.disable();\n self.button.turnOff();\n testRunner.getProxy().callTestAction('comment', {\n comment: comment\n }).then(function () {\n hider.hide(self.$form);\n self.enable();\n }).catch(function () {\n hider.hide(self.$form);\n self.enable();\n });\n }\n });\n }); //attach behavior\n\n this.button.on('click', function (e) {\n //prevent action if the click is made inside the form which is a sub part of the button\n if ($$1(e.target).closest('[data-control=\"qti-comment\"]').length) {\n return;\n }\n\n e.preventDefault();\n testRunner.trigger('tool-comment');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-comment');\n }, {\n avoidInput: true\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePlugin).on('renderitem enabletools', function () {\n self.enable();\n }).on('unloaditem disabletools', function () {\n self.disable();\n }).on('tool-comment', function () {\n if (isEnabled()) {\n toggleComment();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n if (this.$form) {\n hider.hide(this.$form);\n }\n\n this.button.disable();\n this.button.turnOff();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n if (this.$form) {\n hider.hide(this.$form);\n }\n\n this.button.hide();\n }\n });\n\n return comment;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/documentViewer/documentViewer',['jquery', 'lodash', 'ui/hider', 'ui/documentViewer', 'ui/documentViewer/providers/pdfViewer', 'taoTests/runner/plugin', 'handlebars'], function ($$1, _, hider, viewerFactory, pdfViewer, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n viewerFactory = viewerFactory && Object.prototype.hasOwnProperty.call(viewerFactory, 'default') ? viewerFactory['default'] : viewerFactory;\n pdfViewer = pdfViewer && Object.prototype.hasOwnProperty.call(pdfViewer, 'default') ? pdfViewer['default'] : pdfViewer;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"document-viewer-plugin hidden\\\">\\n <div class=\\\"viewer-overlay\\\"></div>\\n <div class=\\\"viewer-panel\\\">\\n <div class=\\\"viewer-header\\\">\\n <span class=\\\"viewer-title\\\">\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"icon icon-close\\\"></span>\\n </div>\\n <div class=\\\"viewer-content\\\">\";\n if (helper = helpers.content) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.content); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n <div class=\\\"viewer-footer\\\"></div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function panelTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The name of the plugin\n * @type {String}\n */\n\n var pluginName = 'documentViewer';\n /**\n * Shows the panel, trigger the `panelshow` event\n *\n * @param plugin\n */\n\n function showPanel(plugin) {\n hider.show(plugin.controls.$panel);\n plugin.trigger('panelshow');\n $$1(window).on(\"resize.\".concat(plugin.getName()), _.debounce(_.partial(resizeViewer, plugin), 50));\n }\n /**\n * Hides the panel, trigger the `panelhide` event\n *\n * @param plugin\n */\n\n\n function hidePanel(plugin) {\n hider.hide(plugin.controls.$panel);\n plugin.trigger('panelhide');\n $$1(window).off(\"resize.\".concat(plugin.getName()));\n }\n /**\n * Hides the panel if it is visible\n *\n * @param plugin\n * @returns {Boolean} Returns `true` if the panel was visible and has been hidden\n */\n\n\n function hideIfVisible(plugin) {\n var isVisible = !hider.isHidden(plugin.controls.$panel, true);\n\n if (isVisible) {\n hidePanel(plugin);\n }\n\n return isVisible;\n }\n /**\n * Initializes the event handlers for the panel container\n *\n * @param plugin\n */\n\n\n function initPanelEvents(plugin) {\n var namespace = \".\".concat(plugin.getName());\n var stopEvents = ['click', 'mousedown', 'mouseup', 'touchstart', 'touchend', 'keyup', 'keydow', 'keypress', 'scroll', 'drop'].join(\"\".concat(namespace, \" \")) + namespace;\n\n var hideViewer = _.partial(hidePanel, plugin);\n\n function stopPropagation(e) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n }\n\n plugin.controls.$overlay.off(namespace).on(\"click\".concat(namespace), hideViewer).on(stopEvents, stopPropagation);\n plugin.controls.$panel.off(namespace).on(\"click\".concat(namespace), '.icon-close', hideViewer).on(stopEvents, stopPropagation);\n }\n /**\n * Resizes the viewer to fit the panel content area\n * @param plugin\n */\n\n\n function resizeViewer(plugin) {\n var $content = plugin.controls.$content;\n plugin.viewer.setSize($content.width(), $content.height());\n } // all document viewers need to be registered\n\n\n viewerFactory.registerProvider('pdf', pdfViewer);\n /**\n * Returns the configured plugin\n */\n\n var documentViewer = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $panel = $$1(panelTpl());\n /**\n * @param {Object} data\n * @param {String} data.label - document title\n * @param {String} data.document - document url\n */\n\n function displayViewer(data) {\n if (self.getState('enabled') !== false) {\n showPanel(self);\n self.controls.$title.text(data.label);\n resizeViewer(self);\n self.viewer.load(data.document, 'pdf');\n }\n }\n\n this.controls = {\n $panel: $panel,\n $overlay: $panel.find('.viewer-overlay'),\n $title: $panel.find('.viewer-title'),\n $content: $panel.find('.viewer-content')\n };\n this.viewer = viewerFactory({\n renderTo: this.controls.$content,\n replace: true,\n fitToWidth: true,\n allowSearch: true\n }); //update plugin state based on changes\n\n testRunner.on('renderitem enabletools', function () {\n self.enable();\n }).on('renderitem', function () {\n self.getAreaBroker().getContentArea().append(self.controls.$panel).off(\".\".concat(self.getName())).on(\"viewDocument.\".concat(self.getName()), function (event) {\n var data = event.originalEvent.detail;\n displayViewer(data);\n });\n initPanelEvents(self);\n }).on('move', function () {\n hideIfVisible(self);\n }).on('skip', function () {\n hideIfVisible(self);\n }).on('unloaditem disabletools', function () {\n self.disable();\n }).on('tool-documentViewer', function (data) {\n displayViewer(data);\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {},\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.getAreaBroker().getContentArea().off(\".\".concat(this.getName()));\n\n if (this.viewer) {\n this.viewer.destroy();\n }\n\n if (this.controls.$panel) {\n this.controls.$panel.remove();\n }\n\n this.viewer = null;\n this.controls = {};\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {},\n\n /**\n * Disable the button\n */\n disable: function disable() {\n hideIfVisible(this);\n },\n\n /**\n * Show the button\n */\n show: function show() {},\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hideIfVisible(this);\n }\n });\n\n return documentViewer;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/highlighter',['lodash', 'jquery', 'core/eventifier', 'ui/highlighter'], function (_, $, eventifier, highlighterFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n eventifier = eventifier && Object.prototype.hasOwnProperty.call(eventifier, 'default') ? eventifier['default'] : eventifier;\n highlighterFactory = highlighterFactory && Object.prototype.hasOwnProperty.call(highlighterFactory, 'default') ? highlighterFactory['default'] : highlighterFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n var prevSelection = [];\n var selection;\n if (!window.getSelection) throw new Error('Browser does not support getSelection()');\n selection = window.getSelection();\n /**\n * Returns an array of active ranges.\n * If browser doesn't support multiple Ranges, returns only the first range\n * see note on https://w3c.github.io/selection-api/#methods\n *\n * @returns {Range[]}\n */\n\n function getAllRanges() {\n var i,\n allRanges = [];\n\n for (i = 0; i < selection.rangeCount; i++) {\n allRanges.push(selection.getRangeAt(i));\n }\n\n return allRanges;\n }\n /**\n * Discards the global text selection from the browser (window.selection)\n */\n\n\n function discardSelection() {\n // delay discarding, to allow time for multiple highlighters logic\n setTimeout(function () {\n selection.removeAllRanges();\n }, 250);\n }\n /**\n * The highlighter Factory\n * @param {Object} options\n * @param {String} [options.className]\n * @param {String} [options.containerSelector]\n * @param {Array} [options.containersBlackList]\n * @param {String} [options.id]\n * @returns {Object} the highlighter instance\n */\n\n\n function testHighlighterFactory(options) {\n /**\n * Is this highlighter enabled or disabled?\n * @type {boolean}\n */\n var enabled = true;\n /**\n * Are we in highlight mode, meaning that each new selection is automatically highlighted\n * without having to press any button\n * @type {boolean}\n */\n\n var isHighlighting = false;\n /**\n * The helper that does the highlight magic\n */\n\n var highlightHelper = highlighterFactory({\n className: options.className || 'txt-user-highlight',\n containerSelector: options.containerSelector || '.qti-itemBody',\n containersBlackList: options.containersBlackList || [],\n clearOnClick: true\n }); //add event to automatically highlight the recently made selection if needed\n\n $(document).on('mouseup.highlighter', function () {\n if (isHighlighting && !selection.isCollapsed) {\n highlightHelper.highlightRanges(getAllRanges());\n discardSelection();\n }\n }); //add event to automatically highlight the recently made selection if needed\n //added touch event (as from TAO-6578)\n\n $(document).on('touchend.highlighter', function () {\n if (isHighlighting && !selection.isCollapsed) {\n highlightHelper.highlightRanges(getAllRanges());\n }\n }); // iOS devices clears selection after click on button,\n // so we store prev selection for this devices to be able\n // to use it after click on highlight button\n\n if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {\n $(document).on('selectionchange', function () {\n if (!isHighlighting) {\n prevSelection = _.clone(getAllRanges(), true);\n }\n });\n }\n /**\n * The highlighter instance\n */\n\n\n return eventifier({\n /**\n * Enable this instance\n */\n enable: function enable() {\n enabled = true;\n },\n\n /**\n * Disable this instance\n */\n disable: function disable() {\n enabled = false;\n },\n\n /**\n * Is this instance currently enabled?\n * @returns {Boolean}\n */\n isEnabled: function isEnabled() {\n return enabled;\n },\n\n /**\n * toggle highlighting mode on and off\n * @param {Boolean} bool - wanted state\n */\n toggleHighlighting: function toggleHighlighting(bool) {\n isHighlighting = bool;\n\n if (isHighlighting) {\n this.trigger('start');\n $('.qti-itemBody').toggleClass('highlighter-cursor', true);\n } else {\n this.trigger('end');\n $('.qti-itemBody').toggleClass('highlighter-cursor', false);\n }\n\n return this;\n },\n\n /**\n * Either highlight the current or selection, or toggle highlighting mode\n */\n highlight: function highlight() {\n if (!isHighlighting) {\n if (!selection.isCollapsed) {\n this.toggleHighlighting(true);\n highlightHelper.highlightRanges(getAllRanges());\n this.toggleHighlighting(false);\n discardSelection();\n } else if (prevSelection[0] && !prevSelection[0].collapsed) {\n this.toggleHighlighting(true);\n highlightHelper.highlightRanges(prevSelection);\n this.toggleHighlighting(false);\n discardSelection();\n } else {\n this.toggleHighlighting(true);\n }\n } else {\n this.toggleHighlighting(false);\n }\n },\n\n /**\n * restore the highlight from a given index\n * @param {Array} index\n */\n restoreIndex: function restoreIndex(index) {\n if (index && index.length > 0) {\n highlightHelper.highlightFromIndex(index);\n }\n },\n\n /**\n * Get the current index\n * @returns {Array} index\n */\n getIndex: function getIndex() {\n return highlightHelper.getHighlightIndex();\n },\n\n /**\n * remove all highlights\n */\n clearHighlights: function clearHighlights() {\n highlightHelper.clearHighlights();\n selection.removeAllRanges();\n },\n\n /**\n * Getter for the instance's id\n * @returns {String}\n */\n getId: function getId() {\n return options.id;\n }\n });\n }\n\n return testHighlighterFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/collection',['taoQtiTest/runner/plugins/tools/highlighter/highlighter'], function (highlighterFactory) { 'use strict';\n\n highlighterFactory = highlighterFactory && Object.prototype.hasOwnProperty.call(highlighterFactory, 'default') ? highlighterFactory['default'] : highlighterFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @var {Array} highlighters - Highlighters collection\n * We can run multiple instances of the highlighter plugin on one page:\n * - one for item-level highlights, which persist for the Test session\n * - others for stimulus-level highlights, which should persist across multiple sessions (TAO-7617)\n */\n\n var highlighters = [];\n /**\n * @typedef {highlighterCollection}\n * @returns {Object}\n */\n\n var highlighterCollection = function highlighterCollection() {\n return {\n /**\n * Instantiates new highlighter and adds it to array\n * @param {Object} options\n * @param {String} options.className - class applied to highlighted spans\n * @param {String} options.containerSelector - selector for the unique root DOM node the HL will work on\n * @param {Array} options.containersBlackList - list of children which should not receive highlights\n * @param {String} options.id\n * @returns {Object} a highlighter instance\n */\n addHighlighter: function addHighlighter(options) {\n var hl = highlighterFactory(options);\n highlighters.push(hl);\n return hl;\n },\n\n /**\n * Retrieves one highlighter from the collection by matching its id\n * @param {String} id\n * @returns {Object} highlighter instance\n */\n getHighlighterById: function getHighlighterById(id) {\n return highlighters.find(function (hl) {\n return hl.getId() === id;\n });\n },\n\n /**\n * Retrieves the full array of highlighters from the collection\n * @returns {Array}\n */\n getAllHighlighters: function getAllHighlighters() {\n return highlighters;\n },\n\n /**\n * Retrieves the first highlighter in the collection\n * @returns {Object} highlighter instance\n */\n getItemHighlighter: function getItemHighlighter() {\n return highlighters[0];\n },\n\n /**\n * Retrieves the fully array of highlighter from the collection, minus the first one\n * @returns {Array} highlighter instance\n */\n getNonItemHighlighters: function getNonItemHighlighters() {\n return highlighters.slice(1);\n },\n\n /**\n * Empties th highlighter collection\n * @returns {Integer}\n */\n getLength: function getLength() {\n return highlighters.length;\n },\n\n /**\n * Empties the highlighter collection\n * @returns {Object}\n */\n empty: function empty() {\n highlighters = [];\n return this;\n }\n };\n };\n\n return highlighterCollection;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/plugin',['jquery', 'lodash', 'i18n', 'core/logger', 'taoTests/runner/plugin', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/currentItem', 'taoQtiTest/runner/plugins/tools/highlighter/collection', 'taoQtiTest/runner/helpers/map'], function ($, _, __, loggerFactory, pluginFactory, shortcut, namespaceHelper, itemHelper, highlighterCollection, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n itemHelper = itemHelper && Object.prototype.hasOwnProperty.call(itemHelper, 'default') ? itemHelper['default'] : itemHelper;\n highlighterCollection = highlighterCollection && Object.prototype.hasOwnProperty.call(highlighterCollection, 'default') ? highlighterCollection['default'] : highlighterCollection;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: 'highlighter',\n\n /**\n * Install plugin's functions\n *\n */\n install: function install() {\n var testRunner = this.getTestRunner(); //define the \"highlighter\" store as \"volatile\" (removed on browser change).\n\n testRunner.getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initialize the plugin (called during runner's init)\n * @returns {void}\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var hasHighlights = false;\n var logger = loggerFactory('highlighterPlugin');\n /**\n * @var {Object} highlighters - Highlighters collection\n * See taoQtiTest/views/js/runner/plugins/tools/highlighter/collection.js\n */\n\n var highlighters = highlighterCollection(); // Create the first (item-level) highlighter instance:\n\n highlighters.addHighlighter({\n className: 'txt-user-highlight',\n containerSelector: '.qti-itemBody',\n containersBlackList: ['.qti-include'],\n id: 'item-highlighter'\n }); // create buttons\n\n this.buttonMain = this.getAreaBroker().getToolbox().createEntry({\n title: __('Highlight Text'),\n icon: 'text-marker',\n control: 'highlight-trigger',\n aria: {\n pressed: 'false',\n label: __('(Visual) Highlight Text')\n },\n text: __('Highlight')\n });\n this.buttonRemove = this.getAreaBroker().getToolbox().createEntry({\n title: __('Clear all active highlights'),\n icon: 'result-nok',\n control: 'highlight-clear',\n aria: {\n label: __('(Visual) Clear all active highlights')\n },\n text: __('Clear Highlights')\n }); // attach user events\n\n this.buttonMain.on('mousedown', function (e) {\n // using 'mousedown' instead of 'click' to avoid losing current selection\n e.preventDefault();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.highlight();\n }\n });\n }\n });\n this.buttonRemove.on('click', function (e) {\n e.preventDefault();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.clearHighlights();\n }\n });\n\n testRunner.trigger('clear');\n }\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.highlight();\n }\n });\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-highlighter\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'highlighter', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Gets the browser test store\n * Can be in volatile or non-volatile mode, depending on config\n * @returns {Promise}\n */\n\n\n function getStore() {\n return testRunner.getTestStore().getStore(self.getName());\n }\n /**\n * Load the stores and hook the behavior\n */\n\n\n return getStore().then(function (highlighterStore) {\n /**\n * Saves a highlighter's state to the appropriate store\n * @param {String} [itemId] - must be provided to save item-level highlights,\n * will be used as store key if no key provided\n * @param {String} [key] - a key (e.g. a stimulus href) under which we store non-item-level highlights\n * @returns {Boolean} true if save was done\n */\n function saveHighlight(itemId, key) {\n var instance;\n var highlightsIndex;\n\n if (!itemId) {\n instance = highlighters.getHighlighterById(key);\n } else {\n key = itemId;\n instance = highlighters.getItemHighlighter();\n }\n\n if (!instance) return Promise.resolve(false);\n highlightsIndex = instance.getIndex();\n\n if (isPluginEnabled() && hasHighlights && key) {\n logger.debug(\"Saving \".concat(highlightsIndex.length, \" highlights for id \").concat(key));\n return highlighterStore.setItem(key, highlightsIndex);\n }\n\n return false;\n }\n /**\n * Saves all the highlighters states in the store\n * First the non-item highlighters, then the item highlighter (index 0)\n * @returns {Promise} resolves once the save is done\n */\n\n\n function saveAll() {\n var nonItemHighlighters = highlighters.getNonItemHighlighters();\n return Promise.all(_(nonItemHighlighters).filter(function (instance) {\n return instance.isEnabled();\n }).map(function (instance) {\n var key = instance.getId();\n return saveHighlight(null, key);\n }).value()).then(function (results) {\n // Now save the main item highlight\n // and if every setItem() returned true, return true\n var itemId = testRunner.getTestContext().itemIdentifier;\n return saveHighlight(itemId) && _.every(results);\n });\n }\n /**\n * Retrieves a highlighter's state from a store and applies it to the DOM\n * @param {String} [itemId] - must be provided to save item-level highlights,\n * will be used as store key if no key provided\n * @param {String} [key] - a key (e.g. a stimulus href) under which we store non-item-level highlights\n * @returns {Promise} resolves once the load is done\n */\n\n\n function loadHighlight(itemId, key) {\n var instance;\n\n if (!itemId) {\n instance = highlighters.getHighlighterById(key);\n } else {\n key = itemId;\n instance = highlighters.getItemHighlighter();\n }\n\n if (!instance) return Promise.resolve(false);\n return highlighterStore.getItem(key).then(function (index) {\n if (index) {\n logger.debug(\"Loading \".concat(index.length, \" highlights for key \").concat(key));\n hasHighlights = true;\n instance.restoreIndex(index);\n }\n }).then(function () {\n //save highlighter state during the item session,\n //when the highlighting ends\n instance.on('end.save', function () {\n return saveHighlight(itemId, key);\n });\n });\n } //update plugin state based on changes\n\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (!instance.isEnabled()) {\n instance.on('start').toggleHighlighting(false).enable();\n }\n });\n }\n }).on('renderitem', function () {\n var textStimuli;\n var itemId = testRunner.getTestContext().itemIdentifier;\n\n if (itemId && isPluginEnabled()) {\n hasHighlights = false;\n highlighters.getItemHighlighter().enable(); // Load item-level highlights from store:\n\n loadHighlight(itemId); // Count stimuli in this item:\n\n textStimuli = itemHelper.getTextStimuliHrefs(testRunner); // NOW we can instantiate the extra highlighters:\n\n _.forEach(textStimuli, function (textStimulusHref) {\n var stimHighlighter = highlighters.getHighlighterById(textStimulusHref); // Instantiate, if id not already present in highlighters...\n\n if (!stimHighlighter) {\n stimHighlighter = highlighters.addHighlighter({\n className: 'txt-user-highlight',\n containerSelector: \".qti-include[data-href=\\\"\".concat(textStimulusHref, \"\\\"]\"),\n id: textStimulusHref\n });\n }\n\n stimHighlighter.enable(); // And load its data:\n\n loadHighlight(null, textStimulusHref);\n });\n }\n }).after('renderitem', function () {\n // Attach start/end listeners only to item level highlighter\n var instance = highlighters.getItemHighlighter();\n\n if (instance.isEnabled()) {\n instance.on('start', function () {\n self.buttonMain.turnOn();\n self.buttonMain.$component.attr('aria-pressed', 'true');\n self.trigger('start');\n hasHighlights = true;\n }).on('end', function () {\n self.buttonMain.turnOff();\n self.buttonMain.$component.attr('aria-pressed', 'false');\n self.trigger('end');\n });\n }\n }).after('clear.highlighter', function () {\n saveAll();\n }).before('skip move timeout', function () {\n return saveAll();\n }).on('disabletools unloaditem', function () {\n self.disable();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.off('end.save end start').toggleHighlighting(false).disable();\n }\n });\n }\n });\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n $(document).off('.highlighter');\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.buttonMain.enable();\n this.buttonRemove.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.buttonMain.disable();\n this.buttonRemove.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.buttonMain.show();\n this.buttonRemove.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.buttonMain.hide();\n this.buttonRemove.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/itemThemeSwitcher/itemThemeSwitcher',['jquery', 'lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'ui/themes', 'util/shortcut', 'util/namespace', 'ui/themeLoader'], function ($, _, __, pluginFactory, hider, themeHandler, shortcut, namespaceHelper, themeLoader) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n themeHandler = themeHandler && Object.prototype.hasOwnProperty.call(themeHandler, 'default') ? themeHandler['default'] : themeHandler;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n themeLoader = themeLoader && Object.prototype.hasOwnProperty.call(themeLoader, 'default') ? themeLoader['default'] : themeLoader;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var itemThemeSwitcher = pluginFactory({\n name: 'itemThemeSwitcher',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n //define the \"itemThemeSwitcher\" store as \"volatile\" (removed on browser change).\n this.getTestRunner().getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var pluginName = this.getName();\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var pluginConfig = this.getConfig();\n var oldNamespace = themeHandler.getActiveNamespace();\n var state = {\n availableThemes: [],\n defaultTheme: '',\n selectedTheme: ''\n };\n var allMenuEntries = [];\n\n if (pluginConfig.activeNamespace) {\n themeHandler.setActiveNamespace(pluginConfig.activeNamespace);\n }\n\n var themesConfig = themeHandler.get('items') || {};\n\n if (pluginConfig.activeNamespace !== oldNamespace && !_.isEmpty(themesConfig)) {\n reloadThemes();\n }\n /**\n * Tells if the component is enabled\n * @returns {Boolean}\n */\n\n\n function isPluginAllowed() {\n return themesConfig && _.size(themesConfig.available) > 1;\n }\n /**\n * Reloads theme config and changes theme\n */\n\n\n function reloadThemes() {\n var themeConfig = themeHandler.get('items');\n themeLoader(themeConfig).load();\n\n if (state && state.selectedTheme) {\n changeTheme(state.selectedTheme);\n } else {\n changeTheme(themeConfig.default);\n }\n }\n /**\n * Load the selected theme\n * @param themeId\n */\n\n\n function changeTheme(themeId) {\n var $qtiItem = $('.qti-item');\n var previousTheme = state.selectedTheme;\n state.selectedTheme = themeId;\n\n if ($qtiItem) {\n _.defer(function () {\n $qtiItem.trigger('themechange', [state.selectedTheme]);\n });\n }\n\n if (self.storage) {\n self.storage.setItem('itemThemeId', themeId);\n }\n\n if (previousTheme !== state.selectedTheme) {\n testRunner.trigger('themechange', state.selectedTheme, previousTheme);\n }\n\n allMenuEntries.forEach(function (menuEntry) {\n if (menuEntry.getId() === themeId) {\n menuEntry.turnOn();\n } else {\n menuEntry.turnOff();\n }\n });\n } //init plugin state\n\n\n if (themesConfig) {\n if (themesConfig.default) {\n state.defaultTheme = themesConfig.default;\n state.selectedTheme = themesConfig.default;\n changeTheme(themesConfig.default);\n }\n\n if (themesConfig.available) {\n _.forEach(themesConfig.available, function (theme) {\n state.availableThemes.push({\n id: theme.id,\n label: __(theme.name)\n });\n });\n }\n } // register toolbox button\n\n\n this.menuButton = this.getAreaBroker().getToolbox().createMenu({\n control: 'color-contrast',\n title: __('Change the current color preset'),\n icon: 'contrast',\n text: __('Contrast')\n }).after('render', function () {\n if (!isPluginAllowed()) {\n self.hide();\n }\n }).on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-themeswitcher-toggle');\n }).on('openmenu', function () {\n testRunner.trigger(\"plugin-open.\".concat(pluginName), state.selectedTheme);\n }).on('closemenu', function () {\n testRunner.trigger(\"plugin-close.\".concat(pluginName), state.selectedTheme);\n }); // register menu entries\n\n state.availableThemes.forEach(function (theme) {\n var themeEntry = self.getAreaBroker().getToolbox().createEntry({\n role: 'option',\n control: theme.id,\n title: theme.label,\n icon: 'preview',\n text: __(theme.label)\n });\n themeEntry.setMenuId('color-contrast');\n themeEntry.on('click', function (e) {\n var themeId = this.config.control;\n e.preventDefault();\n self.menuButton.turnOffAll();\n this.turnOn();\n changeTheme(themeId);\n });\n\n if (state.defaultTheme === theme.id) {\n themeEntry.on('render', function () {\n this.turnOn();\n });\n }\n\n allMenuEntries.push(themeEntry);\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-themeswitcher-toggle');\n }, {\n avoidInput: true\n });\n }\n }\n\n if (!isPluginAllowed()) {\n this.hide();\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n if (isPluginAllowed()) {\n self.show();\n } else {\n self.hide();\n }\n }).on('renderitem', function () {\n self.enable();\n changeTheme(state.selectedTheme);\n }).on('enabletools', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n }).on('tool-themeswitcher-toggle', function () {\n if (self.getState('enabled') !== false) {\n self.menuButton.toggleMenu();\n }\n }).on('tool-themeswitcher-setnavtype', function (type) {\n self.menuButton.setNavigationType(type);\n });\n return testRunner.getPluginStore(this.getName()).then(function (itemThemesStore) {\n self.storage = itemThemesStore;\n self.storage.getItem('itemThemeId').then(function (itemThemeId) {\n if (itemThemeId && state.selectedTheme !== itemThemeId) {\n changeTheme(itemThemeId);\n }\n });\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n return this.getTestRunner().getPluginStore(this.getName()).then(function (itemThemesStore) {\n return itemThemesStore.removeItem('itemThemeId');\n });\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.menuButton.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.menuButton.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.menuButton.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.menuButton.hide();\n }\n });\n\n return itemThemeSwitcher;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/lineReader/compoundMask',['jquery', 'lodash', 'core/statifier', 'core/eventifier', 'ui/component', 'ui/component/placeable', 'ui/component/draggable', 'ui/component/resizable', 'ui/component/stackable'], function ($, _, statifier, eventifier, componentFactory, makePlaceable, makeDraggable, makeResizable, makeStackable) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n statifier = statifier && Object.prototype.hasOwnProperty.call(statifier, 'default') ? statifier['default'] : statifier;\n eventifier = eventifier && Object.prototype.hasOwnProperty.call(eventifier, 'default') ? eventifier['default'] : eventifier;\n componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;\n makePlaceable = makePlaceable && Object.prototype.hasOwnProperty.call(makePlaceable, 'default') ? makePlaceable['default'] : makePlaceable;\n makeDraggable = makeDraggable && Object.prototype.hasOwnProperty.call(makeDraggable, 'default') ? makeDraggable['default'] : makeDraggable;\n makeResizable = makeResizable && Object.prototype.hasOwnProperty.call(makeResizable, 'default') ? makeResizable['default'] : makeResizable;\n makeStackable = makeStackable && Object.prototype.hasOwnProperty.call(makeStackable, 'default') ? makeStackable['default'] : makeStackable;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var defaultDimensions = {\n outerWidth: 600,\n outerHeight: 400,\n innerWidth: 500,\n innerHeight: 20\n };\n var defaultPosition = {\n outerX: 0,\n outerY: 0,\n innerX: 50,\n innerY: 50\n };\n var defaultOptions = {\n dragMinWidth: 10,\n dragMinHeight: 10,\n resizeHandleSize: 10,\n innerDragHeight: 20\n };\n var stackingOptions = {\n stackingScope: 'test-runner'\n };\n var constrains;\n /**\n * @param {Object} options\n * @param {Number} options.resizeHandleSize - size of the resize handlers on each resizable edge\n * @param {Number} options.dragMinWidth - minimal width for the draggable area of each component.\n * @param {Number} options.dragMinHeight - minimal height for the draggable area of each component.\n * @param {Number} options.innerDragHeight - height of the inner window drag handle\n * @param {Object} dimensions\n * @param {Number} dimensions.outerWidth - overall mask width\n * @param {Number} dimensions.outerHeight - overall mask height\n * @param {Number} dimensions.innerWidth - inner window width\n * @param {Number} dimensions.innerHeight - inner window height\n * @param {Number} position\n * @param {Number} position.outerX - overall mask x\n * @param {Number} position.outerY - overall mask y\n * @param {Number} position.innerX - inner window mask x\n * @param {Number} position.innerY - inner window mask y\n */\n\n function compoundMaskFactory(options, dimensions, position) {\n var compoundMask,\n allParts = {},\n innerDrag,\n closer,\n visualGuides = {};\n /**\n * ============================================\n * Definition of Mask & Overlay component types\n * ============================================\n */\n\n /**\n * Create a mask component. They are used for masking (obviously) but also resizing the compound mask\n * @param {Object} maskConfig\n * @param {String} maskConfig.id\n * @param {Function} maskConfig.place - size and position the mask according to the transform model\n * @param {Function} maskConfig.placeOverlay - size and position the overlay according to the transform model\n * @param {Function} maskConfig.beforeResize - used to set the resize limit depending on which edge the resizing occurs\n * @param {Function} maskConfig.onResize - how the resize affect the transform model\n * @param {Object} maskConfig.edges - Interact configuration to specify which edges can be used for resizing\n * @param {Number} maskConfig.minWidth\n * @param {Number} maskConfig.minHeight\n */\n\n function createMask(maskConfig) {\n var mask,\n maskAPI = {\n place: maskConfig.place,\n placeOverlay: maskConfig.placeOverlay,\n styleResizableEdges: function styleResizableEdges() {\n var $element = this.getElement();\n\n _.forOwn(this.config.edgesBorders, function (isResizable, edgeId) {\n if (isResizable) {\n $element.addClass(\"border-\".concat(edgeId));\n }\n });\n },\n addResizeControll: function addResizeControll() {\n var $element = this.getElement();\n var $resizeControll = $('<div>', {\n class: 'resize-control'\n });\n $element.append($resizeControll);\n }\n };\n mask = componentFactory(maskAPI, maskConfig);\n makeResizable(mask);\n makeStackable(mask, stackingOptions);\n return mask.on('render', function () {\n var $element = this.getElement();\n this.styleResizableEdges();\n\n if (this.config.resizeControll) {\n this.addResizeControll();\n }\n\n $element.addClass(\"line-reader-mask \".concat(maskConfig.id)).on('mousedown touchstart', function () {\n bringAllToFront();\n }); // uncomment this to see what's going on with masks:\n // $element.css({ border: '1px solid olive'});\n }).on('resizestart', function () {\n innerDrag.hide();\n closer.hide();\n invokeOnOverlays('hide');\n invokeOnMasks('setState', ['resizing', true]);\n this.setState('resizer', true);\n }).on('beforeresize', maskConfig.beforeResize || _.noop).on('resize', maskConfig.onResize || _.noop).on('resizeend', function () {\n applyTransformsToOverlays();\n applyTransformsToInnerDrag();\n applyTransformsToCloser();\n invokeOnMasks('setState', ['resizing', false]);\n invokeOnOverlays('show');\n innerDrag.show();\n closer.show();\n this.setState('resizer', false);\n }).init();\n }\n /**\n * Create a overlay component. Overlay are invisible and are used for dragging.\n * When clicked, the whole mask is hidden and only the overlay is displayed, after being resized to fit the whole mask surface\n * this allows for performance improvement as well as giving the dragged element proper dragging boundaries.\n * Also, visual guides are added, like a fake inner window, during the drag\n * @param {Object} overlayConfig\n * @param {String} overlayConfig.id\n */\n\n\n function createOverlay(overlayConfig) {\n var overlay,\n overlayAPI = {\n transformOverlay: function transformOverlay() {\n var $element = this.getElement();\n this._sizeBackup = this.getSize();\n this._posBackup = this.getPosition();\n this.setSize(dimensions.outerWidth, dimensions.outerHeight).moveTo(position.outerX, position.outerY);\n $element.addClass('moving');\n this.setState('transformed', true);\n },\n restoreOverlay: function restoreOverlay() {\n var $element = this.getElement();\n\n if (this.is('transformed')) {\n this.setSize(this._sizeBackup.width, this._sizeBackup.height).moveTo(this._posBackup.x, this._posBackup.y);\n $element.removeClass('moving');\n this._sizeBackup = null;\n this._posBackup = null;\n this.setState('transformed', false);\n }\n },\n appendVisualGuides: function appendVisualGuides() {\n var $element = this.getElement(),\n borderWidth = 1,\n // this mirror the $lrBorderWidth css variable\n borderOffset = borderWidth * 2;\n $element.append(visualGuides.$maskBg);\n $element.append(visualGuides.$innerWindow);\n visualGuides.$maskBg.css({\n width: dimensions.outerWidth - borderOffset,\n height: dimensions.outerHeight - borderOffset,\n 'border-top-width': dimensions.topHeight - borderOffset,\n 'border-right-width': dimensions.rightWidth - borderOffset,\n 'border-bottom-width': dimensions.bottomHeight - borderOffset,\n 'border-left-width': dimensions.leftWidth - borderOffset\n });\n visualGuides.$innerWindow.css({\n width: dimensions.innerWidth,\n height: dimensions.innerHeight,\n left: dimensions.leftWidth - borderOffset,\n top: dimensions.topHeight - borderOffset\n });\n },\n removeVisualGuides: function removeVisualGuides() {\n visualGuides.$maskBg.remove();\n visualGuides.$innerWindow.remove();\n }\n };\n overlay = componentFactory(overlayAPI, overlayConfig);\n makeDraggable(overlay);\n makeStackable(overlay, stackingOptions);\n return overlay.on('render', function () {\n var self = this,\n $element = this.getElement(),\n // captures touch and mouse\n // also fixes issue with IE not capturing 'mousedown' etc\n pointerEventsPrefix = window.PointerEvent ? 'pointer' : 'mouse',\n $moveIcon = $('<div>', {\n class: 'icon icon-mobile-menu'\n });\n $element.addClass(\"line-reader-overlay \".concat(overlayConfig.id)).on(\"\".concat(pointerEventsPrefix, \"down\") + \" touchstart\", function () {\n bringAllToFront();\n self.transformOverlay();\n }).on(\"\".concat(pointerEventsPrefix, \"up\") + \" touchend\", function () {\n self.restoreOverlay();\n }).prepend($moveIcon);\n }).on('dragstart', function () {\n innerDrag.hide();\n closer.hide();\n invokeOnMasks('hide');\n this.appendVisualGuides();\n }).on('dragmove', function moveAllPartsTogether(xOffsetRelative, yOffsetRelative) {\n // update the transform model\n position.outerX += xOffsetRelative;\n position.outerY += yOffsetRelative;\n position.innerX += xOffsetRelative;\n position.innerY += yOffsetRelative;\n }).on('dragend', function () {\n this.removeVisualGuides(); // although they are already display, calling show() again on the overlays\n // will force their z-Index at the top of the stack\n\n invokeOnAll('show');\n innerDrag.show();\n closer.show(); // apply the new transform model\n\n applyTransforms();\n }).init();\n }\n /**\n * ==========================\n * Inner Drag Handle & Closer\n * ==========================\n */\n\n /**\n * This handle allows to drag the inner window\n */\n\n\n function createInnerDragHandle() {\n // uncomment this (and a few lines below) if debugging is needed:\n // var $boundingBox = $('<div>').css({ position: 'fixed', 'box-sizing': 'border-box', border: '1px solid red' });\n innerDrag = componentFactory();\n makeStackable(innerDrag, stackingOptions);\n makeDraggable(innerDrag, {\n dragRestriction: function dragRestriction() {\n var fixedXY = allParts.nw.mask.getElement().offset(),\n rect;\n rect = {\n x: fixedXY.left + constrains.minWidth,\n y: fixedXY.top + (constrains.minTopHeight + dimensions.innerHeight + options.resizeHandleSize),\n width: dimensions.outerWidth - constrains.minWidth * 2,\n height: dimensions.outerHeight - (dimensions.innerHeight + constrains.minTopHeight + constrains.minBottomHeight - options.innerDragHeight)\n }; // uncomment to see what's going on:\n // allParts.ne.mask.getContainer().append($boundingBox);\n // $boundingBox.css({ width: rect.width, height: rect.height, top: rect.y, left: rect.x });\n\n return rect;\n }\n }).on('render', function () {\n var $element = this.getElement(),\n $dragIcon = $('<div>', {\n class: 'icon icon-move'\n });\n $element.css('touch-action', 'none');\n $element.addClass('line-reader-inner-drag');\n $element.css({\n background: 'none'\n });\n $element.append($dragIcon);\n }).on('dragstart', function () {\n closer.hide();\n bringAllToFront();\n invokeOnMasks('setState', ['resizing', true]);\n }).on('dragmove', function (xOffsetRelative, yOffsetRelative) {\n position.innerX += xOffsetRelative;\n position.innerY += yOffsetRelative;\n dimensions.leftWidth += xOffsetRelative;\n dimensions.topHeight += yOffsetRelative;\n dimensions.rightWidth -= xOffsetRelative;\n dimensions.bottomHeight -= yOffsetRelative;\n applyTransformsToMasks();\n }).on('dragend', function () {\n innerDrag.bringToFront();\n closer.show();\n invokeOnMasks('setState', ['resizing', false]);\n applyTransformsToOverlays();\n }).init();\n }\n /**\n * Close button for the compound mask\n */\n\n\n function createCloser() {\n closer = componentFactory();\n makeStackable(closer, stackingOptions);\n makePlaceable(closer).on('render', function () {\n var self = this,\n $element = this.getElement(),\n $closeIcon = $('<div>', {\n class: 'icon icon-result-nok'\n });\n $element.append($closeIcon);\n $element.addClass('line-reader-closer');\n $element.on('mousedown touchstart', function () {\n bringAllToFront();\n });\n $element.on('click', function (e) {\n e.stopPropagation();\n self.trigger('click');\n });\n }).init();\n }\n /**\n * =================\n * Utility functions\n * =================\n */\n\n\n function bringAllToFront() {\n invokeOnAll('bringToFront');\n innerDrag.bringToFront();\n closer.bringToFront();\n }\n\n function invokeOnAll(fn, args) {\n invokeOnMasks(fn, args);\n invokeOnOverlays(fn, args);\n }\n\n function invokeOnMasks(fn, args) {\n invokeOn('mask', fn, args);\n }\n\n function invokeOnOverlays(fn, args) {\n invokeOn('overlay', fn, args);\n }\n /**\n * Invoke a method on all compound mask parts, whether mask or overlays\n * @param {String} target - mask | overlay\n * @param {String} fn - the name of the method to invoke\n * @param {*[]} args - arguments passed on invoke\n */\n\n\n function invokeOn(target, fn, args) {\n _.forOwn(allParts, function (part) {\n if (_.isObject(part[target]) && _.isFunction(part[target][fn])) {\n var _part$target;\n\n (_part$target = part[target])[fn].apply(_part$target, _toConsumableArray(args || []));\n }\n });\n }\n /**\n * =================================\n * Transform model related functions\n * =================================\n */\n\n\n function applyTransforms() {\n applyTransformsToMasks();\n applyTransformsToOverlays();\n applyTransformsToInnerDrag();\n applyTransformsToCloser();\n }\n\n function applyTransformsToMasks() {\n invokeOnMasks('place');\n }\n\n function applyTransformsToOverlays() {\n _.forOwn(allParts, function (part) {\n if (part.overlay) {\n part.mask.placeOverlay(part.overlay);\n }\n });\n }\n\n function applyTransformsToInnerDrag() {\n if (innerDrag) {\n innerDrag.setSize(dimensions.innerWidth - 20, options.innerDragHeight).moveTo(position.innerX + 10, position.innerY + dimensions.innerHeight + options.resizeHandleSize);\n }\n }\n\n function applyTransformsToCloser() {\n if (closer) {\n closer.setSize(constrains.minWidth - options.resizeHandleSize, constrains.minHeight - options.resizeHandleSize).moveTo(position.outerX + dimensions.outerWidth - constrains.minWidth - 5, // manual adjustment so it looks better\n position.outerY + options.resizeHandleSize - 4);\n }\n }\n /**\n * Check that the given transform model respect the current constrains.\n * If not, correct them\n */\n\n\n function correctTransforms() {\n if (dimensions.topHeight < constrains.minTopHeight) {\n dimensions.topHeight = constrains.minTopHeight;\n position.innerY = position.outerY + constrains.minTopHeight;\n }\n\n if (dimensions.innerHeight < constrains.minHeight) {\n dimensions.innerHeight = constrains.minHeight;\n }\n\n if (dimensions.bottomHeight < constrains.minBottomHeight) {\n dimensions.bottomHeight = constrains.minBottomHeight;\n }\n\n dimensions.outerHeight = dimensions.topHeight + dimensions.innerHeight + dimensions.bottomHeight;\n\n if (dimensions.leftWidth < constrains.minWidth) {\n dimensions.leftWidth = constrains.minWidth;\n position.innerX = position.outerX + constrains.minWidth;\n }\n\n if (dimensions.innerWidth < constrains.minWidth) {\n dimensions.innerWidth = constrains.minWidth;\n }\n\n if (dimensions.rightWidth < constrains.minWidth) {\n dimensions.rightWidth = constrains.minWidth;\n }\n\n dimensions.outerWidth = dimensions.leftWidth + dimensions.innerWidth + dimensions.rightWidth;\n }\n /**\n * Update the transform model during a resize affecting the top height\n * @param {Number} newHeight\n * @param {Number} newY\n * @param {Boolean} fromTop - if the resize occurs from the top\n */\n\n\n function setTopHeight(newHeight, newY, fromTop) {\n dimensions.topHeight = newHeight;\n\n if (fromTop) {\n dimensions.outerHeight = newHeight + dimensions.innerHeight + dimensions.bottomHeight;\n position.outerY = newY;\n } else {\n dimensions.innerHeight = dimensions.outerHeight - newHeight - dimensions.bottomHeight;\n position.innerY = position.outerY + newHeight;\n }\n }\n /**\n * Update the transform model during a resize affecting the right width\n * @param {Number} newWidth\n * @param {Number} newX\n * @param {Boolean} fromLeft - if the resize occurs from the left\n */\n\n\n function setRightWidth(newWidth, newX, fromLeft) {\n dimensions.rightWidth = newWidth;\n\n if (fromLeft) {\n dimensions.innerWidth = newX - position.innerX;\n } else {\n dimensions.outerWidth = dimensions.leftWidth + dimensions.innerWidth + newWidth;\n }\n }\n /**\n * Update the transform model during a resize affecting the bottom height\n * @param {Number} newHeight\n * @param {Number} newY\n * @param {Boolean} fromTop - if the resize occurs from the top\n */\n\n\n function setBottomHeight(newHeight, newY, fromTop) {\n dimensions.bottomHeight = newHeight;\n\n if (fromTop) {\n dimensions.innerHeight = newY - position.innerY;\n dimensions.bottomHeight = newHeight;\n } else {\n dimensions.outerHeight = dimensions.topHeight + dimensions.innerHeight + newHeight;\n }\n }\n /**\n * Update the transform model during a resize affecting the left width\n * @param {Number} newWidth\n * @param {Number} newX\n * @param {Boolean} fromLeft - if the resize occurs from the left\n */\n\n\n function setLeftWidth(newWidth, newX, fromLeft) {\n dimensions.leftWidth = newWidth;\n\n if (fromLeft) {\n dimensions.outerWidth = newWidth + dimensions.innerWidth + dimensions.rightWidth;\n position.outerX = newX;\n } else {\n dimensions.innerWidth = dimensions.outerWidth - newWidth - dimensions.rightWidth;\n position.innerX = position.outerX + newWidth;\n }\n }\n /**\n * Update the transform model during a resize affecting inner height\n * @param {Number} newHeight\n */\n\n\n var setInnerHeight = function setInnerHeight(newHeight) {\n dimensions.innerHeight = newHeight;\n dimensions.bottomHeight = dimensions.outerHeight - dimensions.innerHeight - dimensions.topHeight;\n };\n /**\n * ======================================\n * Mask parts and other elements creation\n * ======================================\n */\n\n\n function createCompoundMask() {\n // North\n createPart({\n id: 'n',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: true,\n left: false\n },\n addOverlay: true,\n minHeight: constrains.minTopHeight,\n // move and dimension the mask\n place: function place() {\n this.moveTo(position.innerX, position.outerY).setSize(dimensions.innerWidth, dimensions.topHeight);\n },\n // move and dimension the overlay\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(position.outerX, pos.y).setSize(dimensions.outerWidth, size.height);\n },\n // set a resize limit whenever resize happens on an inner edge (here, the top inner edge, eg. the bottom of the mask),\n // so the min/max width/height limit for \"inner component\" is respected\n beforeResize: function beforeResize(width, height, fromLeft, fromTop) {\n this.config.maxHeight = fromTop ? null : dimensions.topHeight + (dimensions.innerHeight - constrains.minHeight);\n },\n // set the new transform values (dimension and position) resulting from the current mask resize, and apply them\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // North-east\n\n createPart({\n id: 'ne',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: true,\n bottom: false,\n left: false\n },\n minHeight: constrains.minTopHeight,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.outerY).setSize(dimensions.rightWidth, dimensions.topHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n setRightWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // South east\n\n createPart({\n id: 'se',\n edges: {\n top: false,\n right: '.resize-control',\n bottom: '.resize-control',\n left: false\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: true,\n left: false\n },\n minHeight: constrains.minBottomHeight,\n resizeControll: true,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.innerY + dimensions.innerHeight).setSize(dimensions.rightWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setRightWidth(width, x, fromLeft);\n setBottomHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // South\n\n createPart({\n id: 's',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: true,\n left: false\n },\n minHeight: constrains.minBottomHeight,\n place: function place() {\n this.moveTo(position.innerX, position.innerY + dimensions.innerHeight).setSize(dimensions.innerWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width, size.height - options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft, fromTop) {\n this.config.maxHeight = fromTop ? dimensions.bottomHeight + (dimensions.innerHeight - constrains.minHeight) : null;\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setBottomHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // East\n\n createPart({\n id: 'e',\n edges: {\n top: false,\n right: false,\n bottom: '.resize-control',\n left: '.resize-control'\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: false,\n left: true\n },\n resizeControll: true,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.innerY).setSize(dimensions.rightWidth, dimensions.innerHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y - options.resizeHandleSize).setSize(size.width - options.resizeHandleSize * 2, size.height + options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft) {\n this.config.maxWidth = dimensions.rightWidth + (dimensions.innerWidth - constrains.minWidth);\n this.config.minWidth = constrains.minWidth;\n this.config.maxHeight = dimensions.outerHeight - dimensions.topHeight - constrains.minBottomHeight;\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x) {\n setRightWidth(width, x, fromLeft);\n setInnerHeight(height);\n applyTransformsToMasks();\n }\n }); // South-west\n\n createPart({\n id: 'sw',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: false,\n right: false,\n bottom: true,\n left: true\n },\n minHeight: constrains.minBottomHeight,\n place: function place() {\n this.moveTo(position.outerX, position.innerY + dimensions.innerHeight).setSize(dimensions.leftWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setBottomHeight(height, y, fromTop);\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // West\n\n createPart({\n id: 'w',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: false,\n left: true\n },\n place: function place() {\n this.moveTo(position.outerX, position.innerY).setSize(dimensions.leftWidth, dimensions.innerHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y - options.resizeHandleSize).setSize(size.width - options.resizeHandleSize * 2, size.height + options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft) {\n this.config.maxWidth = fromLeft ? null : dimensions.leftWidth + (dimensions.innerWidth - constrains.minWidth);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x) {\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // North-west\n\n createPart({\n id: 'nw',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: false,\n left: true\n },\n minHeight: constrains.minTopHeight,\n place: function place() {\n this.moveTo(position.outerX, position.outerY).setSize(dimensions.leftWidth, dimensions.topHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n });\n }\n\n function createPart(partConfig) {\n allParts[partConfig.id] = {\n mask: createMask(_.assign({}, constrains, partConfig)),\n overlay: partConfig.addOverlay ? createOverlay(partConfig) : null\n };\n }\n\n function createVisualGuides() {\n visualGuides.$maskBg = $('<div>', {\n class: 'mask-bg'\n });\n visualGuides.$innerWindow = $('<div>', {\n class: 'inner-window'\n });\n }\n /**\n * =========================\n * The compoundMask instance\n * =========================\n */\n\n\n dimensions = _.defaults(dimensions || {}, defaultDimensions);\n position = _.defaults(position || {}, defaultPosition);\n options = _.defaults(options || {}, defaultOptions);\n constrains = {\n minWidth: options.resizeHandleSize * 2 + options.dragMinWidth,\n minHeight: options.resizeHandleSize * 2 + options.dragMinHeight,\n minBottomHeight: options.resizeHandleSize * 2 + options.innerDragHeight,\n minTopHeight: options.resizeHandleSize * 2 + 18 // make sure that top will fit header size\n\n };\n compoundMask = {\n init: function init() {\n var self = this;\n this.setTransforms(dimensions, position);\n createCompoundMask();\n createVisualGuides();\n createInnerDragHandle();\n createCloser();\n closer.on('click', function () {\n self.hide();\n self.trigger('close');\n });\n return this;\n },\n render: function render($container) {\n invokeOnAll('render', [$container]);\n innerDrag.render($container);\n closer.render($container);\n applyTransforms();\n return this;\n },\n destroy: function destroy() {\n invokeOnAll('destroy');\n visualGuides = null;\n innerDrag = null;\n closer = null;\n return this;\n },\n show: function show() {\n invokeOnAll('show');\n innerDrag.show();\n closer.show();\n this.setState('hidden', false);\n return this;\n },\n hide: function hide() {\n invokeOnAll('hide');\n innerDrag.hide();\n closer.hide();\n this.setState('hidden', true);\n return this;\n },\n\n /**\n * Allow updating the transform model\n * @param {Object} dim\n * @param {Number} dim.outerWidth - overall mask width\n * @param {Number} dim.outerHeight - overall mask height\n * @param {Number} dim.innerWidth - inner window width\n * @param {Number} dim.innerHeight - inner window height\n * @param {Number} pos\n * @param {Number} pos.outerX - overall mask x\n * @param {Number} pos.outerY - overall mask y\n * @param {Number} pos.innerX - inner window x\n * @param {Number} pos.innerY - inner window y\n */\n setTransforms: function setTransforms(dim, pos) {\n dimensions = _.defaults(dim || {}, dimensions);\n position = _.defaults(pos || {}, position); // automatically complete the dimensions\n\n dimensions.topHeight = pos.innerY - pos.outerY;\n dimensions.rightWidth = dim.outerWidth - (pos.innerX - pos.outerX) - dim.innerWidth;\n dimensions.bottomHeight = dim.outerHeight - (pos.innerY - pos.outerY) - dim.innerHeight;\n dimensions.leftWidth = pos.innerX - pos.outerX;\n correctTransforms();\n applyTransforms();\n },\n getDimensions: function getDimensions() {\n return dimensions;\n },\n getPosition: function getPosition() {\n return position;\n },\n getParts: function getParts() {\n return allParts;\n }\n };\n statifier(compoundMask);\n eventifier(compoundMask);\n return compoundMask;\n }\n\n return compoundMaskFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/lineReader/plugin',['lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/tools/lineReader/compoundMask'], function (_, __, pluginFactory, hider, shortcut, namespaceHelper, mapHelper, compoundMaskFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n compoundMaskFactory = compoundMaskFactory && Object.prototype.hasOwnProperty.call(compoundMaskFactory, 'default') ? compoundMaskFactory['default'] : compoundMaskFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'line-reader';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Options for the compoundMask factory\n * @type {Object}\n */\n\n var maskOptions = {\n dragMinWidth: 17,\n dragMinHeight: 7,\n resizeHandleSize: 7,\n innerDragHeight: 20\n };\n var dimensions, position;\n /**\n * These functions are a first effort to place the mask on the first line on the item\n * They make a lot of assumptions:\n * - the item starts with a text\n * - the padding is set on the .qti-item container\n * - the padding is consistent with the minWidth/minHeight configuration of the mask\n * - and some other...\n * @param {jQuery} $container - where the mask is appended\n */\n\n function getDimensions($container) {\n var $qtiContent = $container.find('#qti-content'),\n $qtiItem = $qtiContent.find('.qti-item'),\n lineHeight = Math.ceil(parseFloat($qtiContent.css('line-height'))) || 20; // reasonable default line height\n\n return {\n outerWidth: $qtiItem.width() + maskOptions.resizeHandleSize * 4 + maskOptions.dragMinWidth * 2,\n outerHeight: 175,\n // reasonable default height\n innerWidth: $qtiItem.width(),\n innerHeight: lineHeight\n };\n }\n\n function getPosition($container) {\n var $qtiContent = $container.find('#qti-content'),\n $qtiItem = $qtiContent.find('.qti-item'),\n itemPosition = $qtiItem.position() || {},\n paddingLeft = parseInt($qtiItem.css('padding-left'), 10),\n paddingTop = parseInt($qtiItem.css('padding-top'), 10),\n textPadding = 3,\n // this is to let the text breathe a bit\n innerX = parseInt(itemPosition.left, 10) + paddingLeft - textPadding,\n innerY = parseInt(itemPosition.top, 10) + paddingTop - textPadding;\n return {\n outerX: innerX - maskOptions.resizeHandleSize * 2 - maskOptions.dragMinWidth,\n outerY: 0,\n innerX: innerX,\n innerY: innerY\n };\n }\n\n function containerWidthHasChanged($container) {\n var newDimensions = getDimensions($container);\n return newDimensions.outerWidth !== dimensions.outerWidth;\n }\n /**\n * Returns the configured plugin\n */\n\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n this.compoundMask = compoundMaskFactory(maskOptions).init().render($container).on('close', function () {\n closeMask();\n }).hide();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-lineReader\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'lineReader', true);\n }\n\n function toggleButton() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function toggleMask() {\n if (self.compoundMask.getState('hidden')) {\n if (containerWidthHasChanged($container)) {\n transformMask($container);\n }\n\n openMask();\n } else {\n closeMask();\n }\n }\n\n function openMask() {\n self.compoundMask.show();\n self.trigger('start');\n self.button.turnOn();\n }\n\n function closeMask() {\n if (!self.compoundMask.getState('hidden')) {\n self.compoundMask.hide();\n }\n\n self.trigger('end');\n self.button.turnOff();\n }\n\n function transformMask($maskContainer) {\n dimensions = getDimensions($maskContainer);\n position = getPosition($maskContainer);\n self.compoundMask.setTransforms(_.clone(dimensions), _.clone(position));\n } // create button\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n title: __('Line Reader'),\n icon: 'insert-horizontal-line',\n control: 'line-reader',\n text: __('Line Reader')\n }); // attach user events\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', toggleButton).on('renderitem', function () {\n transformMask($container);\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n closeMask();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n toggleMask();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.compoundMask.destroy();\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/magnifier/magnifierPanel',['jquery', 'lodash', 'ui/component', 'handlebars', 'ui/dynamicComponent'], function ($$1, _, component, Handlebars, dynamicComponent) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n dynamicComponent = dynamicComponent && Object.prototype.hasOwnProperty.call(dynamicComponent, 'default') ? dynamicComponent['default'] : dynamicComponent;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"<div class=\\\"magnifier\\\">\\n <div class=\\\"level\\\">\";\n if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</div>\\n <div class=\\\"overlay\\\"></div>\\n <div class=\\\"inner\\\"></div>\\n <div class=\\\"controls close\\\">\\n <a href=\\\"#\\\" class=\\\"control\\\" data-control=\\\"zoomIn\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Magnify more\", options) : helperMissing.call(depth0, \"__\", \"Magnify more\", options)))\n + \"\\\"><span class=\\\"icon-add\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"control\\\" data-control=\\\"zoomOut\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Magnify less\", options) : helperMissing.call(depth0, \"__\", \"Magnify less\", options)))\n + \"\\\"><span class=\\\"icon-remove\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"closeMagnifier\\\" data-control=\\\"closeMagnifier\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close Magnifier\", options) : helperMissing.call(depth0, \"__\", \"Close Magnifier\", options)))\n + \"\\\"><span class=\\\"icon-result-nok\\\"></span></a>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function magnifierPanelTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * The screen pixel ratio\n * @type {Number}\n */\n\n var screenRatio = window.screen.width / window.screen.height;\n /**\n * Standard debounce delay for heavy process\n * @type {Number}\n */\n\n var debounceDelay = 50;\n /**\n * Standard scrolling throttling for the scrolling\n * It can be lower than the debounce delay as it is lighter in process and it improves the user experience\n * @type {Number}\n */\n\n var scrollingDelay = 20;\n /**\n * The default base size\n * @type {Number}\n */\n\n var defaultBaseSize = 116;\n /**\n * The minimum zoom level\n * @type {Number}\n */\n\n var defaultLevelMin = 2;\n /**\n * The maximum zoom level\n * @type {Number}\n */\n\n var defaultLevelMax = 8;\n /**\n * The default zoom level\n * @type {Number}\n */\n\n var defaultLevel = defaultLevelMin;\n /**\n * Some default values\n * @type {Object}\n */\n\n var defaultConfig = {\n level: defaultLevel,\n levelMin: defaultLevelMin,\n levelMax: defaultLevelMax,\n levelStep: 0.5,\n baseSize: defaultBaseSize,\n maxRatio: 0.5\n };\n var dynamicComponentDefaultConfig = {\n draggable: true,\n resizable: true,\n preserveAspectRatio: false,\n width: defaultBaseSize * defaultLevel,\n height: defaultBaseSize * defaultLevel / screenRatio,\n minWidth: defaultBaseSize * defaultLevelMin,\n minHeight: defaultBaseSize * defaultLevelMin / screenRatio,\n stackingScope: 'test-runner',\n top: 50,\n left: 10\n };\n /**\n * Creates a magnifier panel component\n * @param {Object} config\n * @param {Number} [config.level] - The default zoom level\n * @param {Number} [config.levelMin] - The minimum allowed zoom level\n * @param {Number} [config.levelMax] - The maximum allowed zoom level\n * @param {Number} [config.levelStep] - The level increment applied when using the controls + and -\n * @param {Number} [config.baseSize] - The base size used to assign the width and the height according to the zoom level\n * @param {Number} [config.maxRatio] - The ratio for the maximum size regarding the size of the window\n * @returns {magnifierPanel} the component (initialized)\n */\n\n function magnifierPanelFactory(config) {\n var initConfig = _.defaults(config || {}, defaultConfig);\n\n var zoomLevelMin = parseFloat(initConfig.levelMin);\n var zoomLevelMax = parseFloat(initConfig.levelMax);\n var zoomLevelStep = parseFloat(initConfig.levelStep);\n var zoomLevel = adjustZoomLevel(initConfig.level);\n var maxRatio = parseFloat(initConfig.maxRatio);\n var $initTarget = null;\n var controls = null;\n var observer = null;\n var targetWidth, targetHeight, dx, dy;\n var scrolling = [];\n var dynamicComponentInstance;\n\n var dynamicComponentConfig = _.defaults(config ? config.component || {} : {}, dynamicComponentDefaultConfig);\n /**\n * @typedef {Object} magnifierPanel\n */\n\n\n var magnifierPanel = component({\n /**\n * Gets the current zoom level\n * @returns {Number}\n */\n getZoomLevel: function getZoomLevel() {\n return zoomLevel;\n },\n\n /**\n * Gets the targeted content the magnifier will zoom\n * @returns {jQuery}\n */\n getTarget: function getTarget() {\n return controls && controls.$target;\n },\n\n /**\n * Sets the targeted content the magnifier will zoom\n * @param {jQuery} $newTarget\n * @returns {magnifierPanel}\n * @fires targetchange\n * @fires update\n */\n setTarget: function setTarget($newTarget) {\n if (controls) {\n controls.$target = $newTarget;\n controls.$viewTarget = null;\n setScrollingListener();\n /**\n * @event magnifierPanel#targetchange\n * @param {jQuery} $target\n */\n\n this.trigger('targetchange', controls.$target);\n this.update();\n } else {\n $initTarget = $newTarget;\n }\n\n return this;\n },\n\n /**\n * Sets the zoom level of the magnifier\n * @param {Number} level\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomTo: function zoomTo(level) {\n if (level && _.isFinite(level)) {\n zoomLevel = adjustZoomLevel(level);\n }\n\n applyZoomLevel();\n showZoomLevel();\n updateMaxSize();\n updateZoom();\n /**\n * @event magnifierPanel#zoom\n * @param {Number} zoomLevel\n */\n\n this.trigger('zoom', zoomLevel);\n return this;\n },\n\n /**\n * Increments the zoom level of the magnifier\n * @param {Number} step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomBy: function zoomBy(step) {\n if (step && _.isFinite(step)) {\n this.zoomTo(zoomLevel + parseFloat(step));\n }\n\n return this;\n },\n\n /**\n * Zoom-in using the configured level step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomIn: function zoomIn() {\n return this.zoomBy(zoomLevelStep);\n },\n\n /**\n * Zoom-out using the configured level step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomOut: function zoomOut() {\n return this.zoomBy(-zoomLevelStep);\n },\n\n /**\n * Places the magnifier sight at a particular position on the target content\n * @param {Number} x\n * @param {Number} y\n * @returns {magnifierPanel}\n */\n zoomAt: function zoomAt(x, y) {\n var position;\n\n if (controls) {\n position = this.translate(x, y);\n controls.$inner.css({\n top: -position.top,\n left: -position.left\n });\n }\n },\n\n /**\n * Translates screen coordinates to zoom coordinates\n * @param {Number} x\n * @param {Number} y\n * @returns {Object}\n */\n translate: function translate(x, y) {\n return {\n top: translateMagnifier(y, targetHeight, dynamicComponentInstance.position.height),\n left: translateMagnifier(x, targetWidth, dynamicComponentInstance.position.width)\n };\n },\n\n /**\n * Updates the magnifier with the target content\n * @returns {magnifierPanel}\n * @fires update\n */\n update: function update() {\n if (controls && controls.$target) {\n controls.$clone = controls.$target.clone().removeAttr('id');\n controls.$clone.find('iframe').remove();\n controls.$clone.find('[name],[id],[data-serial]').removeAttr('name id data-serial');\n controls.$inner.empty().append(controls.$clone);\n controls.$clone.find('audio').prop('muted', true);\n applySize();\n applyZoomLevel();\n updateZoom();\n updateMaxSize();\n applyScrolling();\n /**\n * @event magnifierPanel#update\n */\n\n this.trigger('update');\n }\n\n return this;\n }\n }, defaultConfig);\n /**\n * Will update the magnifier content with the actual content\n * @type {Function}\n */\n\n var updateMagnifier = _.debounce(_.bind(magnifierPanel.update, magnifierPanel), debounceDelay);\n /**\n * Will update the magnifier content with the scrolling position\n * @type {Function}\n */\n\n\n var scrollingListenerCallback = _.throttle(function (event) {\n var $target = $$1(event.target);\n var scrollingTop = event.target.scrollTop;\n var scrollLeft = event.target.scrollLeft;\n var scrollId, scrollData; //check if the element is already known as a scrollable element\n\n if (controls && controls.$clone && $target.data('magnifier-scroll')) {\n scrollId = $target.data('magnifier-scroll');\n scrollData = _.find(scrolling, {\n id: scrollId\n });\n scrollData.scrollTop = scrollingTop;\n scrollData.scrollLeft = scrollLeft; //if in clone, scroll it\n\n scrollInClone(scrollData);\n } else {\n //if the element is not yet identified as a scrollable element, tag it and register its id\n scrollId = _.uniqueId('scrolling_');\n $target.attr('data-magnifier-scroll', scrollId);\n scrolling.push({\n id: scrollId,\n scrollTop: scrollingTop,\n scrollLeft: scrollLeft\n }); //update all\n\n magnifierPanel.update();\n }\n }, scrollingDelay);\n /**\n * Scroll an element in the clone\n *\n * @param {Object} scrollData\n * @param {String} scrollData.id\n * @param {Number} [scrollData.scrollTop]\n * @param {Number} [scrollData.scrollLeft]\n */\n\n\n function scrollInClone(scrollData) {\n var $clonedTarget;\n\n if (controls && controls.$clone && scrollData && scrollData.id) {\n $clonedTarget = controls.$clone.find(\"[data-magnifier-scroll=\".concat(scrollData.id, \"]\"));\n\n if ($clonedTarget.length) {\n if (_.isNumber(scrollData.scrollTop)) {\n $clonedTarget[0].scrollTop = scrollData.scrollTop;\n }\n\n if (_.isNumber(scrollData.scrollLeft)) {\n $clonedTarget[0].scrollLeft = scrollData.scrollLeft;\n }\n }\n }\n }\n /**\n * Capture all scroll positions of elements inside current target\n */\n\n\n function updateScrollPositions() {\n if (!controls || !controls.$target) {\n return;\n }\n\n var elements = [controls.$target];\n var scrollOffsetsChanged = false;\n\n while (elements.length) {\n var $currentElement = $$1(elements.shift());\n var scrollLeft = $currentElement.scrollLeft();\n var scrollTop = $currentElement.scrollTop();\n var scrollId = $currentElement.data('magnifier-scroll');\n elements.push.apply(elements, _toConsumableArray(Array.from($currentElement.children())));\n\n if (scrollLeft > 0 || scrollTop > 0 || scrollId) {\n scrollOffsetsChanged = true;\n\n if (scrollId) {\n var scrollData = _.find(scrolling, {\n id: scrollId\n });\n\n scrollData.scrollTop = scrollTop;\n scrollData.scrollLeft = scrollLeft;\n } else {\n scrollId = _.uniqueId('scrolling_');\n $currentElement.attr('data-magnifier-scroll', scrollId);\n scrolling.push({\n id: scrollId,\n scrollTop: scrollTop,\n scrollLeft: scrollLeft\n });\n }\n }\n } // If there is any changes to scroll offset inside the target the magnifier should be updated\n\n\n if (scrollOffsetsChanged) {\n magnifierPanel.update();\n }\n }\n /**\n * Initializes the listener for scrolling event and transfer the scrolling\n */\n\n\n function setScrollingListener() {\n updateScrollPositions();\n window.addEventListener('scroll', scrollingListenerCallback, true);\n }\n /**\n * Stops the listener for scrolling event\n */\n\n\n function removeScrollingListener() {\n window.removeEventListener('scroll', scrollingListenerCallback, true);\n }\n /**\n * Applies scrolling programmatically from the recorded list of elements to be scrolled\n */\n\n\n function applyScrolling() {\n _.forEach(scrolling, scrollInClone);\n }\n /**\n * Adjusts a provided zoom level to fit the constraints\n * @param {Number|String} level\n * @returns {Number}\n */\n\n\n function adjustZoomLevel(level) {\n return Math.max(zoomLevelMin, Math.min(parseFloat(level), zoomLevelMax));\n }\n /**\n * Applies the zoom level to the content\n */\n\n\n function applyZoomLevel() {\n if (controls) {\n controls.$inner.css({\n transform: \"scale(\".concat(zoomLevel, \")\")\n });\n }\n }\n /**\n * Shows the zoom level using a CSS animation\n */\n\n\n function showZoomLevel() {\n var $newZoomLevel;\n\n if (controls) {\n $newZoomLevel = controls.$zoomLevel.clone(true).html(zoomLevel);\n controls.$zoomLevel.before($newZoomLevel).remove();\n controls.$zoomLevel = $newZoomLevel;\n }\n }\n /**\n * Updates the max size according to the window's size\n */\n\n\n function updateMaxSize() {\n if (!dynamicComponentInstance) {\n return;\n }\n\n var $window = $$1(window);\n dynamicComponentInstance.config.maxWidth = $window.width() * maxRatio;\n dynamicComponentInstance.config.maxHeight = $window.height() * maxRatio;\n }\n /**\n * Forwards the size of the target to the cloned content\n */\n\n\n function applySize() {\n if (controls && controls.$clone) {\n targetWidth = controls.$target.width();\n targetHeight = controls.$target.height();\n controls.$clone.width(targetWidth).height(targetHeight);\n }\n }\n /**\n * Place the zoom sight at the right place inside the magnifier\n */\n\n\n function updateZoom() {\n var position;\n\n if (controls && controls.$target) {\n position = dynamicComponentInstance.position;\n position.x += dx + controls.$target.scrollLeft();\n position.y += dy + controls.$target.scrollTop();\n magnifierPanel.zoomAt(position.x, position.y);\n }\n }\n /**\n * Creates the observer that will react to DOM changes to update the magnifier\n */\n\n\n function createObserver() {\n observer = new window.MutationObserver(updateMagnifier);\n }\n /**\n * Starts to observe the DOM of the magnifier target\n */\n\n\n function startObserver() {\n if (controls && controls.$target) {\n observer.observe(controls.$target.get(0), {\n childList: true,\n // Set to true if additions and removals of the target node's child elements (including text nodes) are to be observed.\n attributes: true,\n // Set to true if mutations to target's attributes are to be observed.\n characterData: true,\n // Set to true if mutations to target's data are to be observed.\n subtree: true // Set to true if mutations to target and target's descendants are to be observed.\n\n });\n }\n\n setScrollingListener();\n }\n /**\n * Stops to observe the DOM of the magnifier target\n */\n\n\n function stopObserver() {\n observer.disconnect();\n removeScrollingListener();\n }\n /**\n * Translates a screen coordinate into the magnifier\n * @param {Number} coordinate\n * @param {Number} actualSize\n * @param {Number} magnifierSize\n * @returns {Number}\n */\n\n\n function translateMagnifier(coordinate, actualSize, magnifierSize) {\n var delta = 0;\n var ratio = zoomLevel;\n\n if (actualSize) {\n delta = actualSize * (zoomLevel - 1) / 2;\n ratio = (actualSize * zoomLevel - magnifierSize) / (actualSize - magnifierSize);\n }\n\n return coordinate * ratio - delta;\n }\n /**\n * Gets the top element from a particular absolute point.\n * @param {Number} x - the page X-coordinate of the point\n * @param {Number} y - the page Y-coordinate of the point\n * @returns {HTMLElement}\n */\n\n\n function getElementFromPoint(x, y) {\n var el; // this is done to prevent working with undefined coordinates\n\n x = x || 0;\n y = y || 0;\n\n if (controls) {\n controls.$overlay.addClass('hidden');\n }\n\n el = document.elementFromPoint(x, y);\n\n if (controls) {\n controls.$overlay.removeClass('hidden');\n }\n\n return el;\n }\n /**\n * Find the related node in the target. The both trees must have the same content.\n * @param {jQuery|HTMLElement} node - the node for which find a relation\n * @param {jQuery|HTMLElement} root - the root of the tree that contains the actual node\n * @param {jQuery|HTMLElement} target - the root of the tree that could contains the related node\n * @returns {jQuery}\n */\n\n\n function findSourceNode(node, root, target) {\n var $node = $$1(node);\n var $root = $$1(root);\n var $target = $$1(target);\n var indexes = [$node.index()]; // compute map of node's parents indexes\n\n $node.parents().each(function () {\n var $this = $$1(this);\n\n if (!$this.is($root)) {\n indexes.push($this.index());\n } else {\n return false;\n }\n }); // the last index is related to the root, so ignore it\n\n indexes.pop(); // now try to find the same node using the path provided by the indexes map\n\n if (indexes.length) {\n $node = $target;\n\n _.forEachRight(indexes, function (index) {\n $node = $node.children().eq(index);\n\n if (!$node.length) {\n return false;\n }\n });\n } else {\n // nothing to search for...\n $node = $$1();\n }\n\n return $node;\n }\n\n dynamicComponentInstance = dynamicComponent({}).on('rendercontent', function ($content) {\n var dynamicComponentContext = this;\n var $element = this.getElement();\n $element.addClass('magnifier-container');\n magnifierPanel.setTemplate(magnifierPanelTpl).on('render', function () {\n var self = this;\n var $component = this.getElement();\n this.setState('hidden', true); // compute the padding of the magnifier content\n\n dx = ($component.outerWidth() - $component.width()) / 2;\n dy = ($component.outerHeight() - $component.height()) / 2;\n controls = {\n $target: $initTarget,\n $inner: $$1('.inner', $component),\n $zoomLevel: $$1('.level', $component),\n $overlay: $$1('.overlay', $component)\n };\n $initTarget = null; // click on zoom-out control\n\n $component.on('click touchstart', '.control[data-control=\"zoomOut\"]', function (event) {\n event.preventDefault();\n self.zoomOut();\n }); // click on zoom-in control\n\n $component.on('click touchstart', '.control[data-control=\"zoomIn\"]', function (event) {\n event.preventDefault();\n self.zoomIn();\n }); // click on close controls\n\n $component.on('click touchstart', '.closeMagnifier', function (event) {\n event.preventDefault();\n self.hide();\n self.trigger('close');\n }); // interact through the magnifier glass with the zoomed content\n\n $component.on('click touchstart', '.overlay', function (event) {\n findSourceNode(getElementFromPoint(event.pageX, event.pageY), controls.$inner, controls.$target).click().focus();\n });\n createObserver();\n updateMaxSize();\n applyZoomLevel();\n }).on('show', function () {\n updateMagnifier();\n startObserver();\n dynamicComponentContext.show();\n }).on('hide', function () {\n stopObserver();\n dynamicComponentContext.hide();\n }).on('destroy', function () {\n stopObserver();\n $initTarget = null;\n controls = null;\n observer = null;\n dynamicComponentContext.destroy();\n }).init(initConfig).render($content);\n }).on('down move resize', function () {\n updateZoom();\n }).on('resize', function () {\n updateMaxSize();\n }).init(dynamicComponentConfig);\n return magnifierPanel;\n }\n\n return magnifierPanelFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/magnifier/magnifier',['lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/plugins/tools/magnifier/magnifierPanel', 'taoQtiTest/runner/helpers/map'], function (_, __, pluginFactory, hider, shortcut, namespaceHelper, magnifierPanelFactory, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n magnifierPanelFactory = magnifierPanelFactory && Object.prototype.hasOwnProperty.call(magnifierPanelFactory, 'default') ? magnifierPanelFactory['default'] : magnifierPanelFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'magnifier';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultOptions = {\n zoomMin: 2,\n // Smallest magnification factor\n zoomMax: 8,\n // Biggest magnification factor\n zoomStep: 0.5 // Increment between min an max\n\n };\n /**\n * Returns the configured plugin\n */\n\n var magnifier = pluginFactory({\n name: pluginName,\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultOptions, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var magnifierPanel = null;\n /**\n * Creates the magnifier panel on demand\n * @returns {magnifierPanel}\n * @fires plugin-magnifier-create.magnifier\n */\n\n function getMagnifierPanel() {\n var $container;\n\n if (!magnifierPanel) {\n $container = testRunner.getAreaBroker().getContainer();\n magnifierPanel = magnifierPanelFactory({\n levelMin: pluginConfig.zoomMin,\n levelMax: pluginConfig.zoomMax,\n levelStep: pluginConfig.zoomStep,\n component: {\n renderTo: $container.parent(),\n draggableContainer: $container.parent()\n }\n }).on('show', function () {\n /**\n * @event plugin-magnifier-show.magnifier\n */\n self.trigger('magnifier-show');\n }).on('hide', function () {\n /**\n * @event plugin-magnifier-hide.magnifier\n */\n self.trigger('magnifier-hide');\n }).on('zoom', function (level) {\n /**\n * @event plugin-magnifier-zoom.magnifier\n * @param {Number} zoomLevel\n */\n self.trigger('magnifier-zoom', level);\n }).on('close', function () {\n hideMagnifier();\n }).setTarget($container);\n /**\n * @event plugin-magnifier-create.magnifier\n */\n\n self.trigger('magnifier-create');\n }\n\n return magnifierPanel;\n }\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-magnifier\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'magnifier', true);\n }\n /**\n * Shows/hides the plugin GUI according to context\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Shows/hides the magnifier\n */\n\n\n function toggleMagnifier() {\n if (self.getState('enabled')) {\n if (self.getState('active')) {\n hideMagnifier();\n } else {\n showMagnifier();\n }\n }\n }\n /**\n * Opens the magnifier panel\n * @fires plugin-magnifier-show.magnifier\n */\n\n\n function showMagnifier() {\n getMagnifierPanel();\n\n if (magnifierPanel.is('hidden')) {\n magnifierPanel.show();\n }\n\n self.button.turnOn();\n testRunner.trigger(\"plugin-open.\".concat(pluginName));\n self.setState('active', true);\n }\n /**\n * Closes the magnifier panel\n * @fires plugin-magnifier-hide.magnifier\n */\n\n\n function hideMagnifier() {\n self.setState('active', false);\n self.button.turnOff();\n testRunner.trigger(\"plugin-close.\".concat(pluginName));\n\n if (magnifierPanel && !magnifierPanel.is('hidden')) {\n magnifierPanel.hide();\n }\n } // build element\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'magnify',\n title: __('Displays a customisable magnifier'),\n text: __('Magnifying Glass'),\n icon: 'find'\n }); // attach behavior\n\n this.button.on('click', function (event) {\n event.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner // runner life cycle\n .on('loaditem', function () {\n togglePlugin();\n self.disable();\n }).on('renderitem', function () {\n if (magnifierPanel) {\n magnifierPanel.update().zoomTo(pluginConfig.zoomMin);\n }\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n if (self.getState('active')) {\n hideMagnifier();\n }\n\n self.disable();\n }).on('destroy', function () {\n if (magnifierPanel) {\n magnifierPanel.destroy();\n }\n\n magnifierPanel = null;\n }) // commands that controls the magnifier\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n toggleMagnifier();\n }\n }).on(\"\".concat(actionPrefix, \"in\"), function () {\n if (isEnabled() && self.getState('enabled') && self.getState('active')) {\n getMagnifierPanel().zoomIn();\n }\n }).on(\"\".concat(actionPrefix, \"out\"), function () {\n if (isEnabled() && self.getState('enabled') && self.getState('active')) {\n getMagnifierPanel().zoomOut();\n }\n }).on(\"\".concat(actionPrefix, \"close\"), function () {\n if (self.getState('active')) {\n hideMagnifier();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enables the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disables the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Shows the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hides the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return magnifier;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/zoom',['jquery', 'i18n', 'ui/hider', 'ui/transformer', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map'], function ($, __, hider, transformer, shortcut, namespaceHelper, pluginFactory, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n transformer = transformer && Object.prototype.hasOwnProperty.call(transformer, 'default') ? transformer['default'] : transformer;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author dieter <dieter@taotesting.com>\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * The standard zoom level, in percentage\n * @type {Number}\n */\n\n var standard = 100;\n /**\n * Zoom-In/Zoom-Out steps\n * @type {Number}\n */\n\n var increment = 10;\n /**\n * The zoom boundaries, in percentage\n * @type {Object}\n */\n\n var threshold = {\n lower: 10,\n upper: 200\n };\n /**\n * Sets the zoom level\n * @param {jQuery} $target\n * @param {Number} level - Zoom percentage\n */\n\n var _setZoomLevel = function _setZoomLevel($target, level) {\n var $parent = $target.parent();\n var newScale = level / standard;\n var isOverZoom = $parent.outerWidth(true) < $target.width() * newScale;\n\n if (isOverZoom) {\n transformer.setTransformOrigin($target, '0 0');\n $parent.css('margin-left', '0');\n } else {\n transformer.setTransformOrigin($target, '50% 0');\n $parent.css('margin-left', '');\n }\n\n transformer.scale($target, newScale);\n };\n /**\n * Restores the standard zoom level\n * @param {jQuery} $target\n */\n\n\n var _resetZoom = function _resetZoom($target) {\n transformer.reset($target);\n };\n /**\n * Forces a browser repaint\n * Solution from http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes?answertab=votes#tab-top\n * @param {jQuery} $target\n */\n\n\n var forceRepaint = function forceRepaint($target) {\n var sel = $target[0];\n\n if (sel) {\n sel.style.display = 'none';\n sel.offsetHeight; // no need to store this anywhere, the reference is enough\n\n sel.style.display = '';\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var zoom = pluginFactory({\n name: 'zoom',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isConfigured() {\n //to be activated with the special category x-tao-option-zoom\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'zoom', true);\n }\n /**\n * Is zoom activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isConfigured()) {\n //allow zoom\n self.show();\n } else {\n self.hide();\n }\n }\n\n function zoomAction(dir) {\n var inc = increment * dir;\n var el, sx, sy, before, after;\n\n if (self.$zoomTarget) {\n el = self.$zoomTarget[0];\n before = el.getBoundingClientRect();\n sx = self.$container.scrollLeft();\n sy = self.$container.scrollTop();\n self.zoom = Math.max(threshold.lower, Math.min(threshold.upper, self.zoom + inc));\n\n if (self.zoom === standard) {\n _resetZoom(self.$zoomTarget);\n } else {\n _setZoomLevel(self.$zoomTarget, self.zoom);\n } // force a browser repaint to fix a scrollbar issue with WebKit\n\n\n forceRepaint(self.$zoomTarget);\n after = el.getBoundingClientRect();\n sx = Math.max(0, sx + (after.width - before.width) / 2);\n sy = Math.max(0, sy + (after.height - before.height) / 2);\n self.$container.scrollLeft(sx).scrollTop(sy);\n }\n }\n\n function zoomIn() {\n if (self.getState('enabled') !== false) {\n zoomAction(1);\n }\n }\n\n function zoomOut() {\n if (self.getState('enabled') !== false) {\n zoomAction(-1);\n }\n } //build element (detached)\n\n\n this.buttonZoomOut = this.getAreaBroker().getToolbox().createEntry({\n control: 'zoomOut',\n title: __('Zoom out'),\n icon: 'remove'\n });\n this.buttonZoomIn = this.getAreaBroker().getToolbox().createEntry({\n control: 'zoomIn',\n title: __('Zoom in'),\n icon: 'add'\n }); //attach behavior\n\n this.buttonZoomIn.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-zoomin');\n }); //attach behavior\n\n this.buttonZoomOut.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-zoomout');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.in) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.in, this.getName(), true), function () {\n testRunner.trigger('tool-zoomin');\n }, {\n avoidInput: true\n });\n }\n\n if (pluginShortcuts.out) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.out, this.getName(), true), function () {\n testRunner.trigger('tool-zoomout');\n }, {\n avoidInput: true\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n self.zoom = standard;\n togglePlugin();\n self.disable();\n }).on('renderitem', function () {\n self.$container = $('#qti-content');\n self.$zoomTarget = $('.qti-item');\n self.enable();\n }).on('enabletools', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n }).on('tool-zoomin', zoomIn).on('tool-zoomout', zoomOut);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.buttonZoomIn.enable();\n this.buttonZoomOut.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.buttonZoomIn.disable();\n this.buttonZoomOut.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.buttonZoomIn.show();\n this.buttonZoomOut.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.buttonZoomIn.hide();\n this.buttonZoomOut.hide();\n }\n });\n\n return zoom;\n\n});\n\n","\n(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n('/*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.test-runner-scope .content-wrapper p.key-navigation-group, .test-runner-scope .content-wrapper div.key-navigation-group:not(.select2-container) {\\n padding: 5px !important;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction) {\\n border-width: 1px !important;\\n border-style: solid;\\n border-color: transparent;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction).focusin {\\n border-color: #0e5d91 !important;\\n outline: none;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction).qti-interaction .qti-choice.key-navigation-highlight:not(.tts-content-node) {\\n background: #e7eff4 !important;\\n}\\n\\n.test-runner-scope .content-wrapper span.key-navigation-group {\\n border: none !important;\\n}\\n\\n.test-runner-scope .content-wrapper span.key-navigation-group.focusin {\\n outline: solid #0e5d91 1px !important;\\n outline-offset: 1px;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group.focusin {\\n background: #e7eff4;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight .qti-navigator-tab {\\n border-width: 2px;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight:focus {\\n outline: none;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight:focus .qti-navigator-tab {\\n border-top-color: #222 !important;\\n border-left-color: #222 !important;\\n border-right-color: #222 !important;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group li.qti-navigator-item.key-navigation-highlight {\\n padding-left: 8px;\\n border-left: solid 2px #222;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group li.qti-navigator-item.key-navigation-highlight .key-navigation-highlight:focus {\\n outline: none;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group.focusin {\\n -ms-box-shadow: 0 0 6px 2px #3e7da7;\\n -o-box-shadow: 0 0 6px 2px #3e7da7;\\n box-shadow: 0 0 6px 2px #3e7da7;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus {\\n margin-bottom: 0;\\n border-bottom-color: #e7eff4 !important;\\n outline: none;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus.active {\\n border-bottom-color: transparent !important;\\n background: #e7eff4 !important;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus:not(.active):not(:active) .li-inner {\\n color: #e7eff4;\\n}\\n\\nheader .settings-menu .key-navigation-group {\\n padding-right: 5px;\\n}\\n\\nheader .settings-menu .key-navigation-group.focusin {\\n background-color: rgba(14, 93, 145, 0.5);\\n padding-bottom: 10px;\\n}\\n\\nheader .settings-menu .key-navigation-highlight:focus {\\n height: 54px;\\n color: white !important;\\n border-bottom: solid 2px white !important;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/content/accessibility/css/key-navigation.css.map *//*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.countdown {\\n opacity: 0;\\n position: relative;\\n display: inline-block;\\n overflow: hidden;\\n text-align: center;\\n vertical-align: top;\\n line-height: 1.2;\\n padding: 0 20px;\\n margin-top: -1px;\\n height: 100%;\\n}\\n\\n.countdown.rendered {\\n opacity: 1;\\n transition: opacity, 300ms, linear, 0s;\\n}\\n\\n.countdown .label {\\n max-width: 130px;\\n display: block;\\n font-size: 12px;\\n font-size: 1.2rem;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/controls/timer/component/css/countdown.css.map *//*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.timer-box {\\n opacity: 0;\\n padding-top: 0;\\n white-space: nowrap;\\n /*flex item of control-box */\\n flex: 1 0 auto;\\n /* is also a flex container for .qti-timer */\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n}\\n\\n.timer-box.rendered {\\n opacity: 1;\\n transition: opacity, 300ms, linear, 0s;\\n}\\n\\n.timer-box .timer-toggler {\\n text-decoration: none;\\n color: white;\\n line-height: 1.3;\\n opacity: .68;\\n padding: 8px 20px;\\n position: relative;\\n top: -1px;\\n left: 20px;\\n z-index: 2;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box .timer-toggler:hover, .timer-box .timer-toggler:active, .timer-box .timer-toggler:focus {\\n outline: unset;\\n}\\n\\n.timer-box .timer-toggler:active, .timer-box .timer-toggler:focus {\\n border: 2px solid white;\\n}\\n\\n.timer-box .timer-toggler:hover {\\n opacity: .93;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box.zen .timer-toggler {\\n opacity: .93;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box.zen .countdown .time {\\n opacity: 0;\\n transition: opacity, 1s, ease-out, 0s;\\n}\\n\\n.timer-box .countdown::before {\\n content: \\' \\';\\n background: rgba(255, 255, 255, 0.3);\\n width: 1px;\\n height: 20px;\\n position: absolute;\\n left: 0;\\n top: 5px;\\n}\\n\\n.timer-box .countdown:first-child::before {\\n content: none;\\n}\\n\\n.timer-box .countdown[data-scope=test][data-type=min] {\\n order: 5;\\n}\\n\\n.timer-box .countdown[data-scope=test] {\\n order: 10;\\n}\\n\\n.timer-box .countdown[data-scope=testPart][data-type=min] {\\n order: 15;\\n}\\n\\n.timer-box .countdown[data-scope=testPart] {\\n order: 20;\\n}\\n\\n.timer-box .countdown[data-scope=section][data-type=min] {\\n order: 25;\\n}\\n\\n.timer-box .countdown[data-scope=section] {\\n order: 30;\\n}\\n\\n.timer-box .countdown[data-scope=item][data-type=min] {\\n order: 35;\\n}\\n\\n.timer-box .countdown[data-scope=item] {\\n order: 40;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/controls/timer/component/css/timerbox.css.map */');\n","\ndefine(\"taoQtiTest/loader/testPlugins.bundle\", function(){});\n"]}