1 line
1.9 MiB
1 line
1.9 MiB
{"version":3,"sources":["../qtiCommonRenderer/helpers/ckConfigurator.js","../qtiItem/helper/util.js","../qtiItem/helper/rendererConfig.js","../qtiItem/core/Element.js","../qtiCommonRenderer/helpers/container.js","../qtiCommonRenderer/helpers/Graphic.js","../qtiCommonRenderer/helpers/instructions/Instruction.js","../qtiCommonRenderer/helpers/instructions/instructionManager.js","../qtiCommonRenderer/helpers/itemStylesheetHandler.js","../qtiCommonRenderer/helpers/patternMask.js","../qtiCommonRenderer/helpers/PciPrettyPrint.js","../qtiCommonRenderer/helpers/PciResponse.js","../qtiCommonRenderer/helpers/PortableElement.js","../qtiCommonRenderer/helpers/sizeAdapter.js","../qtiCommonRenderer/helpers/uploadMime.js","../qtiCommonRenderer/renderers/choices/Gap.js","../qtiCommonRenderer/renderers/choices/GapImg.js","../qtiCommonRenderer/renderers/choices/GapText.js","../qtiCommonRenderer/renderers/choices/Hottext.js","../qtiCommonRenderer/renderers/choices/InlineChoice.js","../qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction.js","../qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction.js","../qtiCommonRenderer/renderers/choices/SimpleChoice.ChoiceInteraction.js","../qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction.js","../portableElementRegistry/factory/factory.js","../qtiCreator/helper/qtiElements.js","../portableElementRegistry/factory/ciRegistry.js","../portableElementRegistry/ciRegistry.js","../portableElementRegistry/factory/icRegistry.js","../portableElementRegistry/icRegistry.js","../portableElementRegistry/assetManager/portableAssetStrategy.js","../qtiCommonRenderer/renderers/config.js","../qtiCommonRenderer/renderers/Container.js","../qtiCommonRenderer/renderers/Img.js","../qtiCommonRenderer/renderers/Include.js","../qtiCommonRenderer/renderers/interactions/AssociateInteraction.js","../qtiCommonRenderer/renderers/interactions/ChoiceInteraction.js","../qtiCommonRenderer/renderers/interactions/EndAttemptInteraction.js","../qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction.js","../qtiCommonRenderer/renderers/interactions/GapMatchInteraction.js","../qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction.js","../qtiCommonRenderer/renderers/interactions/GraphicGapMatchInteraction.js","../qtiCommonRenderer/renderers/interactions/GraphicOrderInteraction.js","../qtiCommonRenderer/renderers/interactions/HotspotInteraction.js","../qtiCommonRenderer/renderers/interactions/HottextInteraction.js","../qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction.js","../qtiCommonRenderer/renderers/interactions/MatchInteraction.js","../qtiCommonRenderer/renderers/interactions/MediaInteraction.js","../qtiCommonRenderer/renderers/interactions/OrderInteraction.js","../../qtiCustomInteractionContext.js","../qtiCommonRenderer/renderers/interactions/pci/instanciator.js","../qtiCommonRenderer/renderers/interactions/pci/common.js","../qtiCommonRenderer/renderers/interactions/pci/ims.js","../qtiCommonRenderer/renderers/interactions/PortableCustomInteraction.js","../qtiCommonRenderer/renderers/interactions/Prompt.js","../qtiCommonRenderer/renderers/interactions/SelectPointInteraction.js","../qtiCommonRenderer/renderers/interactions/SliderInteraction.js","../qtiCommonRenderer/renderers/interactions/TextEntryInteraction.js","../qtiCommonRenderer/renderers/interactions/UploadInteraction.js","../qtiCommonRenderer/renderers/Item.js","../qtiCommonRenderer/renderers/Math.js","../qtiItem/helper/container.js","../qtiCommonRenderer/renderers/ModalFeedback.js","../qtiCommonRenderer/renderers/Object.js","../../qtiInfoControlContext.js","../qtiCommonRenderer/renderers/PortableInfoControl.js","../qtiCommonRenderer/renderers/PrintedVariable.js","../qtiItem/helper/interactionHelper.js","../qtiRunner/core/Renderer.js","../qtiCommonRenderer/renderers/Renderer.js","../qtiCommonRenderer/renderers/rendererProvider.js","../qtiCommonRenderer/renderers/RubricBlock.js","../qtiCommonRenderer/renderers/Stylesheet.js","../qtiCommonRenderer/renderers/Table.js","../qtiCommonRenderer/renderers/Tooltip.js","../qtiItem/core/IdentifiedElement.js","../qtiItem/core/choices/Choice.js","../qtiItem/core/choices/Hotspot.js","../qtiItem/core/choices/AssociableHotspot.js","../qtiItem/mixin/Mixin.js","../qtiItem/core/Container.js","../qtiItem/mixin/Container.js","../qtiItem/core/choices/ContainerChoice.js","../qtiItem/core/choices/Gap.js","../qtiItem/core/Object.js","../qtiItem/core/choices/GapImg.js","../qtiItem/core/choices/GapText.js","../qtiItem/core/choices/HotspotChoice.js","../qtiItem/mixin/ContainerInline.js","../qtiItem/core/choices/Hottext.js","../qtiItem/core/choices/TextVariableChoice.js","../qtiItem/core/choices/InlineChoice.js","../qtiItem/core/choices/SimpleAssociableChoice.js","../qtiItem/core/choices/SimpleChoice.js","../qtiItem/core/choices/TextEntry.js","../qtiItem/core/feedbacks/Feedback.js","../qtiItem/core/feedbacks/FeedbackBlock.js","../qtiItem/core/feedbacks/FeedbackInline.js","../qtiItem/core/feedbacks/ModalFeedback.js","../qtiItem/core/Img.js","../qtiItem/mixin/NamespacedElement.js","../qtiItem/core/Include.js","../qtiItem/core/interactions/Interaction.js","../qtiItem/core/interactions/Prompt.js","../qtiItem/core/interactions/BlockInteraction.js","../qtiItem/helper/responseRules.js","../qtiItem/helper/response.js","../qtiItem/core/variables/VariableDeclaration.js","../qtiItem/core/variables/OutcomeDeclaration.js","../qtiItem/helper/maxScore.js","../qtiItem/core/interactions/AssociateInteraction.js","../qtiItem/core/interactions/ChoiceInteraction.js","../qtiItem/core/interactions/ContainerInteraction.js","../qtiItem/mixin/CustomElement.js","../qtiItem/core/interactions/CustomInteraction.js","../qtiItem/core/interactions/InlineInteraction.js","../qtiItem/core/interactions/EndAttemptInteraction.js","../qtiItem/core/interactions/ExtendedTextInteraction.js","../qtiItem/core/interactions/GapMatchInteraction.js","../qtiItem/core/interactions/ObjectInteraction.js","../qtiItem/core/interactions/GraphicInteraction.js","../qtiItem/core/interactions/GraphicAssociateInteraction.js","../qtiItem/core/interactions/GraphicGapMatchInteraction.js","../qtiItem/core/interactions/GraphicOrderInteraction.js","../qtiItem/core/interactions/HotspotInteraction.js","../qtiItem/core/interactions/HottextInteraction.js","../qtiItem/core/interactions/InlineChoiceInteraction.js","../qtiItem/core/interactions/MatchInteraction.js","../qtiItem/core/interactions/MediaInteraction.js","../qtiItem/core/interactions/OrderInteraction.js","../qtiItem/core/interactions/SelectPointInteraction.js","../qtiItem/core/interactions/SliderInteraction.js","../qtiItem/core/interactions/TextEntryInteraction.js","../qtiItem/core/interactions/UploadInteraction.js","../qtiItem/mixin/ContainerItemBody.js","../qtiItem/core/Item.js","../qtiItem/core/qtiClasses.js","../qtiItem/helper/xmlNsHandler.js","../qtiItem/helper/itemScore.js","../qtiItem/core/Loader.js","../qtiItem/core/Math.js","../qtiItem/core/PortableInfoControl.js","../qtiItem/core/PrintedVariable.js","../qtiItem/core/response/SimpleFeedbackRule.js","../qtiItem/core/ResponseProcessing.js","../qtiItem/core/RubricBlock.js","../qtiItem/core/Stylesheet.js","../qtiItem/mixin/ContainerTable.js","../qtiItem/core/Table.js","../qtiItem/core/Tooltip.js","../qtiItem/core/variables/ResponseDeclaration.js","../qtiItem/helper/EventMgr.js","../qtiItem/helper/pci.js","../qtiItem/helper/modalFeedback.js","../qtiItem/helper/Parser.js","../qtiItem/helper/simpleParser.js","../qtiItem/helper/xincludeLoader.js","../runner/provider/manager/picManager.js","../runner/provider/manager/userModules.js","../portableElementRegistry/provider/sideLoadingProviderFactory.js","../reviewRenderer/renderers/config.js","../reviewRenderer/renderers/Renderer.js","../reviewRenderer/renderers/rendererProvider.js","../runner/rendererStrategies.js","../runner/provider/qti.js","../runner/qtiItemRunner.js","module-create.js","/Users/hannadzmitryieva/projects/taoCore/tao/views/build/config-wrap-end-default.js"],"names":[],"mappings":"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","sourcesContent":["define('taoQtiItem/qtiCommonRenderer/helpers/ckConfigurator',['ui/ckeditor/ckConfigurator'], function (ckConfigurator$1) { 'use strict';\n\n ckConfigurator$1 = ckConfigurator$1 && Object.prototype.hasOwnProperty.call(ckConfigurator$1, 'default') ? ckConfigurator$1['default'] : ckConfigurator$1;\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 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Generate a configuration object for CKEDITOR\n *\n * @param editor instance of ckeditor\n * @param toolbarType block | inline | flow | qtiBlock | qtiInline | qtiFlow | reset to get back to normal\n * @param {Object} [options] - is based on the CKEDITOR config object with some additional sugar\n * Note that it's here you need to add parameters for the resource manager.\n * Some options are not covered in http://docs.ckeditor.com/#!/api/CKEDITOR.config\n * @param [options.dtdOverrides] - @see dtdOverrides which pre-defines them\n * @param {Object} [options.positionedPlugins] - @see ckConfig.positionedPlugins\n * @param {Boolean} [options.qtiImage] - enables the qtiImage plugin\n * @param {Boolean} [options.qtiInclude] - enables the qtiInclude plugin\n * @param {Boolean} [options.underline] - enables the underline plugin\n * @param {Boolean} [options.mathJax] - enables the mathJax plugin\n *\n * @see http://docs.ckeditor.com/#!/api/CKEDITOR.config\n */\n var getConfig = function(editor, toolbarType, options) {\n options = options || {};\n\n options.underline = true;\n\n return ckConfigurator$1.getConfig(editor, toolbarType, options);\n };\n\n var ckConfigurator = {\n getConfig: getConfig\n };\n\n return ckConfigurator;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/util',['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) 2015 (original work) Open Assessment Technologies SA\n *\n */\n\n var util = {\n buildSerial: function buildSerial(prefix) {\n var id = prefix || '';\n var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 22; i++) {\n id += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return id;\n },\n\n /**\n * Generates an id for a Qti element (the generation is different from identifier)\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildId: function buildId(item, prefix) {\n var id;\n var usedIds;\n var i = 1;\n var suffix = '';\n var exists = false;\n\n if (!item) {\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n usedIds = item.getUsedIds();\n\n do {\n exists = false;\n id = prefix + suffix;\n if (_.contains(usedIds, id)) {\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while (exists);\n\n return id;\n },\n\n /**\n * Generates an identifier for a Qti element\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @param {Boolean} [useSuffix = true] - add a \"_ + index\" to the identifier\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildIdentifier: function buildIdentifier(item, prefix, useSuffix) {\n var id;\n var usedIds;\n var suffix = '';\n var i = 1;\n var exists = false;\n\n if (!item) {\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n if (!prefix) {\n throw new TypeError('Prefix is required to build an identifier');\n }\n\n usedIds = item.getUsedIdentifiers();\n useSuffix = _.isUndefined(useSuffix) ? true : useSuffix;\n\n if (prefix) {\n prefix = prefix\n .replace(/_[0-9]+$/gi, '_') //detect incremental id of type choice_12, response_3, etc.\n .replace(/[^a-zA-Z0-9_]/gi, '_')\n .replace(/(_)+/gi, '_');\n if (useSuffix) {\n suffix = '_' + i;\n }\n }\n\n do {\n exists = false;\n id = prefix + suffix;\n if (usedIds[id]) {\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while (exists);\n\n return id;\n },\n\n findInCollection: function findInCollection(element, collectionNames, searchedSerial) {\n var found = null;\n\n if (_.isString(collectionNames)) {\n collectionNames = [collectionNames];\n }\n\n if (_.isArray(collectionNames)) {\n _.each(collectionNames, function(collectionName) {\n //get collection to search in (resolving case like interaction.choices.0\n var collection = element;\n _.each(collectionName.split('.'), function(nameToken) {\n collection = collection[nameToken];\n });\n var elt = collection[searchedSerial];\n\n if (elt) {\n found = { parent: element, element: elt };\n return false; //break the each loop\n }\n\n //search inside each elements:\n _.each(collection, function(elt) {\n if (_.isFunction(elt.find)) {\n found = elt.find(searchedSerial);\n if (found) {\n return false; //break the each loop\n }\n }\n });\n\n if (found) {\n return false; //break the each loop\n }\n });\n } else {\n throw new Error('invalid argument : collectionNames must be an array or a string');\n }\n\n return found;\n },\n addMarkupNamespace: function addMarkupNamespace(markup, ns) {\n if (ns) {\n markup = markup.replace(/<(\\/)?([a-z:]+)(\\s?)([^><]*)>/g, function($0, $1, $2, $3, $4) {\n if ($2.indexOf(':') > 0) {\n return $0;\n }\n $1 = $1 || '';\n $3 = $3 || '';\n return '<' + $1 + ns + ':' + $2 + $3 + $4 + '>';\n });\n return markup;\n }\n return markup;\n },\n removeMarkupNamespaces: function removeMarkupNamespace(markup) {\n return markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, '<$1$3>');\n },\n getMarkupUsedNamespaces: function getMarkupUsedNamespaces(markup) {\n var namespaces = [];\n markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, function(original, slash, ns, node) {\n namespaces.push(ns);\n return '<' + slash + node + '>';\n });\n return _.uniq(namespaces);\n }\n };\n\n return util;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/rendererConfig',['lodash', 'jquery'], function (_, $) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n\n var rendererConfigHelper = {};\n\n rendererConfigHelper.getOptionsFromArguments = function(args) {\n var options = {\n data: {},\n placeholder: null,\n subclass: '',\n renderer: null\n };\n\n _.each(args, function(arg) {\n if (arg) {\n if (arg.isRenderer) {\n options.renderer = arg;\n } else if (arg instanceof $ && arg.length) {\n options.placeholder = arg;\n } else if (_.isString(arg)) {\n options.subclass = arg;\n } else if (_.isPlainObject(arg)) {\n options.data = arg;\n } else {\n console.log('invalid arg', arg, args);\n }\n }\n });\n\n return options;\n };\n\n return rendererConfigHelper;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Element',['jquery', 'lodash', 'class', 'core/logger', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/qtiItem/helper/rendererConfig'], function ($, _, _class, loggerFactory, util, rendererConfig) { 'use strict';\n\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 util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\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 (original work) Open Assessment Technologies SA\n *\n */\n\n var _instances = {};\n\n /**\n * Create a logger\n */\n var logger = loggerFactory('taoQtiItem/qtiItem/core/Element');\n\n var Element = Class.extend({\n qtiClass: '',\n serial: '',\n rootElement: null,\n init: function(serial, attributes) {\n //init own attributes\n this.attributes = {};\n\n //system properties, for item creator internal use only\n this.metaData = {};\n\n //init call in the format init(attributes)\n if (typeof serial === 'object') {\n attributes = serial;\n serial = '';\n }\n\n if (!serial) {\n serial = util.buildSerial(this.qtiClass + '_');\n }\n\n if (serial && (typeof serial !== 'string' || !serial.match(/^[a-z_0-9]*$/i))) {\n throw 'invalid QTI serial : (' + typeof serial + ') ' + serial;\n }\n\n if (!_instances[serial]) {\n _instances[serial] = this;\n this.serial = serial;\n this.setAttributes(attributes || {});\n } else {\n throw 'a QTI Element with the same serial already exists ' + serial;\n }\n\n if (typeof this.initContainer === 'function') {\n this.initContainer(arguments[2] || '');\n }\n if (typeof this.initObject === 'function') {\n this.initObject();\n }\n },\n is: function(qtiClass) {\n return qtiClass === this.qtiClass;\n },\n placeholder: function() {\n return '{{' + this.serial + '}}';\n },\n getSerial: function() {\n return this.serial;\n },\n getUsedIdentifiers: function() {\n var usedIds = {};\n var elts = this.getComposingElements();\n for (var i in elts) {\n var elt = elts[i];\n var id = elt.attr('identifier');\n if (id) {\n //warning: simplistic implementation, allow only one unique identifier in the item no matter the element class/type\n usedIds[id] = elt;\n }\n }\n return usedIds;\n },\n\n /**\n * Get the ids in use. (id is different from identifier)\n * @returns {Array} of the ids in use\n */\n getUsedIds: function getUsedIds() {\n var usedIds = [];\n _.forEach(this.getComposingElements(), function(elt) {\n var id = elt.attr('id');\n if (id && !_.contains(usedIds, id)) {\n usedIds.push(id);\n }\n });\n return usedIds;\n },\n\n attr: function(name, value) {\n if (name) {\n if (value !== undefined) {\n this.attributes[name] = value;\n } else {\n if (typeof name === 'object') {\n for (var prop in name) {\n this.attr(prop, name[prop]);\n }\n } else if (typeof name === 'string') {\n if (this.attributes[name] === undefined) {\n return undefined;\n } else {\n return this.attributes[name];\n }\n }\n }\n }\n return this;\n },\n data: function(name, value) {\n if (name) {\n if (value !== undefined) {\n this.metaData[name] = value;\n $(document).trigger('metaChange.qti-widget', { element: this, key: name, value: value });\n } else {\n if (typeof name === 'object') {\n for (var prop in name) {\n this.data(prop, name[prop]);\n }\n } else if (typeof name === 'string') {\n if (this.metaData[name] === undefined) {\n return undefined;\n } else {\n return this.metaData[name];\n }\n }\n }\n }\n return this;\n },\n removeData: function(name) {\n delete this.metaData[name];\n return this;\n },\n removeAttr: function(name) {\n return this.removeAttributes(name);\n },\n setAttributes: function(attributes) {\n if (!_.isPlainObject(attributes)) {\n logger.warn('attributes should be a plain object');\n }\n this.attributes = attributes;\n return this;\n },\n getAttributes: function() {\n return _.clone(this.attributes);\n },\n removeAttributes: function(attrNames) {\n if (typeof attrNames === 'string') {\n attrNames = [attrNames];\n }\n for (var i in attrNames) {\n delete this.attributes[attrNames[i]];\n }\n return this;\n },\n getComposingElements: function() {\n var elts = {};\n function append(element) {\n elts[element.getSerial()] = element; //pass individual object by ref, instead of the whole list(object)\n elts = _.extend(elts, element.getComposingElements());\n }\n if (typeof this.initContainer === 'function') {\n append(this.getBody());\n }\n if (typeof this.initObject === 'function') {\n append(this.getObject());\n }\n _.each(this.metaData, function(v) {\n if (Element.isA(v, '_container')) {\n append(v);\n } else if (_.isArray(v)) {\n _.each(v, function(v) {\n if (Element.isA(v, '_container')) {\n append(v);\n }\n });\n }\n });\n return elts;\n },\n getUsedClasses: function() {\n var ret = [this.qtiClass],\n composingElts = this.getComposingElements();\n\n _.each(composingElts, function(elt) {\n ret.push(elt.qtiClass);\n });\n\n return _.uniq(ret);\n },\n find: function(serial) {\n var found = null;\n var object, body;\n\n if (typeof this.initObject === 'function') {\n object = this.getObject();\n if (object.serial === serial) {\n found = { parent: this, element: object, location: 'object' };\n }\n }\n\n if (!found && typeof this.initContainer === 'function') {\n body = this.getBody();\n if (body.serial === serial) {\n found = { parent: this, element: body, location: 'body' };\n } else {\n found = this.getBody().find(serial, this);\n }\n }\n\n return found;\n },\n parent: function() {\n var item = this.getRootElement();\n if (item) {\n var found = item.find(this.getSerial());\n if (found) {\n return found.parent;\n }\n }\n return null;\n },\n /**\n * @deprecated - use setRootElement() instead\n */\n setRelatedItem: function(item) {\n logger.warn('Deprecated use of setRelatedItem()');\n this.setRootElement(item);\n },\n setRootElement: function(item) {\n var composingElts, i;\n\n if (Element.isA(item, 'assessmentItem')) {\n this.rootElement = item;\n composingElts = this.getComposingElements();\n for (i in composingElts) {\n composingElts[i].setRootElement(item);\n }\n }\n },\n /**\n * @deprecated - use getRootElement() instead\n */\n getRelatedItem: function() {\n logger.warn('Deprecated use of getRelatedItem()');\n return this.getRootElement();\n },\n getRootElement: function() {\n var ret = null;\n if (Element.isA(this.rootElement, 'assessmentItem')) {\n ret = this.rootElement;\n }\n return ret;\n },\n setRenderer: function(renderer) {\n if (renderer && renderer.isRenderer) {\n this.renderer = renderer;\n var elts = this.getComposingElements();\n for (var serial in elts) {\n elts[serial].setRenderer(renderer);\n }\n } else {\n throw 'invalid qti rendering engine';\n }\n },\n getRenderer: function() {\n return this.renderer;\n },\n /**\n * Render the element. Arguments are all optional and can be given in any order.\n * Argument parsing is based on argument type and is done by taoQtiItem/qtiItem/core/helpers/rendererConfig\n * @param {Renderer} renderer - specify which renderer to use\n * @param {jQuery} placeholder - DOM element that will be replaced by the rendered element\n * @param {Object} data - template data for the rendering\n * @param {String} subclass - subclass enables different behaviour of the same qti class in different contexts (eg. we could have different rendering for simpleChoice according to where it is being used: simpleChoice.orderInteraction, simpleChoice.choiceInteraction...)\n * @returns {String} - the rendered element as an HTML string\n */\n render: function render() {\n var args = rendererConfig.getOptionsFromArguments(arguments);\n var _renderer = args.renderer || this.getRenderer();\n var rendering;\n\n var tplData = {},\n defaultData = {\n tag: this.qtiClass,\n serial: this.serial,\n attributes: this.getAttributes()\n };\n\n if (!_renderer) {\n throw new Error('render: no renderer found for the element ' + this.qtiClass + ':' + this.serial);\n }\n\n if (typeof this.initContainer === 'function') {\n //allow body to have a different renderer if it has its own renderer set\n defaultData.body = this.getBody().render(args.renderer);\n }\n if (typeof this.initObject === 'function') {\n defaultData.object = {\n attributes: this.object.getAttributes()\n };\n defaultData.object.attributes.data = _renderer.resolveUrl(this.object.attr('data'));\n }\n\n tplData = _.merge(defaultData, args.data || {});\n tplData = _renderer.getData(this, tplData, args.subclass);\n rendering = _renderer.renderTpl(this, tplData, args.subclass);\n if (args.placeholder) {\n args.placeholder.replaceWith(rendering);\n }\n\n return rendering;\n },\n postRender: function(data, altClassName, renderer) {\n var postRenderers = [];\n var _renderer = renderer || this.getRenderer();\n\n if (typeof this.initContainer === 'function') {\n //allow body to have a different renderer if it has its own renderer set\n postRenderers = this.getBody().postRender(data, '', renderer);\n }\n\n if (_renderer) {\n postRenderers.push(_renderer.postRender(this, data, altClassName));\n } else {\n throw 'postRender: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n\n return _.compact(postRenderers);\n },\n getContainer: function($scope, subclass) {\n var renderer = this.getRenderer();\n if (renderer) {\n return renderer.getContainer(this, $scope, subclass);\n } else {\n throw 'getContainer: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n },\n toArray: function() {\n var arr = {\n serial: this.serial,\n type: this.qtiClass,\n attributes: this.getAttributes()\n };\n\n if (typeof this.initContainer === 'function') {\n arr.body = this.getBody().toArray();\n }\n if (typeof this.initObject === 'function') {\n arr.object = this.object.toArray();\n }\n\n return arr;\n },\n isEmpty: function() {\n //tells whether the element should be considered empty or not, from the rendering point of view\n return false;\n },\n addClass: function(className) {\n var clazz = this.attr('class') || '';\n if (!_containClass(clazz, className)) {\n this.attr('class', clazz + (clazz.length ? ' ' : '') + className);\n }\n },\n hasClass: function(className) {\n return _containClass(this.attr('class'), className);\n },\n removeClass: function(className) {\n var clazz = this.attr('class') || '';\n if (clazz) {\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)');\n clazz = clazz.replace(regex, ' ').trim();\n\n if (clazz) {\n this.attr('class', clazz);\n } else {\n this.removeAttr('class');\n }\n }\n },\n /**\n * Add or remove class. Setting the optional state will force addition/removal.\n * State is here to keep the jQuery syntax\n *\n * @param {String} className\n * @param {Boolean} [state]\n */\n toggleClass: function(className, state) {\n if (typeof state === 'boolean') {\n return state ? this.addClass(className) : this.removeClass(className);\n }\n\n if (this.hasClass(className)) {\n return this.removeClass(className);\n }\n return this.addClass(className);\n },\n isset: function() {\n return Element.issetElement(this.serial);\n },\n unset: function() {\n return Element.unsetElement(this.serial);\n }\n });\n\n var _containClass = function(allClassStr, className) {\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)', '');\n return allClassStr && regex.test(allClassStr);\n };\n\n //helpers\n Element.isA = function(qtiElement, qtiClass) {\n return qtiElement instanceof Element && qtiElement.is(qtiClass);\n };\n\n Element.getElementBySerial = function(serial) {\n return _instances[serial];\n };\n\n Element.issetElement = function(serial) {\n return !!_instances[serial];\n };\n\n /**\n * Unset a registered element from it's serial\n * @param {String} serial - the element serial\n * @returns {Boolean} true if unset\n */\n Element.unsetElement = function(serial) {\n var element = Element.getElementBySerial(serial);\n\n if (element) {\n var composingElements = element.getComposingElements();\n _.each(composingElements, function(elt) {\n delete _instances[elt.serial];\n });\n delete _instances[element.serial];\n\n return true;\n }\n return false;\n };\n\n return Element;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/container',['lodash', 'jquery', 'taoQtiItem/qtiItem/core/Element'], function (_, $, Element) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\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-2020 (original work) Open Assessment Technologies SA ;\n */\n\n //containers are cached, so do not forget to remove them.\n let _containers = {};\n let _$containerContext = $();\n\n /**\n * Build the selector for your element (from the element serial)\n * @private\n * @param {QtiElement} element\n * @returns {String} the selector\n */\n const _getSelector = function(element) {\n const serial = element.getSerial();\n let selector = `[data-serial=${ serial }]`;\n\n if (Element.isA(element, 'choice')) {\n selector = `.qti-choice${ selector}`;\n } else if (Element.isA(element, 'interaction')) {\n selector = `.qti-interaction${ selector}`;\n }\n\n return selector;\n };\n\n /**\n * Helps you to retrieve the DOM element (as a jquery element)\n * @exports taoQtiItem/qtiCommonRenderer/helpers/containerHelper\n */\n const containerHelper = {\n /**\n * Set a global scope to look for element container\n * @param {jQueryElement} [$scope] - if you want to retrieve the element in a particular scope or context\n */\n setContext($scope) {\n _$containerContext = $scope;\n },\n\n /**\n * Returns current scope\n * @returns {jQueryElement}\n */\n getContext() {\n return _$containerContext;\n },\n\n /**\n * Get the container of the given element\n * @param {QtiElement} element - the QTI Element to find the container for\n * @param {jQueryElement} [$scope] - if you want to retrieve the element in a particular scope or context\n * @returns {jQueryElement} the container\n */\n get(element, $scope) {\n const serial = element.getSerial();\n\n if ($scope instanceof $ && $scope.length) {\n //find in the given context\n return $scope.find(_getSelector(element));\n } else if (_$containerContext instanceof $ && _$containerContext.length) {\n //find in the globally set context\n return _$containerContext.find(_getSelector(element));\n } else if (!_containers[serial] || !_containers[serial].length) {\n //find in the global context\n _containers[serial] = $(_getSelector(element));\n }\n\n return _containers[serial];\n },\n\n /**\n * getContainer use a cache to store elements. This methods helps you to purge it.\n * @param {Element} element - find the container of this element\n */\n reset(element) {\n if (element instanceof Element && _containers[element.getSerial()]) {\n _containers = _.omit(_containers, element.getSerial());\n }\n },\n\n /**\n * Clear the containers cache\n */\n clear() {\n _containers = {};\n _$containerContext = $();\n },\n\n /**\n * Trigger an event on the element's container\n * @param {String} eventType - the name of the event\n * @param {QtiElement} element - find the container of this element\n * @param {Array} [data] - data to give to the event\n */\n trigger(eventType, element, data) {\n if (eventType) {\n if (data && !_.isArray(data)) {\n data = [data];\n }\n this.get(element).trigger(eventType, data);\n }\n },\n\n /**\n * Alias to trigger a responseChange Event from an interaction\n * @param {QtiElement} interaction - the interaction that had a response changed\n * @param {Object} [extraData] - additionnal data to give to the event\n */\n triggerResponseChangeEvent(interaction, extraData) {\n this.trigger('responseChange', interaction, [\n {\n interaction: interaction,\n response: interaction.getResponse()\n },\n extraData\n ]);\n },\n\n /**\n * Make all links to opens in another tab/window\n * @param {jQueryElement} $container\n */\n targetBlank($container) {\n $container.on('click', 'a', function(e) {\n e.preventDefault();\n const href = $(this).attr('href');\n if (href && href.match(/^http/i)) {\n window.open(href, '_blank');\n }\n });\n }\n };\n\n return containerHelper;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/Graphic',['jquery', 'lodash', 'raphael', 'scale.raphael'], function ($, _, raphael, scaleRaphael) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n raphael = raphael && Object.prototype.hasOwnProperty.call(raphael, 'default') ? raphael['default'] : raphael;\n scaleRaphael = scaleRaphael && Object.prototype.hasOwnProperty.call(scaleRaphael, 'default') ? scaleRaphael['default'] : scaleRaphael;\n\n var basic = {\n \tstroke: \"#8D949E\",\n \t\"stroke-width\": 2,\n \t\"stroke-dasharray\": \"\",\n \t\"stroke-linejoin\": \"round\",\n \tfill: \"#cccccc\",\n \t\"fill-opacity\": 0.5,\n \tcursor: \"pointer\"\n };\n var hover = {\n \tstroke: \"#3E7DA7\",\n \tfill: \"#0E5D91\",\n \t\"fill-opacity\": 0.3\n };\n var selectable = {\n \t\"stroke-dasharray\": \"-\",\n \tstroke: \"#3E7DA7\",\n \tfill: \"#cccccc\",\n \t\"fill-opacity\": 0.5\n };\n var active = {\n \tstroke: \"#3E7DA7\",\n \t\"stroke-dasharray\": \"\",\n \tfill: \"#0E5D91\",\n \t\"fill-opacity\": 0.5\n };\n var error = {\n \tstroke: \"#C74155\",\n \t\"stroke-dasharray\": \"\",\n \t\"fill-opacity\": 0.5,\n \tfill: \"#661728\"\n };\n var success = {\n \tstroke: \"#C74155\",\n \t\"stroke-dasharray\": \"\",\n \tfill: \"#0E914B\",\n \t\"fill-opacity\": 0.5\n };\n var layer = {\n \tfill: \"#ffffff\",\n \topacity: 0,\n \tcursor: \"pointer\"\n };\n var creator = {\n \t\"fill-opacity\": 0.5,\n \tstroke: \"#3E7DA7\",\n \t\"stroke-dasharray\": \"\",\n \tfill: \"#0E5D91\",\n \tcursor: \"pointer\"\n };\n var target = {\n \tpath: \"m 18,8.4143672 -1.882582,0 C 15.801891,4.9747852 13.071059,2.2344961 9.63508,1.9026738 L 9.63508,0 8.2305176,0 l 0,1.9026387 C 4.7947148,2.2343027 2.0637246,4.9746621 1.7481973,8.4143672 l -1.7481973,0 0,1.4045625 1.754877,0 c 0.3460429,3.4066753 3.0632871,6.1119843 6.4756406,6.4413813 l 0,1.739689 1.4045624,0 0,-1.739725 c 3.412547,-0.329537 6.129633,-3.034793 6.475641,-6.4413453 l 1.889279,0 z m -8.36492,6.5188648 0,-4.064673 -1.4045624,0 0,4.063882 C 5.5511016,14.612555 3.4232695,12.494619 3.0864551,9.8189297 l 4.0449512,0 0,-1.4045625 -4.0546368,0 C 3.3788672,5.6984941 5.5228887,3.5393379 8.2305176,3.2161113 l 0,3.9153125 1.4045624,0 0,-3.9160859 c 2.711162,0.3203965 4.858576,2.4808887 5.160955,5.1990293 l -3.927441,0 0,1.4045625 3.917773,0 C 14.449289,12.496957 12.318363,14.616158 9.63508,14.933232 z\",\n \tfill: \"#0E914B\",\n \twidth: 1,\n \t\"stroke-width\": 0,\n \tcursor: \"pointer\"\n };\n var assoc = {\n \t\"stroke-width\": 2,\n \t\"stroke-linecap\": \"round\",\n \tcursor: \"pointer\"\n };\n var close = {\n \tpath: \"m 8.9997236,18.000001 c -4.9703918,0 -8.99972284217367,-4.02901 -8.99972284217367,-9 C 7.5782633e-7,4.029011 4.0293108,9.8531742e-7 8.9997236,9.8531742e-7 13.970691,9.8531742e-7 18.000001,4.029011 18.000001,9.000001 c 0,4.97099 -4.02931,9 -9.0002774,9 z m 0.0045,-16.37151 c -4.06191,0 -7.35492,3.29635 -7.35492,7.36251 0,4.06562 3.292989,7.36255 7.35492,7.36255 4.0630384,0 7.3554334,-3.29693 7.3554334,-7.36255 0,-4.06614 -3.292969,-7.36251 -7.3554334,-7.36251 v 0 z m 3.1314894,9.31167 -1.953823,-1.94014 1.953843,-1.94018 c 0.08964,-0.089 0.134622,-0.19099 0.135073,-0.30584 4.31e-4,-0.11488 -0.04383,-0.21712 -0.132838,-0.30681 l -0.54267,-0.54685 c -0.08898,-0.0897 -0.190903,-0.13473 -0.305719,-0.13514 -0.114837,-4.4e-4 -0.217064,0.0439 -0.306703,0.1329 l -1.9623724,1.94865 -1.962395,-1.94865 c -0.08964,-0.089 -0.191845,-0.13336 -0.306702,-0.1329 -0.114837,4.3e-4 -0.216736,0.0455 -0.305719,0.13514 l -0.54265,0.54685 c -0.08902,0.0897 -0.133269,0.19193 -0.132838,0.30681 4.3e-4,0.11485 0.04543,0.21681 0.135073,0.30584 l 1.953823,1.94018 -1.953782,1.94014 c -0.0896,0.089 -0.134684,0.19094 -0.135114,0.3058 -4.31e-4,0.11486 0.04386,0.21716 0.132838,0.30681 l 0.542671,0.54687 c 0.08896,0.0897 0.190923,0.13467 0.305718,0.13516 0.114857,3.9e-4 0.217105,-0.0439 0.306724,-0.13288 l 1.962332,-1.94863 1.9623324,1.94863 c 0.08962,0.089 0.191886,0.13323 0.306744,0.13288 0.114836,-4.5e-4 0.216736,-0.0455 0.305698,-0.13516 l 0.542691,-0.54687 c 0.089,-0.0897 0.133227,-0.19193 0.132838,-0.30681 -3.9e-4,-0.1149 -0.0455,-0.21683 -0.135073,-0.3058 z\",\n \tfill: \"#0E5D91\",\n \twidth: 1,\n \topacity: 0,\n \t\"stroke-width\": 0,\n \tcursor: \"pointer\"\n };\n var gstyle = {\n \tbasic: basic,\n \thover: hover,\n \tselectable: selectable,\n \tactive: active,\n \terror: error,\n \tsuccess: success,\n \tlayer: layer,\n \tcreator: creator,\n \t\"imageset-rect-stroke\": {\n \tfill: \"#ffffff\",\n \tstroke: \"#666666\",\n \t\"stroke-width\": 1,\n \t\"stroke-linejoin\": \"round\",\n \tcursor: \"pointer\"\n },\n \t\"imageset-rect-no-stroke\": {\n \tfill: \"#ffffff\",\n \tstroke: \"#ffffff\",\n \t\"stroke-width\": 2,\n \t\"stroke-linejoin\": \"round\",\n \tcursor: \"pointer\"\n },\n \t\"imageset-img\": {\n \tcursor: \"pointer\"\n },\n \t\"order-text\": {\n \tfill: \"#ffffff\",\n \tstroke: \"#000000\",\n \t\"stroke-width\": 0.7,\n \t\"font-family\": \"sans-serif\",\n \t\"font-weight\": \"bold\",\n \t\"font-size\": 22,\n \tcursor: \"pointer\"\n },\n \t\"score-text-default\": {\n \tstroke: \"#444444\",\n \t\"stroke-width\": 0.5,\n \t\"font-family\": \"sans-serif\",\n \t\"font-weight\": \"normal\",\n \t\"font-size\": 20,\n \tcursor: \"pointer\"\n },\n \t\"score-text\": {\n \tstroke: \"#000000\",\n \t\"stroke-width\": 0.5,\n \t\"font-family\": \"sans-serif\",\n \t\"font-weight\": \"normal\",\n \t\"font-size\": 20,\n \tcursor: \"pointer\"\n },\n \t\"small-text\": {\n \tstroke: \"#000000\",\n \t\"stroke-width\": 0.5,\n \t\"font-family\": \"sans-serif\",\n \t\"font-weight\": \"normal\",\n \t\"font-size\": 16,\n \tcursor: \"pointer\"\n },\n \t\"layer-pos-text\": {\n \tstroke: \"#333\",\n \t\"stroke-width\": 0.5,\n \t\"font-family\": \"sans-serif\",\n \t\"font-weight\": \"normal\",\n \t\"font-size\": 14\n },\n \ttarget: target,\n \t\"target-hover\": {\n \tfill: \"#3E7DA7\",\n \t\"fill-opacity\": 1\n },\n \t\"target-success\": {\n \tfill: \"#0E914B\",\n \t\"fill-opacity\": 1\n },\n \tassoc: assoc,\n \t\"assoc-layer\": {\n \t\"stroke-width\": 12,\n \tcursor: \"pointer\",\n \t\"stroke-opacity\": 0\n },\n \t\"assoc-bullet\": {\n \tfill: \"#000000\"\n },\n \tclose: close,\n \t\"close-bg\": {\n \tfill: \"#ffffff\",\n \tstroke: \"none\",\n \tcursor: \"pointer\",\n \topacity: 0\n },\n \t\"touch-circle\": {\n \tfill: \"none\",\n \tstroke: \"#3E7DA7\",\n \t\"stroke-width\": 2\n }\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 (original work) Open Assessment Technologies SA ;\n */\n\n //maps the QTI shapes to Raphael shapes\n var shapeMap = {\n default: 'rect',\n poly: 'path'\n };\n\n //length constraints to validate coords\n var coordsValidator = {\n rect: 4,\n ellipse: 4,\n circle: 3,\n poly: 6,\n default: 0\n };\n\n //transform the coords from the QTI system to Raphael system\n var qti2raphCoordsMapper = {\n /**\n * Rectangle coordinate mapper: from left-x,top-y,right-x-bottom-y to x,y,w,h\n * @param {Array} coords - QTI coords\n * @returns {Array} raphael coords\n */\n rect: function(coords) {\n return [coords[0], coords[1], coords[2] - coords[0], coords[3] - coords[1]];\n },\n\n /**\n * Creates the coords for a default shape (a rectangle that covers all the paper)\n * @param {Raphael.Paper} paper - the paper\n * @returns {Array} raphael coords\n */\n default: function(paper) {\n return [0, 0, paper.width, paper.height];\n },\n\n /**\n * polygone coordinate mapper: from x1,y1,...,xn,yn to SVG path format\n * @param {Array} coords - QTI coords\n * @returns {Array} path desc\n */\n poly: function(coords) {\n var a;\n var size = coords.length;\n\n // autoClose if needed\n if (coords[0] !== coords[size - 2] && coords[1] !== coords[size - 1]) {\n coords.push(coords[0]);\n coords.push(coords[1]);\n }\n\n // move to first point\n coords[0] = 'M' + coords[0];\n\n for (a = 1; a < size; a++) {\n if (a % 2 === 0) {\n coords[a] = 'L' + coords[a];\n }\n }\n\n return [coords.join(' ')];\n }\n };\n\n //transform the coords from a raphael shape to the QTI system\n var raph2qtiCoordsMapper = {\n /**\n * Rectangle coordinate mapper: from x,y,w,h to left-x,top-y,right-x-bottom-y\n * @param {Object} attr - Raphael Element's attributes\n * @returns {Array} qti based coords\n */\n rect: function(attr) {\n return [attr.x, attr.y, attr.x + attr.width, attr.y + attr.height];\n },\n\n /**\n * Circle coordinate mapper\n * @param {Object} attr - Raphael Element's attributes\n * @returns {Array} qti based coords\n */\n circle: function(attr) {\n return [attr.cx, attr.cy, attr.r];\n },\n\n /**\n * Ellispe coordinate mapper\n * @param {Object} attr - Raphael Element's attributes\n * @returns {Array} qti based coords\n */\n ellipse: function(attr) {\n return [attr.cx, attr.cy, attr.rx, attr.ry];\n },\n\n /**\n * Get the coords for a default shape (a rectangle that covers all the paper)\n * @param {Object} attr - Raphael Element's attributes\n * @returns {Array} qti based coords\n */\n default: function(attr) {\n return this.rect(attr);\n },\n\n /**\n * polygone coordinate mapper: from SVG path (available as segments) to x1,y1,...,xn,yn format\n * @param {Raphael.Paper} paper - the paper\n * @returns {Array} raphael coords\n */\n path: function(attr) {\n var poly = [];\n var i;\n\n if (_.isArray(attr.path)) {\n for (i = 1; i < attr.path.length; i++) {\n if (attr.path[i].length === 3) {\n poly.push(attr.path[i][1]);\n poly.push(attr.path[i][2]);\n }\n }\n }\n\n return poly;\n }\n };\n\n /**\n * Graphic interaction helper\n * @exports qtiCommonRenderer/helpers/Graphic\n */\n var GraphicHelper = {\n /**\n * Raw access to the styles\n * @type {Object}\n */\n _style: gstyle,\n\n /**\n * Apply the style defined by name to the element\n * @param {Raphael.Element} element - the element to change the state\n * @param {String} state - the name of the state (from states) to switch to\n */\n setStyle: function(element, name) {\n if (element && gstyle[name]) {\n element.attr(gstyle[name]);\n }\n },\n\n /**\n * Create a Raphael paper with a bg image, that is width responsive\n * @param {String} id - the id of the DOM element that will contain the paper\n * @param {String} serial - the interaction unique indentifier\n * @param {Object} options - the paper parameters\n * @param {String} options.img - the url of the background image\n * @param {jQueryElement} [options.container] - the parent of the paper element (got the closest parent by default)\n * @param {Number} [options.width] - the paper width\n * @param {Number} [options.height] - the paper height\n * @param {String} [options.imgId] - an identifier for the image element\n * @param {Function} [options.done] - executed once the image is loaded\n * @returns {Raphael.Paper} the paper\n */\n responsivePaper: function(id, serial, options) {\n var paper, image;\n\n var $container = options.container || $('#' + id).parent();\n var $editor = $('.image-editor', $container);\n var $body = $container.closest('.qti-itemBody');\n var resizer = _.throttle(resizePaper, 10);\n\n var imgWidth = options.width || $container.innerWidth();\n var imgHeight = options.height || $container.innerHeight();\n\n paper = scaleRaphael(id, imgWidth, imgHeight);\n image = paper.image(options.img, 0, 0, imgWidth, imgHeight);\n image.id = options.imgId || image.id;\n paper.setViewBox(0, 0, imgWidth, imgHeight);\n\n resizer();\n\n //retry to resize once the SVG is loaded\n $(image.node)\n .attr('externalResourcesRequired', 'true')\n .on('load', resizer);\n\n if (raphael.type === 'SVG') {\n // TODO: move listeners somewhere they can be easily turned off\n $(window).on('resize.qti-widget.' + serial, resizer);\n // TODO: favor window resize event and deprecate $container resive event (or don't allow $container to be destroyed and rebuilt\n $container.on('resize.qti-widget.' + serial, resizer);\n $(document).on('customcssloaded.styleeditor', resizer);\n } else {\n $container.find('.main-image-box').width(imgWidth);\n if (typeof options.resize === 'function') {\n options.resize(imgWidth, 1);\n }\n }\n\n /**\n * scale the raphael paper\n * @private\n */\n function resizePaper(e, givenWidth) {\n var diff, maxWidth, containerWidth, containerHeight, factor;\n\n if (e) {\n e.stopPropagation();\n }\n\n diff = $editor.outerWidth() - $editor.width() + ($container.outerWidth() - $container.width()) + 1;\n maxWidth = $body.width();\n containerWidth = $container.innerWidth();\n\n if (containerWidth > 0 || givenWidth > 0) {\n if (givenWidth < containerWidth && givenWidth < maxWidth) {\n containerWidth = givenWidth - diff;\n } else if (containerWidth > maxWidth) {\n containerWidth = maxWidth - diff;\n } else {\n containerWidth -= diff;\n }\n\n factor = containerWidth / imgWidth;\n containerHeight = imgHeight * factor;\n\n if (containerWidth > 0) {\n paper.changeSize(containerWidth, containerHeight, false, false);\n }\n\n if (typeof options.resize === 'function') {\n options.resize(containerWidth, factor);\n }\n\n $container.trigger('resized.qti-widget');\n }\n }\n\n return paper;\n },\n\n /**\n * Create a new Element into a raphael paper\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {String} type - the shape type\n * @param {String|Array.<Number>} coords - qti coords as a string or an array of number\n * @param {Object} [options] - additional creation options\n * @param {String} [options.id] - to set the new element id\n * @param {String} [options.title] - to set the new element title\n * @param {String} [options.style = basic] - to default style\n * @param {Boolean} [options.hover = true] - to disable the default hover state\n * @param {Boolean} [options.touchEffect = true] - a circle appears on touch\n * @param {Boolean} [options.qtiCoords = true] - if the coords are in QTI format\n * @returns {Raphael.Element} the created element\n */\n createElement: function(paper, type, coords, options) {\n var self = this;\n var element;\n var shaper = shapeMap[type] ? paper[shapeMap[type]] : paper[type];\n var shapeCoords = options.qtiCoords !== false ? self.raphaelCoords(paper, type, coords) : coords;\n\n if (typeof shaper === 'function') {\n element = shaper.apply(paper, shapeCoords);\n if (element) {\n if (options.id) {\n element.id = options.id;\n }\n\n if (options.title) {\n element.attr('title', options.title);\n }\n\n element.attr(gstyle[options.style || 'basic']).toFront();\n\n //prevent issue in firefox 37\n $(element.node).removeAttr('stroke-dasharray');\n\n if (options.hover !== false) {\n element.hover(\n function() {\n if (!element.flashing) {\n self.updateElementState(this, 'hover');\n }\n },\n function() {\n if (!element.flashing) {\n self.updateElementState(\n this,\n this.active ? 'active' : this.selectable ? 'selectable' : 'basic'\n );\n }\n }\n );\n }\n\n if (options.touchEffect !== false) {\n element.touchstart(function() {\n self.createTouchCircle(paper, element.getBBox());\n });\n }\n }\n } else {\n throw new Error('Unable to find method ' + type + ' on paper');\n }\n\n return element;\n },\n\n /**\n * Create target point\n * @param {Raphael.Paper} paper - the paper\n * @param {Object} [options]\n * @param {Object} [options.id] - and id to identify the target\n * @param {Object} [options.point] - the point to add to the paper\n * @param {Number} [options.point.x = 0] - point's x coord\n * @param {Number} [options.point.y = 0] - point's y coord\n * @param {Boolean} [options.hover] = true - the target has an hover effect\n * @param {Function} [options.create] - call once created\n * @param {Function} [options.remove] - call once removed\n */\n createTarget: function createTarget(paper, options) {\n var baseSize, count, factor, half, hover, layer, point, self, tBBox, targetSize, x, y, target;\n\n options = options || {};\n\n self = this;\n point = options.point || { x: 0, y: 0 };\n factor = paper.w !== 0 ? paper.width / paper.w : 1;\n hover = typeof options.hover === 'undefined' ? true : !!options.hover;\n\n baseSize = 18; // this is the base size of the path element to be placed on svg (i.e. the path element crosshair is created to have a size of 18)\n half = baseSize / 2;\n x = point.x - half;\n y = point.y - half;\n targetSize = factor !== 0 ? 2 / factor : 2;\n\n //create the target from a path\n target = paper\n .path(gstyle.target.path)\n .transform('t' + x + ',' + y + 's' + targetSize)\n .attr(gstyle.target)\n .attr('title', _('Click again to remove'));\n\n //generate an id if not set in options\n if (options.id) {\n target.id = options.id;\n } else {\n count = 0;\n paper.forEach(function(element) {\n if (element.data('target')) {\n count++;\n }\n });\n target.id = 'target-' + count;\n }\n\n tBBox = target.getBBox();\n\n //create an invisible rect over the target to ensure path selection\n layer = paper\n .rect(tBBox.x, tBBox.y, tBBox.width, tBBox.height)\n .attr(gstyle.layer)\n .click(function() {\n var id = target.id;\n var p = this.data('point');\n\n if (_.isFunction(options.select)) {\n options.select(target, p, this);\n }\n\n if (_.isFunction(options.remove)) {\n this.remove();\n target.remove();\n options.remove(id, p);\n }\n });\n\n if (hover) {\n layer.hover(\n function() {\n if (!target.flashing) {\n self.setStyle(target, 'target-hover');\n }\n },\n function() {\n if (!target.flashing) {\n self.setStyle(target, 'target-success');\n }\n }\n );\n }\n\n layer.id = 'layer-' + target.id;\n layer.data('point', point);\n target.data('target', point);\n\n if (_.isFunction(options.create)) {\n options.create(target);\n }\n\n return target;\n },\n\n /**\n * Get the Raphael coordinate from QTI coordinate\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {String} type - the shape type\n * @param {String|Array.<Number>} coords - qti coords as a string or an array of number\n * @returns {Array} the arguments array of coordinate to give to the approriate raphael shapre creator\n */\n raphaelCoords: function raphaelCoords(paper, type, coords) {\n var shapeCoords;\n\n if (_.isString(coords)) {\n coords = _.map(coords.split(','), function(coord) {\n return parseInt(coord, 10);\n });\n }\n\n if (!_.isArray(coords) || coords.length < coordsValidator[type]) {\n throw new Error('Invalid coords ' + JSON.stringify(coords) + ' for type ' + type);\n }\n\n switch (type) {\n case 'rect':\n shapeCoords = qti2raphCoordsMapper.rect(coords);\n break;\n case 'default':\n shapeCoords = qti2raphCoordsMapper['default'].call(null, paper);\n break;\n case 'poly':\n shapeCoords = qti2raphCoordsMapper.poly(coords);\n break;\n default:\n shapeCoords = coords;\n break;\n }\n\n return shapeCoords;\n },\n\n /**\n * Get the QTI coordinates from a Raphael Element\n * @param {Raphael.Element} element - the shape to get the coords from\n * @returns {String} the QTI coords\n */\n qtiCoords: function qtiCoords(element) {\n var mapper = raph2qtiCoordsMapper[element.type];\n var result = '';\n\n if (_.isFunction(mapper)) {\n result = _.map(mapper.call(raph2qtiCoordsMapper, element.attr()), function(coord) {\n return _.parseInt(coord);\n }).join(',');\n }\n\n return result;\n },\n\n /**\n * Create a circle that animate and disapear from a shape.\n *\n * @param {Raphael.Paper} paper - the paper\n * @param {Raphael.Element} element - used to get the bbox from\n */\n createTouchCircle: function(paper, bbox) {\n var radius = bbox.width > bbox.height ? bbox.width : bbox.height;\n var tCircle = paper.circle(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2, radius);\n\n tCircle.attr(gstyle['touch-circle']);\n\n _.defer(function() {\n tCircle.animate({ r: radius + 5, opacity: 0.7 }, 300, function() {\n tCircle.remove();\n });\n });\n },\n\n /**\n * Create a text, that scales.\n *\n * @param {Raphael.Paper} paper - the paper\n * @param {Object} options - the text options\n * @param {Number} options.left - x coord\n * @param {Number} options.top - y coord\n * @param {String} [options.content] - the text content\n * @param {String} [options.id] - the element identifier\n * @param {String} [options.style = 'small-text'] - the style name according to the graphic-style.json keys\n * @param {String} [options.title] - the text tooltip content\n * @param {Boolean} [options.hide = false] - if the text starts hidden\n * @returns {Raphael.Element} the created text\n */\n createText: function(paper, options) {\n var fontSize, scaledFontSize, text;\n var top = options.top || 0;\n var left = options.left || 0;\n var content = options.content || '';\n var style = options.style || 'small-text';\n var title = options.title || '';\n var factor = 1;\n\n if (paper.width && paper.w) {\n factor = paper.width / paper.w;\n }\n\n text = paper.text(left, top, content).toFront();\n if (options.id) {\n text.id = options.id;\n }\n\n if (options.hide) {\n text.hide();\n }\n\n text.attr(gstyle[style]);\n\n if (typeof factor !== 'undefined' && factor !== 1) {\n fontSize = parseInt(text.attr('font-size'), 10);\n scaledFontSize = Math.floor(fontSize / factor) + 1;\n\n text.attr('font-size', scaledFontSize);\n }\n\n if (title) {\n this.updateTitle(text, title);\n }\n\n return text;\n },\n\n /**\n * Create a text in the middle of the related shape.\n *\n * @param {Raphael.Paper} paper - the paper\n * @param {Raphael.Element} shape - the shape to add the text to\n * @param {Object} options - the text options\n * @param {String} [options.content] - the text content\n * @param {String} [options.id] - the element identifier\n * @param {String} [options.style = 'small-text'] - the style name according to the graphic-style.json keys\n * @param {String} [options.title] - the text tooltip content\n * @param {Boolean} [options.hide = false] - if the text starts hidden\n * @param {Boolean} [options.shapeClick = false] - clicking the text delegates to the shape\n * @returns {Raphael.Element} the created text\n */\n createShapeText: function(paper, shape, options) {\n var self = this;\n var bbox = shape.getBBox();\n\n var text = this.createText(\n paper,\n _.merge(\n {\n left: bbox.x + bbox.width / 2,\n top: bbox.y + bbox.height / 2\n },\n options\n )\n );\n\n if (options.shapeClick) {\n text.click(function() {\n self.trigger(shape, 'click');\n });\n }\n\n return text;\n },\n\n /**\n * Create an image with a padding and a border, using a set.\n *\n * @param {Raphael.Paper} paper - the paper\n * @param {Object} options - image options\n * @param {Number} options.left - x coord\n * @param {Number} options.top - y coord\n * @param {Number} options.width - image width\n * @param {Number} options.height - image height\n * @param {Number} options.url - image ulr\n * @param {Number} [options.padding = 6] - a multiple of 2 is welcomed\n * @param {Boolean} [options.border = false] - add a border around the image\n * @param {Boolean} [options.shadow = false] - add a shadow back the image\n * @returns {Raphael.Element} the created set, augmented of a move(x,y) method\n */\n createBorderedImage: function(paper, options) {\n var padding = options.padding >= 0 ? options.padding : 6;\n var halfPad = padding / 2;\n\n var rx = options.left,\n ry = options.top,\n rw = options.width + padding,\n rh = options.height + padding;\n\n var ix = options.left + halfPad,\n iy = options.top + halfPad,\n iw = options.width,\n ih = options.height;\n\n var set = paper.set();\n\n //create a rectangle with a padding and a border.\n var rect = paper\n .rect(rx, ry, rw, rh)\n .attr(options.border ? gstyle['imageset-rect-stroke'] : gstyle['imageset-rect-no-stroke']);\n\n //and an image centered into the rectangle.\n var image = paper.image(options.url, ix, iy, iw, ih).attr(gstyle['imageset-img']);\n\n if (options.shadow) {\n set.push(\n rect.glow({\n width: 2,\n offsetx: 1,\n offsety: 1\n })\n );\n }\n\n set.push(rect, image);\n\n /**\n * Add a move method to set that keep the given coords during an animation\n * @private\n * @param {Number} x - destination\n * @param {Number} y - destination\n * @param {Number} [duration = 400] - the animation duration\n * @returns {Raphael.Element} the set for chaining\n */\n set.move = function move(x, y, duration) {\n var animation = raphael.animation({ x: x, y: y }, duration || 400);\n var elt = rect.animate(animation);\n image.animateWith(elt, animation, { x: x + halfPad, y: y + halfPad }, duration || 400);\n return set;\n };\n\n return set;\n },\n\n /**\n * Update the visual state of an Element\n * @param {Raphael.Element} element - the element to change the state\n * @param {String} state - the name of the state (from states) to switch to\n * @param {String} [title] - a title linked to this step\n */\n updateElementState: function(element, state, title) {\n if (element && element.animate) {\n element.animate(gstyle[state], 200, 'linear', function() {\n element.attr(gstyle[state]); //for attr that don't animate\n\n //preven issue in firefox 37\n $(element.node).removeAttr('stroke-dasharray');\n });\n\n if (title) {\n this.updateTitle(element, title);\n }\n }\n },\n\n /**\n * Update the title of an element (the attr method of Raphael adds only new node instead of updating exisitings).\n * @param {Raphael.Element} element - the element to update the title\n * @param {String} [title] - the new title\n */\n updateTitle: function(element, title) {\n if (element && element.node) {\n //removes all remaining titles nodes\n _.forEach(element.node.children, function(child) {\n if (child.nodeName.toLowerCase() === 'title') {\n element.node.removeChild(child);\n }\n });\n\n //then set the new title\n element.attr('title', title);\n }\n },\n\n /**\n * Highlight an element with the error style\n * @param {Raphael.Element} element - the element to hightlight\n * @param {String} [restorState = 'basic'] - the state to restore the elt into after flash\n */\n highlightError: function(element, restoredState) {\n var self = this;\n if (element) {\n element.flashing = true;\n self.updateElementState(element, 'error');\n _.delay(function() {\n self.updateElementState(element, restoredState || 'basic');\n element.flashing = false;\n }, 800);\n }\n },\n\n /**\n * Trigger an event already bound to a raphael element\n * @param {Raphael.Element} element\n * @param {String} event - the event name\n *\n */\n trigger: function(element, event) {\n var evt = _.where(element.events, { name: event });\n if (evt.length && evt[0] && typeof evt[0].f === 'function') {\n evt[0].f.apply(element, Array.prototype.slice.call(arguments, 2));\n }\n },\n\n /**\n * Get an x/y point from a MouseEvent\n * @param {MouseEvent} event - the source event\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {jQueryElement} $container - the paper container\n * @param {Boolean} isResponsive - if the paper is scaling\n * @returns {Object} x,y point\n */\n getPoint: function getPoint(event, paper, $container) {\n var point = this.clickPoint($container, event);\n var rect = $container.get(0).getBoundingClientRect();\n var factor = paper.w / rect.width;\n\n point.x = Math.round(point.x * factor);\n point.y = Math.round(point.y * factor);\n\n return point;\n },\n\n /**\n * Get paper position relative to the container\n * @param {jQueryElement} $container - the paper container\n * @param {Raphael.Paper} paper - the interaction paper\n * @returns {Object} position with top and left\n */\n position: function($container, paper) {\n var pw = parseInt(paper.w || paper.width, 10);\n var cw = parseInt($container.width(), 10);\n var ph = parseInt(paper.w || paper.width, 10);\n var ch = parseInt($container.height(), 10);\n\n return {\n left: (cw - pw) / 2,\n top: (ch - ph) / 2\n };\n },\n\n /**\n * Get a point from a click event\n * @param {jQueryElement} $container - the element that contains the paper\n * @param {MouseEvent} event - the event triggered by the click\n * @returns {Object} the x,y point\n */\n clickPoint: function($container, event) {\n var x, y;\n var offset = $container.offset();\n\n if (event.pageX || event.pageY) {\n x = event.pageX - offset.left;\n y = event.pageY - offset.top;\n } else if (event.clientX || event.clientY) {\n x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - offset.left;\n y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop - offset.top;\n }\n\n return { x: x, y: y };\n }\n };\n\n return GraphicHelper;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/instructions/Instruction',['lodash', 'taoQtiItem/qtiItem/helper/util', 'handlebars', 'i18n', 'lib/dompurify/purify'], function (_, util, Handlebars, __, DOMPurify) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div id=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"small feedback-info item-instruction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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-info icon\\\"></span><span class=\\\"instruction-message\\\">\";\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 + \"</span>\\n</div>\";\n return buffer;\n });\n function instructionTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var _notificationLevels = ['info', 'warning', 'error', 'success'];\n\n var Instruction = function(interaction, message, callback) {\n this.interaction = interaction;\n this.defaultMessage = message || '';\n this.currentMessage = '';\n this.level = 'info';\n this.serial = util.buildSerial('instruction_');\n this.callback = callback;\n this.$dom = null;\n this.state = false;\n };\n\n Instruction.isValidLevel = function(level) {\n return _.indexOf(_notificationLevels, level) >= 0;\n };\n\n Instruction.prototype.setState = function(state) {\n this.state = state;\n };\n\n Instruction.prototype.checkState = function(state) {\n return this.state === state;\n };\n\n Instruction.prototype.getId = function() {\n return this.serial;\n };\n\n Instruction.prototype.create = function($container) {\n $container.append(\n instructionTpl({\n message: this.defaultMessage,\n serial: this.serial\n })\n );\n\n this.$dom = $container.find('#' + this.serial);\n };\n\n Instruction.prototype.update = function(options) {\n var level = options && options.level ? options.level : '',\n message = options && options.message ? options.message : '',\n timeout = options && options.timeout ? options.timeout : 0,\n start = options && typeof options.start === 'function' ? options.start : null,\n stop = options && typeof options.stop === 'function' ? options.stop : null;\n\n if (level && Instruction.isValidLevel(level)) {\n this.$dom.removeClass('feedback-' + this.level).addClass('feedback-' + level);\n this.$dom\n .find('.icon')\n .removeClass('icon-' + this.level)\n .addClass('icon-' + level);\n this.level = level;\n }\n\n if (message) {\n this.$dom.find('.instruction-message').html(message);\n this.currentMessage = message;\n }\n\n if (timeout) {\n var _this = this;\n if (start) {\n start.call(_this);\n }\n _this.timer = setTimeout(function() {\n if (stop) {\n stop.call(_this);\n }\n _this.timer = null;\n }, timeout);\n }\n };\n\n Instruction.prototype.setLevel = function(level, timeout) {\n var options = {\n level: level\n };\n\n if (timeout) {\n options.timeout = parseInt(timeout);\n options.stop = function() {\n this.setLevel('info');\n };\n }\n\n this.update(options);\n };\n\n Instruction.prototype.getLevel = function() {\n return this.level;\n };\n\n Instruction.prototype.setMessage = function(message, timeout) {\n this.update({ message: message, timeout: timeout });\n };\n\n Instruction.prototype.reset = function() {\n this.update({ level: 'info', message: this.defaultMessage });\n this.state = false;\n };\n\n Instruction.prototype.validate = function(data) {\n if (typeof this.callback === 'function') {\n this.callback.call(this, data);\n }\n };\n\n return Instruction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager',['lodash', 'jquery', 'i18n', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/Instruction', 'handlebars', 'lib/dompurify/purify'], function (_, $$1, __, containerHelper, Instruction, Handlebars, DOMPurify) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n Instruction = Instruction && Object.prototype.hasOwnProperty.call(Instruction, 'default') ? Instruction['default'] : Instruction;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"small feedback-\";\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 + \" item-notification\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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-\";\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 + \"\\\"></span><span class=\\\"feedback-message\\\">\";\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 + \"</span>\\n <span title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Remove Message\", options) : helperMissing.call(depth0, \"__\", \"Remove Message\", options)))\n + \"\\\" class=\\\"icon-close close-trigger\\\"></span>\\n</div>\\n\";\n return buffer;\n });\n function notifTpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n //stores the instructions\n var _instructions = {};\n\n /**\n * The instruction manager helps you in managing instructions and\n * constraints on a QTI Element, usually an interaction or a choice.\n *\n * @exports qtiCommonRenderer/helpers/Instructions/instructionManager\n */\n var instructionManager = {\n /**\n * Validate the instructions of an element\n * @param {QtiElement} element - a QTI element like an interaction or a choice\n * @param {Object} [data] - any data to give to the instructions\n */\n validateInstructions: function(element, data) {\n var serial = element.getSerial();\n if (_instructions[serial]) {\n _.each(_instructions[serial], function(instruction) {\n instruction.validate(data || {});\n });\n }\n },\n\n /**\n * Add a new instructions to an element\n * @param {QtiElement} element - a QTI element like an interaction or a choice\n * @param {String} message - the message to give to display to the user when the instruction is validated\n * @param {Function} validateCallback - how to validate the instruction\n * @returns {Instruction} the created instruction\n */\n appendInstruction: function(element, message, validateCallback) {\n var serial = element.getSerial(),\n instruction = new Instruction(element, message, validateCallback);\n\n if (!_instructions[serial]) {\n _instructions[serial] = {};\n }\n _instructions[serial][instruction.getId()] = instruction;\n\n instruction.create($$1('.instruction-container', containerHelper.get(element)));\n\n return instruction;\n },\n\n /**\n * Remove instructions from an element\n * @param {QtiElement} element - a QTI element like an interaction or a choice\n */\n removeInstructions: function(element) {\n _instructions[element.getSerial()] = {};\n containerHelper\n .get(element)\n .find('.instruction-container')\n .empty();\n },\n\n /**\n * Reset the instructions states for an element (but keeps configuration)\n * @param {Object} element - the qti object, ie. interaction, choice, etc.\n */\n resetInstructions: function(element) {\n var serial = element.getSerial();\n if (_instructions[serial]) {\n _.each(_instructions[serial], function(instruction) {\n instruction.reset();\n });\n }\n },\n\n /**\n * Default instuction set with a min/max constraints.\n * @param {Object} interaction\n * @param {jQueryElement} $container\n * @param {Object} options\n * @param {Number} [options.min = 0] -\n * @param {Number} [options.max = 0] -\n * @param {Function} options.getResponse - a ref to a function that get the raw response (array) from the interaction in parameter\n * @param {Function} [options.onError] - called by once an error occurs with validateInstruction data in parameters\n */\n minMaxChoiceInstructions: function(interaction, options) {\n var self = this,\n min = options.min || 0,\n max = options.max || 0,\n getResponse = options.getResponse,\n onError = options.onError || _.noop(),\n choiceCount = options.choiceCount === false ? false : _.size(interaction.getChoices()),\n minInstructionSet = false,\n msg;\n\n if (!_.isFunction(getResponse)) {\n throw 'invalid parameter getResponse';\n }\n\n //if maxChoice = 0, inifinite choice possible\n if (max > 0 && (choiceCount === false || max < choiceCount)) {\n if (max === min) {\n minInstructionSet = true;\n msg =\n max <= 1\n ? __('You must select exactly %d choice', max)\n : __('You must select exactly %d choices', max);\n\n self.appendInstruction(interaction, msg, function(data) {\n if (getResponse(interaction).length >= max) {\n this.setLevel('success');\n if (this.checkState('fulfilled')) {\n this.update({\n level: 'warning',\n message: __('Maximum choices reached'),\n timeout: 2000,\n start: function() {\n onError(data);\n },\n stop: function() {\n this.update({ level: 'success', message: msg });\n }\n });\n }\n this.setState('fulfilled');\n } else {\n this.reset();\n }\n });\n } else if (max > min) {\n msg =\n max <= 1\n ? __('You can select maximum %d choice', max)\n : __('You can select maximum %d choices', max);\n self.appendInstruction(interaction, msg, function(data) {\n if (getResponse(interaction).length >= max) {\n this.setLevel('success');\n this.setMessage(__('Maximum choices reached'));\n if (this.checkState('fulfilled')) {\n this.update({\n level: 'warning',\n timeout: 2000,\n start: function() {\n onError(data);\n },\n stop: function() {\n this.setLevel('info');\n }\n });\n }\n\n this.setState('fulfilled');\n } else {\n this.reset();\n }\n });\n }\n }\n\n if (!minInstructionSet && min > 0 && (choiceCount === false || min < choiceCount)) {\n msg =\n min <= 1\n ? __('You must select at least %d choice', min)\n : __('You must select at least %d choices', min);\n self.appendInstruction(interaction, msg, function() {\n if (getResponse(interaction).length >= min) {\n this.setLevel('success');\n } else {\n this.reset();\n }\n });\n }\n },\n\n /**\n * Appends a instruction notification message\n * @deprecated in favor of instructions\n * @param {QtiElement} element - a QTI element like an interaction or a choice\n * @param {String} message - the message to give to display\n * @param {String} [level = 'info'] - the notification level in info, success, error or warning\n */\n appendNotification: function(element, message, level) {\n level = level || 'info';\n\n if (Instruction.isValidLevel(level)) {\n var $container = containerHelper.get(element);\n\n $container.find('.notification-container').prepend(\n notifTpl({\n level: level,\n message: message\n })\n );\n\n var $notif = $container.find('.item-notification:first');\n var _remove = function() {\n $notif.fadeOut();\n };\n\n $notif.find('.close-trigger').on('click', _remove);\n setTimeout(_remove, 2000);\n\n return $notif;\n }\n },\n\n /**\n * Removes all the displayed notifications\n * @deprecated in favor of instructions\n */\n removeNotifications: function(element) {\n containerHelper\n .get(element)\n .find('.item-notification')\n .remove();\n }\n };\n\n return instructionManager;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/itemStylesheetHandler',['jquery', 'lodash'], function ($, _) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\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) 2015 (original work) Open Assessment Technologies SA ;\n */\n\n //throttle events because of the loop\n var informLoaded = _.throttle(\n function() {\n $(document).trigger('customcssloaded.styleeditor',[{}]);\n },\n 10,\n { leading: false }\n );\n\n /**\n * Attach QTI Stylesheets to the document\n *\n * @param {Array} stylesheets - the QTI model stylesheets\n * @fires customcssloaded.styleeditor on document 10ms after stylesheets are loaded\n */\n var attach = function attach(stylesheets) {\n var $head = $('head');\n\n //fallback\n if (!$head.length) {\n $head = $('body');\n }\n\n // relative links with cache buster\n _(stylesheets).forEach(function(stylesheet) {\n var $link, href;\n\n //if the href is something\n if (stylesheet.attr('href')) {\n $link = $(stylesheet.render());\n\n //get the resolved href once rendererd\n href = $link.attr('href');\n\n //we need to set the href after the link is appended to the head (for our dear IE)\n $link.removeAttr('href').attr('href', href);\n\n $link.one('load', informLoaded).appendTo($head);\n }\n });\n };\n\n /**\n * Remove QTI Stylesheets from the document\n *\n * @param {Array} stylesheets - the QTI model stylesheets\n */\n var detach = function detach(stylesheets) {\n _(stylesheets).forEach(function(stylesheet) {\n if (stylesheet.serial) {\n $('link[data-serial=\"' + stylesheet.serial + '\"]').remove();\n }\n });\n };\n\n /**\n * @exports taoQtiItem/qtiCommonRenderer/helpers/itemStylesheetHandler\n */\n var itemStylesheetHandler = {\n attach: attach,\n detach: detach\n };\n\n return itemStylesheetHandler;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/patternMask',[],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) 2014-2016 (original work) Open Assessment Technologies SA ;\n */\n\n var regexChar = /\\^\\[\\\\s\\\\S\\]\\{\\d+\\,(\\d+)\\}\\$/,\n regexWords = /\\^\\(\\?\\:\\(\\?\\:\\[\\^\\\\s\\\\:\\\\!\\\\\\?\\\\\\;\\\\\\…\\\\\\€\\]\\+\\)\\[\\\\s\\\\:\\\\!\\\\\\?\\\\;\\\\\\…\\\\\\€\\]\\*\\)\\{\\d+\\,(\\d+)\\}\\$/;\n\n var patternMaskHelper = {\n /**\n * Parse the pattern string and according to the given type, try to extract the associate number\n *\n * @param {String} pattern - the pattern string to be parsed\n * @param {String} type - words or chars\n * @returns {*}\n */\n parsePattern: function parsePattern(pattern, type) {\n if (pattern === undefined || pattern === null) {\n return null;\n }\n if (type === 'words') {\n //expre = /^(?:(?:[^\\s\\:\\!\\?\\;\\…\\€]+)[\\s\\:\\!\\?\\;\\…\\€]*){0,3}$/;\n var result = pattern.match(regexWords);\n\n if (result !== null && result.length > 1) {\n return result[1];\n } else {\n return null;\n }\n } else if (type === 'chars') {\n // This is the original regExp generated by our code\n // expre = /^[\\s\\S]{0,10}$/;\n // and we will try to extract the top limit from it with this regexp\n // which is mostly just escaped version of the first one.\n var result = pattern.match(regexChar);\n\n if (result !== null && result.length > 1) {\n return result[1];\n } else {\n return null;\n }\n } else {\n return null;\n }\n },\n /**\n * Reverse function of parsePattern for word type\n *\n * @param {Number} max\n * @returns {string}\n */\n createMaxWordPattern: function createMaxWordPattern(max) {\n return '^(?:(?:[^\\\\s\\\\:\\\\!\\\\?\\\\;\\\\…\\\\€]+)[\\\\s\\\\:\\\\!\\\\?\\\\;\\\\…\\\\€]*){0,' + max.toString() + '}$';\n },\n /**\n * Reverse function of parsePattern for char type\n *\n * @param {Number} max\n * @returns {string}\n */\n createMaxCharPattern: function createMaxCharPattern(max) {\n return '^[\\\\s\\\\S]{0,' + max.toString() + '}$';\n }\n };\n\n return patternMaskHelper;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/PciPrettyPrint',['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) 2015 (original work) Open Assessment Technologies SA ;\n */\n\n var _formatters = {\n boolean: function(value) {\n return value ? 'true' : 'false';\n },\n integer: function(value) {\n return value;\n },\n float: function(value) {\n return value;\n },\n string: function(value) {\n return value === '' ? 'NULL' : '\"' + value + '\"';\n },\n point: function(value) {\n return '[' + value[0] + ', ' + value[1] + ']';\n },\n pair: function(value) {\n return '[' + value[0] + ', ' + value[1] + ']';\n },\n directedPair: function(value) {\n return '[' + value[0] + ', ' + value[1] + ']';\n },\n duration: function(value) {\n return value;\n },\n file: function(value) {\n return 'binary data';\n },\n uri: function(value) {\n return value;\n },\n intOrIdentifier: function(value) {\n return value;\n },\n identifier: function(value) {\n return value;\n }\n };\n\n /**\n * Return the pretty print string for a qti base variable\n *\n * @param {type} value\n * @param {type} withType - the qti baseType\n * @returns {String}\n */\n function printBase(value, withType) {\n var print = '',\n base = value.base;\n\n withType = typeof withType !== 'undefined' ? withType : true;\n\n if (base) {\n _.forIn(_formatters, function(formatter, baseType) {\n if (base[baseType] !== undefined) {\n print += withType ? '(' + baseType + ') ' : '';\n print += formatter(base[baseType]);\n\n return false;\n }\n });\n\n return print;\n }\n }\n\n /**\n * Return the pretty print string for a qti list variable\n *\n * @param {object} value\n * @param {string} withType - the qti basetype of the list\n * @returns {string}\n */\n function printList(value, withType) {\n var print = '',\n list = value.list;\n\n withType = typeof withType !== 'undefined' ? withType : true;\n\n if (list) {\n _.forIn(_formatters, function(formatter, baseType) {\n if (list[baseType] !== undefined) {\n print += withType ? '(' + baseType + ') ' : '';\n\n print += '[';\n\n _.each(list[baseType], function(value) {\n print += formatter(value) + ', ';\n });\n\n if (_.size(list[baseType])) {\n print = print.substring(0, print.length - 2);\n }\n\n print += ']';\n\n return false;\n }\n });\n\n return print;\n }\n }\n\n /**\n * Return the pretty print string for a qti record variable\n *\n * @param {object} value\n * @returns {String}\n */\n function printRecord(value) {\n if (value && value.record) {\n return '(record) ' + JSON.stringify(value.record);\n }\n return '';\n }\n\n var PciPrettyPrint = {\n printBase: printBase,\n printList: printList,\n printRecord: printRecord\n };\n\n return PciPrettyPrint;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/PciResponse',['lodash', 'taoQtiItem/qtiCommonRenderer/helpers/PciPrettyPrint'], function (_, pciPrettyPrint) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pciPrettyPrint = pciPrettyPrint && Object.prototype.hasOwnProperty.call(pciPrettyPrint, 'default') ? pciPrettyPrint['default'] : pciPrettyPrint;\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 (original work) Open Assessment Technologies SA ;\n */\n\n var _qtiModelPciResponseCardinalities = {\n single: 'base',\n multiple: 'list',\n ordered: 'list',\n record: 'record'\n };\n\n var PciResponse = {\n /**\n * Parse a response variable formatted according to IMS PCI: http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * @see serialize\n * @param {Object} response\n * @param {Object} interaction\n * @returns {Array}\n */\n unserialize: function(response, interaction) {\n var ret = [],\n responseDeclaration = interaction.getResponseDeclaration(),\n baseType = responseDeclaration.attr('baseType'),\n cardinality = responseDeclaration.attr('cardinality'),\n mappedCardinality;\n\n if (_qtiModelPciResponseCardinalities[cardinality]) {\n mappedCardinality = _qtiModelPciResponseCardinalities[cardinality];\n var responseValues = response[mappedCardinality];\n\n if (responseValues === null) {\n ret = [];\n } else if (_.isObject(responseValues)) {\n if (responseValues[baseType] !== undefined) {\n ret = responseValues[baseType];\n ret = _.isArray(ret) ? ret : [ret];\n } else {\n throw 'invalid response baseType';\n }\n } else {\n throw 'invalid response cardinality, expected ' + cardinality + ' (' + mappedCardinality + ')';\n }\n } else {\n throw 'unknown cardinality in the responseDeclaration of the interaction';\n }\n\n return ret;\n },\n /**\n * Serialize the input response array into the format to be send to result server according to IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n * With the only exception for empty response, which is represented by a javascript \"null\" value\n *\n * @see http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n * @param {Array} responseValues\n * @param {Object} interaction\n * @returns {Object|null}\n */\n serialize: function(responseValues, interaction) {\n if (!_.isArray(responseValues)) {\n throw 'invalid argument : responseValues must be an Array';\n }\n\n var response = {},\n responseDeclaration = interaction.getResponseDeclaration(),\n baseType = responseDeclaration.attr('baseType'),\n cardinality = responseDeclaration.attr('cardinality'),\n mappedCardinality;\n\n responseValues = _.map(responseValues || [], function(v) {\n return baseType === 'boolean' ? v === true || v === 'true' : v;\n });\n\n if (_qtiModelPciResponseCardinalities[cardinality]) {\n mappedCardinality = _qtiModelPciResponseCardinalities[cardinality];\n if (mappedCardinality === 'base') {\n if (responseValues.length === 0) {\n //return empty response:\n response.base = null;\n } else {\n response.base = {};\n response.base[baseType] = responseValues[0];\n }\n } else {\n response[mappedCardinality] = {};\n response[mappedCardinality][baseType] = responseValues;\n }\n } else {\n throw 'unknown cardinality in the responseDeclaration of the interaction';\n }\n\n return response;\n },\n isEmpty: function(response) {\n return (\n response === null ||\n _.isEmpty(response) ||\n response.base === null ||\n (_.isArray(response.list) && _.isEmpty(response.list)) ||\n (_.isArray(response.record) && _.isEmpty(response.record))\n );\n },\n\n /**\n * Print a PCI JSON response into a human-readable string.\n *\n * @param {Object} response A response in PCI JSON representation.\n * @returns {String} A human-readable version of the PCI JSON representation.\n */\n prettyPrint: function(response) {\n var print = '';\n\n if (typeof response.base !== 'undefined') {\n // -- BaseType.\n print += pciPrettyPrint.printBase(response, true);\n } else if (typeof response.list !== 'undefined') {\n // -- ListType\n print += pciPrettyPrint.printList(response, true);\n } else if (typeof response.record !== 'undefined') {\n // -- RecordType\n print += pciPrettyPrint.printRecord(response, true);\n } else {\n throw 'Not a valid PCI JSON Response';\n }\n\n return print;\n }\n };\n\n return PciResponse;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/PortableElement',[],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) 2015 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Portable element helper\n */\n\n var imgSrcPattern = /(<img[^>]*src=[\"'])([^\"']+)([\"'])/gi;\n\n /**\n * Replace all identified relative media urls by the absolute one.\n * For now only images are supported.\n *\n * @param {String} html - the html to parse\n * @param {Object} the renderer\n * @returns {String} the html without updated URLs\n */\n function fixMarkupMediaSources(html, renderer) {\n html = html || '';\n\n return html.replace(imgSrcPattern, function(substr, $1, $2, $3) {\n var resolved = renderer.resolveUrl($2) || $2;\n return $1 + resolved + $3;\n });\n }\n\n /**\n * @exports taoQtiItem/qtiCommonRenderer/helpers/PortableElement\n */\n var PortableElement = {\n fixMarkupMediaSources: fixMarkupMediaSources\n };\n\n return PortableElement;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/sizeAdapter',['jquery', 'util/adaptSize', 'ui/waitForMedia'], function ($, adaptSize, waitForMedia) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n adaptSize = adaptSize && Object.prototype.hasOwnProperty.call(adaptSize, 'default') ? adaptSize['default'] : adaptSize;\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-2021 (original work) Open Assessment Technologies SA;\n *\n */\n\n var sizeAdapter = {\n /**\n * Resize jQueryElement that have changed their dimensions due to a change of the content\n *\n * @param {jQueryElement|widget} target\n */\n adaptSize(target) {\n let $elements;\n let $container;\n\n switch (true) {\n // widget\n case typeof target.$container !== 'undefined':\n $elements = target.$container.find('.add-option, .result-area .target, .choice-area .qti-choice');\n $container = target.$container;\n break;\n\n // jquery elements\n default:\n $elements = target;\n $container = $($elements).first().parent();\n }\n\n $container.waitForMedia(function () {\n adaptSize.height($elements);\n document.addEventListener(\n 'load',\n e => {\n if (e.target && e.target.rel === 'stylesheet') {\n adaptSize.height($elements);\n }\n },\n true\n );\n });\n }\n };\n\n return sizeAdapter;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/helpers/uploadMime',['lodash', 'i18n', 'core/mimetype/definitions'], function (_, __, mimeTypes) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n mimeTypes = mimeTypes && Object.prototype.hasOwnProperty.call(mimeTypes, 'default') ? mimeTypes['default'] : mimeTypes;\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-21 (original work) Open Assessment Technologies SA ;\n */\n\n const delimetr = ' ';\n\n const uploadMime = {\n /**\n * Fetch mime type definitions\n * (translation function for labels must be injected from here)\n * @returns {Array}\n */\n getMimeTypes: function getMimeTypes() {\n return mimeTypes.getList(__);\n },\n\n /**\n * Set the expected types in the format according to the number of types\n *\n * @param {Object} interaction\n * @param {Array} types\n */\n setExpectedTypes: function setExpectedTypes(interaction, types) {\n let classes = interaction.attr('class') || '';\n classes = classes.replace(/x-tao-upload-type-[-_a-zA-Z+.0-9]*/g, '').trim();\n interaction.attr('class', classes);\n interaction.removeAttr('type');\n\n if (!types) {\n return;\n }\n\n if (types.length === 1) {\n //if there is only one value set into the qti standard type attribute\n if (types[0] !== 'any/kind') {\n interaction.attr('type', types[0]);\n }\n } else {\n //For backward compatibility:\n //if there is more than one value, set into into TAO specific css classes\n interaction.attr(\n 'class',\n _.reduce(\n types,\n function (acc, selectedType) {\n return acc + ' x-tao-upload-type-' + selectedType.replace('/', '_');\n },\n classes\n ).trim()\n );\n\n interaction.attr('type', types.join(delimetr));\n }\n },\n\n /**\n * Return the array of authorized mime types\n * Get the standard \"type\" attribute value with mime types separated by space.\n * @param {Object} interaction - standard QTI interaction model object\n * @param {Boolean} [includeEquivalents] - enable including all recognized as equivalent types\n * @returns {Array}\n */\n getExpectedTypes: function getExpectedTypes(interaction, includeEquivalents) {\n let equivalents = [];\n let types = [];\n let mimes;\n\n if (interaction.attr('type')) {\n types = interaction.attr('type').split(delimetr);\n }\n\n // add in equivalent mimetypes to the list of expected types\n if (includeEquivalents === true) {\n mimes = uploadMime.getMimeTypes();\n _.forEach(types, function (mime) {\n const mimeData = _.find(mimes, { mime: mime });\n if (mimeData && _.isArray(mimeData.equivalent)) {\n equivalents = _.union(equivalents, mimeData.equivalent);\n }\n });\n }\n\n return _.union(types, equivalents);\n }\n };\n\n return uploadMime;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/Gap',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<span class=\\\"qti-choice qti-gap\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\r\\n <span data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" class=\\\"gapmatch-content\\\"> </span>\\r\\n</span>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var Gap = {\n qtiClass: 'gap',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return Gap;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/GapImg',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"alt=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.objetLabel)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \";\n return buffer;\n }\n\n buffer += \"<li class=\\\"qti-choice qti-gapImg selectable\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n <img src=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.object)),stack1 == null || stack1 === false ? stack1 : stack1.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.data)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \\n width=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.object)),stack1 == null || stack1 === false ? stack1 : stack1.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.width)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n height=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.object)),stack1 == null || stack1 === false ? stack1 : stack1.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.height)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.objectLabel), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n />\\n</li>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GapImg = {\n qtiClass: 'gapImg',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return GapImg;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/GapText',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<li class=\\\"qti-choice\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</li>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GapText = {\n qtiClass: 'gapText',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return GapText;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/Hottext',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<span class=\\\"qti-choice qti-hottext hottext\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\r\\n <label class=\\\"hottext-checkmark\\\">\\r\\n <input type=\\\"checkbox\\\" value=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\">\\r\\n <span class=\\\"icon-checkbox small\\\"></span>\\r\\n </label>\\r\\n <span class=\\\"hottext-content\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</span>\\r\\n</span>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var Hottext = {\n qtiClass: 'hottext',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return Hottext;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/InlineChoice',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (_, Handlebars, __, DOMPurify, containerHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<option data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" value=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</option>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var InlineChoice = {\n qtiClass: 'inlineChoice',\n getContainer: containerHelper.get,\n template: tpl,\n getData: function getData(choice, data) {\n data.body = _.unescape(data.body);\n return data;\n }\n };\n\n return InlineChoice;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<li class=\\\"qti-choice\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</li>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SimpleAssociableChoice_AssociateInteraction = {\n qtiClass: 'simpleAssociableChoice.associateInteraction',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return SimpleAssociableChoice_AssociateInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<th class=\\\"qti-choice qti-associableChoice qti-simpleAssociableChoice\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</th>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SimpleAssociableChoice_MatchInteraction = {\n qtiClass: 'simpleAssociableChoice.matchInteraction',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return SimpleAssociableChoice_MatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.ChoiceInteraction',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n <input\\n type=\\\"radio\\\"\\n name=\\\"response-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.interaction)),stack1 == null || stack1 === false ? stack1 : stack1.serial)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n value=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n tabindex=\\\"1\\\"\\n >\\n <span class=\\\"icon-radio\\\"></span>\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n <input\\n type=\\\"checkbox\\\"\\n name=\\\"response-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.interaction)),stack1 == null || stack1 === false ? stack1 : stack1.serial)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n value=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n tabindex=\\\"1\\\"\\n >\\n <span class=\\\"icon-checkbox\\\"></span>\\n \";\n return buffer;\n }\n\n buffer += \"<li class=\\\"qti-choice qti-simpleChoice\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n <div class=\\\"pseudo-label-box\\\">\\n <label class=\\\"real-label\\\">\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.unique), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </label>\\n <div class=\\\"label-box\\\">\\n <div class=\\\"label-content clear\\\" contenteditable=\\\"false\\\" id=\\\"choice-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.interaction)),stack1 == null || stack1 === false ? stack1 : stack1.serial)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <svg class=\\\"overlay-answer-eliminator\\\">\\n <line x1=\\\"0\\\" y1=\\\"100%\\\" x2=\\\"100%\\\" y2=\\\"0\\\"/>\\n <line x1=\\\"0\\\" y1=\\\"0\\\" x2=\\\"100%\\\" y2=\\\"100%\\\"/>\\n </svg>\\n </div>\\n </div>\\n </div>\\n <label data-eliminable=\\\"container\\\" data-label=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Eliminate\", options) : helperMissing.call(depth0, \"__\", \"Eliminate\", options)))\n + \"\\\">\\n <span data-eliminable=\\\"trigger\\\" class=\\\"icon-checkbox\\\"></span>\\n </label>\\n</li>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SimpleChoice_ChoiceInteraction = {\n qtiClass: 'simpleChoice.choiceInteraction',\n getContainer: containerHelper.get,\n getData: function(choice, data) {\n data.unique = parseInt(data.interaction.attributes.maxChoices) === 1;\n return data;\n },\n template: tpl\n };\n\n return SimpleChoice_ChoiceInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<li class=\\\"qti-choice\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</li>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SimpleChoice_OrderInteraction = {\n qtiClass: 'simpleChoice.orderInteraction',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return SimpleChoice_OrderInteraction;\n\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/factory',['lodash', 'core/promise', 'core/eventifier'], function (_, Promise, eventifier){\n 'use strict';\n\n var _requirejs = window.require;\n var _defaultLoadingOptions = {\n reload: false\n };\n\n var loadModuleConfig = function loadModuleConfig(manifest){\n return new Promise(function(resolve, reject){\n var requireConfigAliases = {};\n var baseUrl;\n var reqConfigs = [];\n var modules = {};\n\n if(!manifest || !manifest.runtime){\n return reject('invalid manifest');\n }\n\n baseUrl = manifest.baseUrl;\n\n if(_.isArray(manifest.runtime.config) && manifest.runtime.config.length){\n _.forEach(manifest.runtime.config, function(pciConfig){\n if(_.isString(pciConfig)){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig);\n }else{\n if(pciConfig.data){\n modules = _.defaults(modules, pciConfig.data.paths || {});\n }else if(pciConfig.file){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig.file);\n }\n }\n });\n }\n\n require(reqConfigs, function(){\n\n var runtimeModules = {};\n\n requireConfigAliases[manifest.typeIdentifier] = baseUrl;\n\n if(manifest.model === 'IMSPCI'){\n\n modules = _.reduce(arguments, function(acc, conf){\n return _.defaults(acc, conf.paths || {});\n }, modules);\n\n _.forEach(manifest.runtime.modules || {}, function(paths, id){\n if(paths && (_.isString(paths) || (_.isArray(paths) && paths.length))){\n runtimeModules[id] = paths;\n }\n });\n\n modules = _.merge(modules, runtimeModules);\n\n _.forEach(modules, function(paths, id){\n paths = _.isArray(paths) ? paths : [paths];\n requireConfigAliases[id] = _.map(paths, function(path){\n return baseUrl+'/'+path.replace(/\\.js$/, '');\n });\n });\n }\n\n resolve(requireConfigAliases);\n\n }, reject);\n\n\n });\n };\n\n /**\n * Evaluate if the given object is a proper portable element provider\n * @param {Object} provider\n * @returns {Boolean}\n */\n var isPortableElementProvider = function isPortableElementProvider(provider){\n return (provider && _.isFunction(provider.load));\n };\n\n return function portableElementRegistry(methods){\n\n var _loaded = false;\n var __providers = {};\n\n /**\n * The portable element registry instance\n * @typedef {portableElementRegistry}\n */\n return eventifier(_.defaults(methods || {}, {\n _registry : {},\n\n /**\n * Get a register portable element\n * @param {String} typeIdentifier\n * @param {String} version\n * @returns {Object}\n */\n get : function get(typeIdentifier, version){\n\n if(this._registry[typeIdentifier]){\n //check version\n if(version){\n return _.find(this._registry[typeIdentifier], {version : version});\n }else{\n //latest\n return _.last(this._registry[typeIdentifier]);\n }\n }\n },\n\n /**\n * Register a portable element provider\n * @param moduleName\n * @param {String|Object }provider - the portable provider object or module name\n * @returns {portableElementRegistry}\n */\n registerProvider : function registerProvider(moduleName, provider){\n __providers[moduleName] = isPortableElementProvider(provider) ? provider : null;\n _loaded = false;\n return this;\n },\n\n /**\n * Clear all previously registered providers\n * @returns {portableElementRegistry}\n */\n resetProviders : function resetProviders(){\n __providers = {};\n _loaded = false;\n return this;\n },\n\n /**\n * Load the providers\n * @param {Object} [options]\n * @param {Boolean} [options.reload] - force to reload the registered providers\n * @returns {Promise}\n */\n loadProviders : function loadProviders(options){\n var self = this;\n var loadPromise;\n\n if(_loaded && !options.reload){\n loadPromise = Promise.resolve([]);\n } else {\n loadPromise = new Promise(function(resolve, reject) {\n var providerLoadingStack = [];\n _.forIn(__providers, function(provider, id){\n if(provider === null){\n providerLoadingStack.push(id);\n }\n });\n _requirejs(providerLoadingStack, function(){\n _.each([].slice.call(arguments), function(provider){\n if(isPortableElementProvider(provider)){\n __providers[providerLoadingStack.shift()] = provider;\n }\n });\n resolve(__providers);\n _loaded = true;\n self.trigger('providersloaded', __providers);\n }, reject);\n });\n }\n\n return loadPromise;\n },\n\n /**\n * Get all versions of all portable elements registered\n * @returns {Object} - all portable elements and their versions\n */\n getAllVersions : function getAllVersions(){\n var all = {};\n _.forIn(this._registry, function (versions, id){\n all[id] = _.map(versions, 'version');\n });\n return all;\n },\n\n /**\n * Get the runtime for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {Object} the runtime model\n */\n getRuntime : function getRuntime(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n return _.assign(portableElement.runtime, {\n id : portableElement.typeIdentifier,\n label : portableElement.label,\n baseUrl : portableElement.baseUrl,\n model : portableElement.model\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n\n /**\n * Get the creator model for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {Object} the creator model\n */\n getCreator : function getCreator(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement && portableElement.creator){\n return _.assign(portableElement.creator, {\n id : portableElement.typeIdentifier,\n label : portableElement.label,\n baseUrl : portableElement.baseUrl,\n response : portableElement.response,\n model : portableElement.model,\n xmlns : portableElement.xmlns\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n\n /**\n * Returned all enabled created from the registry\n * @returns {Object} the collection of creators\n */\n getLatestCreators : function getLatestCreators(){\n var all = {};\n _.forIn(this._registry, function (versions, id){\n var lastVersion = _.last(versions);\n\n //check if the portable element is creatable:\n if(lastVersion.creator && lastVersion.creator.hook && lastVersion.enabled){\n all[id] = lastVersion;\n }\n });\n return all;\n },\n\n /**\n * Get the baseUrl for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {String} the base url\n */\n getBaseUrl : function getBaseUrl(typeIdentifier, version){\n var runtime = this.get(typeIdentifier, version);\n if(runtime){\n return runtime.baseUrl;\n }\n return '';\n },\n\n /**\n * Load the runtimes from registered portable element provider(s)\n *\n * @param {Object} [options]\n * @param {Array} [options.include] - the exact list of portable element typeIdentifier that should be loaded\n * @param {Boolean} [options.reload] - tells if all interactions should be reloaded\n * @returns {Promise}\n */\n loadRuntimes : function loadRuntimes(options){\n var self = this;\n var loadPromise;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n loadPromise = self.loadProviders(options).then(function(providers){\n\n var loadStack = [];\n\n _.forEach(providers, function (provider){\n if(provider){//check that the provider is loaded\n loadStack.push(provider.load());\n }\n });\n\n //performs the loadings in parallel\n return Promise.all(loadStack).then(function (results){//TODO could remove one level of promise\n\n var configLoadingStack = [];\n\n //update registry\n self._registry = _.reduce(results, function (acc, _pcis){\n return _.merge(acc, _pcis);\n }, self._registry || {});//incremental loading\n\n //pre-configuring the baseUrl of the portable element's source\n _.forIn(self._registry, function (versions, typeIdentifier){\n if(_.isArray(options.include) && _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n configLoadingStack.push(loadModuleConfig(self.get(typeIdentifier)));\n });\n\n return Promise.all(configLoadingStack).then(function(moduleConfigs){\n var requireConfigAliases = _.reduce(moduleConfigs, function(acc, paths){\n return _.merge(acc, paths);\n }, {});\n\n //save the required libs name => path to global require alias\n //TODO in future planned user story : change this to a local require context to solve conflicts in third party module naming\n _requirejs.config({paths : requireConfigAliases});\n });\n });\n\n });\n\n\n loadPromise\n .then(function() {\n self.trigger('runtimesloaded');\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n\n /**\n * Load the creators from registered portable element provider(s)\n *\n * @param {Object} [options]\n * @param {Array} [options.include] - the exact list of portable element typeIdentifier that should be loaded\n * @param {Boolean} [options.reload] - tells if all interactions should be reloaded\n * @returns {Promise}\n */\n loadCreators : function loadCreators(options){\n var loadPromise;\n var self = this;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n loadPromise = self.loadRuntimes(options).then(function(){\n var requiredCreatorHooks = [];\n\n _.forIn(self._registry, function (versions, typeIdentifier){\n var portableElementModel = self.get(typeIdentifier);//currently use the latest version only\n if(portableElementModel.creator && portableElementModel.creator.hook){\n if(portableElementModel.enabled){\n if(_.isArray(options.include) && _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n }else{\n if(!_.isArray(options.include) || _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n }\n requiredCreatorHooks.push(portableElementModel.creator.hook.replace(/\\.js$/, ''));\n }\n });\n\n if(requiredCreatorHooks.length){\n return new Promise(function(resolve, reject){\n //@todo support caching?\n _requirejs(requiredCreatorHooks, function (){\n var creators = {};\n _.each(arguments, function (creatorHook){\n var id = creatorHook.getTypeIdentifier();\n var portableElementModel = self.get(id);\n var i = _.findIndex(self._registry[id], {version : portableElementModel.version});\n if(i < 0){\n self.trigger('error', 'no creator found for id/version ' + id + '/' + portableElementModel.version);\n }else{\n self._registry[id][i].creator.module = creatorHook;\n creators[id] = creatorHook;\n }\n });\n resolve(creators);\n }, reject);\n });\n }else{\n return Promise.resolve({});\n }\n\n });\n\n loadPromise\n .then(function(creators) {\n self.trigger('creatorsloaded', creators);\n return creators;\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n\n /**\n * enable a portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n enable: function enable(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n portableElement.enabled = true;\n }\n return this;\n },\n\n /**\n * disable a portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n disable: function disable(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n portableElement.enabled = false;\n }\n return this;\n },\n\n /**\n * check is a portable element is enabled\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n isEnabled: function isEnabled(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n return (portableElement && portableElement.enabled === true);\n }\n }));\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 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Sam <sams@taotesting.com>\n * @requires jquery\n * @requires lodash\n */\ndefine('taoQtiItem/qtiCreator/helper/qtiElements',['jquery', 'lodash', 'i18n'], function($, _, __){\n \"use strict\";\n\n var QtiElements = {};\n\n QtiElements.classes = {\n //abstract classes:\n 'itemBody' : {'parents' : ['bodyElement'], 'contains' : ['block'], 'abstract' : true},\n 'atomicBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'atomicInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'simpleBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['block'], 'abstract' : true},\n 'simpleInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'flowStatic' : {'parents' : ['flow'], 'abstract' : true},\n 'blockStatic' : {'parents' : ['block'], 'abstract' : true},\n 'inlineStatic' : {'parents' : ['inline'], 'abstract' : true},\n 'flow' : {'parents' : ['objectFlow'], 'abstract' : true},\n 'tableCell' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'abstract' : true},\n //html-derived qti elements:\n 'caption' : {'parents' : ['bodyElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'col' : {'parents' : ['bodyElement'], 'xhtml' : true},\n 'colgroup' : {'parents' : ['bodyElement'], 'contains' : ['col'], 'xhtml' : true},\n 'div' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['flow'], 'xhtml' : true},\n 'dl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['dlElement'], 'xhtml' : true},\n 'dt' : {'parents' : ['dlElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'dd' : {'parents' : ['dlElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'hr' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'xhtml' : true},\n 'math' : {'parents' : ['blockStatic', 'flowStatic', 'inlineStatic'], 'xhtml' : true},\n 'li' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'ol' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'ul' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'object' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['objectFlow'], 'xhtml' : true},\n 'param' : {'parents' : ['objectFlow'], 'xhtml' : true},\n 'table' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody'], 'xhtml' : true},\n 'tbody' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'tfoot' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'thead' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'td' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'th' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'tr' : {'parents' : ['bodyElement'], 'contains' : ['tableCell'], 'xhtml' : true},\n 'a' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'abbr' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'acronym' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'b' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'big' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'cite' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'code' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'dfn' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'em' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'i' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'kbd' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'q' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'samp' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'small' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'span' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'strong' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sub' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sup' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'tt' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'var' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'blockquote' : {'parents' : ['simpleBlock'], 'xhtml' : true},\n 'address' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h1' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h2' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h3' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h4' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h5' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h6' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'p' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'pre' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'img' : {'parents' : ['atomicInline'], 'xhtml' : true, attributes : ['src', 'alt', 'longdesc', 'height', 'width']},\n 'br' : {'parents' : ['atomicInline'], 'xhtml' : true},\n //qti elements:\n 'infoControl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'qti' : true},\n 'textRun' : {'parents' : ['inlineStatic', 'flowstatic'], 'qti' : true},\n 'feedbackInline' : {'parents' : ['simpleInline', 'feedbackElement'], 'qti' : true},\n 'feedbackBlock' : {'parents' : ['simpleBlock'], 'qti' : true},\n 'rubricBlock' : {'parents' : ['simpleBlock'], 'qti' : true}, //strange qti 2.1 exception, marked as simpleBlock instead of\n 'blockInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n 'inlineInteraction' : {'parents' : ['inline', 'flow', 'interaction'], 'qti' : true},\n 'gap' : {'parents' : ['inlineStatic'], 'qti' : true},\n 'hottext' : {'parents' : ['flowstatic', 'inlineStatic'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'printedVariable' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic', 'textOrVariable'], 'qti' : true},\n 'prompt' : {'parents' : ['bodyElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'templateElement' : {'parents' : ['bodyElement'], 'qti' : true},\n 'templateBlock' : {'parents' : ['blockStatic', 'flowStatic', 'templateElement'], 'contains' : ['blockStatic'], 'qti' : true},\n 'templateInline' : {'parents' : ['inlineStatic', 'flowStatic', 'templateElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'choiceInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'associateInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'orderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'matchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hottextInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'gapMatchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'mediaInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'sliderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'uploadInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'drawingInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'graphicInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hotspotInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicAssociateInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicOrderInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicGapMatchInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'selectPointInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'textEntryInteraction' : {'parents' : ['stringInteraction', 'inlineInteraction'], 'qti' : true},\n 'extendedTextInteraction' : {'parents' : ['stringInteraction', 'blockInteraction'], 'qti' : true},\n 'inlineChoiceInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'endAttemptInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'customInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n '_container' : {'parents' : ['block'], 'qti' : true}//a pseudo class introduced in TAO\n };\n\n QtiElements.cache = {containable : {}, children : {}, parents : {}};\n\n QtiElements.getAllowedContainersElements = function(qtiClass, $container){\n var classes = QtiElements.getAllowedContainers(qtiClass);\n var jqSelector = '';\n for(var i in classes){\n if(!classes[i].qti){\n //html element:\n jqSelector += classes[i] + ', ';\n }\n }\n\n if(jqSelector){\n jqSelector = jqSelector.substring(0, jqSelector.length - 2);\n }\n\n return $(jqSelector, $container ? $container : $(document)).filter(':not([data-qti-type])');\n };\n\n QtiElements.getAllowedContainers = function(qtiClass){\n var ret;\n if(QtiElements.cache.containable[qtiClass]){\n ret = QtiElements.cache.containable[qtiClass];\n }else{\n ret = [];\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(model.contains){\n var intersect = _.intersection(model.contains, parents);\n if(intersect.length){\n if(!model.abstract){\n ret.push(aClass);\n }\n ret = _.union(ret, QtiElements.getChildClasses(aClass, true));\n }\n }\n }\n QtiElements.cache.containable[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getAllowedContents = function(qtiClass, recursive, checked){\n\n var ret = [];\n checked = checked || {};\n\n var model = QtiElements.classes[qtiClass];\n if(model && model.contains){\n for(var i in model.contains){\n var contain = model.contains[i];\n if(!checked[contain]){\n checked[contain] = true;\n\n //qtiClass can contain everything defined as its contents\n ret.push(contain);\n\n //qtiClass can also contain subclass of its contents\n var children = QtiElements.getChildClasses(contain, true);\n for(var i in children){\n var child = children[i];\n if(!checked[child]){\n checked[child] = true;\n\n ret.push(child);\n\n //adding children allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(child, true, checked));\n }\n }\n }\n\n //adding allowed contents of qtiClass' allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(contain, true, checked));\n }\n\n }\n }\n }\n\n //qtiClass can contain all allowed contents of its parents:\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var i in parents){\n ret = _.union(ret, QtiElements.getAllowedContents(parents[i], recursive, checked));\n }\n\n return _.uniq(ret, false);\n };\n\n QtiElements.isAllowedClass = function(qtiContainerClass, qtiContentClass){\n var allowedClasses = QtiElements.getAllowedContents(qtiContainerClass);\n return (_.indexOf(allowedClasses, qtiContentClass) >= 0);\n };\n\n QtiElements.getParentClasses = function(qtiClass, recursive){\n var ret;\n if(recursive && QtiElements.cache.parents[qtiClass]){\n ret = QtiElements.cache.parents[qtiClass];\n }else{\n ret = [];\n if(QtiElements.classes[qtiClass]){\n ret = QtiElements.classes[qtiClass].parents;\n if(recursive){\n for(var i in ret){\n ret = _.union(ret, QtiElements.getParentClasses(ret[i], recursive));\n }\n ret = _.uniq(ret, false);\n }\n }\n QtiElements.cache.parents[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getChildClasses = function(qtiClass, recursive, type){\n var ret;\n var cacheType = type ? type : 'all';\n if(recursive && QtiElements.cache.children[qtiClass] && QtiElements.cache.children[qtiClass][cacheType]){\n ret = QtiElements.cache.children[qtiClass][cacheType];\n }else{\n ret = [];\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(_.indexOf(model.parents, qtiClass) >= 0){\n if(type){\n if(model[type]){\n ret.push(aClass);\n }\n }else{\n ret.push(aClass);\n }\n if(recursive){\n ret = _.union(ret, QtiElements.getChildClasses(aClass, recursive, type));\n }\n }\n }\n if(!QtiElements.cache.children[qtiClass]){\n QtiElements.cache.children[qtiClass] = {};\n }\n QtiElements.cache.children[qtiClass][cacheType] = ret;\n }\n\n return ret;\n };\n\n QtiElements.isBlock = function(qtiClass){\n return QtiElements.is(qtiClass, 'block');\n };\n\n QtiElements.isInline = function(qtiClass){\n return QtiElements.is(qtiClass, 'inline');\n };\n\n QtiElements.is = function(qtiClass, topClass){\n if(qtiClass === topClass){\n return true;\n }else{\n var parents = QtiElements.getParentClasses(qtiClass, true);\n return (_.indexOf(parents, topClass) >= 0);\n }\n };\n\n QtiElements.getAvailableAuthoringElements = function(){\n\n var tagTitles = {\n commonInteractions: __('Common Interactions'),\n inlineInteractions: __('Inline Interactions'),\n graphicInteractions: __('Graphic Interactions')\n }\n\n return {\n choiceInteraction : {\n label : __('Choice Interaction'),\n description : __('Select a single (radio buttons) or multiple (check boxes) responses among a set of choices.'),\n icon : 'icon-choice',\n short : __('Choice'),\n qtiClass : 'choiceInteraction',\n tags:[tagTitles.commonInteractions, 'mcq'],\n group: 'common-interactions'\n },\n orderInteraction : {\n label : __('Order Interaction'),\n icon : 'icon-order',\n description : __('Arrange a list of choices in the correct order.'),\n short : __('Order'),\n qtiClass : 'orderInteraction',\n tags:[tagTitles.commonInteractions, 'ordering'],\n group: 'common-interactions'\n\n },\n associateInteraction : {\n label : __('Associate Interaction'),\n icon : 'icon-associate',\n description : __('Create pair(s) from a series of choices.'),\n short : __('Associate'),\n qtiClass : 'associateInteraction',\n tags:[tagTitles.commonInteractions, 'association'],\n group: 'common-interactions'\n },\n matchInteraction : {\n label : __('Match Interaction'),\n icon : 'icon-match',\n description : __('Create association(s) between two sets of choices displayed in a table (row and column).'),\n short : __('Match'),\n qtiClass : 'matchInteraction',\n tags:[tagTitles.commonInteractions, 'association'],\n group: 'common-interactions'\n },\n hottextInteraction : {\n label : __('Hottext Interaction'),\n icon : 'icon-hottext',\n description : __('Select one or more text parts (hottext) within a text.'),\n short : __('Hottext'),\n qtiClass : 'hottextInteraction',\n tags:[tagTitles.commonInteractions, 'text'],\n group: 'common-interactions'\n },\n gapMatchInteraction : {\n label : __('Gap Match Interaction'),\n icon : 'icon-gap-match',\n description : __(' Fill in the gaps in a text from a set of choices.'),\n short : __('Gap Match'),\n qtiClass : 'gapMatchInteraction',\n tags:[tagTitles.commonInteractions, 'text', 'association'],\n group: 'common-interactions'\n },\n sliderInteraction : {\n label : __('Slider Interaction'),\n icon : 'icon-slider',\n description :__('Select a value within a numerical range.'),\n short : __('Slider'),\n qtiClass : 'sliderInteraction',\n tags:[tagTitles.commonInteractions, 'special'],\n group: 'common-interactions'\n },\n extendedTextInteraction : {\n label : __('Extended Text Interaction'),\n icon : 'icon-extended-text',\n description : __('Collect open-ended information in one or more text area(s) (strings or numeric values).'),\n short : __('Extended Text'),\n qtiClass : 'extendedTextInteraction',\n tags:[tagTitles.commonInteractions, 'text'],\n group: 'common-interactions'\n },\n uploadInteraction : {\n label : __('File Upload Interaction'),\n icon : 'icon-upload',\n description : __('Upload a file (e.g. document, picture...) as a response.'),\n short : __('File Upload'),\n qtiClass : 'uploadInteraction',\n tags:[tagTitles.commonInteractions, 'special'],\n group: 'common-interactions'\n },\n mediaInteraction : {\n label : __('Media Interaction'),\n icon : 'icon-media',\n description : __('Control the playing parameters (auto-start, loop) of a video or audio file and report the number of time it has been played.'),\n short : __('Media'),\n qtiClass : 'mediaInteraction',\n tags:[tagTitles.commonInteractions, 'media'],\n group: 'common-interactions'\n },\n _container : {\n label : __('Text Block'),\n icon : 'icon-font',\n description : __('Block contains the content (stimulus) of the item such as text or image. It is also required for Inline Interactions.'),\n short : __('Block'),\n qtiClass : '_container',\n tags:[tagTitles.inlineInteractions, 'text'],\n group: 'inline-interactions'\n },\n inlineChoiceInteraction : {\n label : __('Inline Choice Interaction'),\n icon : 'icon-inline-choice',\n description : __('Select a choice from a drop-down list.'),\n short : __('Inline Choice'),\n qtiClass : 'inlineChoiceInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'mcq'],\n group: 'inline-interactions'\n },\n textEntryInteraction : {\n label : __('Text Entry Interaction'),\n icon : 'icon-text-entry',\n description : __('Collect open-ended information in a short text input (strings or numeric values).'),\n short : __('Text Entry'),\n qtiClass : 'textEntryInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'text'],\n group: 'inline-interactions'\n },\n endAttemptInteraction : {\n label : __('End Attempt Interaction'),\n icon : 'icon-end-attempt',\n description : __('Trigger the end of the item attempt.'),\n short : __('End Attempt'),\n qtiClass : 'endAttemptInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'button', 'submit'],\n group: 'inline-interactions'\n },\n hotspotInteraction : {\n label : __('Hotspot Interaction'),\n icon : 'icon-hotspot',\n description : __('Select one or more areas (hotspots) displayed on an picture.'),\n short : __('Hotspot'),\n qtiClass : 'hotspotInteraction',\n tags:[tagTitles.graphicInteractions, 'mcq'],\n group: 'graphic-interactions'\n },\n graphicOrderInteraction : {\n label : __('Graphic Order Interaction'),\n icon : 'icon-graphic-order',\n description : __('Order the areas (hotspots) displayed on a picture.'),\n short : __('Order'),\n qtiClass : 'graphicOrderInteraction',\n tags:[tagTitles.graphicInteractions, 'ordering'],\n group: 'graphic-interactions'\n },\n graphicAssociateInteraction : {\n label : __('Graphic Associate Interaction'),\n icon : 'icon-graphic-associate',\n description : __('Create association(s) between areas (hotspots) displayed on a picture.'),\n short : __('Associate'),\n qtiClass : 'graphicAssociateInteraction',\n tags:[tagTitles.graphicInteractions, 'association'],\n group: 'graphic-interactions'\n },\n graphicGapMatchInteraction : {\n label : __('Graphic Gap Match Interaction'),\n icon : 'icon-graphic-gap',\n description : __('Fill in the gaps on a picture with a set of image choices.'),\n short : __('Gap Match'),\n qtiClass : 'graphicGapMatchInteraction',\n tags:[tagTitles.graphicInteractions, 'association'],\n group: 'graphic-interactions'\n },\n selectPointInteraction : {\n label : __('Select Point Interaction'),\n icon : 'icon-select-point',\n description : __('Position one or more points on a picture (response areas are not displayed).'),\n short : __('Select Point'),\n qtiClass : 'selectPointInteraction',\n tags:[tagTitles.graphicInteractions],\n group: 'graphic-interactions'\n }\n };\n };\n\n return QtiElements;\n\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/ciRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory',\n 'taoQtiItem/qtiCreator/helper/qtiElements'\n], function (_, portableElementRegistry, qtiElements){\n 'use strict';\n\n /**\n * Create a ney interaction registry instance\n * interaction registry need to register newly loaded creator hooks in the list of available qti authoring elements\n *\n * @returns {Object} registry instance\n */\n return function customInteractionRegistry(){\n\n return portableElementRegistry({\n getAuthoringData : function getAuthoringData(typeIdentifier, options){\n let pciModel;\n options = _.defaults(options || {}, {version : 0, enabledOnly : false});\n pciModel = this.get(typeIdentifier, options.version);\n if(pciModel && pciModel.creator && pciModel.creator.hook && pciModel.creator.icon && (pciModel.enabled || !options.enabledOnly)){\n return {\n label : pciModel.label, //currently no translation available\n icon : pciModel.creator.icon.replace(new RegExp('^' + typeIdentifier + '\\/'), pciModel.baseUrl),\n short : pciModel.short,\n description : pciModel.description,\n qtiClass : 'customInteraction.' + pciModel.typeIdentifier, //custom interaction is block type\n tags : _.union(['Custom Interactions'], pciModel.tags),\n group : 'custom-interactions'\n };\n }\n }\n }).on('creatorsloaded', function(){\n var creators = this.getLatestCreators();\n _.forEach(creators, function(creator, typeIdentifier){\n qtiElements.classes['customInteraction.' + typeIdentifier] = {parents : ['customInteraction'], qti : true};\n });\n });\n };\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 */\ndefine('taoQtiItem/portableElementRegistry/ciRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/ciRegistry', 'module'], function (_, ciRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of ciRegistry\n var registry = ciRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/icRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory'\n], function (_, portableElementRegistry){\n 'use strict';\n\n /**\n * Info control registry has currently no additonal fonctionalities than the basic portable element registry\n *\n * @returns {Object} registry instance\n */\n return function infoControlRegistry(){\n return portableElementRegistry();\n }\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 */\ndefine('taoQtiItem/portableElementRegistry/icRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/icRegistry', 'module'], function (_, icRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of icRegistry\n var registry = icRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\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\ndefine('taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy',[\n 'taoQtiItem/portableElementRegistry/ciRegistry',\n 'taoQtiItem/portableElementRegistry/icRegistry'\n], function (ciRegistry, icRegistry) {\n 'use strict';\n\n function getBaseUrlByIdentifier(typeIdentifier) {\n if (ciRegistry.get(typeIdentifier)) {\n return ciRegistry.getBaseUrl(typeIdentifier);\n }\n if (icRegistry.get(typeIdentifier)) {\n return icRegistry.getBaseUrl(typeIdentifier);\n }\n return typeIdentifier;\n }\n\n //strategy to resolve portable info control and portable interactions paths.\n //It should never be reached in the stack the usual way and should be called only using resolveBy.\n return {\n name: 'portableElementLocation',\n handle: function handlePortableElementLocation(url) {\n\n if (url.file === url.path) {\n return getBaseUrlByIdentifier(url.file);\n } else if (url.source === url.relative) {\n return url.relative.replace(/^(\\.\\/)?([a-z_0-9]+)\\/(.*)/i, function (fullmatch, $1, typeIdentifier, relPath) {\n var runtimeLocation = getBaseUrlByIdentifier(typeIdentifier);\n if (runtimeLocation) {\n return runtimeLocation + '/' + relPath;\n }\n return fullmatch;\n });\n }\n }\n };\n});\n","define('taoQtiItem/qtiCommonRenderer/renderers/config',['lodash', 'context', 'ui/themes', 'taoItems/assets/manager', 'taoItems/assets/strategies', 'module', 'taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy'], function (_, context, themes, assetManagerFactory, assetStrategies, module, portableAssetStrategy) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n themes = themes && Object.prototype.hasOwnProperty.call(themes, 'default') ? themes['default'] : themes;\n assetManagerFactory = assetManagerFactory && Object.prototype.hasOwnProperty.call(assetManagerFactory, 'default') ? assetManagerFactory['default'] : assetManagerFactory;\n assetStrategies = assetStrategies && Object.prototype.hasOwnProperty.call(assetStrategies, 'default') ? assetStrategies['default'] : assetStrategies;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n portableAssetStrategy = portableAssetStrategy && Object.prototype.hasOwnProperty.call(portableAssetStrategy, 'default') ? portableAssetStrategy['default'] : portableAssetStrategy;\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) 2014 (original work) Open Assessment Technologies SA;\n */\n\n var itemThemes = themes.get('items');\n var moduleConfig = module.config();\n\n //Create asset manager stack\n var assetManager = assetManagerFactory(\n [\n {\n name: 'theme',\n handle: function handleTheme(url) {\n if (\n itemThemes &&\n url.path &&\n (url.path === itemThemes.base || _.contains(_.pluck(itemThemes.available, 'path'), url.path))\n ) {\n return context.root_url + url.toString();\n }\n }\n },\n assetStrategies.taomedia,\n assetStrategies.external,\n assetStrategies.base64,\n assetStrategies.itemCssNoCache,\n assetStrategies.baseUrl,\n portableAssetStrategy\n ],\n { baseUrl: '' }\n ); //baseUrl is not predefined in the config, but should be set upon renderer instantiating\n\n //renderers locations\n var locations = {\n assessmentItem: 'taoQtiItem/qtiCommonRenderer/renderers/Item',\n _container: 'taoQtiItem/qtiCommonRenderer/renderers/Container',\n _simpleFeedbackRule: false,\n _tooltip: 'taoQtiItem/qtiCommonRenderer/renderers/Tooltip',\n stylesheet: 'taoQtiItem/qtiCommonRenderer/renderers/Stylesheet',\n outcomeDeclaration: false,\n responseDeclaration: false,\n responseProcessing: false,\n img: 'taoQtiItem/qtiCommonRenderer/renderers/Img',\n math: 'taoQtiItem/qtiCommonRenderer/renderers/Math',\n object: 'taoQtiItem/qtiCommonRenderer/renderers/Object',\n table: 'taoQtiItem/qtiCommonRenderer/renderers/Table',\n printedVariable: 'taoQtiItem/qtiCommonRenderer/renderers/PrintedVariable',\n rubricBlock: 'taoQtiItem/qtiCommonRenderer/renderers/RubricBlock',\n modalFeedback: 'taoQtiItem/qtiCommonRenderer/renderers/ModalFeedback',\n prompt: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/Prompt',\n choiceInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ChoiceInteraction',\n extendedTextInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction',\n orderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/OrderInteraction',\n associateInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/AssociateInteraction',\n matchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MatchInteraction',\n textEntryInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/TextEntryInteraction',\n sliderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SliderInteraction',\n inlineChoiceInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction',\n 'simpleChoice.choiceInteraction': 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.ChoiceInteraction',\n 'simpleChoice.orderInteraction': 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction',\n hottext: 'taoQtiItem/qtiCommonRenderer/renderers/choices/Hottext',\n gap: 'taoQtiItem/qtiCommonRenderer/renderers/choices/Gap',\n gapText: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapText',\n 'simpleAssociableChoice.matchInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction',\n 'simpleAssociableChoice.associateInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction',\n inlineChoice: 'taoQtiItem/qtiCommonRenderer/renderers/choices/InlineChoice',\n hottextInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HottextInteraction',\n hotspotInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HotspotInteraction',\n hotspotChoice: false,\n gapMatchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GapMatchInteraction',\n selectPointInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SelectPointInteraction',\n graphicOrderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicOrderInteraction',\n mediaInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MediaInteraction',\n uploadInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/UploadInteraction',\n graphicGapMatchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicGapMatchInteraction',\n gapImg: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapImg',\n graphicAssociateInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction',\n associableHotspot: false,\n customInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/PortableCustomInteraction',\n infoControl: 'taoQtiItem/qtiCommonRenderer/renderers/PortableInfoControl',\n include: 'taoQtiItem/qtiCommonRenderer/renderers/Include',\n endAttemptInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/EndAttemptInteraction'\n };\n\n var config = {\n name: 'commonRenderer',\n locations: locations,\n options: {\n assetManager: assetManager,\n themes: itemThemes,\n enableDragAndDrop: {\n associate: !!moduleConfig.associateDragAndDrop,\n gapMatch: !!moduleConfig.gapMatchDragAndDrop,\n graphicGapMatch: !!moduleConfig.graphicGapMatchDragAndDrop,\n order: !!moduleConfig.orderDragAndDrop\n },\n messages: moduleConfig.messages\n }\n };\n\n return config;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Container',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify'], function (Handlebars, __, _, DOMPurify) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, 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 += \"<div class=\\\"qti-block\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\";\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n return buffer;\n }\n\n stack1 = (helper = helpers.equal || (depth0 && depth0.equal),options={hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),data:data},helper ? helper.call(depth0, (depth0 && depth0.contentModel), \"blockStatic\", options) : helperMissing.call(depth0, \"equal\", (depth0 && depth0.contentModel), \"blockStatic\", options));\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var Container = {\n qtiClass: '_container',\n template: tpl\n };\n\n return Container;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Img',['ui/waitForMedia', 'handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (waitForMedia, Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"class=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"height=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.height)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"width=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.width)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \";\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program11(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" aria-describedby=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-describedby'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program13(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" aria-hidden=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-hidden'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program15(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" aria-label=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-label'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program17(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" aria-labelledby=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-labelledby'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program19(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" aria-live=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-live'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program21(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" role=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.role)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<img\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"img\\\"\\n src=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.src)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n alt=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.alt)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {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, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.height), {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, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.width), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-describedby']), {hash:{},inverse:self.noop,fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-hidden']), {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-label']), {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-labelledby']), {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['aria-live']), {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.role), {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n />\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var Img = {\n qtiClass: 'img',\n template: tpl,\n getContainer: containerHelper.get,\n render: function render(img, data) {\n return new Promise(function(resolve, reject) {\n containerHelper.get(img).waitForMedia(resolve);\n });\n }\n };\n\n return Img;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Include',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify'], function (Handlebars, __, _, DOMPurify) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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=\\\"qti-include\\\" data-href=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.href)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\">\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var Include = {\n qtiClass: 'include',\n template: tpl\n };\n\n return Include;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/AssociateInteraction',['jquery', 'lodash', 'i18n', 'ui/hider', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/sizeAdapter', 'interact', 'ui/interactUtils'], function ($$1, _, __, hider, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse, sizeAdapter, interact, interactUtils) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n sizeAdapter = sizeAdapter && Object.prototype.hasOwnProperty.call(sizeAdapter, 'default') ? sizeAdapter['default'] : sizeAdapter;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n interactUtils = interactUtils && Object.prototype.hasOwnProperty.call(interactUtils, 'default') ? interactUtils['default'] : interactUtils;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n class=\\\"qti-interaction qti-blockInteraction qti-associateInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"associateInteraction\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <ul class=\\\"choice-area clearfix none block-listing solid horizontal source\\\">\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data};\n if (helper = helpers.choices) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.choices); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.choices) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n <ul class=\\\"result-area none target clearfix\\\">\\n </ul>\\n <div class=\\\"notification-container\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n return \"hidden incomplete-pair\";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<li class=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.empty), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n <div class=\\\"target lft\\\"></div>\\n <div class=\\\"target rgt\\\"></div>\\n</li>\\n\";\n return buffer;\n });\n function pairTpl(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) 2014-2019 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var setChoice = function(interaction, $choice, $target) {\n var $container = containerHelper.get(interaction);\n var choiceSerial = $choice.data('serial');\n var usage = $choice.data('usage') || 0;\n var choice = interaction.getChoice(choiceSerial);\n\n if (!choiceSerial) {\n throw 'empty choice serial';\n }\n\n //to track number of times a choice is used in a pair\n usage++;\n $choice.data('usage', usage);\n\n var _setChoice = function() {\n $target\n .data('serial', choiceSerial)\n .html($choice.html())\n .addClass('filled');\n\n if (!interaction.responseMappingMode && choice.attr('matchMax') && usage >= choice.attr('matchMax')) {\n $choice.addClass('deactivated');\n }\n };\n\n if ($target.siblings('div').hasClass('filled')) {\n var $resultArea = $$1('.result-area', $container),\n $pair = $target.parent(),\n thisPairSerial = [$target.siblings('div').data('serial'), choiceSerial],\n $otherRepeatedPair = $$1();\n\n //check if it is not a repeating association!\n $resultArea\n .children()\n .not($pair)\n .each(function() {\n var $otherPair = $$1(this).children('.filled');\n if ($otherPair.length === 2) {\n var otherPairSerial = [$$1($otherPair[0]).data('serial'), $$1($otherPair[1]).data('serial')];\n if (_.intersection(thisPairSerial, otherPairSerial).length === 2) {\n $otherRepeatedPair = $otherPair;\n return false;\n }\n }\n });\n\n if ($otherRepeatedPair.length === 0) {\n //no repeated pair, so allow the choice to be set:\n _setChoice();\n\n //trigger pair made event\n containerHelper.triggerResponseChangeEvent(interaction, {\n type: 'added',\n $pair: $pair,\n choices: thisPairSerial\n });\n\n instructionMgr.validateInstructions(interaction, { choice: $choice, target: $target });\n\n if (interaction.responseMappingMode || parseInt(interaction.attr('maxAssociations')) === 0) {\n $pair.removeClass('incomplete-pair');\n\n //append new pair option?\n if (!$resultArea.children('.incomplete-pair').length) {\n $resultArea.append(pairTpl({ empty: true }));\n $resultArea.children('.incomplete-pair').fadeIn(600, function() {\n hider.show(this);\n });\n }\n }\n } else {\n //repeating pair: show it:\n\n //@todo add a notification message here in warning\n $otherRepeatedPair.css('border', '1px solid orange');\n $target.html(__('identical pair already exists')).css({\n color: 'orange',\n border: '1px solid orange'\n });\n setTimeout(function() {\n $otherRepeatedPair.removeAttr('style');\n $target.empty().css({ color: '', border: '' });\n }, 2000);\n }\n } else {\n _setChoice();\n }\n };\n\n var unsetChoice = function(interaction, $filledChoice, animate, triggerChange) {\n var $container = containerHelper.get(interaction);\n var choiceSerial = $filledChoice.data('serial');\n var $choice = $container.find('.choice-area [data-serial=' + choiceSerial + ']');\n var usage = $choice.data('usage') || 0;\n var $parent = $filledChoice.parent();\n var $sibling = $container.find(\n '.choice-area [data-serial=' + $filledChoice.siblings('.target').data('serial') + ']'\n );\n var isNumberOfMaxAssociationsZero = parseInt(interaction.attr('maxAssociations')) === 0;\n\n //decrease the use for this choice\n usage--;\n\n $choice.data('usage', usage).removeClass('deactivated');\n\n $filledChoice\n .removeClass('filled')\n .removeData('serial')\n .empty();\n\n if (!interaction.swapping) {\n if (triggerChange !== false) {\n //a pair with one single element is not valid, so consider the response to be modified:\n containerHelper.triggerResponseChangeEvent(interaction, {\n type: 'removed',\n $pair: $filledChoice.parent()\n });\n instructionMgr.validateInstructions(interaction, { choice: $choice });\n }\n\n // if we are removing the sibling too, update its usage\n // but only if number of maximum assotiations is zero\n if (isNumberOfMaxAssociationsZero) {\n $sibling.data('usage', $sibling.data('usage') - 1).removeClass('deactivated');\n }\n\n //completely empty pair:\n if (!$choice.siblings('div').hasClass('filled') && (isNumberOfMaxAssociationsZero || interaction.responseMappingMode)) {\n //shall we remove it?\n if (!$parent.hasClass('incomplete-pair')) {\n if (animate) {\n $parent.addClass('removing').fadeOut(500, function() {\n $$1(this).remove();\n });\n } else {\n $parent.remove();\n }\n }\n }\n }\n };\n\n var getChoice = function(interaction, identifier) {\n var $container = containerHelper.get(interaction);\n\n //warning: do not use selector data-identifier=identifier because data-identifier may change dynamically\n var choice = interaction.getChoiceByIdentifier(identifier);\n if (!choice) {\n throw new Error('cannot find a choice with the identifier : ' + identifier);\n }\n return $$1('.choice-area [data-serial=' + choice.getSerial() + ']', $container);\n };\n\n var renderEmptyPairs = function(interaction) {\n var $container = containerHelper.get(interaction);\n var max = parseInt(interaction.attr('maxAssociations'));\n var $resultArea = $$1('.result-area', $container);\n\n if (interaction.responseMappingMode || max === 0) {\n $resultArea.append(pairTpl({ empty: true }));\n hider.show($resultArea.children('.incomplete-pair'));\n } else {\n for (var i = 0; i < max; i++) {\n $resultArea.append(pairTpl());\n }\n }\n };\n\n /**\n * Builds a scroll observer that will make sure the dragged element keeps an accurate positioning\n * @param {jQuery} $scrollContainer\n * @returns {scrollObserver}\n */\n var scrollObserverFactory = function scrollObserverFactory($scrollContainer) {\n var currentDraggable = null;\n var beforeY = 0;\n var beforeX = 0;\n var afterY = 0;\n var afterX = 0;\n\n // reset the scroll observer context\n function resetScrollObserver() {\n currentDraggable = null;\n beforeY = 0;\n beforeX = 0;\n afterY = 0;\n afterX = 0;\n }\n\n // keep the position of the dragged element accurate with the scroll position\n function onScrollCb() {\n var x, y;\n if (currentDraggable) {\n beforeY = afterY;\n beforeX = afterX;\n\n if (afterY === 0 && beforeY === 0)\n beforeY = this.scrollTop;\n if (afterX === 0 && beforeX === 0)\n beforeX = this.scrollLeft;\n\n afterY = this.scrollTop;\n afterX = this.scrollLeft;\n\n y = (parseInt(currentDraggable.getAttribute('data-y'), 10) || 0) + (afterY - beforeY);\n x = (parseInt(currentDraggable.getAttribute('data-x'), 10) || 0) + (afterX - beforeX);\n\n // translate the element\n currentDraggable.style.webkitTransform = currentDraggable.style.transform = 'translate(' + x + 'px, ' + y + 'px)';\n\n // update the position attributes\n currentDraggable.setAttribute('data-x', x);\n currentDraggable.setAttribute('data-y', y);\n }\n }\n\n // find the scroll container within the parents if any\n $scrollContainer.parents().each(function findScrollContainer() {\n var $el = $$1(this);\n var ovf = $el.css('overflow');\n if (ovf !== 'hidden' && ovf !== 'visible') {\n $scrollContainer = $el;\n return false;\n }\n });\n\n // make sure the drop zones will follow the scroll\n interact.dynamicDrop(true);\n\n /**\n * @typedef {Object} scrollObserver\n */\n return {\n /**\n * Gets the scroll container\n * @returns {jQuery}\n */\n getScrollContainer: function getScrollContainer() {\n return $scrollContainer;\n },\n\n /**\n * Initializes the scroll observer while dragging a choice\n * @param {HTMLElement|jQuery} draggedElement\n */\n start: function start(draggedElement) {\n resetScrollObserver();\n currentDraggable = draggedElement instanceof $$1 ? draggedElement.get(0) : draggedElement;\n $scrollContainer.on('scroll.scrollObserver', _.throttle(onScrollCb, 50));\n },\n\n /**\n * Tears down the the scroll observer once the dragging is done\n */\n stop: function stop() {\n $scrollContainer.off('.scrollObserver');\n resetScrollObserver();\n }\n };\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10291\n *\n * @param {object} interaction\n */\n var render = function(interaction) {\n var self = this;\n\n return new Promise(function(resolve, reject) {\n var $container = containerHelper.get(interaction);\n var $choiceArea = $container.find('.choice-area');\n var $resultArea = $container.find('.result-area');\n\n var $activeChoice = null;\n var scrollObserver = null;\n\n var isDragAndDropEnabled;\n var dragOptions;\n var dropOptions;\n var scaleX, scaleY;\n\n var $bin = $$1('<span>', { class: 'icon-undo remove-choice', title: __('remove') });\n\n var choiceSelector = $choiceArea.selector + ' >li';\n var resultSelector = $resultArea.selector + ' >li>div';\n var binSelector = $container.selector + ' .remove-choice';\n\n var _getChoice = function(serial) {\n return $choiceArea.find('[data-serial=' + serial + ']');\n };\n\n /**\n * @todo Tried to store $resultArea.find[...] in a variable but this fails\n * @param $choice\n * @param $target\n * @private\n */\n var _setChoice = function($choice, $target) {\n setChoice(interaction, $choice, $target);\n sizeAdapter.adaptSize(\n $$1('.result-area .target, .choice-area .qti-choice', containerHelper.get(interaction))\n );\n };\n\n var _resetSelection = function() {\n if ($activeChoice) {\n $resultArea.find('.remove-choice').remove();\n $activeChoice.removeClass('active');\n $container.find('.empty').removeClass('empty');\n $activeChoice = null;\n }\n };\n\n var _unsetChoice = function($choice) {\n unsetChoice(interaction, $choice, true);\n sizeAdapter.adaptSize(\n $$1('.result-area .target, .choice-area .qti-choice', containerHelper.get(interaction))\n );\n };\n\n var _isInsertionMode = function() {\n return $activeChoice && $activeChoice.data('identifier');\n };\n\n var _isModeEditing = function() {\n return $activeChoice && !$activeChoice.data('identifier');\n };\n\n var _handleChoiceActivate = function($target) {\n if ($target.hasClass('deactivated')) {\n return;\n }\n\n if (_isModeEditing()) {\n //swapping:\n interaction.swapping = true;\n _unsetChoice($activeChoice);\n _setChoice($target, $activeChoice);\n _resetSelection();\n interaction.swapping = false;\n } else {\n if ($target.hasClass('active')) {\n _resetSelection();\n } else {\n _activateChoice($target);\n }\n }\n };\n\n var _activateChoice = function($choice) {\n _resetSelection();\n $activeChoice = $choice;\n $choice.addClass('active');\n $resultArea.find('>li>.target').addClass('empty');\n };\n\n var _handleResultActivate = function($target) {\n var choiceSerial,\n targetSerial = $target.data('serial');\n\n if (_isInsertionMode()) {\n choiceSerial = $activeChoice.data('serial');\n\n if (targetSerial !== choiceSerial) {\n if ($target.hasClass('filled')) {\n interaction.swapping = true; //hack to prevent deleting empty pair in infinite association mode\n }\n //set choices:\n if (targetSerial) {\n _unsetChoice($target);\n }\n _setChoice($activeChoice, $target);\n\n //always reset swapping mode after the choice is set\n interaction.swapping = false;\n }\n\n _resetSelection();\n } else if (_isModeEditing()) {\n choiceSerial = $activeChoice.data('serial');\n\n if (targetSerial !== choiceSerial) {\n if ($target.hasClass('filled') || $activeChoice.siblings('div')[0] === $target[0]) {\n interaction.swapping = true; //hack to prevent deleting empty pair in infinite association mode\n }\n\n _unsetChoice($activeChoice);\n if (targetSerial) {\n //swapping:\n _unsetChoice($target);\n _setChoice(_getChoice(targetSerial), $activeChoice);\n }\n _setChoice(_getChoice(choiceSerial), $target);\n\n //always reset swapping mode after the choice is set\n interaction.swapping = false;\n }\n\n _resetSelection();\n } else if (targetSerial) {\n _activateResult($target);\n $target.append($bin);\n }\n };\n\n var _activateResult = function($target) {\n var targetSerial = $target.data('serial');\n\n $activeChoice = $target;\n $activeChoice.addClass('active');\n\n $resultArea\n .find('>li>.target')\n .filter(function() {\n return $$1(this).data('serial') !== targetSerial;\n })\n .addClass('empty');\n\n $choiceArea\n .find('>li:not(.deactivated)')\n .filter(function() {\n return $$1(this).data('serial') !== targetSerial;\n })\n .addClass('empty');\n };\n\n // Point & click handlers\n\n interact($container.selector).on('tap', function(e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if (\n $$1(e.currentTarget)\n .closest('.qti-item')\n .hasClass('prevent-click-handler')\n ) {\n return;\n }\n\n _resetSelection();\n });\n\n interact($choiceArea.selector + ' >li').on('tap', function(e) {\n var $target = $$1(e.currentTarget);\n\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($target.closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _handleChoiceActivate($target);\n e.preventDefault();\n });\n\n interact($resultArea.selector + ' >li>div').on('tap', function(e) {\n var $target = $$1(e.currentTarget);\n\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($target.closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _handleResultActivate($target);\n e.preventDefault();\n });\n\n interact(binSelector).on('tap', function(e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if (\n $$1(e.currentTarget)\n .closest('.qti-item')\n .hasClass('prevent-click-handler')\n ) {\n return;\n }\n\n e.stopPropagation();\n _unsetChoice($activeChoice);\n _resetSelection();\n e.preventDefault();\n });\n\n if (!interaction.responseMappingMode) {\n _setInstructions(interaction);\n }\n\n // Drag & drop handlers\n\n if (self.getOption && self.getOption('enableDragAndDrop') && self.getOption('enableDragAndDrop').associate) {\n isDragAndDropEnabled = self.getOption('enableDragAndDrop').associate;\n }\n\n function _iFrameDragFix(draggableSelector, target) {\n interactUtils.iFrameDragFixOn(function() {\n var $activeDrop = $$1(resultSelector + '.dropzone');\n if ($activeDrop.length) {\n interact(resultSelector).fire({\n type: 'drop',\n target: $activeDrop.eq(0),\n relatedTarget: target\n });\n }\n $activeDrop = $$1(choiceSelector + '.dropzone');\n if ($activeDrop.length) {\n interact(choiceSelector + '.empty').fire({\n type: 'drop',\n target: $activeDrop.eq(0),\n relatedTarget: target\n });\n }\n interact(draggableSelector).fire({\n type: 'dragend',\n target: target\n });\n });\n }\n\n if (isDragAndDropEnabled) {\n scrollObserver = scrollObserverFactory($container);\n dragOptions = {\n inertia: false,\n autoScroll: {\n container: scrollObserver.getScrollContainer().get(0)\n },\n restrict: {\n restriction: '.qti-interaction',\n endOnly: false,\n elementRect: { top: 0, left: 0, bottom: 1, right: 1 }\n }\n };\n\n // makes choices draggables\n interact(choiceSelector + ':not(.deactivated)')\n .draggable(\n _.defaults(\n {\n onstart: function(e) {\n var $target = $$1(e.target);\n var scale;\n $target.addClass('dragged');\n _activateChoice($target);\n _iFrameDragFix(choiceSelector + ':not(.deactivated)', e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n\n scrollObserver.start($activeChoice);\n },\n onmove: function(e) {\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n },\n onend: function(e) {\n var $target = $$1(e.target);\n $target.removeClass('dragged');\n // The reason of placing delay here is that there was timing conflict between \"draggable\" and \"drag-zone\" elements.\n _.delay(function(){\n _resetSelection();\n });\n interactUtils.restoreOriginalPosition($target);\n interactUtils.iFrameDragFixOff();\n\n scrollObserver.stop();\n }\n },\n dragOptions\n )\n )\n .styleCursor(false);\n\n // makes results draggables\n interact(resultSelector + '.filled')\n .draggable(\n _.defaults(\n {\n onstart: function(e) {\n var $target = $$1(e.target);\n var scale;\n $target.addClass('dragged');\n _resetSelection();\n _activateResult($target);\n _iFrameDragFix(resultSelector + '.filled', e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n\n scrollObserver.start($activeChoice);\n },\n onmove: function(e) {\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n },\n onend: function(e) {\n var $target = $$1(e.target);\n $target.removeClass('dragged');\n\n interactUtils.restoreOriginalPosition($target);\n\n if ($activeChoice) {\n _unsetChoice($activeChoice);\n }\n _resetSelection();\n\n interactUtils.iFrameDragFixOff();\n\n scrollObserver.stop();\n }\n },\n dragOptions\n )\n )\n .styleCursor(false);\n\n dropOptions = {\n overlap: 0.15,\n ondragenter: function(e) {\n $$1(e.target).addClass('dropzone');\n $$1(e.relatedTarget).addClass('droppable');\n },\n ondragleave: function(e) {\n $$1(e.target).removeClass('dropzone');\n $$1(e.relatedTarget).removeClass('droppable');\n }\n };\n\n // makes hotspots droppables\n interact(resultSelector).dropzone(\n _.defaults(\n {\n ondrop: function(e) {\n this.ondragleave(e);\n _handleResultActivate($$1(e.target));\n }\n },\n dropOptions\n )\n );\n\n // makes available choices droppables\n interact(choiceSelector + '.empty').dropzone(\n _.defaults(\n {\n ondrop: function(e) {\n this.ondragleave(e);\n _handleChoiceActivate($$1(e.target));\n }\n },\n dropOptions\n )\n );\n }\n\n // interaction init\n\n renderEmptyPairs(interaction);\n\n sizeAdapter.adaptSize($$1('.result-area .target, .choice-area .qti-choice', $container));\n\n resolve();\n });\n };\n\n var _setInstructions = function(interaction) {\n var min = parseInt(interaction.attr('minAssociations'), 10),\n max = parseInt(interaction.attr('maxAssociations'), 10);\n\n //infinite association:\n if (min === 0) {\n if (max === 0) {\n instructionMgr.appendInstruction(interaction, __('You may make as many association pairs as you want.'));\n }\n } else {\n if (max === 0) {\n instructionMgr.appendInstruction(interaction, __('The maximum number of association is unlimited.'));\n }\n //the max value is implicit since the appropriate number of empty pairs have already been created\n var msg = __('You need to make') + ' ';\n msg += min > 1 ? __('at least') + ' ' + min + ' ' + __('association pairs') : __('one association pair');\n instructionMgr.appendInstruction(interaction, msg, function() {\n if (_getRawResponse(interaction).length >= min) {\n this.setLevel('success');\n } else {\n this.reset();\n }\n });\n }\n };\n\n var resetResponse = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n //destroy selected choice:\n $container.find('.result-area .active').each(function() {\n interactUtils.tapOn(this);\n });\n\n $$1('.result-area>li>div', $container).each(function() {\n unsetChoice(interaction, $$1(this), false, false);\n });\n\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction);\n };\n\n var _setPairs = function(interaction, pairs) {\n var $container = containerHelper.get(interaction);\n var addedPairs = 0;\n var $emptyPair = $$1('.result-area>li:first', $container);\n if (pairs && interaction.getResponseDeclaration().attr('cardinality') === 'single' && pairs.length) {\n pairs = [pairs];\n }\n _.each(pairs, function(pair) {\n if ($emptyPair.length) {\n var $divs = $emptyPair.children('div');\n setChoice(interaction, getChoice(interaction, pair[0]), $$1($divs[0]));\n setChoice(interaction, getChoice(interaction, pair[1]), $$1($divs[1]));\n addedPairs++;\n $emptyPair = $emptyPair.next('li');\n } else {\n //the number of pairs exceeds the maximum allowed pairs: break;\n return false;\n }\n });\n\n return addedPairs;\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10291\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n _setPairs(interaction, pciResponse.unserialize(response, interaction));\n };\n\n var _getRawResponse = function(interaction) {\n var response = [];\n var $container = containerHelper.get(interaction);\n $$1('.result-area>li', $container).each(function() {\n var pair = [];\n $$1(this)\n .find('div')\n .each(function() {\n var serial = $$1(this).data('serial');\n if (serial) {\n pair.push(interaction.getChoice(serial).id());\n }\n });\n if (pair.length === 2) {\n response.push(pair);\n }\n });\n return response;\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10291\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Destroy the interaction by leaving the DOM exactly in the same state it was before loading the interaction.\n * @param {Object} interaction - the interaction\n */\n var destroy = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n //remove event\n interact($container.selector).unset();\n interact($container.find('.choice-area').selector + ' >li').unset();\n interact($container.find('.result-area').selector + ' >li>div').unset();\n interact($container.find('.remove-choice').selector).unset();\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n $$1('.result-area', $container).empty();\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n var $container;\n\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === _.size(interaction.getChoices())) {\n $container = containerHelper.get(interaction);\n\n $$1('.choice-area .qti-choice', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order, $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order, $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($$1('.choice-area', $container));\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var $container;\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n $container = containerHelper.get(interaction);\n\n state.order = [];\n $$1('.choice-area .qti-choice', $container).each(function() {\n state.order.push($$1(this).data('identifier'));\n });\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the associate interaction\n * @exports qtiCommonRenderer/renderers/interactions/AssociateInteraction\n */\n var AssociateInteraction = {\n qtiClass: 'associateInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState,\n\n renderEmptyPairs: renderEmptyPairs\n };\n\n return AssociateInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/ChoiceInteraction',['lodash', 'jquery', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/sizeAdapter', 'util/adaptSize'], function (_, $$1, __, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse, sizeAdapter, adaptSize) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\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 DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n sizeAdapter = sizeAdapter && Object.prototype.hasOwnProperty.call(sizeAdapter, 'default') ? sizeAdapter['default'] : sizeAdapter;\n adaptSize = adaptSize && Object.prototype.hasOwnProperty.call(adaptSize, 'default') ? adaptSize['default'] : adaptSize;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n \n return \" horizontal\";\n }\n\n function program11(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.listStyle) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.listStyle); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program13(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n class=\\\"qti-interaction qti-blockInteraction qti-choiceInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"choiceInteraction\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <ol\\n class=\\\"plain block-listing solid choice-area\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.listStyle), {hash:{},inverse:self.noop,fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n aria-labelledby=\\\"\";\n if (helper = helpers.promptId) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.promptId); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n >\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data};\n if (helper = helpers.choices) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.choices); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.choices) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ol>\\n <div class=\\\"notification-container\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2021 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var KEY_CODE_SPACE = 32;\n var KEY_CODE_ENTER = 13;\n var KEY_CODE_LEFT = 37;\n var KEY_CODE_UP = 38;\n var KEY_CODE_RIGHT = 39;\n var KEY_CODE_DOWN = 40;\n\n /**\n * Propagate the checked state to the actual input.\n * @type {Function}\n * @param {jQuery} $choiceBox - list element with the class `.qti-choice`\n * @param {Boolean} state\n * @private\n */\n var _triggerInput = function _triggerInput($choiceBox, state) {\n var $input = $choiceBox\n .find('input:radio,input:checkbox')\n .not('[disabled]')\n .not('.disabled');\n var $choiceBoxes = $choiceBox.add($choiceBox.siblings());\n\n if (!$input.length) {\n return;\n }\n\n if (!_.isBoolean(state)) {\n state = !$input.prop('checked');\n }\n\n $input.prop('checked', state);\n $input.trigger('change');\n\n $choiceBoxes.removeClass('user-selected');\n $choiceBoxes\n .find('input:checked')\n .not('[disabled]')\n .not('.disabled')\n .parents('.qti-choice')\n .addClass('user-selected');\n };\n\n /**\n * 'pseudo-label' is technically a div that behaves like a label.\n * This allows the usage of block elements inside the fake label\n *\n * @private\n * @param {Object} interaction - the interaction instance\n * @param {jQueryElement} $container\n */\n var _pseudoLabel = function _pseudoLabel(interaction, $container) {\n var inputSelector =\n '.qti-choice input:radio:not([disabled]):not(.disabled), .qti-choice input:checkbox:not([disabled]):not(.disabled)';\n $container.off('.commonRenderer');\n\n $container\n .on('keydown.commonRenderer.keyNavigation', inputSelector, function(e) {\n var $qtiChoice = $$1(this).closest('.qti-choice');\n var keyCode = e.keyCode ? e.keyCode : e.charCode;\n\n if (keyCode === KEY_CODE_UP || keyCode === KEY_CODE_LEFT) {\n e.preventDefault();\n e.stopPropagation();\n $qtiChoice\n .prev('.qti-choice')\n .find('input:radio,input:checkbox')\n .not('[disabled]')\n .not('.disabled')\n .focus();\n } else if (keyCode === KEY_CODE_DOWN || keyCode === KEY_CODE_RIGHT) {\n e.preventDefault();\n e.stopPropagation();\n $qtiChoice\n .next('.qti-choice')\n .find('input:radio,input:checkbox')\n .not('[disabled]')\n .not('.disabled')\n .focus();\n }\n })\n .on('keyup.commonRenderer.keyNavigation', inputSelector, function(e) {\n var keyCode = e.keyCode ? e.keyCode : e.charCode;\n\n if (keyCode === KEY_CODE_SPACE || keyCode === KEY_CODE_ENTER) {\n e.preventDefault();\n e.stopPropagation();\n _triggerInput($$1(this).closest('.qti-choice'));\n }\n });\n\n $container.on('click.commonRenderer', '.qti-choice', function(e) {\n var $choiceBox = $$1(this);\n var state;\n var eliminator = e.target.dataset && e.target.dataset.eliminable;\n var input = this.querySelector('.real-label > input');\n\n // if the click has been triggered by a keyboard check, prevent this listener to cancel this check\n if (e.originalEvent && $$1(e.originalEvent.target).is('input')) {\n return;\n }\n\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($choiceBox.closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation(); //required otherwise any tao scoped, form initialization might prevent it from working\n\n if (!_.isUndefined(eliminator)) {\n state = false;\n if (eliminator === 'trigger') {\n this.classList.toggle('eliminated');\n }\n }\n\n _triggerInput($choiceBox, state);\n\n if (this.classList.contains('eliminated')) {\n input.setAttribute('disabled', 'disabled');\n } else {\n input.removeAttribute('disabled');\n }\n\n instructionMgr.validateInstructions(interaction, { choice: $choiceBox });\n containerHelper.triggerResponseChangeEvent(interaction);\n $$1(input).focus();\n });\n };\n\n /**\n * Get the responses from the DOM.\n * @private\n * @param {Object} interaction - the interaction instance\n * @returns {Array} the list of choices identifiers\n */\n var _getRawResponse = function _getRawResponse(interaction) {\n var values = [];\n var $container = containerHelper.get(interaction);\n $$1('.real-label > input[name=response-' + interaction.getSerial() + ']:checked', $container).each(function() {\n values.push($$1(this).val());\n });\n return values;\n };\n\n /**\n * Define the instructions for the interaction\n * @private\n * @param {Object} interaction - the interaction instance\n */\n var _setInstructions = function _setInstructions(interaction) {\n var min = interaction.attr('minChoices'),\n max = interaction.attr('maxChoices'),\n msg,\n choiceCount = _.size(interaction.getChoices()),\n minInstructionSet = false;\n\n var highlightInvalidInput = function highlightInvalidInput($choice) {\n var $input = $choice.find('.real-label > input'),\n $li = $choice.css('color', '#BA122B'),\n $icon = $choice\n .find('.real-label > span')\n .css('color', '#BA122B')\n .addClass('cross error');\n var timeout = interaction.data('__instructionTimeout');\n\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(function() {\n $input.prop('checked', false);\n $li.removeAttr('style');\n $icon.removeAttr('style').removeClass('cross');\n $li.toggleClass('user-selected', false);\n containerHelper.triggerResponseChangeEvent(interaction);\n }, 150);\n interaction.data('__instructionTimeout', timeout);\n };\n\n //if maxChoice = 1, use the radio group behaviour\n //if maxChoice = 0, infinite choice possible\n if (max > 1 && max < choiceCount) {\n if (max === min) {\n minInstructionSet = true;\n msg = __('You must select exactly %s choices', max);\n instructionMgr.appendInstruction(interaction, msg, function(data) {\n if (_getRawResponse(interaction).length >= max) {\n this.setLevel('success');\n if (this.checkState('fulfilled')) {\n this.update({\n level: 'warning',\n message: __('Maximum choices reached'),\n timeout: 2000,\n start: function() {\n if (data && data.choice) {\n highlightInvalidInput(data.choice);\n }\n },\n stop: function() {\n this.update({ level: 'success', message: msg });\n }\n });\n }\n this.setState('fulfilled');\n } else {\n this.reset();\n }\n });\n } else if (max > min) {\n msg =\n max === 1 ? __('You can select maximum of 1 choice') : __('You can select maximum of %s choices', max);\n instructionMgr.appendInstruction(interaction, msg, function(data) {\n if (_getRawResponse(interaction).length >= max) {\n this.setMessage(__('Maximum choices reached'));\n if (this.checkState('fulfilled')) {\n this.update({\n level: 'warning',\n timeout: 2000,\n start: function() {\n if (data && data.choice) {\n highlightInvalidInput(data.choice);\n }\n },\n stop: function() {\n this.setLevel('info');\n }\n });\n }\n this.setState('fulfilled');\n } else {\n this.reset();\n }\n });\n }\n }\n\n if (!minInstructionSet && min > 0 && min < choiceCount) {\n msg = min === 1 ? __('You must select at least 1 choice') : __('You must select at least %s choices', min);\n instructionMgr.appendInstruction(interaction, msg, function() {\n if (_getRawResponse(interaction).length >= min) {\n this.setLevel('success');\n } else {\n this.reset();\n }\n });\n }\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10278\n *\n * @param {Object} interaction - the interaction instance\n */\n var render = function render(interaction) {\n var $container = containerHelper.get(interaction);\n\n _pseudoLabel(interaction, $container);\n\n _setInstructions(interaction);\n\n if (interaction.attr('orientation') === 'horizontal') {\n const $elements = $$1('.add-option, .result-area .target, .choice-area .qti-choice', $container);\n sizeAdapter.adaptSize($elements);\n\n $$1(document).on('themeapplied.choiceInteraction', () => adaptSize.height($elements));\n }\n };\n\n /**\n * Reset the responses previously set\n *\n * @param {Object} interaction - the interaction instance\n */\n var resetResponse = function resetResponse(interaction) {\n var $container = containerHelper.get(interaction);\n\n $$1('.real-label > input', $container).prop('checked', false);\n };\n\n /**\n * Set a new response to the rendered interaction.\n * Please note that it does not reset previous responses.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10278\n *\n * @param {Object} interaction - the interaction instance\n * @param {0bject} response - the PCI formated response\n */\n var setResponse = function setResponse(interaction, response) {\n var $container = containerHelper.get(interaction);\n\n try {\n _.forEach(pciResponse.unserialize(response, interaction), function(identifier) {\n var $input = $container.find('.real-label > input[value=\"' + identifier + '\"]').prop('checked', true);\n $input.closest('.qti-choice').toggleClass('user-selected', true);\n });\n instructionMgr.validateInstructions(interaction);\n } catch (e) {\n throw new Error('wrong response format in argument : ' + e);\n }\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10278\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the response formatted in PCI\n */\n var getResponse = function getResponse(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Check if a choice interaction is choice-eliminable\n *\n * @param {Object} interaction\n * @returns {boolean}\n */\n var isEliminable = function isEliminable(interaction) {\n return /\\beliminable\\b/.test(interaction.attr('class'));\n };\n\n /**\n * Set additional data to the template (data that are not really part of the model).\n * @param {Object} interaction - the interaction\n * @param {Object} [data] - interaction custom data\n * @returns {Object} custom data\n */\n var getCustomData = function getCustomData(interaction, data) {\n var listStyles = (interaction.attr('class') || '').match(/\\blist-style-[\\w-]+/) || [];\n return _.merge(data || {}, {\n horizontal: interaction.attr('orientation') === 'horizontal',\n listStyle: listStyles.pop(),\n eliminable: isEliminable(interaction)\n });\n };\n\n /**\n * Destroy the interaction by leaving the DOM exactly in the same state it was before loading the interaction.\n * @param {Object} interaction - the interaction\n */\n var destroy = function destroy(interaction) {\n var $container = containerHelper.get(interaction);\n\n var timeout = interaction.data('__instructionTimeout');\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n //remove event\n $container.off('.commonRenderer');\n $$1(document)\n .off('.commonRenderer')\n .off('.choiceInteraction');\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n var $container;\n\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n $container = containerHelper.get(interaction);\n\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === _.size(interaction.getChoices())) {\n $$1('.qti-simpleChoice', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order, $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order, $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($$1('.choice-area', $container));\n }\n\n //restore eliminated choices\n if (isEliminable(interaction) && _.isArray(state.eliminated) && state.eliminated.length) {\n _.forEach(state.eliminated, function(identifier) {\n $container.find('.qti-simpleChoice[data-identifier=\"' + identifier + '\"]').addClass('eliminated');\n });\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var $container = containerHelper.get(interaction);\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n state.order = [];\n $$1('.qti-simpleChoice', $container).each(function() {\n state.order.push($$1(this).data('identifier'));\n });\n }\n\n //store the eliminated choices\n if (isEliminable(interaction)) {\n state.eliminated = [];\n $container.find('.qti-simpleChoice.eliminated').each(function() {\n state.eliminated.push($$1(this).data('identifier'));\n });\n }\n\n return state;\n };\n\n /**\n * Expose the common renderer for the choice interaction\n * @exports qtiCommonRenderer/renderers/interactions/ChoiceInteraction\n */\n var ChoiceInteraction = {\n qtiClass: 'choiceInteraction',\n template: tpl,\n getData: getCustomData,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return ChoiceInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/EndAttemptInteraction',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse'], function (_, Handlebars, __, DOMPurify, containerHelper, pciResponse) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<a class=\\\"qti-interaction qti-inlineInteraction qti-endAttemptInteraction btn small btn-info\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" \\n data-qti-class=\\\"endAttemptInteraction\\\"\\n value=\\\"false\\\"\\n tabindex=\\\"0\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.title)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\n</a>\\n\";\n return buffer;\n });\n function tpl(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 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10402\n *\n * @param {object} interaction\n * @fires endattempt with the response identifier\n */\n function render(interaction, options) {\n var $container = containerHelper.get(interaction);\n\n //on click,\n $container.on('click.commonRenderer', function(e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if (\n $(e.currentTarget)\n .closest('.qti-item')\n .hasClass('prevent-click-handler')\n ) {\n return;\n }\n $container.val(true);\n\n containerHelper.triggerResponseChangeEvent(interaction);\n\n $container.trigger('endattempt', [interaction.attr('responseIdentifier')]);\n });\n }\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10402\n *\n * @param {object} interaction\n * @param {object} response\n */\n function setResponse(interaction, response) {\n _setVal(interaction, pciResponse.unserialize(response, interaction)[0]);\n }\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10402\n *\n * @param {object} interaction\n * @returns {object}\n */\n function getResponse(interaction) {\n var val = containerHelper.get(interaction).val();\n val = val && val !== 'false' && val !== '0';\n return pciResponse.serialize([val], interaction);\n }\n\n /**\n * Reset the response ... wondering if it is useful ...\n\n * @param {type} interaction\n */\n function resetResponse(interaction) {\n _setVal(interaction, false);\n }\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n }\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n }\n\n /**\n *\n * @param {Object} interaction\n * @param {Boolean} val\n */\n function _setVal(interaction, val) {\n containerHelper\n .get(interaction)\n .val(val)\n .change();\n }\n\n /**\n * Destroy the interaction to restore the dom as it is before render() is called\n *\n * @param {Object} interaction\n */\n function destroy(interaction) {\n //remove event\n containerHelper.get(interaction).off('.commonRenderer');\n }\n\n /**\n * Define default template data\n *\n * @param {Object} interaction\n * @param {Object} data\n * @returns {Object}\n */\n function getCustomData(interaction, data) {\n if (!data.attributes.title) {\n data.attributes.title = __('End Attempt');\n }\n return data;\n }\n\n var EndAttemptInteraction = {\n qtiClass: 'endAttemptInteraction',\n template: tpl,\n getData: getCustomData,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return EndAttemptInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction',['jquery', 'lodash', 'i18n', 'util/strLimiter', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'ckeditor', 'taoQtiItem/qtiCommonRenderer/helpers/ckConfigurator', 'taoQtiItem/qtiCommonRenderer/helpers/patternMask', 'ui/tooltip', 'core/logger'], function ($$1, _, __, strLimiter, Handlebars, DOMPurify, containerHelper, instructionMgr, ckEditor, ckConfigurator, patternMaskHelper, tooltip, loggerFactory) { '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 strLimiter = strLimiter && Object.prototype.hasOwnProperty.call(strLimiter, 'default') ? strLimiter['default'] : strLimiter;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n ckEditor = ckEditor && Object.prototype.hasOwnProperty.call(ckEditor, 'default') ? ckEditor['default'] : ckEditor;\n ckConfigurator = ckConfigurator && Object.prototype.hasOwnProperty.call(ckConfigurator, 'default') ? ckConfigurator['default'] : ckConfigurator;\n patternMaskHelper = patternMaskHelper && Object.prototype.hasOwnProperty.call(patternMaskHelper, 'default') ? patternMaskHelper['default'] : patternMaskHelper;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n \";\n stack1 = (helper = helpers.equal || (depth0 && depth0.equal),options={hash:{},inverse:self.program(14, program14, data),fn:self.program(10, program10, data),data:data},helper ? helper.call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format), \"xhtml\", options) : helperMissing.call(depth0, \"equal\", ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format), \"xhtml\", options));\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\n function program10(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.maxStringLoop), {hash:{},inverse:self.noop,fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\n function program11(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n <div class=\\\"text-container text-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" solid\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(12, program12, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" name=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"_\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\" contenteditable></div>\\n \";\n return buffer;\n }\n function program12(depth0,data) {\n \n \n return \" attributes.class\";\n }\n\n function program14(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.maxStringLoop), {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\n function program15(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <textarea\\n class=\\\"text-container text-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" solid\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(12, program12, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n name=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"_\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.patternMask), {hash:{},inverse:self.noop,fn:self.program(16, program16, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n aria-labelledby=\\\"\";\n if (helper = helpers.promptId) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.promptId); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n ></textarea>\\n \";\n return buffer;\n }\n function program16(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"pattern=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.patternMask)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program18(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n \";\n stack1 = (helper = helpers.equal || (depth0 && depth0.equal),options={hash:{},inverse:self.program(21, program21, data),fn:self.program(19, program19, data),data:data},helper ? helper.call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format), (depth0 && depth0.xhtml), options) : helperMissing.call(depth0, \"equal\", ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format), (depth0 && depth0.xhtml), options));\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\n function program19(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n <div class=\\\"text-container text-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" solid\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(12, program12, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" contenteditable></div>\\n \";\n return buffer;\n }\n\n function program21(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <textarea\\n class=\\\"text-container text-\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.format)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" solid\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(12, program12, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.patternMask), {hash:{},inverse:self.noop,fn:self.program(16, program16, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n aria-labelledby=\\\"\";\n if (helper = helpers.promptId) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.promptId); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n ></textarea>\\n \";\n return buffer;\n }\n\n function program23(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <span class=\\\"count-chars\\\">0</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"of\", options) : helperMissing.call(depth0, \"__\", \"of\", options)))\n + \" <span class=\\\"count-expected-length\\\">\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.expectedLength)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"characters\", options) : helperMissing.call(depth0, \"__\", \"characters\", options)))\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"recommended\", options) : helperMissing.call(depth0, \"__\", \"recommended\", options)))\n + \".\\n \";\n return buffer;\n }\n\n function program25(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.maxLength), {hash:{},inverse:self.program(28, program28, data),fn:self.program(26, program26, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.maxWords), {hash:{},inverse:self.program(32, program32, data),fn:self.program(30, program30, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\n function program26(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <span class=\\\"text-counter-chars\\\"><span class=\\\"count-chars\\\">0</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"of\", options) : helperMissing.call(depth0, \"__\", \"of\", options)))\n + \" <span class=\\\"count-max-length\\\">\";\n if (helper = helpers.maxLength) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.maxLength); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"characters\", options) : helperMissing.call(depth0, \"__\", \"characters\", options)))\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"maximum\", options) : helperMissing.call(depth0, \"__\", \"maximum\", options)))\n + \".</span>\\n \";\n return buffer;\n }\n\n function program28(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <span class=\\\"text-counter-chars\\\" style=\\\"display: none\\\"><span class=\\\"count-chars\\\">0</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"of\", options) : helperMissing.call(depth0, \"__\", \"of\", options)))\n + \" <span class=\\\"count-max-length\\\">\";\n if (helper = helpers.maxLength) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.maxLength); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"characters\", options) : helperMissing.call(depth0, \"__\", \"characters\", options)))\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"maximum\", options) : helperMissing.call(depth0, \"__\", \"maximum\", options)))\n + \".</span>\\n \";\n return buffer;\n }\n\n function program30(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <span class=\\\"text-counter-words\\\"><span class=\\\"count-words\\\">0</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"of\", options) : helperMissing.call(depth0, \"__\", \"of\", options)))\n + \" <span class=\\\"count-max-words\\\">\";\n if (helper = helpers.maxWords) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.maxWords); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"words\", options) : helperMissing.call(depth0, \"__\", \"words\", options)))\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"maximum\", options) : helperMissing.call(depth0, \"__\", \"maximum\", options)))\n + \".</span>\\n \";\n return buffer;\n }\n\n function program32(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <span class=\\\"text-counter-words\\\" style=\\\"display: none\\\"><span class=\\\"count-words\\\">0</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"of\", options) : helperMissing.call(depth0, \"__\", \"of\", options)))\n + \" <span class=\\\"count-max-words\\\">\";\n if (helper = helpers.maxWords) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.maxWords); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"words\", options) : helperMissing.call(depth0, \"__\", \"words\", options)))\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"maximum\", options) : helperMissing.call(depth0, \"__\", \"maximum\", options)))\n + \".</span>\\n \";\n return buffer;\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-extendedTextInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"extendedTextInteraction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.multiple), {hash:{},inverse:self.program(18, program18, data),fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"text-counter\\\">\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.expectedLength), {hash:{},inverse:self.program(25, program25, data),fn:self.program(23, program23, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2020 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Create a logger\n */\n const logger = loggerFactory('taoQtiItem/qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction.js');\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {Object} interaction - the extended text interaction model\n * @returns {Promise} rendering is async\n */\n const render = function render(interaction) {\n return new Promise(function (resolve, reject) {\n let $el, expectedLength, minStrings, patternMask, placeholderType, editor;\n let _styleUpdater, themeLoaded, _getNumStrings;\n let $container = containerHelper.get(interaction);\n\n const multiple = _isMultiple(interaction);\n const limiter = inputLimiter(interaction);\n\n const placeholderText = interaction.attr('placeholderText');\n\n const getItemLanguage = () => {\n let itemLang = $container.closest('.qti-item').attr('lang');\n let itemLocale = itemLang && itemLang.split('-')[0];\n if (!itemLocale) {\n itemLang = window.document.documentElement.getAttribute('lang');\n itemLocale = itemLang && itemLang.split('-')[0];\n }\n return itemLocale;\n };\n\n const toolbarType = 'extendedText';\n const ckOptions = {\n resize_enabled: true,\n secure: location.protocol === 'https:',\n forceCustomDomain: true,\n language: getItemLanguage()\n };\n\n if (!multiple) {\n $el = $container.find('textarea');\n if (placeholderText) {\n $el.attr('placeholder', placeholderText);\n }\n if (_getFormat(interaction) === 'xhtml') {\n _styleUpdater = function () {\n let qtiItemStyle, $editorBody, qtiItem;\n\n if (editor.document) {\n qtiItem = $$1('.qti-item').get(0);\n qtiItemStyle = qtiItem.currentStyle || window.getComputedStyle(qtiItem);\n\n if (editor.document.$ && editor.document.$.body) {\n $editorBody = $$1(editor.document.$.body);\n } else {\n $editorBody = $$1(editor.document.getBody().$);\n }\n\n $editorBody.css({\n 'background-color': 'transparent',\n color: qtiItemStyle.color\n });\n }\n };\n themeLoaded = function () {\n _styleUpdater();\n };\n\n editor = _setUpCKEditor(interaction, ckOptions);\n if (!editor) {\n reject('Unable to instantiate ckEditor');\n }\n\n editor.on('instanceReady', function () {\n _styleUpdater();\n\n //TAO-6409, disable navigation from cke toolbar\n if (editor.container && editor.container.$) {\n $$1(editor.container.$).addClass('no-key-navigation');\n }\n\n //it seems there's still something done after loaded, so resolved must be defered\n _.delay(resolve, 300);\n });\n if (editor.status === 'ready' || editor.status === 'loaded') {\n _.defer(resolve);\n }\n editor.on('configLoaded', function () {\n editor.config = ckConfigurator.getConfig(editor, toolbarType, ckOptions);\n\n if (limiter.enabled) {\n limiter.listenTextInput();\n }\n });\n editor.on('change', function () {\n containerHelper.triggerResponseChangeEvent(interaction, {});\n });\n\n $$1(document).on('themechange.themeloader', themeLoaded);\n } else {\n $el.on('keyup.commonRenderer change.commonRenderer', function () {\n containerHelper.triggerResponseChangeEvent(interaction, {});\n });\n\n if (limiter.enabled) {\n limiter.listenTextInput();\n }\n\n resolve();\n }\n\n //multiple inputs\n } else {\n $el = $container.find('input');\n minStrings = interaction.attr('minStrings');\n expectedLength = interaction.attr('expectedLength');\n patternMask = interaction.attr('patternMask');\n\n //setting the checking for minimum number of answers\n if (minStrings) {\n //get the number of filled inputs\n _getNumStrings = function ($element) {\n let num = 0;\n $element.each(function () {\n if ($$1(this).val() !== '') {\n num++;\n }\n });\n\n return num;\n };\n\n minStrings = parseInt(minStrings, 10);\n if (minStrings > 0) {\n $el.on('blur.commonRenderer', function () {\n setTimeout(function () {\n //checking if the user was clicked outside of the input fields\n\n //TODO remove notifications in favor of instructions\n\n if (!$el.is(':focus') && _getNumStrings($el) < minStrings) {\n instructionMgr.appendNotification(\n interaction,\n `${__('The minimum number of answers is ')} : ${minStrings}`,\n 'warning'\n );\n }\n }, 100);\n });\n }\n }\n\n //set the fields width\n if (expectedLength) {\n expectedLength = parseInt(expectedLength, 10);\n\n if (expectedLength > 0) {\n $el.each(function () {\n $$1(this).css('width', `${expectedLength}em`);\n });\n }\n }\n\n //set the fields pattern mask\n if (patternMask) {\n $el.each(function () {\n _setPattern($$1(this), patternMask);\n });\n }\n\n //set the fields placeholder\n if (placeholderText) {\n /**\n * The type of the fileds placeholder:\n * multiple - set placeholder for each field\n * first - set placeholder only for first field\n * none - dont set placeholder\n */\n placeholderType = 'first';\n\n if (placeholderType === 'multiple') {\n $el.each(function () {\n $$1(this).attr('placeholder', placeholderText);\n });\n } else if (placeholderType === 'first') {\n $el.first().attr('placeholder', placeholderText);\n }\n }\n resolve();\n }\n });\n };\n\n /**\n * Reset the textarea / ckEditor\n * @param {Object} interaction - the extended text interaction model\n */\n const resetResponse = function (interaction) {\n if (_getFormat(interaction) === 'xhtml') {\n _getCKEditor(interaction).setData('');\n } else {\n containerHelper.get(interaction).find('input, textarea').val('');\n }\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {Object} interaction - the extended text interaction model\n * @param {object} response\n */\n const setResponse = (interaction, response) => {\n const _setMultipleVal = (identifier, value) => {\n interaction.getContainer().find(`#${identifier}`).val(value);\n };\n\n const baseType = interaction.getResponseDeclaration().attr('baseType');\n\n if (response.base === null && Object.keys(response).length === 1) {\n response = { base: { string: '' } };\n }\n\n if (response.base && typeof response.base[baseType] !== 'undefined') {\n setText(interaction, response.base[baseType]);\n } else if (response.list && response.list[baseType]) {\n for (let i in response.list[baseType]) {\n const serial = typeof response.list.serial === 'undefined' ? '' : response.list.serial[i];\n _setMultipleVal(`${serial}_${i}`, response.list[baseType][i]);\n }\n } else {\n throw new Error('wrong response format in argument.');\n }\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {Object} interaction - the extended text interaction model\n * @returns {object}\n */\n const getResponse = function (interaction) {\n const $container = containerHelper.get(interaction);\n const attributes = interaction.getAttributes();\n const responseDeclaration = interaction.getResponseDeclaration();\n const baseType = responseDeclaration.attr('baseType');\n const numericBase = attributes.base || 10;\n const multiple = !!(\n attributes.maxStrings &&\n (responseDeclaration.attr('cardinality') === 'multiple' ||\n responseDeclaration.attr('cardinality') === 'ordered')\n );\n const ret = multiple ? { list: {} } : { base: {} };\n let values;\n let value = '';\n\n if (multiple) {\n values = [];\n\n $container.find('input').each(function (i) {\n const $el = $$1(this);\n\n if (attributes.placeholderText && $el.val() === attributes.placeholderText) {\n values[i] = '';\n } else {\n if (baseType === 'integer') {\n values[i] = parseInt($el.val(), numericBase);\n values[i] = isNaN(values[i]) ? '' : values[i];\n } else if (baseType === 'float') {\n values[i] = parseFloat($el.val());\n values[i] = isNaN(values[i]) ? '' : values[i];\n } else if (baseType === 'string') {\n values[i] = $el.val();\n }\n }\n });\n\n ret.list[baseType] = values;\n } else {\n if (attributes.placeholderText && _getTextareaValue(interaction) === attributes.placeholderText) {\n value = '';\n } else {\n if (baseType === 'integer') {\n value = parseInt(_getTextareaValue(interaction), numericBase);\n } else if (baseType === 'float') {\n value = parseFloat(_getTextareaValue(interaction));\n } else if (baseType === 'string') {\n value = _getTextareaValue(interaction, true);\n }\n }\n\n ret.base[baseType] = isNaN(value) && typeof value === 'number' ? '' : value;\n }\n\n return ret;\n };\n\n /**\n * Creates an input limiter object\n * @param {Object} interaction - the extended text interaction\n * @returns {Object} the limiter\n */\n function inputLimiter(interaction) {\n const $container = containerHelper.get(interaction);\n const expectedLength = interaction.attr('expectedLength');\n const expectedLines = interaction.attr('expectedLines');\n const patternMask = interaction.attr('patternMask');\n let patternRegEx;\n let $textarea, $charsCounter, $wordsCounter, maxWords, maxLength, $maxLengthCounter, $maxWordsCounter;\n let enabled = false;\n\n if (expectedLength || expectedLines || patternMask) {\n enabled = true;\n\n $textarea = $$1('.text-container', $container);\n $charsCounter = $$1('.count-chars', $container);\n $wordsCounter = $$1('.count-words', $container);\n $maxLengthCounter = $$1('.count-max-length', $container);\n $maxWordsCounter = $$1('.count-max-words', $container);\n\n if (patternMask !== '') {\n maxWords = patternMaskHelper.parsePattern(patternMask, 'words');\n maxLength = patternMaskHelper.parsePattern(patternMask, 'chars');\n maxWords = _.isNaN(maxWords) ? 0 : maxWords;\n maxLength = _.isNaN(maxLength) ? 0 : maxLength;\n if (!maxLength && !maxWords) {\n patternRegEx = new RegExp(patternMask);\n }\n $maxLengthCounter.text(maxLength);\n $maxWordsCounter.text(maxWords);\n }\n }\n\n /**\n * The limiter instance\n */\n const limiter = {\n /**\n * Is the limiter enabled regarding the interaction configuration\n */\n enabled: enabled,\n\n /**\n * Listen for text input into the interaction and limit it if necessary\n */\n listenTextInput: function listenTextInput() {\n const ignoreKeyCodes = [\n 8, // backspace\n 13, // enter\n 16, // shift\n 17, // control\n 46, // delete\n 37, // arrow left\n 38, // arrow up\n 39, // arrow right\n 40, // arrow down\n 35, // home\n 36, // end\n\n // ckeditor specific:\n 1114177, // home\n 3342401, // Shift + home\n 1114181, // end\n 3342405, // Shift + end\n\n 2228232, // Shift + backspace\n 2228261, // Shift + arrow left\n 4456485, // Alt + arrow left\n 2228262, // Shift + arrow up\n 2228263, // Shift + arrow right\n 4456487, // Alt + arrow right\n 2228264, // Shift + arrow down\n 2228237, // Shift + enter\n\n 1114120, // Ctrl + backspace\n 1114177, // Ctrl + a\n 1114202, // Ctrl + z\n 1114200 // Ctrl + x\n ];\n const triggerKeyCodes = [\n 32, // space\n 13, // enter\n 2228237 // shift + enter in ckEditor\n ];\n let cke;\n\n const invalidToolip = tooltip.error($container, __('This is not a valid answer'), {\n position: 'bottom',\n trigger: 'manual'\n });\n const patternHandler = function patternHandler(e) {\n const isCke = _getFormat(interaction) === 'xhtml';\n let newValue;\n if (patternRegEx) {\n if (isCke) {\n // cke has its own object structure\n newValue = this.getData();\n } else {\n // covers input\n newValue = e.currentTarget.value;\n }\n\n if (!newValue) {\n return false;\n }\n _.debounce(function () {\n if (!patternRegEx.test(newValue)) {\n $container.addClass('invalid');\n $container.show();\n invalidToolip.show();\n containerHelper.triggerResponseChangeEvent(interaction);\n } else {\n $container.removeClass('invalid');\n invalidToolip.dispose();\n }\n }, 400)();\n }\n };\n\n /**\n * This part works on keyboard input\n *\n * @param {Event} e\n * @returns {boolean}\n */\n const keyLimitHandler = e => {\n const keyCode = e && e.data ? e.data.keyCode : e.which;\n if (\n !_.contains(ignoreKeyCodes, keyCode) &&\n ((maxWords && this.getWordsCount() >= maxWords && _.contains(triggerKeyCodes, keyCode)) ||\n (maxLength && this.getCharsCount() >= maxLength))\n ) {\n if (e.cancel) {\n e.cancel();\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n }\n _.defer(() => this.updateCounter());\n };\n\n /**\n * This part works on drop or paste\n * @param {Event} e\n * @returns {boolean}\n */\n const nonKeyLimitHandler = e => {\n let newValue;\n const isCke = _getFormat(interaction) === 'xhtml';\n\n if (typeof $$1(e.target).attr('data-clipboard') === 'string') {\n newValue = $$1(e.target).attr('data-clipboard');\n } else if (isCke) {\n // cke has its own object structure\n newValue = e.data.dataValue;\n } else {\n // covers input via paste or drop\n newValue = e.originalEvent.clipboardData\n ? e.originalEvent.clipboardData.getData('text')\n : e.originalEvent.dataTransfer.getData('text') ||\n e.originalEvent.dataTransfer.getData('text/plain') ||\n '';\n }\n\n // prevent insertion of non-limited data\n if (e.cancel) {\n e.cancel();\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n if (!newValue) {\n return false;\n }\n\n // limit by word or character count if required\n if (!_.isNull(maxWords)) {\n newValue = strLimiter.limitByWordCount(newValue, maxWords - this.getWordsCount());\n } else if (!_.isNull(maxLength)) {\n newValue = strLimiter.limitByCharCount(newValue, maxLength - this.getCharsCount());\n }\n\n // insert the cut-off text\n if (isCke) {\n _getCKEditor(interaction).insertHtml(newValue);\n } else {\n let elements = containerHelper.get(interaction).find('textarea');\n let el = elements[0];\n let { selectionStart: start, selectionEnd: end, value: text } = el;\n elements.val(text.substring(0, start) + newValue + text.substring(end, text.length));\n el.focus();\n el.selectionStart = start + newValue.length;\n el.selectionEnd = el.selectionStart;\n }\n\n _.defer(() => this.updateCounter());\n };\n\n if (_getFormat(interaction) === 'xhtml') {\n cke = _getCKEditor(interaction);\n cke.on('key', keyLimitHandler);\n cke.on('change', patternHandler);\n cke.on('paste', nonKeyLimitHandler);\n // @todo: drop requires cke 4.5\n // cke.on('drop', nonKeyLimitHandler);\n } else {\n $textarea\n .on('keyup.commonRenderer', patternHandler)\n .on('keydown.commonRenderer', keyLimitHandler)\n .on('paste.commonRenderer drop.commonRenderer', nonKeyLimitHandler);\n }\n },\n\n /**\n * Get the number of words that are actually written in the response field\n * @returns {Number} number of words\n */\n getWordsCount: function getWordsCount() {\n const value = _getTextareaValue(interaction) || '';\n if (_.isEmpty(value)) {\n return 0;\n }\n // leading and trailing white space don't qualify as words\n return value.trim().replace(/\\s+/gi, ' ').split(' ').length;\n },\n\n /**\n * Get the number of characters that are actually written in the response field\n * @returns {Number} number of characters\n */\n getCharsCount: function getCharsCount() {\n const value = _getTextareaValue(interaction) || '';\n // remove NO-BREAK SPACE in empty lines added and all new line symbols\n return value.replace(/[\\r\\n]{1}\\xA0[\\r\\n]{1}/gm, '\\r').replace(/[\\r\\n]+/gm, '').length;\n },\n\n /**\n * Update the counter element\n */\n updateCounter: function udpateCounter() {\n $charsCounter.text(this.getCharsCount());\n $wordsCounter.text(this.getWordsCount());\n }\n };\n\n return limiter;\n }\n\n /**\n * return the value of the textarea or ckeditor data\n * @param {Object} interaction\n * @param {Boolean} raw Tells if the returned data does not have to be filtered (i.e. XHTML tags not removed)\n * @returns {String} the value\n */\n function _getTextareaValue(interaction, raw) {\n if (_getFormat(interaction) === 'xhtml') {\n return _ckEditorData(interaction, raw);\n } else {\n return containerHelper.get(interaction).find('textarea').val();\n }\n }\n\n /**\n * Setting the pattern mask for the input, for browsers which doesn't support this feature\n * @param {jQuery} $element\n * @param {string} pattern\n */\n function _setPattern($element, pattern) {\n const patt = new RegExp(pattern);\n\n //test when some data is entering in the input field\n //@todo plug the validator + tooltip\n $element.on('keyup.commonRenderer', function () {\n $element.removeClass('field-error');\n if (!patt.test($element.val())) {\n $element.addClass('field-error');\n }\n });\n }\n\n /**\n * Whether or not multiple strings are expected from the candidate to\n * compose a valid response.\n *\n * @param {Object} interaction - the extended text interaction model\n * @returns {Boolean} true if a multiple\n */\n function _isMultiple(interaction) {\n const attributes = interaction.getAttributes();\n const response = interaction.getResponseDeclaration();\n return !!(\n attributes.maxStrings &&\n (response.attr('cardinality') === 'multiple' || response.attr('cardinality') === 'ordered')\n );\n }\n\n /**\n * Instantiate CkEditor for the interaction\n *\n * @param {Object} interaction - the extended text interaction model\n * @param {Object} [options= {}] - the CKEditor configuration options\n * @returns {Object} the ckEditor instance (or you'll be in trouble\n */\n function _setUpCKEditor(interaction, options) {\n const $container = containerHelper.get(interaction);\n const editor = ckEditor.replace($container.find('.text-container')[0], options || {});\n if (editor) {\n $container.data('editor', editor.name);\n return editor;\n }\n }\n\n /**\n * Destroy CKEditor\n *\n * @param {Object} interaction - the extended text interaction model\n */\n function _destroyCkEditor(interaction) {\n const $container = containerHelper.get(interaction);\n const name = $container.data('editor');\n let editor;\n if (name) {\n editor = ckEditor.instances[name];\n }\n if (editor) {\n editor.destroy();\n $container.removeData('editor');\n }\n }\n\n /**\n * Gets the CKEditor instance\n * @param {Object} interaction - the extended text interaction model\n * @returns {Object} CKEditor instance\n */\n function _getCKEditor(interaction) {\n const $container = containerHelper.get(interaction);\n const name = $container.data('editor');\n\n return ckEditor.instances[name];\n }\n\n /**\n * get the text content of the ckEditor ( not the entire html )\n * @param {object} interaction the interaction\n * @param {Boolean} raw Tells if the returned data does not have to be filtered (i.e. XHTML tags not removed)\n * @returns {string} text content of the ckEditor\n */\n function _ckEditorData(interaction, raw) {\n const editor = _getCKEditor(interaction);\n let data = (editor && editor.getData()) || '';\n\n if (!raw) {\n data = _stripTags(data);\n }\n\n return data;\n }\n\n /**\n * Remove HTML tags from a string\n * @param {String} str\n * @returns {String}\n */\n function _stripTags(str) {\n const tempNode = document.createElement('div');\n tempNode.innerHTML = str;\n return tempNode.textContent;\n }\n\n /**\n * Get the interaction format\n * @param {Object} interaction - the extended text interaction model\n * @returns {String} format in 'plain', 'xhtml', 'preformatted'\n */\n function _getFormat(interaction) {\n const format = interaction.attr('format');\n if (_.contains(['plain', 'xhtml', 'preformatted'], format)) {\n return format;\n }\n return 'plain';\n }\n\n function enable(interaction) {\n const $container = containerHelper.get(interaction);\n let editor;\n\n $container.find('input, textarea').removeAttr('disabled');\n\n if (_getFormat(interaction) === 'xhtml') {\n editor = _getCKEditor(interaction);\n if (editor) {\n if (editor.status === 'ready') {\n editor.setReadOnly(false);\n } else {\n editor.readOnly = false;\n }\n }\n }\n }\n\n function disable(interaction) {\n const $container = containerHelper.get(interaction);\n let editor;\n\n $container.find('input, textarea').attr('disabled', 'disabled');\n\n if (_getFormat(interaction) === 'xhtml') {\n editor = _getCKEditor(interaction);\n if (editor) {\n if (editor.status === 'ready') {\n editor.setReadOnly(true);\n } else {\n editor.readOnly = true;\n }\n }\n }\n }\n\n function clearText(interaction) {\n setText(interaction, '');\n }\n\n function setText(interaction, text) {\n const limiter = inputLimiter(interaction);\n if (_getFormat(interaction) === 'xhtml') {\n try {\n _getCKEditor(interaction).setData(text, function () {\n if (limiter.enabled) {\n limiter.updateCounter();\n }\n });\n } catch (e) {\n logger.warn(`setText error ${e}!`);\n }\n } else {\n containerHelper.get(interaction).find('textarea').val(text);\n if (limiter.enabled) {\n limiter.updateCounter();\n }\n }\n }\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n function destroy(interaction) {\n const $container = containerHelper.get(interaction);\n const $el = $container.find('input, textarea');\n\n if (_getFormat(interaction) === 'xhtml') {\n _destroyCkEditor(interaction);\n }\n\n //remove event\n $el.off('.commonRenderer');\n $$1(document).off('.commonRenderer');\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n }\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n try {\n interaction.setResponse(state.response);\n } catch (e) {\n interaction.resetResponse();\n throw e;\n }\n }\n }\n }\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n function getState(interaction) {\n const state = {};\n const response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n }\n\n function getCustomData(interaction, data) {\n const pattern = interaction.attr('patternMask'),\n maxWords = parseInt(patternMaskHelper.parsePattern(pattern, 'words')),\n maxLength = parseInt(patternMaskHelper.parsePattern(pattern, 'chars')),\n expectedLength = parseInt(interaction.attr('expectedLines'), 10);\n return _.merge(data || {}, {\n maxWords: !isNaN(maxWords) ? maxWords : 0,\n maxLength: !isNaN(maxLength) ? maxLength : 0,\n attributes: !isNaN(expectedLength) ? { expectedLength: expectedLength * 72 } : undefined\n });\n }\n\n /**\n * Expose the common renderer for the extended text interaction\n * @exports qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction\n */\n var ExtendedTextInteraction = {\n qtiClass: 'extendedTextInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n getData: getCustomData,\n resetResponse: resetResponse,\n destroy: destroy,\n getState: getState,\n setState: setState,\n enable: enable,\n disable: disable,\n clearText: clearText,\n setText: setText,\n inputLimiter: inputLimiter\n };\n\n return ExtendedTextInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/GapMatchInteraction',['lodash', 'i18n', 'jquery', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'interact', 'ui/interactUtils'], function (_, __, $$1, Handlebars, DOMPurify, containerHelper, pciResponse, interact, interactUtils) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n interactUtils = interactUtils && Object.prototype.hasOwnProperty.call(interactUtils, 'default') ? interactUtils['default'] : interactUtils;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-gapMatchInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"gapMatchInteraction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <ul class=\\\"choice-area none block-listing solid horizontal source\\\">\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data};\n if (helper = helpers.choices) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.choices); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.choices) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"qti-flow-container\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2019 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Global variable to count number of choice usages:\n * @type {object}\n */\n var _choiceUsages = {};\n\n var setChoice = function(interaction, $choice, $target) {\n var choiceSerial = $choice.data('serial'),\n choice = interaction.getChoice(choiceSerial);\n\n if (!_choiceUsages[choiceSerial]) {\n _choiceUsages[choiceSerial] = 0;\n }\n _choiceUsages[choiceSerial]++;\n\n $target\n .data('serial', choiceSerial)\n .html($choice.html())\n .addClass('filled');\n\n if (\n !interaction.responseMappingMode &&\n choice.attr('matchMax') &&\n _choiceUsages[choiceSerial] >= choice.attr('matchMax')\n ) {\n $choice.attr('class', 'deactivated');\n }\n\n containerHelper.triggerResponseChangeEvent(interaction);\n };\n\n var unsetChoice = function(interaction, $choice) {\n var serial = $choice.data('serial');\n var $container = containerHelper.get(interaction);\n\n $container\n .find('.choice-area [data-serial=' + serial + ']')\n .removeClass()\n .addClass('qti-choice');\n\n _choiceUsages[serial]--;\n\n $choice\n .removeClass('filled')\n .removeData('serial')\n .empty();\n\n if (!interaction.swapping) {\n //set correct response\n containerHelper.triggerResponseChangeEvent(interaction);\n }\n };\n\n var getChoice = function(interaction, identifier) {\n var $container = containerHelper.get(interaction);\n return $$1('.choice-area [data-identifier=\"' + identifier + '\"]', $container);\n };\n\n var getGap = function(interaction, identifier) {\n var $container = containerHelper.get(interaction);\n return $$1('.qti-flow-container [data-identifier=\"' + identifier + '\"]', $container);\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10291\n *\n * @param {object} interaction\n */\n var render = function(interaction) {\n var $container = containerHelper.get(interaction);\n var $choiceArea = $container.find('.choice-area');\n var $flowContainer = $container.find('.qti-flow-container');\n\n var $activeChoice = null;\n var $activeDrop = null;\n\n var isDragAndDropEnabled;\n var dragOptions;\n var scaleX, scaleY;\n\n var $bin = $$1('<span>', { class: 'icon-undo remove-choice', title: __('remove') });\n\n var choiceSelector = $choiceArea.selector + ' .qti-choice';\n var gapSelector = $flowContainer.selector + ' .gapmatch-content';\n var filledGapSelector = gapSelector + '.filled';\n var binSelector = $container.selector + ' .remove-choice';\n\n var _getChoice = function(serial) {\n return $choiceArea.find('[data-serial=' + serial + ']');\n };\n\n var _setChoice = function($choice, $target) {\n return setChoice(interaction, $choice, $target);\n };\n\n var _resetSelection = function() {\n if ($activeChoice) {\n $flowContainer.find('.remove-choice').remove();\n $activeChoice.removeClass('deactivated active');\n $container.find('.empty').removeClass('empty');\n $activeChoice = null;\n }\n };\n\n var _unsetChoice = function($choice) {\n return unsetChoice(interaction, $choice);\n };\n\n var _isInsertionMode = function() {\n return $activeChoice && !$activeChoice.hasClass('filled');\n };\n\n var _isModeEditing = function() {\n return $activeChoice && $activeChoice.hasClass('filled');\n };\n\n // Drag & drop handlers\n\n if (this.getOption && this.getOption('enableDragAndDrop') && this.getOption('enableDragAndDrop').gapMatch) {\n isDragAndDropEnabled = this.getOption('enableDragAndDrop').gapMatch;\n }\n\n function _iFrameDragFix(draggableSelector, target) {\n interactUtils.iFrameDragFixOn(function() {\n if ($activeDrop) {\n interact(gapSelector).fire({\n type: 'drop',\n target: $activeDrop.eq(0),\n relatedTarget: target\n });\n }\n interact(draggableSelector).fire({\n type: 'dragend',\n target: target\n });\n });\n }\n\n if (isDragAndDropEnabled) {\n dragOptions = {\n inertia: false,\n autoScroll: true,\n restrict: {\n restriction: '.qti-interaction',\n endOnly: false,\n elementRect: { top: 0, left: 1, bottom: 1, right: 1 }\n }\n };\n\n // makes choices draggables\n interact(choiceSelector)\n .draggable(\n _.assign({}, dragOptions, {\n onstart: function(e) {\n var $target = $$1(e.target);\n var scale;\n $target.addClass('dragged');\n _handleChoiceSelect($target);\n\n _iFrameDragFix(choiceSelector, e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n },\n onmove: function(e) {\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n },\n onend: function(e) {\n var $target = $$1(e.target);\n $target.removeClass('dragged');\n\n interactUtils.restoreOriginalPosition($target);\n interactUtils.iFrameDragFixOff();\n }\n })\n )\n .styleCursor(false);\n\n // makes filled gaps draggables\n interact(filledGapSelector)\n .draggable(\n _.assign({}, dragOptions, {\n onstart: function(e) {\n var $target = $$1(e.target);\n var scale;\n $target.addClass('dragged');\n _handleFilledGapSelect($target);\n\n _iFrameDragFix(filledGapSelector, e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n },\n onmove: function(e) {\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n },\n onend: function(e) {\n var $target = $$1(e.target);\n $target.removeClass('dragged');\n\n interactUtils.restoreOriginalPosition($target);\n\n if ($activeChoice) {\n _unsetChoice($activeChoice);\n _resetSelection();\n }\n interactUtils.iFrameDragFixOff();\n }\n })\n )\n .styleCursor(false);\n\n // makes gaps droppables\n interact(gapSelector).dropzone({\n overlap: 0.05,\n ondragenter: function(e) {\n var $target = $$1(e.target),\n $dragged = $$1(e.relatedTarget);\n\n $activeDrop = $target;\n $target.addClass('dropzone');\n $dragged.addClass('droppable');\n },\n ondrop: function(e) {\n _handleGapSelect($$1(e.target));\n\n this.ondragleave(e);\n },\n ondragleave: function(e) {\n var $target = $$1(e.target),\n $dragged = $$1(e.relatedTarget);\n\n $target.removeClass('dropzone');\n $dragged.removeClass('droppable');\n\n $activeDrop = null;\n }\n });\n }\n\n // Point & click handlers\n\n interact($container.selector).on('tap', function(e) {\n e.stopPropagation();\n _resetSelection();\n });\n\n interact(choiceSelector).on('tap', function(e) {\n e.stopPropagation();\n _handleChoiceSelect($$1(e.currentTarget));\n e.preventDefault();\n });\n\n interact(gapSelector).on('tap', function(e) {\n e.stopPropagation();\n _handleGapSelect($$1(e.currentTarget));\n e.preventDefault();\n });\n\n interact(binSelector).on('tap', function(e) {\n e.stopPropagation();\n _unsetChoice($activeChoice);\n _resetSelection();\n e.preventDefault();\n });\n\n // Common handlers\n\n function _handleChoiceSelect($target) {\n if (($activeChoice && $target.hasClass('active')) || $target.hasClass('deactivated')) {\n return;\n }\n _resetSelection();\n\n $activeChoice = $target.addClass('active');\n $$1(gapSelector).addClass('empty');\n }\n\n function _handleFilledGapSelect($target) {\n $activeChoice = $target;\n $$1(gapSelector).addClass('active');\n }\n\n function _handleGapSelect($target) {\n var choiceSerial, targetSerial;\n\n if (_isInsertionMode()) {\n choiceSerial = $activeChoice.data('serial');\n targetSerial = $target.data('serial');\n\n if (targetSerial !== choiceSerial) {\n //set choices:\n if (targetSerial) {\n _unsetChoice($target);\n }\n\n _setChoice($activeChoice, $target);\n }\n\n $activeChoice.removeClass('active');\n $container.find('.empty').removeClass('empty');\n $activeChoice = null;\n } else if (_isModeEditing()) {\n choiceSerial = $activeChoice.data('serial');\n targetSerial = $target.data('serial');\n\n if (targetSerial !== choiceSerial) {\n _unsetChoice($activeChoice);\n if (targetSerial) {\n //swapping:\n _unsetChoice($target);\n _setChoice(_getChoice(targetSerial), $activeChoice);\n }\n _setChoice(_getChoice(choiceSerial), $target);\n }\n\n _resetSelection();\n } else if ($target.data('serial') && $target.hasClass('filled')) {\n targetSerial = $target.data('serial');\n\n $activeChoice = $target;\n $activeChoice.addClass('active');\n\n $flowContainer\n .find('>li>div')\n .filter(function() {\n return $target.data('serial') !== targetSerial;\n })\n .addClass('empty');\n\n $choiceArea\n .find('>li:not(.deactivated)')\n .filter(function() {\n return $target.data('serial') !== targetSerial;\n })\n .addClass('empty');\n\n //append trash bin:\n $target.append($bin);\n }\n }\n };\n\n var resetResponse = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n $$1('.gapmatch-content.active', $container).removeClass('active');\n $$1('.gapmatch-content', $container).each(function() {\n unsetChoice(interaction, $$1(this));\n });\n };\n\n var _setPairs = function(interaction, pair) {\n if (pair && pair.length) {\n setChoice(interaction, getChoice(interaction, pair[0]), getGap(interaction, pair[1]).find('.gapmatch-content'));\n }\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10291\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n resetResponse(interaction);\n let pairs = pciResponse.unserialize(response, interaction);\n if ( _.isArray(pairs) && _.isArray(pairs[0])) {\n _.forEach(pairs, pair => _setPairs(interaction, pair));\n } else {\n _setPairs(interaction, pairs);\n }\n };\n\n var _getRawResponse = function(interaction) {\n var response = [];\n var $container = containerHelper.get(interaction);\n $$1('.gapmatch-content', $container).each(function() {\n var choiceSerial = $$1(this).data('serial'),\n pair = [];\n\n if (choiceSerial) {\n pair.push(interaction.getChoice(choiceSerial).attr('identifier'));\n }\n pair.push($$1(this).data('identifier'));\n\n if (pair.length === 2) {\n response.push(pair);\n }\n });\n return response;\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10307\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n var destroy = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n //remove event\n interact($container.selector).unset();\n interact($container.find('.choice-area').selector + ' .qti-choice').unset();\n interact($container.find('.qti-flow-container').selector + ' .gapmatch-content').unset();\n interact($container.find('.remove-choice').selector).unset();\n\n //restore selection\n $container.find('.gapmatch-content').empty();\n $container.find('.active').removeClass('active');\n $container.find('.remove-choice').remove();\n $container.find('.empty').removeClass('empty');\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n var $container;\n\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === _.size(interaction.getChoices())) {\n $container = containerHelper.get(interaction);\n\n $$1('.choice-area .qti-choice', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order, $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order, $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($$1('.choice-area', $container));\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var $container;\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n $container = containerHelper.get(interaction);\n\n state.order = [];\n $$1('.choice-area .qti-choice', $container).each(function() {\n state.order.push($$1(this).data('identifier'));\n });\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the gapmatch interaction\n * @exports qtiCommonRenderer/renderers/interactions/GapMatchInteraction\n */\n var GapMatchInteraction = {\n qtiClass: 'gapMatchInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return GapMatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/Graphic', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager'], function ($$1, _, __, Handlebars, DOMPurify, graphic, pciResponse, containerHelper, instructionMgr) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n graphic = graphic && Object.prototype.hasOwnProperty.call(graphic, 'default') ? graphic['default'] : graphic;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-graphicInteraction qti-graphicAssociateInteraction clearfix\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"image-editor solid\\\">\\n <div id='graphic-paper-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"' class=\\\"main-image-box\\\"></div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {Promise}\n */\n var render = function render(interaction) {\n var self = this;\n\n return new Promise(function(resolve) {\n var $container = containerHelper.get(interaction);\n var background = interaction.object.attributes;\n interaction._vsets = [];\n\n $container.off('resized.qti-widget.resolve').one('resized.qti-widget.resolve', resolve);\n\n interaction.paper = graphic.responsivePaper('graphic-paper-' + interaction.serial, interaction.serial, {\n width: background.width,\n height: background.height,\n img: self.resolveUrl(background.data),\n imgId: 'bg-image-' + interaction.serial,\n container: $container\n });\n\n //call render choice for each interaction's choices\n _.forEach(interaction.getChoices(), _.partial(_renderChoice, interaction));\n\n //make the paper clear the selection by clicking it\n _paperUnSelect(interaction);\n\n //set up the constraints instructions\n instructionMgr.minMaxChoiceInstructions(interaction, {\n min: interaction.attr('minAssociations'),\n max: interaction.attr('maxAssociations'),\n getResponse: _getRawResponse,\n onError: function(data) {\n if (data && data.target) {\n graphic.highlightError(data.target);\n }\n }\n });\n });\n };\n\n /**\n * Render a choice inside the paper.\n * Please note that the choice renderer isn't implemented separately because it relies on the Raphael paper instead of the DOM.\n * @param {Paper} paper - the raphael paper to add the choices to\n * @param {Object} interaction\n * @param {Object} choice - the hotspot choice to add to the interaction\n */\n var _renderChoice = function _renderChoice(interaction, choice) {\n var shape = choice.attr('shape');\n var coords = choice.attr('coords');\n var maxAssociations = interaction.attr('maxAssociations');\n\n var rElement = graphic\n .createElement(interaction.paper, shape, coords, {\n id: choice.serial,\n title: __('Select this area to start an association')\n })\n .data('max', choice.attr('matchMax'))\n .data('matching', 0)\n .removeData('assocs')\n .click(function() {\n var self = this;\n var active, assocs;\n\n //can't create more associations than the maxAssociations attr\n if (maxAssociations > 0 && _getRawResponse(interaction).length >= maxAssociations) {\n _shapesUnSelectable(interaction);\n instructionMgr.validateInstructions(interaction, { choice: choice, target: this });\n return;\n }\n active = _getActiveElement(interaction);\n if (this.selectable) {\n if (active) {\n //increment the matching counter\n active.data('matching', active.data('matching') + 1);\n this.data('matching', this.data('matching') + 1);\n\n //attach the response to the active (not the dest)\n assocs = active.data('assocs') || [];\n assocs.push(choice.id());\n active.data('assocs', assocs);\n\n //and create the path\n _createPath(interaction, active, this, function onRemove() {\n //decrement the matching counter\n active.data('matching', active.data('matching') - 1);\n self.data('matching', self.data('matching') - 1);\n\n //detach the response from the active\n active.data('assocs', _.pull(active.data('assocs') || [], choice.id()));\n\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction, { choice: choice, target: self });\n });\n }\n _shapesUnSelectable(interaction);\n } else if (this.active) {\n _shapesUnSelectable(interaction);\n } else if (_isMatchable(this)) {\n if (active) {\n _shapesUnSelectable(interaction);\n }\n graphic.updateElementState(this, 'active', __('Select this area to start an association'));\n this.active = true;\n _shapesSelectable(interaction, this);\n }\n\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction, { choice: choice, target: this });\n });\n };\n\n /**\n * By clicking the paper image the shapes are restored to their default state\n * @private\n * @param {Object} interaction\n */\n var _paperUnSelect = function _paperUnSelect(interaction) {\n var $container = containerHelper.get(interaction);\n var image = interaction.paper.getById('bg-image-' + interaction.serial);\n if (image) {\n image.click(function() {\n _shapesUnSelectable(interaction);\n $container.trigger('unselect.graphicassociate');\n });\n }\n };\n\n /**\n * Get the element that has the active state\n * @private\n * @param {Object} interaction\n * @returns {Raphael.Element} the active element\n */\n var _getActiveElement = function _getActiveElement(interaction) {\n var active;\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element && element.active === true) {\n active = element;\n return false;\n }\n });\n return active;\n };\n\n /**\n * Create a path from a src element to a destination.\n * The path is selectable and can be removed by itself\n * @private\n * @param {Object} interaction\n * @param {Raphael.Element} srcElement - the path starts from this shape\n * @param {Raphael.Element} destElement - the path ends to this shape\n * @param {Function} onRemove - called back on path remove\n */\n var _createPath = function _createPath(interaction, srcElement, destElement, onRemove) {\n var $container = containerHelper.get(interaction);\n\n //virtual set, not a raphael one, just to group the elements\n var vset = [];\n\n //get the middle point of the source shape\n var src = srcElement.getBBox();\n var sx = src.x + src.width / 2;\n var sy = src.y + src.height / 2;\n\n //get the middle point of the source shape\n var dest = destElement.getBBox();\n var dx = dest.x + dest.width / 2;\n var dy = dest.y + dest.height / 2;\n\n //create a path with bullets at the beginning and the end\n var srcBullet = interaction.paper.circle(sx, sy, 3).attr(graphic._style['assoc-bullet']);\n\n var destBullet = interaction.paper.circle(dx, dy, 3).attr(graphic._style['assoc-bullet']);\n\n var path = interaction.paper\n .path('M' + sx + ',' + sy + 'L' + sx + ',' + sy)\n .attr(graphic._style.assoc)\n .animate({ path: 'M' + sx + ',' + sy + 'L' + dx + ',' + dy }, 300);\n\n //create an overall layer that make easier the path selection\n var layer = interaction.paper.path('M' + sx + ',' + sy + 'L' + dx + ',' + dy).attr(graphic._style['assoc-layer']);\n\n //get the middle of the path\n var midPath = layer.getPointAtLength(layer.getTotalLength() / 2);\n\n //create an hidden background for the closer\n var closerBg = interaction.paper\n .circle(midPath.x, midPath.y, 9)\n .attr(graphic._style['close-bg'])\n .toBack();\n\n //create an hidden closer\n var closer = interaction.paper\n .path(graphic._style.close.path)\n .attr(graphic._style.close)\n .transform('T' + (midPath.x - 9) + ',' + (midPath.y - 9))\n .attr('title', _('Click again to remove'))\n .toBack();\n\n //the path is below the shapes\n srcElement.toFront();\n destElement.toFront();\n\n //add the path into a set\n vset = [srcBullet, path, destBullet, layer, closerBg, closer];\n interaction._vsets.push(vset);\n\n //to identify the element of the set outside the context\n _.invoke(vset, 'data', 'assoc-path', true);\n\n //enable to select the path by clicking the invisible layer\n layer.click(function selectLigne() {\n if (closer.attrs.opacity === 0) {\n showCloser();\n } else {\n hideCloser();\n }\n });\n\n $container.on('unselect.graphicassociate', function() {\n hideCloser();\n });\n\n function showCloser() {\n closerBg\n .toFront()\n .animate({ opacity: 0.8 }, 300)\n .click(removeSet);\n closer\n .toFront()\n .animate({ opacity: 1 }, 300)\n .click(removeSet);\n }\n\n function hideCloser() {\n if (closerBg && closerBg.type) {\n closerBg\n .animate({ opacity: 0 }, 300, function() {\n closerBg.toBack();\n })\n .unclick();\n closer\n .animate({ opacity: 0 }, 300, function() {\n closer.toBack();\n })\n .unclick();\n }\n }\n\n //remove set handler\n function removeSet() {\n _.invoke(vset, 'remove');\n interaction._vsets = _.without(interaction._vsets, vset);\n if (typeof onRemove === 'function') {\n onRemove();\n }\n }\n };\n\n /**\n * Makes the shapes selectable\n * @private\n * @param {Object} interaction\n * @param {Raphael.Element} active - the active shape\n */\n var _shapesSelectable = function _shapesSelectable(interaction, active) {\n var assocs = active.data('assocs') || [];\n var choices = interaction.getChoices();\n var activeChoice = choices[active.id];\n\n //update the shape state\n _.forEach(choices, function(choice) {\n var element;\n var assocsElement;\n if (!_.contains(assocs, choice.id())) {\n element = interaction.paper.getById(choice.serial);\n assocsElement = element.data('assocs') || [];\n if (\n !element.active &&\n element.id !== active.id &&\n _isMatchable(element) &&\n !_.contains(assocsElement, activeChoice.id())) {\n element.selectable = true;\n graphic.updateElementState(element, 'selectable');\n }\n }\n });\n };\n\n /**\n * Makes all the shapes UNselectable\n * @private\n * @param {Object} interaction\n */\n var _shapesUnSelectable = function _shapesUnSelectable(interaction) {\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n element.selectable = false;\n element.active = false;\n graphic.updateElementState(element, 'basic');\n }\n });\n };\n\n /**\n * Check if a shape can accept matches\n * @private\n * @param {Raphael.Element} element - the shape\n * @returns {Boolean} true if the element is matchable\n */\n var _isMatchable = function(element) {\n var matchable = false;\n var matching, matchMax;\n if (element) {\n matchMax = element.data('max') || 0;\n matching = element.data('matching') || 0;\n matchable = matchMax === 0 || matchMax > matching;\n }\n return matchable;\n };\n\n /**\n * Get the response from the interaction\n * @private\n * @param {Object} interaction\n * @returns {Array} the response in raw format\n */\n var _getRawResponse = function _getRawResponse(interaction) {\n var responses = [];\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n var assocs = element.data('assocs');\n if (element && assocs) {\n responses = responses.concat(\n _.map(assocs, function(id) {\n return [choice.id(), id];\n })\n );\n }\n });\n return responses;\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var responseValues;\n var map;\n if (response && interaction.paper) {\n try {\n responseValues = pciResponse.unserialize(response, interaction);\n if (responseValues.length === 2 && !Array.isArray(responseValues[0]) && !Array.isArray(responseValues[1])) {\n responseValues = [responseValues];\n }\n } catch (e) {}\n\n if (_.isArray(responseValues)) {\n //create an object with choiceId => shapeElement\n map = _.transform(interaction.getChoices(), function(res, choice) {\n res[choice.id()] = interaction.paper.getById(choice.serial);\n });\n _.forEach(responseValues, function(responseValue) {\n var el1, el2;\n if (_.isArray(responseValue) && responseValue.length === 2) {\n el1 = map[responseValue[0]];\n el2 = map[responseValue[1]];\n if (el1 && el2) {\n graphic.trigger(el1, 'click');\n graphic.trigger(el2, 'click');\n }\n }\n });\n }\n }\n };\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var resetResponse = function resetResponse(interaction) {\n var toRemove = [];\n\n //reset response and state bound to shapes\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n element.data({\n max: choice.attr('matchMax'),\n matching: 0,\n assocs: []\n });\n }\n });\n\n if (interaction && interaction.paper) {\n //remove the paths, but outside the forEach as it is implemented as a linked list\n interaction.paper.forEach(function(elt) {\n if (elt.data('assoc-path')) {\n toRemove.push(elt);\n }\n });\n }\n _.invoke(toRemove, 'remove');\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n var raw = _getRawResponse(interaction);\n var response = pciResponse.serialize(raw, interaction);\n return response;\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container;\n if (interaction.paper) {\n $container = containerHelper.get(interaction);\n\n $$1(window).off('resize.qti-widget.' + interaction.serial);\n $container.off('resize.qti-widget.' + interaction.serial);\n\n interaction.paper.clear();\n instructionMgr.removeInstructions(interaction);\n\n $container.off('.graphicassociate');\n\n $$1('.main-image-box', $container)\n .empty()\n .removeAttr('style');\n $$1('.image-editor', $container).removeAttr('style');\n $$1('ul', $container).empty();\n }\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the hotspot interaction\n * @exports qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction\n */\n var GraphicAssociateInteraction = {\n qtiClass: 'graphicAssociateInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return GraphicAssociateInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicGapMatchInteraction',['jquery', 'lodash', 'i18n', 'module', 'core/mouseEvent', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/Graphic', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'interact', 'ui/interactUtils'], function ($$1, _, __, module, mouseEvent, Handlebars, DOMPurify, graphic, pciResponse, containerHelper, instructionMgr, interact, interactUtils) { '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 module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n graphic = graphic && Object.prototype.hasOwnProperty.call(graphic, 'default') ? graphic['default'] : graphic;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n interactUtils = interactUtils && Object.prototype.hasOwnProperty.call(interactUtils, 'default') ? interactUtils['default'] : interactUtils;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-graphicInteraction qti-graphicGapMatchInteraction clearfix\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"image-editor solid\\\">\\n <div id='graphic-paper-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"' class=\\\"main-image-box\\\"></div>\\n <div class=\\\"clearfix\\\"></div>\\n <ul class=\\\"none block-listing horizontal source\\\">\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data};\n if (helper = helpers.gapImgs) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.gapImgs); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.gapImgs) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2019 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var isDragAndDropEnabled;\n\n // this represents the state for the active droppable zone\n // we need it only to access the active dropzone in the iFrameFix\n // should be removed when the old test runner is discarded\n var activeDrop = null;\n\n /**\n * Global variable to count number of choice usages:\n * @type {object}\n */\n var _choiceUsages = {};\n\n /**\n * This options enables to support old items created with the wrong\n * direction in the directedpairs.\n *\n * @deprecated\n */\n var isDirectedPairFlipped = module.config().flipDirectedPair;\n\n /**\n * Check if a shape can accept matches\n * @private\n * @param {Raphael.Element} element - the shape\n * @returns {Boolean} true if the element is matchable\n */\n var _isMatchable = function(element) {\n var matchable = false;\n var matching, matchMax;\n if (element) {\n matchMax = element.data('max') || 0;\n matching = element.data('matching') || [];\n matchable = matchMax === 0 || matchMax > matching.length;\n }\n return matchable;\n };\n\n /**\n * Makes the shapes selectable (at least those who can still accept matches)\n * @private\n * @param {Object} interaction\n */\n var _shapesSelectable = function _shapesSelectable(interaction) {\n var tooltip = __('Select the area to add an image');\n\n //update the shape state\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (_isMatchable(element)) {\n element.selectable = true;\n graphic.setStyle(element, 'selectable');\n graphic.updateTitle(element, tooltip);\n }\n });\n\n //update the gap images tooltip\n _.forEach(interaction.gapFillers, function(gapFiller) {\n gapFiller.forEach(function(element) {\n graphic.updateTitle(element, tooltip);\n });\n });\n };\n\n /**\n * Makes all the shapes UNselectable\n * @private\n * @param {Object} interaction\n */\n var _shapesUnSelectable = function _shapesUnSelectable(interaction) {\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n element.selectable = false;\n graphic.setStyle(element, 'basic');\n graphic.updateTitle(element, __('Select an image first'));\n }\n });\n\n //update the gap images tooltip\n _.forEach(interaction.gapFillers, function(gapFiller) {\n gapFiller.forEach(function(element) {\n graphic.updateTitle(element, __('Remove'));\n });\n });\n };\n\n /**\n * By clicking the paper image the shapes are restored to their default state\n * @private\n * @param {Object} interaction\n */\n var _paperUnSelect = function _paperUnSelect(interaction) {\n var $container = containerHelper.get(interaction);\n var $gapImages = $$1('ul > li', $container);\n var bgImage = interaction.paper.getById('bg-image-' + interaction.serial);\n if (bgImage) {\n interact(bgImage.node).on('tap', function() {\n _shapesUnSelectable(interaction);\n $gapImages.removeClass('active');\n });\n }\n };\n\n /**\n * Sets a choice and marks as disabled if at max\n * @private\n * @param {Object} interaction\n * @param {JQuery Element} $choice\n */\n var _setChoice = function _setChoice(interaction, $choice) {\n var choiceSerial = $choice.data('serial');\n var choice = interaction.getGapImg(choiceSerial);\n var matchMax;\n var usages;\n\n if (!_choiceUsages[choiceSerial]) {\n _choiceUsages[choiceSerial] = 0;\n }\n\n _choiceUsages[choiceSerial]++;\n\n // disable choice if maxium usage reached\n if (!interaction.responseMappingMode && choice.attr('matchMax')) {\n matchMax = +choice.attr('matchMax');\n usages = +_choiceUsages[choiceSerial];\n\n // note: if matchMax is 0, then test taker is allowed unlimited usage of that choice\n if (matchMax !== 0 && matchMax <= usages) {\n interact($choice.get(0)).draggable(false);\n $choice.addClass('disabled');\n $choice.removeClass('selectable');\n }\n }\n };\n\n /**\n * Unset a choice and unmark as disabled\n * @private\n * @param {Object} interaction\n * @param {JQuery Element} $choice\n */\n var _unsetChoice = function _unsetChoice(interaction, $choice) {\n var choiceSerial = $choice.data('serial');\n\n _choiceUsages[choiceSerial]--;\n\n $choice.removeClass('disabled');\n $choice.addClass('selectable');\n interact($choice.get(0)).draggable(true);\n };\n\n /**\n * Select a shape (= hotspot) (a gap image must be active)\n * @private\n * @param {Object} interaction\n * @param {Raphael.Element} element - the selected shape\n * @param {Boolean} [trackResponse = true] - if the selection trigger a response chane\n */\n var _selectShape = function _selectShape(interaction, element, trackResponse) {\n var $img, $clone, gapFiller, id, bbox, shapeOffset, activeOffset, matching, currentCount;\n\n //lookup for the active element\n var $container = containerHelper.get(interaction);\n var $gapList = $$1('ul', $container);\n var $active = $gapList.find('.active:first');\n var $imageBox = $$1('.main-image-box', $container);\n var boxOffset = $imageBox.offset();\n\n if ($active.length) {\n //the macthing elements are linked to the shape\n id = $active.data('identifier');\n matching = element.data('matching') || [];\n matching.push(id);\n element.data('matching', matching);\n currentCount = matching.length;\n\n //the image to clone\n $img = $active.find('img');\n\n //then reset the state of the shapes and the gap images\n _shapesUnSelectable(interaction);\n $gapList.children().removeClass('active');\n\n _setChoice(interaction, $active);\n\n $clone = $img.clone();\n shapeOffset = $$1(element.node).offset();\n activeOffset = $active.offset();\n\n $clone.css({\n position: 'absolute',\n display: 'block',\n 'z-index': 10000,\n opacity: 0.8,\n top: activeOffset.top - boxOffset.top,\n left: activeOffset.left - boxOffset.left\n });\n\n $clone.appendTo($imageBox);\n $clone.animate(\n {\n top: shapeOffset.top - boxOffset.top,\n left: shapeOffset.left - boxOffset.left\n },\n 200,\n function animationEnd() {\n var gapFillerImage;\n\n $clone.remove();\n\n //extract some coords for positioning\n bbox = element.getBBox();\n\n //create an image into the paper and move it to the selected shape\n gapFiller = graphic\n .createBorderedImage(interaction.paper, {\n url: $img.attr('src'),\n left: bbox.x + 8 * (currentCount - 1),\n top: bbox.y + 8 * (currentCount - 1),\n width: parseInt($img.attr('width'), 10),\n height: parseInt($img.attr('height'), 10),\n padding: 0,\n border: false,\n shadow: true\n })\n .data('identifier', id)\n .toFront();\n\n gapFillerImage = gapFiller[2].node;\n interact(gapFillerImage).on('tap', function(e) {\n var target = e.currentTarget;\n var rElement = interaction.paper.getById(target.raphaelid);\n\n e.preventDefault();\n e.stopPropagation();\n\n // adding a new gapfiller on the hotspot by simulating a click on the underlying shape...\n if ($gapList.find('.active').length > 0) {\n interactUtils.tapOn(element.node);\n\n // ... or removing the existing gapfiller\n } else {\n //update the element matching array\n element.data(\n 'matching',\n _.without(element.data('matching') || [], rElement.data('identifier'))\n );\n\n //delete interaction.gapFillers[interaction.gapFillers.indexOf(gapFiller)];\n interaction.gapFillers = _.without(interaction.gapFillers, gapFiller);\n\n gapFiller.remove();\n\n _unsetChoice(interaction, $active);\n\n containerHelper.triggerResponseChangeEvent(interaction);\n }\n });\n\n interaction.gapFillers.push(gapFiller);\n\n containerHelper.triggerResponseChangeEvent(interaction);\n }\n );\n }\n };\n\n /**\n * Render a choice (= hotspot) inside the paper.\n * Please note that the choice renderer isn't implemented separately because it relies on the Raphael paper instead of the DOM.\n *\n * @private\n * @param {Object} interaction\n * @param {Object} choice - the hotspot choice to add to the interaction\n */\n var _renderChoice = function _renderChoice(interaction, choice) {\n //create the shape\n var rElement = graphic\n .createElement(interaction.paper, choice.attr('shape'), choice.attr('coords'), {\n id: choice.serial,\n title: __('Select an image first'),\n hover: false\n })\n .data('max', choice.attr('matchMax'))\n .data('matching', []);\n\n interact(rElement.node).on('tap', function onClickShape() {\n handleShapeSelect();\n });\n\n if (isDragAndDropEnabled) {\n interact(rElement.node).dropzone({\n overlap: 0.15,\n ondragenter: function() {\n if (_isMatchable(rElement)) {\n graphic.setStyle(rElement, 'hover');\n activeDrop = rElement.node;\n }\n },\n ondrop: function() {\n if (_isMatchable(rElement)) {\n graphic.setStyle(rElement, 'selectable');\n handleShapeSelect();\n activeDrop = null;\n }\n },\n ondragleave: function() {\n if (_isMatchable(rElement)) {\n graphic.setStyle(rElement, 'selectable');\n activeDrop = null;\n }\n }\n });\n }\n\n function handleShapeSelect() {\n // check if can make the shape selectable on click\n if (_isMatchable(rElement) && rElement.selectable === true) {\n _selectShape(interaction, rElement);\n }\n }\n };\n\n var _iFrameDragFix = function _iFrameDragFix(draggableSelector, target) {\n interactUtils.iFrameDragFixOn(function() {\n if (activeDrop) {\n interact(activeDrop).fire({\n type: 'drop',\n target: activeDrop,\n relatedTarget: target\n });\n }\n interact(draggableSelector).fire({\n type: 'dragend',\n target: target\n });\n });\n };\n\n /**\n * Render the list of gap fillers\n * @private\n * @param {Object} interaction\n * @param {jQueryElement} $gapList - the list than contains the orderers\n */\n var _renderGapList = function _renderGapList(interaction, $gapList) {\n var gapFillersSelector = $gapList.selector + ' li';\n var dragOptions;\n var scaleX, scaleY;\n\n interact(gapFillersSelector).on('tap', function onClickGapImg(e) {\n e.stopPropagation();\n e.preventDefault();\n toggleActiveGapState($$1(e.currentTarget));\n });\n\n if (isDragAndDropEnabled) {\n dragOptions = {\n inertia: false,\n autoScroll: true,\n restrict: {\n restriction: '.qti-interaction',\n endOnly: false,\n elementRect: { top: 0, left: 0, bottom: 1, right: 1 }\n }\n };\n\n $$1(gapFillersSelector).each(function(index, gap) {\n interact(gap)\n .draggable(\n _.assign({}, dragOptions, {\n onstart: function(e) {\n var $target = $$1(e.target);\n var scale;\n _setActiveGapState($target);\n $target.addClass('dragged');\n\n _iFrameDragFix(gapFillersSelector, e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n },\n onmove: function(e) {\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n },\n onend: function(e) {\n _.defer( () => {\n var $target = $$1(e.target);\n _setInactiveGapState($target);\n $target.removeClass('dragged');\n interactUtils.restoreOriginalPosition($target);\n interactUtils.iFrameDragFixOff();\n });\n }\n })\n )\n .styleCursor(false);\n });\n }\n\n function toggleActiveGapState($target) {\n if (!$target.hasClass('disabled')) {\n if ($target.hasClass('active')) {\n _setInactiveGapState($target);\n } else {\n _setActiveGapState($target);\n }\n }\n }\n\n function _setActiveGapState($target) {\n $gapList.children('li').removeClass('active');\n $target.addClass('active');\n _shapesSelectable(interaction);\n }\n\n function _setInactiveGapState($target) {\n $target.removeClass('active');\n _shapesUnSelectable(interaction);\n }\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @return {Promise}\n */\n var render = function render(interaction) {\n var self = this;\n\n return new Promise(function(resolve) {\n var $container = containerHelper.get(interaction);\n var $gapList = $$1('ul.source', $container);\n var background = interaction.object.attributes;\n\n interaction.gapFillers = [];\n\n if (\n self.getOption &&\n self.getOption('enableDragAndDrop') &&\n self.getOption('enableDragAndDrop').graphicGapMatch\n ) {\n isDragAndDropEnabled = self.getOption('enableDragAndDrop').graphicGapMatch;\n }\n\n $container.off('resized.qti-widget.resolve').one('resized.qti-widget.resolve', resolve);\n\n //create the paper\n interaction.paper = graphic.responsivePaper('graphic-paper-' + interaction.serial, interaction.serial, {\n width: background.width,\n height: background.height,\n img: self.resolveUrl(background.data),\n imgId: 'bg-image-' + interaction.serial,\n container: $container,\n resize: function(newSize, factor) {\n $gapList.css('max-width', newSize + 'px');\n if (factor !== 1) {\n $gapList.find('img').each(function() {\n var $img = $$1(this);\n $img.width($img.attr('width') * factor);\n $img.height($img.attr('height') * factor);\n });\n }\n }\n });\n\n //call render choice for each interaction's choices\n _.forEach(interaction.getChoices(), _.partial(_renderChoice, interaction));\n\n //create the list of gap images\n _renderGapList(interaction, $gapList);\n\n //clicking the paper to reset selection\n _paperUnSelect(interaction);\n });\n };\n\n /**\n * Get the responses from the interaction\n * @private\n * @param {Object} interaction\n * @returns {Array} of matches\n */\n var _getRawResponse = function _getRawResponse(interaction) {\n var pairs = [];\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element && _.isArray(element.data('matching'))) {\n _.forEach(element.data('matching'), function(gapImg) {\n //backward support of previous order\n if (isDirectedPairFlipped) {\n pairs.push([choice.id(), gapImg]);\n } else {\n pairs.push([gapImg, choice.id()]);\n }\n });\n }\n });\n return _.sortBy(pairs, [0, 1]);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var $container = containerHelper.get(interaction);\n var responseValues;\n if (response && interaction.paper) {\n try {\n responseValues = pciResponse.unserialize(response, interaction);\n } catch (e) {\n responseValues = null;\n }\n\n if (_.isArray(responseValues)) {\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n _.forEach(responseValues, function(pair) {\n var responseChoice;\n var responseGap;\n if (pair.length === 2) {\n //backward support of previous order\n responseChoice = isDirectedPairFlipped ? pair[0] : pair[1];\n responseGap = isDirectedPairFlipped ? pair[1] : pair[0];\n if (responseChoice === choice.id()) {\n $$1('[data-identifier=\"' + responseGap + '\"]', $container).addClass('active');\n _selectShape(interaction, element);\n }\n }\n });\n }\n });\n }\n }\n };\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n */\n var resetResponse = function resetResponse(interaction) {\n _shapesUnSelectable(interaction);\n\n _.forEach(interaction.gapFillers, function(gapFiller) {\n interactUtils.tapOn(gapFiller.items[2][0]); // this refers to the gapFiller image\n });\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n var raw = _getRawResponse(interaction);\n return pciResponse.serialize(raw, interaction);\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container;\n if (interaction.paper) {\n $container = containerHelper.get(interaction);\n\n $$1(window).off('resize.qti-widget.' + interaction.serial);\n $container.off('resize.qti-widget.' + interaction.serial);\n\n interaction.paper.clear();\n instructionMgr.removeInstructions(interaction);\n\n $$1('.main-image-box', $container)\n .empty()\n .removeAttr('style');\n $$1('.image-editor', $container).removeAttr('style');\n $$1('ul', $container).empty();\n\n interact($container.find('ul.source li').selector).unset(); // gapfillers\n interact($container.find('.main-image-box rect').selector).unset(); // choices/hotspot\n }\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the hotspot interaction\n * @exports qtiCommonRenderer/renderers/interactions/HotspotInteraction\n */\n var GraphicGapMatchInteraction = {\n qtiClass: 'graphicGapMatchInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState,\n isDirectedPairFlipped: isDirectedPairFlipped\n };\n\n return GraphicGapMatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicOrderInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/Graphic', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager'], function ($$1, _, __, Handlebars, DOMPurify, graphic, pciResponse, containerHelper, instructionMgr) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n graphic = graphic && Object.prototype.hasOwnProperty.call(graphic, 'default') ? graphic['default'] : graphic;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-graphicInteraction qti-graphicOrderInteraction clearfix\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"image-editor solid\\\">\\n <div id='graphic-paper-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"' class=\\\"main-image-box\\\"></div>\\n <div class=\\\"clearfix\\\"></div>\\n <ul class=\\\"none block-listing horizontal ordinals\\\"></ul>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n */\n var render = function render(interaction) {\n var self = this;\n\n return new Promise(function(resolve, reject) {\n var $container = containerHelper.get(interaction);\n var $orderList = $$1('ul', $container);\n var background = interaction.object.attributes;\n\n $container.off('resized.qti-widget.resolve').one('resized.qti-widget.resolve', resolve);\n\n //create the paper\n interaction.paper = graphic.responsivePaper('graphic-paper-' + interaction.serial, interaction.serial, {\n width: background.width,\n height: background.height,\n img: self.resolveUrl(background.data),\n imgId: 'bg-image-' + interaction.serial,\n container: $container\n });\n\n //create the list of number to order\n _renderOrderList(interaction, $orderList);\n\n //call render choice for each interaction's choices\n _.forEach(interaction.getChoices(), _.partial(_renderChoice, interaction, $orderList));\n\n //set up the constraints instructions\n instructionMgr.minMaxChoiceInstructions(interaction, {\n min: interaction.attr('minChoices'),\n max: interaction.attr('maxChoices'),\n getResponse: _getRawResponse,\n onError: function(data) {\n graphic.highlightError(data.target);\n }\n });\n });\n };\n\n /**\n * Render a choice inside the paper.\n * Please note that the choice renderer isn't implemented separately because it relies on the Raphael paper instead of the DOM.\n * @private\n * @param {Object} interaction\n * @param {jQueryElement} $orderList - the list than contains the orderers\n * @param {Object} choice - the hotspot choice to add to the interaction\n */\n var _renderChoice = function _renderChoice(interaction, $orderList, choice) {\n var rElement = graphic\n .createElement(interaction.paper, choice.attr('shape'), choice.attr('coords'), {\n id: choice.serial,\n title: __('Select this area')\n })\n .click(function(e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if (\n $$1(e.currentTarget)\n .closest('.qti-item')\n .hasClass('prevent-click-handler')\n ) {\n return;\n }\n if (this.active) {\n _unselectShape(interaction.paper, this, $orderList);\n } else {\n _selectShape(interaction.paper, this, $orderList);\n }\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction, { choice: choice });\n });\n };\n\n /**\n * Render the list of numbers\n * @private\n * @param {Object} interaction\n * @param {jQueryElement} $orderList - the list than contains the orderers\n */\n var _renderOrderList = function _renderOrderList(interaction, $orderList) {\n var $orderers;\n var size = _.size(interaction.getChoices());\n var min = interaction.attr('minChoices');\n var max = interaction.attr('maxChoices');\n\n //calculate the number of orderer to display\n if (max > 0 && max <= size) {\n size = max;\n } else if (min > 0 && min <= size) {\n size = min;\n }\n\n //add them to the list\n _.times(size, function(index) {\n var position = index + 1;\n var $orderer = $$1('<li class=\"selectable\" data-number=\"' + position + '\">' + position + '</li>');\n if (index === 0) {\n $orderer.addClass('active');\n }\n $orderList.append($orderer);\n });\n\n //create related svg texts\n _createTexts(interaction.paper, size);\n\n //bind the activation event\n $orderers = $orderList.children('li');\n $orderers.click(function(e) {\n e.preventDefault();\n var $orderer = $$1(this);\n\n if (!$orderer.hasClass('active') && !$orderer.hasClass('disabled')) {\n $orderers.removeClass('active');\n $orderer.addClass('active');\n }\n });\n };\n\n /**\n * Select a shape to position an order\n * @private\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {Raphael.element} element - the selected shape\n * @param {jQueryElement} $orderList - the list than contains the orderers\n */\n var _selectShape = function _selectShape(paper, element, $orderList) {\n //lookup for the active number\n var $active = $orderList.find('.active:first');\n if ($active.length && $active.data('number') > 0) {\n //associate the current number directly to the element\n element.data('number', $active.data('number'));\n element.active = true;\n _showText(paper, element);\n graphic.updateElementState(element, 'active');\n\n //update the state of the order list\n $active\n .toggleClass('active disabled')\n .siblings(':not(.disabled)')\n .first()\n .toggleClass('active');\n }\n };\n\n /**\n * Unselect a shape to free the position\n * @private\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {Raphael.element} element - the unselected shape\n * @param {jQueryElement} $orderList - the list than contains the orderers\n */\n var _unselectShape = function _unselectShape(paper, element, $orderList) {\n var number = element.data('number');\n\n //update element state\n element.active = false;\n _hideText(paper, element);\n element.removeData('number');\n graphic.updateElementState(element, 'basic');\n\n //reset order list state and activate the removed number\n $orderList\n .children()\n .removeClass('active')\n .filter('[data-number=' + number + ']')\n .removeClass('disabled')\n .addClass('active');\n };\n\n /**\n * Creates ALL the texts (the numbers to display in the shapes). They are created styled but hidden.\n *\n * @private\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {Number} size - the number of numbers to create...\n * @param {jQueryElement} $orderList - the list than contains the orderers\n * @return {Array} the creates text element\n */\n var _createTexts = function _createTexts(paper, size) {\n var texts = [];\n _.times(size, function(index) {\n var number = index + 1;\n var text = graphic.createText(paper, {\n id: 'text-' + number,\n content: number,\n title: __('Remove'),\n style: 'order-text',\n hide: true\n });\n\n //clicking the text will has the same effect that clicking the shape: unselect.\n text.click(function() {\n paper.forEach(function(element) {\n if (element.data('number') === number && element.events) {\n //we just need to retrieve the right element\n //call the click event\n var evt = _.where(element.events, { name: 'click' });\n if (evt.length && evt[0] && typeof evt[0].f === 'function') {\n evt[0].f.call(element);\n }\n }\n });\n });\n texts.push(text);\n });\n return texts;\n };\n\n /**\n * Show the text that match the element's number.\n * We need to display it at the center of the shape.\n * @private\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {Raphael.Element} element - the element to show the text for\n */\n var _showText = function _showText(paper, element) {\n var bbox = element.getBBox();\n var transf;\n\n //we retrieve the good text from it's id\n var text = paper.getById('text-' + element.data('number'));\n if (text) {\n //move it to the center of the shape (using absolute transform), and than display it\n transf = 'T' + (bbox.x + bbox.width / 2) + ',' + (bbox.y + bbox.height / 2);\n text.transform(transf)\n .show()\n .toFront();\n }\n };\n\n /**\n * Hide an element text.\n * @private\n * @param {Raphael.Paper} paper - the interaction paper\n * @param {Raphael.Element} element - the element to hide the text for\n */\n var _hideText = function _hideText(paper, element) {\n var text = paper.getById('text-' + element.data('number'));\n if (text) {\n text.hide();\n }\n };\n\n /**\n * Get the responses from the interaction\n * @private\n * @param {Object} interaction\n * @returns {Array} of points\n */\n var _getRawResponse = function _getRawResponse(interaction) {\n var response = [];\n _.forEach(interaction.getChoices(), function(choice) {\n var elt = interaction.paper.getById(choice.serial);\n if (elt && elt.data('number')) {\n response.push({\n index: elt.data('number'),\n id: choice.id()\n });\n }\n });\n return _(response)\n .sortBy('index')\n .map('id')\n .value();\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var responseValues;\n var $container = containerHelper.get(interaction);\n var $orderList = $$1('ul', $container);\n if (response && interaction.paper) {\n try {\n //try to unserualize tthe pci response\n responseValues = pciResponse.unserialize(response, interaction);\n } catch (e) {}\n\n if (_.isArray(responseValues)) {\n _.forEach(responseValues, function(responseValue, index) {\n var element;\n var number = index + 1;\n\n //get the choice that match the response\n var choice = _(interaction.getChoices())\n .where({ attributes: { identifier: responseValue } })\n .first();\n if (choice) {\n element = interaction.paper.getById(choice.serial);\n if (element) {\n //activate the orderer to be consistant\n $orderList.children('[data-number=' + number + ']').addClass('active');\n\n //select the related shape\n _selectShape(interaction.paper, element, $orderList);\n }\n }\n });\n }\n }\n };\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var resetResponse = function resetResponse(interaction) {\n var $container = containerHelper.get(interaction);\n var $orderList = $$1('ul', $container);\n\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n _unselectShape(interaction.paper, element, $orderList);\n }\n });\n\n $orderList\n .children('li')\n .removeClass('active disabled')\n .first()\n .addClass('active');\n };\n\n /**\n i* Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container;\n if (interaction.paper) {\n $container = containerHelper.get(interaction);\n\n $$1(window).off('resize.qti-widget.' + interaction.serial);\n $container.off('resize.qti-widget.' + interaction.serial);\n\n interaction.paper.clear();\n instructionMgr.removeInstructions(interaction);\n\n $$1('.main-image-box', $container)\n .empty()\n .removeAttr('style');\n $$1('.image-editor', $container).removeAttr('style');\n $$1('ul', $container).empty();\n }\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the interaction\n * @exports qtiCommonRenderer/renderers/interactions/SelectPointInteraction\n */\n var GraphicOrderInteraction = {\n qtiClass: 'graphicOrderInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return GraphicOrderInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/HotspotInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/Graphic', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager'], function ($$1, _, __, Handlebars, DOMPurify, graphic, pciResponse, containerHelper, instructionMgr) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n graphic = graphic && Object.prototype.hasOwnProperty.call(graphic, 'default') ? graphic['default'] : graphic;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-graphicInteraction qti-hotspotInteraction clearfix\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"image-editor solid\\\">\\n <div id='graphic-paper-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"' class=\\\"main-image-box\\\"></div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n */\n var render = function render(interaction) {\n var self = this;\n\n return new Promise(function(resolve, reject) {\n var $container = containerHelper.get(interaction);\n var background = interaction.object.attributes;\n\n $container.off('resized.qti-widget.resolve').one('resized.qti-widget.resolve', resolve);\n\n interaction.paper = graphic.responsivePaper('graphic-paper-' + interaction.serial, interaction.serial, {\n width: background.width,\n height: background.height,\n img: self.resolveUrl(background.data),\n container: $container\n });\n\n //call render choice for each interaction's choices\n _.forEach(interaction.getChoices(), _.partial(_renderChoice, interaction));\n\n //set up the constraints instructions\n instructionMgr.minMaxChoiceInstructions(interaction, {\n min: interaction.attr('minChoices'),\n max: interaction.attr('maxChoices'),\n getResponse: _getRawResponse,\n onError: function(data) {\n if (data.target.active) {\n data.target.active = false;\n graphic.updateElementState(this, 'basic', __('Select this area'));\n graphic.highlightError(data.target);\n containerHelper.triggerResponseChangeEvent(interaction);\n $container.trigger('inactiveChoice.qti-widget', [data.choice, data.target]);\n }\n }\n });\n });\n };\n\n /**\n * Render a choice inside the paper.\n * Please note that the choice renderer isn't implemented separately because it relies on the Raphael paper instead of the DOM.\n * @param {Paper} paper - the raphael paper to add the choices to\n * @param {Object} interaction\n * @param {Object} choice - the hotspot choice to add to the interaction\n */\n var _renderChoice = function _renderChoice(interaction, choice) {\n var $container = containerHelper.get(interaction);\n var rElement = graphic\n .createElement(interaction.paper, choice.attr('shape'), choice.attr('coords'), {\n id: choice.serial,\n title: __('Select this area')\n })\n .click(function() {\n if (this.active) {\n graphic.updateElementState(this, 'basic', __('Select this area'));\n this.active = false;\n $container.trigger('inactiveChoice.qti-widget', [choice, this]);\n } else {\n graphic.updateElementState(this, 'active', __('Click again to remove'));\n this.active = true;\n $container.trigger('activeChoice.qti-widget', [choice, this]);\n }\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction, { choice: choice, target: this });\n });\n };\n\n /**\n * Get the response from the interaction\n * @private\n * @param {Object} interaction\n * @returns {Array} the response in raw format\n */\n var _getRawResponse = function _getRawResponse(interaction) {\n return _(interaction.getChoices())\n .map(function(choice) {\n var rElement = interaction.paper.getById(choice.serial);\n return rElement && rElement.active === true ? choice.id() : false;\n })\n .filter(_.isString)\n .value();\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var responseValues;\n if (response && interaction.paper) {\n try {\n responseValues = pciResponse.unserialize(response, interaction);\n } catch (e) {}\n\n if (_.isArray(responseValues)) {\n _.forEach(interaction.getChoices(), function(choice) {\n var rElement;\n if (_.contains(responseValues, choice.attributes.identifier)) {\n rElement = interaction.paper.getById(choice.serial);\n if (rElement) {\n rElement.active = true;\n graphic.updateElementState(rElement, 'active', __('Click again to remove'));\n instructionMgr.validateInstructions(interaction, { choice: choice, target: rElement });\n }\n }\n });\n }\n }\n };\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var resetResponse = function resetResponse(interaction) {\n _.forEach(interaction.getChoices(), function(choice) {\n var element = interaction.paper.getById(choice.serial);\n if (element) {\n element.active = false;\n graphic.updateElementState(element, 'basic');\n }\n });\n instructionMgr.resetInstructions(interaction);\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n var raw = _getRawResponse(interaction);\n var response = pciResponse.serialize(_getRawResponse(interaction), interaction);\n return response;\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container;\n if (interaction.paper) {\n $container = containerHelper.get(interaction);\n\n $$1(window).off('resize.qti-widget.' + interaction.serial);\n $container.off('resize.qti-widget.' + interaction.serial);\n\n interaction.paper.clear();\n instructionMgr.removeInstructions(interaction);\n\n $$1('.main-image-box', $container)\n .empty()\n .removeAttr('style');\n $$1('.image-editor', $container).removeAttr('style');\n }\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the hotspot interaction\n * @exports qtiCommonRenderer/renderers/interactions/HotspotInteraction\n */\n var HotspotInteraction = {\n qtiClass: 'hotspotInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return HotspotInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/HottextInteraction',['jquery', 'lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse'], function ($$1, _, Handlebars, __, DOMPurify, containerHelper, instructionMgr, pciResponse) { '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 __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-hottextInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"hottextInteraction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"qti-flow-container\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * 'pseudo-label' is technically a div that behaves like a label.\n * This allows the usage of block elements inside the fake label\n */\n var pseudoLabel = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n var setChoice = function($choice, interaction) {\n var $inupt = $choice.find('input');\n\n if ($inupt.prop('checked') || $inupt.hasClass('disabled')) {\n $inupt.prop('checked', false);\n } else {\n var maxChoices = parseInt(interaction.attr('maxChoices'));\n var currentChoices = _.values(_getRawResponse(interaction)).length;\n\n if (currentChoices < maxChoices || maxChoices === 0) {\n $inupt.prop('checked', true);\n }\n }\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction, { choice: $choice });\n };\n\n $$1('.hottext', $container).on('click', function(e) {\n e.preventDefault();\n setChoice($$1(this), interaction);\n });\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10278\n *\n * @param {object} interaction\n */\n var render = function(interaction) {\n pseudoLabel(interaction);\n\n //set up the constraints instructions\n instructionMgr.minMaxChoiceInstructions(interaction, {\n min: interaction.attr('minChoices'),\n max: interaction.attr('maxChoices'),\n getResponse: _getRawResponse,\n onError: function(data) {\n var $input, $choice, $icon;\n if (data.choice && data.choice.length) {\n $choice = data.choice.addClass('error');\n $input = $choice.find('input');\n $icon = $choice.find(' > label > span').addClass('error cross');\n\n setTimeout(function() {\n $input.prop('checked', false);\n $choice.removeClass('error');\n $icon.removeClass('error cross');\n }, 350);\n }\n }\n });\n };\n\n var resetResponse = function(interaction) {\n var $container = containerHelper.get(interaction);\n $$1('input', $container).prop('checked', false);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var $container = containerHelper.get(interaction);\n\n try {\n _.each(pciResponse.unserialize(response, interaction), function(identifier) {\n $container.find('input[value=\"' + identifier + '\"]').prop('checked', true);\n });\n instructionMgr.validateInstructions(interaction);\n } catch (e) {\n throw new Error('wrong response format in argument : ' + e);\n }\n };\n\n var _getRawResponse = function(interaction) {\n var values = [];\n var $container = containerHelper.get(interaction);\n $$1('input:checked', $container).each(function() {\n values.push($$1(this).val());\n });\n return values;\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container = containerHelper.get(interaction);\n\n //restore selected choices:\n $container.find('.hottext').off('click');\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n var HottextInteraction = {\n qtiClass: 'hottextInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return HottextInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'ui/tooltip', 'select2'], function ($$1, _, __, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse, tooltip, select2) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<select \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-inlineInteraction qti-inlineChoiceInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"inlineChoiceInteraction\\\"\\n data-has-search=\\\"false\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <option></option> \\n <option value=\\\"empty\\\"></option>\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data};\n if (helper = helpers.choices) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.choices); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.choices) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</select>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * The value of the \"empty\" option\n * @type String\n */\n var _emptyValue = 'empty';\n\n var _defaultOptions = {\n allowEmpty: true,\n placeholderText: __('select a choice')\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n */\n var render = function(interaction, options) {\n var opts = _.clone(_defaultOptions);\n var required = !!interaction.attr('required');\n var choiceTooltip;\n var $container = containerHelper.get(interaction);\n\n _.extend(opts, options);\n\n if (opts.allowEmpty && !required) {\n $container.find('option[value=' + _emptyValue + ']').text('--- ' + __('leave empty') + ' ---');\n } else {\n $container.find('option[value=' + _emptyValue + ']').remove();\n }\n\n $container.select2({\n width: 'element',\n placeholder: opts.placeholderText,\n minimumResultsForSearch: -1,\n dropdownCssClass: 'qti-inlineChoiceInteraction-dropdown'\n });\n\n var $el = $container.select2('container');\n\n if (required) {\n //set up the tooltip plugin for the input\n choiceTooltip = tooltip.warning($el, __('A choice must be selected'));\n\n if ($container.val() === '') {\n choiceTooltip.show();\n }\n }\n\n $container\n .on('change', function(e) {\n //if tts component is loaded and click-to-speak function is activated - we must fix the situation when select2 prevents tts from working\n //for this a \"one-moment\" handler of option click is added and removed after event fired\n if (\n $$1(e.currentTarget)\n .closest('.qti-item')\n .hasClass('prevent-click-handler')\n ) {\n var $selectedIndex = $$1(e.currentTarget)[0].options.selectedIndex\n ? $$1(e.currentTarget)[0].options.selectedIndex\n : null;\n $container.find('option').one('click', function(e) {\n e.stopPropagation();\n });\n $container\n .find('option')\n .eq($selectedIndex)\n .trigger('click');\n }\n\n if (required && $container.val() !== '') {\n choiceTooltip.hide();\n }\n\n containerHelper.triggerResponseChangeEvent(interaction);\n })\n .on('select2-open', function() {\n if (required) {\n choiceTooltip.hide();\n }\n })\n .on('select2-close', function() {\n if (required && $container.val() === '') {\n choiceTooltip.show();\n }\n });\n };\n\n var resetResponse = function(interaction) {\n _setVal(interaction, _emptyValue);\n };\n\n var _setVal = function(interaction, choiceIdentifier) {\n containerHelper\n .get(interaction)\n .val(choiceIdentifier)\n .select2('val', choiceIdentifier);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n _setVal(interaction, pciResponse.unserialize(response, interaction)[0]);\n };\n\n var _getRawResponse = function(interaction) {\n var value = containerHelper.get(interaction).val();\n return value && value !== _emptyValue ? [value] : [];\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n //remove event\n $$1(document).off('.commonRenderer');\n\n $container.select2('destroy');\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n var $container;\n\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === _.size(interaction.getChoices())) {\n $container = containerHelper.get(interaction);\n\n //just in case the dropdown is opened\n $container.select2('disable').select2('close');\n\n $$1('option[data-identifier]', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order, $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order, $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($container);\n\n $container.select2('enable');\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var $container;\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n $container = containerHelper.get(interaction);\n\n state.order = [];\n $$1('option[data-identifier]', $container).each(function() {\n state.order.push($$1(this).data('identifier'));\n });\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the inline choice interaction\n * @exports qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction\n */\n var InlineChoiceInteraction = {\n qtiClass: 'inlineChoiceInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return InlineChoiceInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/MatchInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse'], function ($$1, _, __, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program9(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program11(depth0,data,depth1) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n <tr>\\n \";\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers.each.call(depth0, (depth1 && depth1.matchSet1), {hash:{},inverse:self.noop,fn:self.program(12, program12, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </tr>\\n \";\n return buffer;\n }\n function program12(depth0,data) {\n \n \n return \"\\n <td>\\n <label>\\n <input type=\\\"checkbox\\\" >\\n <span class=\\\"icon-checkbox cross\\\"></span>\\n </label>\\n </td>\\n \";\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-matchInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"matchInteraction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"match-interaction-area\\\">\\n <table class=\\\"matrix\\\">\\n <thead>\\n <tr>\\n <th> </th>\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data};\n if (helper = helpers.matchSet1) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.matchSet1); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.matchSet1) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </tr>\\n </thead>\\n <tbody>\\n \";\n options={hash:{},inverse:self.noop,fn:self.programWithDepth(11, program11, data, depth0),data:data};\n if (helper = helpers.matchSet2) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.matchSet2); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.matchSet2) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.programWithDepth(11, program11, data, depth0),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </tbody>\\n </table>\\n </div>\\n <div class=\\\"notification-container\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * TODO do not use global context var, it's value is shared between interaction instances\n *\n * Flag to not throw warning instruction if already\n * displaying the warning. If such a flag is not used,\n * disturbances can be seen by the candidate if he clicks\n * like hell on choices.\n */\n var inWarning = false;\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {object} interaction\n */\n var render = function(interaction) {\n var $container = containerHelper.get(interaction);\n\n // Initialize instructions system.\n _setInstructions(interaction);\n\n $container.on('click.commonRenderer', 'input[type=checkbox]', function(e) {\n _onCheckboxSelected(interaction, e);\n });\n\n instructionMgr.validateInstructions(interaction);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n var $container = containerHelper.get(interaction);\n response = _filterResponse(response);\n\n if (typeof response.list !== 'undefined' && typeof response.list.directedPair !== 'undefined') {\n _(response.list.directedPair).forEach(function(directedPair) {\n var x = $$1('th[data-identifier=\"' + directedPair[0] + '\"]', $container).index() - 1;\n var y = $$1('th[data-identifier=\"' + directedPair[1] + '\"]', $container)\n .parent()\n .index();\n\n $$1('.matrix > tbody tr', $container)\n .eq(y)\n .find('input[type=checkbox]')\n .eq(x)\n .prop('checked', true);\n });\n }\n\n instructionMgr.validateInstructions(interaction);\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10296\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function(interaction) {\n var response = pciResponse.serialize(_getRawResponse(interaction), interaction);\n return response;\n };\n\n var resetResponse = function(interaction) {\n var $container = containerHelper.get(interaction);\n $$1('input[type=checkbox]:checked', $container).each(function() {\n $$1(this).prop('checked', false);\n });\n\n instructionMgr.validateInstructions(interaction);\n };\n\n var _filterResponse = function(response) {\n if (typeof response.list === 'undefined') {\n // Maybe it's a base?\n if (typeof response.base === 'undefined') {\n // Oops, it is even not a base.\n throw 'The given response is not compliant with PCI JSON representation.';\n } else {\n // It's a base, Is it a directedPair? Null?\n if (response.base === null) {\n return { list: { directedPair: [] } };\n } else if (typeof response.base.directedPair === 'undefined') {\n // Oops again, it is not a directedPair.\n throw 'The matchInteraction only accepts directedPair values as responses.';\n } else {\n return { list: { directedPair: [response.base.directedPair] } };\n }\n }\n } else if (typeof response.list.directedPair === 'undefined') {\n // Oops, not a directedPair.\n throw 'The matchInteraction only accept directedPair values as responses.';\n } else {\n return response;\n }\n };\n\n var _getRawResponse = function(interaction) {\n var $container = containerHelper.get(interaction);\n var values = [];\n\n $container.find('input[type=checkbox]:checked').each(function() {\n values.push(_inferValue(this));\n });\n\n return values;\n };\n\n var _inferValue = function(element) {\n var $element = $$1(element);\n var $container = $element.closest('.match-interaction-area');\n var y = $element.closest('tr').index();\n var x = $element.closest('td').index();\n var firstId = $$1('.matrix > thead th', $container)\n .eq(x)\n .data('identifier');\n var secondId = $$1('.matrix > tbody th', $container)\n .eq(y)\n .data('identifier');\n return [firstId, secondId];\n };\n\n var _onCheckboxSelected = function(interaction, e) {\n var choice;\n var currentResponse = _getRawResponse(interaction);\n var minAssociations = interaction.attr('minAssociations');\n var maxAssociations = interaction.attr('maxAssociations');\n\n if (maxAssociations === 0) {\n maxAssociations = _countChoices(interaction);\n }\n\n if (_.size(currentResponse) > maxAssociations) {\n // No more associations possible.\n e.preventDefault();\n instructionMgr.validateInstructions(interaction);\n } else if ((choice = _maxMatchReached(interaction, e.target)) !== false) {\n // Check if matchmax is respected for both choices\n // involved in the selection.\n e.preventDefault();\n instructionMgr.validateInstructions(interaction, choice);\n } else {\n containerHelper.triggerResponseChangeEvent(interaction, {});\n instructionMgr.validateInstructions(interaction);\n }\n };\n\n var _maxMatchReached = function(interaction, input) {\n var association = _inferValue(input);\n var overflow = false;\n\n _(association).forEach(function(identifier) {\n var choice = _getChoiceDefinitionByIdentifier(interaction, identifier);\n var matchMin = choice.attributes.matchMin;\n var matchMax = choice.attributes.matchMax;\n var assoc = _countAssociations(interaction, choice);\n\n if (matchMax > 0 && assoc > matchMax) {\n overflow = choice;\n }\n });\n\n return overflow;\n };\n\n var _countAssociations = function(interaction, choice) {\n var rawResponse = _getRawResponse(interaction);\n var count = 0;\n\n // How much time can we find rawChoice in rawResponses?\n _(rawResponse).forEach(function(response) {\n if (response[0] === choice.attributes.identifier || response[1] === choice.attributes.identifier) {\n count++;\n }\n });\n\n return count;\n };\n\n var _countChoices = function(interaction) {\n var $container = containerHelper.get(interaction);\n return $container.find('input[type=checkbox]').length;\n };\n\n var _getChoiceDefinitionByIdentifier = function(interaction, identifier) {\n var rawChoices = _getRawChoices(interaction);\n return rawChoices[identifier];\n };\n\n var _getRawChoices = function(interaction) {\n var rawChoices = {};\n\n _(interaction.choices).forEach(function(matchset) {\n _(matchset).forEach(function(choice) {\n rawChoices[choice.attributes.identifier] = choice;\n });\n });\n\n return rawChoices;\n };\n\n var _setInstructions = function(interaction) {\n var msg;\n var minAssociations = interaction.attr('minAssociations');\n var maxAssociations = interaction.attr('maxAssociations');\n var choiceCount = _countChoices(interaction);\n\n // Super closure is here again to save our souls! Houray!\n // ~~~~~~~ |==||||0__\n\n var superClosure = function() {\n var onMaxChoicesReached = function(report, msg) {\n if (inWarning === false) {\n inWarning = true;\n\n report.update({\n level: 'warning',\n message: __('Maximum number of choices reached.'),\n timeout: 2000,\n stop: function() {\n report.update({ level: 'success', message: msg });\n inWarning = false;\n }\n });\n }\n };\n\n var onMatchMaxReached = function(interaction, choice, report, msg, level) {\n var $container = containerHelper.get(interaction);\n\n if (inWarning === false) {\n inWarning = true;\n\n var $choice = $container.find(\n '.qti-simpleAssociableChoice[data-identifier=\"' + choice.attributes.identifier + '\"]'\n );\n var originalBackgroundColor = $choice.css('background-color');\n var originalColor = $choice.css('color');\n\n report.update({\n level: 'warning',\n message: __('The highlighted choice cannot be associated more than %d time(s).').replace(\n '%d',\n choice.attributes.matchMax\n ),\n timeout: 3000,\n start: function() {\n $choice.animate(\n {\n backgroundColor: '#fff',\n color: '#ba122b'\n },\n 250,\n function() {\n $choice.animate(\n {\n backgroundColor: '#ba122b',\n color: '#fff'\n },\n 250\n );\n }\n );\n },\n stop: function() {\n $choice.animate(\n {\n backgroundColor: originalBackgroundColor,\n color: originalColor\n },\n 500\n );\n report.update({ level: level, message: msg });\n inWarning = false;\n }\n });\n }\n };\n\n if (minAssociations === 0 && maxAssociations > 0) {\n // No minimum but maximum.\n msg = __('You must select 0 to %d choices.').replace('%d', maxAssociations);\n\n instructionMgr.appendInstruction(interaction, msg, function(choice) {\n var responseCount = _.size(_getRawResponse(interaction));\n\n if (\n choice &&\n choice.attributes &&\n choice.attributes.matchMax > 0 &&\n _countAssociations(interaction, choice) > choice.attributes.matchMax\n ) {\n onMatchMaxReached(interaction, choice, this, msg, this.getLevel());\n } else if (responseCount <= maxAssociations) {\n this.setLevel('success');\n } else if (responseCount > maxAssociations) {\n onMaxChoicesReached(this, msg);\n } else {\n this.reset();\n }\n });\n } else if (minAssociations === 0 && maxAssociations === 0) {\n // No minimum, no maximum.\n msg = __('You must select 0 to %d choices.').replace('%d', choiceCount);\n\n instructionMgr.appendInstruction(interaction, msg, function(choice) {\n if (\n choice &&\n choice.attributes &&\n choice.attributes.matchMax > 0 &&\n _countAssociations(interaction, choice) > choice.attributes.matchMax\n ) {\n onMatchMaxReached(interaction, choice, this, msg, this.getLevel());\n } else {\n this.setLevel('success');\n }\n });\n } else if (minAssociations > 0 && maxAssociations === 0) {\n // minimum but no maximum.\n msg = __('You must select %1$d to %2$d choices.');\n msg = msg.replace('%1$d', minAssociations);\n msg = msg.replace('%2$d', choiceCount);\n\n instructionMgr.appendInstruction(interaction, msg, function(choice) {\n var responseCount = _.size(_getRawResponse(interaction));\n\n if (\n choice &&\n choice.attributes &&\n choice.attributes.matchMax > 0 &&\n _countAssociations(interaction, choice) > choice.attributes.matchMax\n ) {\n onMatchMaxReached(interaction, choice, this, msg, this.getLevel());\n } else if (responseCount < minAssociations) {\n this.setLevel('info');\n } else if (responseCount > choiceCount) {\n onMaxChoicesReached(this, msg);\n } else {\n this.setLevel('success');\n }\n });\n } else if (minAssociations > 0 && maxAssociations > 0) {\n // minimum and maximum.\n if (minAssociations !== maxAssociations) {\n msg = __('You must select %1$d to %2$d choices.');\n msg = msg.replace('%1$d', minAssociations);\n msg = msg.replace('%2$d', maxAssociations);\n } else {\n msg = __('You must select exactly %d choice(s).');\n msg = msg.replace('%d', minAssociations);\n }\n\n instructionMgr.appendInstruction(interaction, msg, function(choice) {\n var responseCount = _.size(_getRawResponse(interaction));\n\n if (\n choice &&\n choice.attributes &&\n choice.attributes.matchMax > 0 &&\n _countAssociations(interaction, choice) > choice.attributes.matchMax\n ) {\n onMatchMaxReached(interaction, choice, this, msg, this.getLevel());\n } else if (responseCount < minAssociations) {\n this.setLevel('info');\n } else if (responseCount > maxAssociations) {\n onMaxChoicesReached(this, msg);\n } else if (responseCount >= minAssociations && responseCount <= maxAssociations) {\n this.setLevel('success');\n }\n });\n }\n };\n\n superClosure();\n };\n\n var destroy = function(interaction) {\n var $container = containerHelper.get(interaction);\n $container.off('.commonRenderer');\n\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n var $container;\n\n if (_.isObject(state)) {\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === 2) {\n $container = containerHelper.get(interaction);\n\n $$1('thead .qti-choice', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order[0], $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order[0], $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($$1('thead tr', $container));\n\n $$1('tbody .qti-choice', $container)\n .sort(function(a, b) {\n var aIndex = _.indexOf(state.order[1], $$1(a).data('identifier'));\n var bIndex = _.indexOf(state.order[1], $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .each(function(index, elt) {\n $$1(elt).prependTo($$1('tbody tr', $container).eq(index));\n });\n }\n\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var $container;\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n $container = containerHelper.get(interaction);\n\n state.order = [[], []];\n $$1('thead .qti-choice', $container).each(function() {\n state.order[0].push($$1(this).data('identifier'));\n });\n $$1('tbody .qti-choice', $container).each(function() {\n state.order[1].push($$1(this).data('identifier'));\n });\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the match interaction\n * @exports qtiCommonRenderer/renderers/interactions/MatchInteraction\n */\n var MatchInteraction = {\n qtiClass: 'matchInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState,\n inferValue: _inferValue\n };\n\n return MatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/MediaInteraction',['jquery', 'lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'ui/mediaplayer'], function ($$1, _, Handlebars, __, DOMPurify, pciResponse, containerHelper, mediaplayer) { '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 __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n mediaplayer = mediaplayer && Object.prototype.hasOwnProperty.call(mediaplayer, 'default') ? mediaplayer['default'] : mediaplayer;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-mediaInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"media-container\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function template(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) 2014-2018 (original work) Open Assessment Technlogies SA\n *\n */\n\n const qtiClass = 'mediaInteraction';\n const getContainer = containerHelper.get;\n\n //some default values\n const defaults = {\n type: 'video/mp4'\n };\n\n //some patterns to match context in which disable the media preview\n const reWebM = /.*\\.webm/i;\n const reFirefoxVersion = /firefox\\/([0-9]+\\.*[0-9]*)/i;\n\n /**\n * Checks if a media can be previewed safely\n * @param {String} type - The type of media\n * @param {String} url - The URL to the media\n * @returns {Boolean}\n */\n function canPreviewMedia(type, url) {\n const firefox = reFirefoxVersion.exec(navigator.userAgent);\n const webm = reWebM.test(url);\n return !(webm && firefox && parseFloat(firefox[1]) >= 87);\n }\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10391\n *\n * @param {Object} interaction\n * @fires playerrendered when the player is at least rendered\n * @fires playerready when the player is sucessfully loaded and configured\n * @returns {Promise}\n */\n function render(interaction) {\n return new Promise(resolve => {\n const $container = getContainer(interaction);\n const media = interaction.object;\n const $item = $container.parents('.qti-item');\n const maxPlays = parseInt(interaction.attr('maxPlays'), 10) || 0;\n\n //check if the media can be played (using timesPlayed and maxPlays)\n const canBePlayed = () => maxPlays === 0 || maxPlays > parseInt($container.data('timesPlayed'), 10);\n\n /**\n * Resize video player elements to fit container size\n * @param {Object} mediaElement - player instance\n * @param {jQueryElement} $container - container element to adapt\n */\n const resize = _.debounce(() => {\n if (interaction.mediaElement) {\n const height = $container.find('.media-container').height();\n const width = $container.find('.media-container').width();\n\n interaction.mediaElement.resize(width, height);\n }\n }, 200);\n\n //intialize the player if not yet done\n const initMediaPlayer = () => {\n if (!interaction.mediaElement) {\n const type = media.attr('type') || defaults.type;\n const mediaUrl = media.attr('data') || '';\n const url = mediaUrl && this.resolveUrl(mediaUrl);\n const preview = canPreviewMedia(type, url);\n\n interaction.mediaElement = mediaplayer({\n url,\n type,\n preview,\n canPause: $container.hasClass('pause'),\n maxPlays: maxPlays,\n canSeek: !maxPlays,\n width: media.attr('width'),\n height: media.attr('height'),\n volume: 100,\n autoStart: !!interaction.attr('autostart') && canBePlayed(),\n loop: !!interaction.attr('loop'),\n renderTo: $$1('.media-container', $container)\n })\n .on('render', () => {\n // to support old sizes in px\n if (media.attr('width') && !/%/.test(media.attr('width'))) {\n resize();\n\n $$1(window)\n .off('resize.mediaInteraction')\n .on('resize.mediaInteraction', resize);\n\n $item.off('resize.gridEdit').on('resize.gridEdit', resize);\n }\n /**\n * @event playerrendered\n */\n $container.trigger('playerrendered');\n })\n .on('ready', function () {\n /**\n * @event playerready\n */\n $container.trigger('playerready');\n\n if (!canBePlayed()) {\n this.disable();\n }\n\n // declare the item ready when player is ready to play.\n resolve();\n })\n .on('update', _.throttle(() => containerHelper.triggerResponseChangeEvent(interaction), 1000))\n .on('ended', function () {\n $container.data('timesPlayed', $container.data('timesPlayed') + 1);\n containerHelper.triggerResponseChangeEvent(interaction);\n\n if (!canBePlayed()) {\n this.disable();\n }\n });\n }\n };\n\n\n //set up the number of times played\n if (!$container.data('timesPlayed')) {\n $container.data('timesPlayed', 0);\n }\n\n //initialize the component\n $container.on('responseSet', initMediaPlayer);\n\n //gives a small chance to the responseSet event before initializing the player\n initMediaPlayer();\n });\n }\n\n /**\n * Destroy the current interaction\n * @param {Object} interaction\n */\n function destroy(interaction) {\n const $container = getContainer(interaction);\n\n if (interaction.mediaElement) {\n interaction.mediaElement.destroy();\n interaction.mediaElement = null;\n }\n\n $$1('.instruction-container', $container).empty();\n $$1('.media-container', $container).empty();\n\n $container.removeData('timesPlayed');\n\n $$1(window).off('resize.video');\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n }\n\n /**\n * Get the responses from the interaction\n * @private\n * @param {Object} interaction\n * @returns {Array} of points\n */\n function _getRawResponse(interaction) {\n return [getContainer(interaction).data('timesPlayed') || 0];\n }\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {Object} interaction\n * @param {Object} response\n */\n function setResponse(interaction, response) {\n if (response) {\n try {\n const maxPlays = parseInt(interaction.attr('maxPlays'), 10) || 0;\n const responseValues = pciResponse.unserialize(response, interaction);\n const timesPlayed = parseInt(responseValues[0], 10);\n getContainer(interaction).data('timesPlayed', timesPlayed);\n\n if (interaction.mediaElement) {\n if (maxPlays !== 0 && maxPlays <= timesPlayed) {\n interaction.mediaElement.disable();\n } else if (interaction.mediaElement.is('disabled')) {\n interaction.mediaElement.enable();\n }\n }\n } catch (e) {\n // something went wrong\n }\n }\n }\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {Object} interaction\n */\n function resetResponse(interaction) {\n getContainer(interaction).data('timesPlayed', 0);\n }\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {Object} interaction\n * @returns {Object}\n */\n function getResponse(interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n }\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n function setState(interaction, state) {\n /**\n * Restore the media player state\n * @private\n * @param {Object} [playerState]\n * @param {Boolean} [playerState.muted] - is the player muted\n * @param {Number} [playerState.volume] - the current volume\n * @param {Number} [playerState.position] - the position to seek to\n */\n const restorePlayerState = playerState => {\n if (playerState && interaction.mediaElement) {\n //Volume\n if (_.isNumber(playerState.volume)) {\n interaction.mediaElement.setVolume(playerState.volume);\n }\n\n //Muted state (always after the volume)\n if (_.isBoolean(playerState.muted)) {\n interaction.mediaElement.mute(playerState.muted);\n interaction.mediaElement.startMuted = playerState.muted;\n }\n\n //Position\n if (playerState.position && playerState.position > 0) {\n interaction.mediaElement.seek(playerState.position);\n if (!interaction.attr('autostart')) {\n interaction.mediaElement.pause();\n }\n }\n }\n };\n\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n if (_.isPlainObject(state.player) && interaction.mediaElement) {\n if (interaction.mediaElement.is('ready')) {\n restorePlayerState(state.player);\n } else {\n interaction.mediaElement.on('ready.state', () => {\n interaction.mediaElement.off('ready.state');\n restorePlayerState(state.player);\n });\n }\n }\n }\n }\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n function getState(interaction) {\n const state = {};\n const response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //collect player's state\n if (interaction.mediaElement) {\n state.player = {\n position: interaction.mediaElement.getPosition(),\n muted: interaction.mediaElement.is('muted'),\n volume: interaction.mediaElement.getVolume()\n };\n }\n return state;\n }\n\n /**\n * Expose the common renderer for the interaction\n * @exports qtiCommonRenderer/renderers/interactions/MediaInteraction\n */\n var MediaInteraction = {\n qtiClass,\n template,\n render,\n getContainer,\n setResponse,\n getResponse,\n resetResponse,\n destroy,\n setState,\n getState\n };\n\n return MediaInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/OrderInteraction',['lodash', 'jquery', 'i18n', 'core/mouseEvent', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'interact', 'ui/interactUtils'], function (_, $$1, __, mouseEvent, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse, interact, interactUtils) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\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 DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n interactUtils = interactUtils && Object.prototype.hasOwnProperty.call(interactUtils, 'default') ? interactUtils['default'] : interactUtils;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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, blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n \n return \" qti-horizontal\";\n }\n\n function program5(depth0,data) {\n \n \n return \" qti-vertical\";\n }\n\n function program7(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program9(depth0,data) {\n \n \n return \"horizontal\";\n }\n\n function program11(depth0,data) {\n \n \n return \"vertical\";\n }\n\n function program13(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program15(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program17(depth0,data) {\n \n var stack1;\n stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program19(depth0,data) {\n \n \n return \"icon-down\";\n }\n\n function program21(depth0,data) {\n \n \n return \"icon-right\";\n }\n\n function program23(depth0,data) {\n \n \n return \"icon-up\";\n }\n\n function program25(depth0,data) {\n \n \n return \"icon-left\";\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-orderInteraction\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"orderInteraction\\\"\\n data-orientation=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.prompt), {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"order-interaction-area\\\">\\n <ul class=\\\"choice-area square source solid block-listing \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n \";\n options={hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};\n if (helper = helpers.choices) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0.choices); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers.choices) { stack1 = blockHelperMissing.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data}); }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n <div class=\\\"arrow-bar middle\\\">\\n <span class=\\\"icon-add-to-selection \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(21, program21, data),fn:self.program(19, program19, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\\n <span class=\\\"icon-remove-from-selection \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(25, program25, data),fn:self.program(23, program23, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" inactive\\\"></span>\\n </div>\\n <ul class=\\\"drag-container block-listing\\\"></ul>\\n <ul class=\\\"result-area decimal target solid block-listing \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n </ul>\\n <div class=\\\"arrow-bar\\\">\\n <span class=\\\"icon-move-before \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(23, program23, data),fn:self.program(25, program25, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" inactive\\\"></span>\\n <span class=\\\"icon-move-after \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.horizontal), {hash:{},inverse:self.program(19, program19, data),fn:self.program(21, program21, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" inactive\\\"></span>\\n </div>\\n </div>\\n <div class=\\\"notification-container\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2019 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n const _freezeSize = function ($container) {\n const $orderArea = $container.find('.order-interaction-area');\n $orderArea.height($orderArea.height());\n };\n\n const _setInstructions = function (interaction) {\n const $container = containerHelper.get(interaction);\n const $choiceArea = $$1('.choice-area', $container),\n $resultArea = $$1('.result-area', $container),\n min = parseInt(interaction.attr('minChoices'), 10),\n max = parseInt(interaction.attr('maxChoices'), 10);\n\n if (min) {\n instructionMgr.appendInstruction(interaction, __('You must use at least %d choices', min), function () {\n if ($resultArea.find('>li').length >= min) {\n this.setLevel('success');\n } else {\n this.reset();\n }\n });\n }\n\n if (max && max < _.size(interaction.getChoices())) {\n const instructionMax = instructionMgr.appendInstruction(\n interaction,\n __('You can use maximum %d choices', max),\n function () {\n if ($resultArea.find('>li').length >= max) {\n $choiceArea.find('>li').addClass('deactivated');\n this.setMessage(__('Maximum choices reached'));\n } else {\n $choiceArea.find('>li').removeClass('deactivated');\n this.reset();\n }\n }\n );\n\n interact(`${$choiceArea.selector} >li.deactivated`).on('tap', function (e) {\n const $target = $$1(e.currentTarget);\n $target.addClass('brd-error');\n instructionMax.setLevel('warning', 2000);\n setTimeout(function () {\n $target.removeClass('brd-error');\n }, 150);\n });\n\n // we don't check for isDragAndDropEnabled on purpose, as this binding is not to allow dragging,\n // but only to provide feedback in case of a drag action on an inactive choice\n interact(`${$choiceArea.selector} >li.deactivated`)\n .draggable({\n onstart: function (e) {\n const $target = $$1(e.target);\n $target.addClass('brd-error');\n instructionMax.setLevel('warning');\n },\n onend: function (e) {\n const $target = $$1(e.target);\n $target.removeClass('brd-error');\n instructionMax.setLevel('info');\n }\n })\n .styleCursor(false);\n }\n };\n\n const resetResponse = function (interaction) {\n const $container = containerHelper.get(interaction);\n const initialOrder = _.keys(interaction.getChoices());\n const $choiceArea = $$1('.choice-area', $container).append($$1('.result-area>li', $container));\n const $choices = $choiceArea.children('.qti-choice');\n\n $container.find('.qti-choice.active').each(function deactivateChoice() {\n interactUtils.tapOn(this);\n });\n\n $choices.detach().sort(function (choice1, choice2) {\n return _.indexOf(initialOrder, $$1(choice1).data('serial')) - _.indexOf(initialOrder, $$1(choice2).data('serial'));\n });\n $choiceArea.prepend($choices);\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10283\n *\n * @param {Object} interaction - the interaction instance\n */\n const render = function (interaction) {\n const $container = containerHelper.get(interaction),\n $choiceArea = $container.find('.choice-area'),\n $resultArea = $container.find('.result-area'),\n $iconAdd = $container.find('.icon-add-to-selection'),\n $iconRemove = $container.find('.icon-remove-from-selection'),\n $iconBefore = $container.find('.icon-move-before'),\n $iconAfter = $container.find('.icon-move-after'),\n choiceSelector = `${$choiceArea.selector} >li:not(.deactivated)`,\n resultSelector = `${$resultArea.selector} >li`,\n $dragContainer = $container.find('.drag-container'),\n orientation = interaction.attr('orientation') ? interaction.attr('orientation') : 'vertical';\n\n let $activeChoice = null,\n scaleX,\n scaleY,\n isDragAndDropEnabled,\n dragOptions,\n $dropzoneElement;\n\n const _activeControls = function _activeControls() {\n $iconAdd.addClass('inactive');\n $iconRemove.removeClass('inactive').addClass('active');\n $iconBefore.removeClass('inactive').addClass('active');\n $iconAfter.removeClass('inactive').addClass('active');\n };\n\n const _resetControls = function _resetControls() {\n $iconAdd.removeClass('inactive');\n $iconRemove.removeClass('active').addClass('inactive');\n $iconBefore.removeClass('active').addClass('inactive');\n $iconAfter.removeClass('active').addClass('inactive');\n };\n\n const _setSelection = function _setSelection($choice) {\n if ($activeChoice) {\n $activeChoice.removeClass('active');\n }\n $activeChoice = $choice;\n $activeChoice.addClass('active');\n };\n\n const _resetSelection = function _resetSelection() {\n if ($activeChoice) {\n $activeChoice.removeClass('active');\n $activeChoice = null;\n }\n _resetControls();\n };\n\n const _addChoiceToSelection = function _addChoiceToSelection($target, position) {\n const $results = $$1(resultSelector);\n _resetSelection();\n\n //move choice to the result list:\n if (typeof position !== 'undefined' && position < $results.length) {\n $results.eq(position).before($target);\n } else {\n $resultArea.append($target);\n }\n\n containerHelper.triggerResponseChangeEvent(interaction);\n\n //update constraints :\n instructionMgr.validateInstructions(interaction);\n };\n\n const _toggleResultSelection = function _toggleResultSelection($target) {\n if ($target.hasClass('active')) {\n _resetSelection();\n } else {\n _setSelection($target);\n _activeControls();\n }\n };\n\n const _removeChoice = function _removeChoice() {\n if ($activeChoice) {\n //restore choice back to choice list\n $choiceArea.append($activeChoice);\n containerHelper.triggerResponseChangeEvent(interaction);\n\n //update constraints :\n instructionMgr.validateInstructions(interaction);\n }\n\n _resetSelection();\n };\n\n const _moveResultBefore = function _moveResultBefore() {\n const $prev = $activeChoice.prev();\n\n if ($prev.length) {\n $prev.before($activeChoice);\n containerHelper.triggerResponseChangeEvent(interaction);\n }\n };\n\n const _moveResultAfter = function _moveResultAfter() {\n const $next = $activeChoice.next();\n\n if ($next.length) {\n $next.after($activeChoice);\n containerHelper.triggerResponseChangeEvent(interaction);\n }\n };\n\n // Point & click handlers\n\n interact($container.selector).on('tap', function () {\n _resetSelection();\n });\n\n interact(choiceSelector).on('tap', function (e) {\n const $target = $$1(e.currentTarget);\n\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($target.closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n\n $iconAdd.addClass('triggered');\n setTimeout(function () {\n $iconAdd.removeClass('triggered');\n }, 150);\n\n _addChoiceToSelection($target);\n });\n\n interact(resultSelector).on('tap', function (e) {\n const $target = $$1(e.currentTarget);\n\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($target.closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _toggleResultSelection($target);\n });\n\n interact($iconRemove.selector).on('tap', function (e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($$1(e.currentTarget).closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _removeChoice();\n });\n\n interact($iconBefore.selector).on('tap', function (e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($$1(e.currentTarget).closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _moveResultBefore();\n });\n\n interact($iconAfter.selector).on('tap', function (e) {\n //if tts component is loaded and click-to-speak function is activated - we should prevent this listener to go further\n if ($$1(e.currentTarget).closest('.qti-item').hasClass('prevent-click-handler')) {\n return;\n }\n\n e.stopPropagation();\n _moveResultAfter();\n });\n\n // Drag & drop handlers\n\n if (this.getOption && this.getOption('enableDragAndDrop') && this.getOption('enableDragAndDrop').order) {\n isDragAndDropEnabled = this.getOption('enableDragAndDrop').order;\n }\n\n function _iFrameDragFix(draggableSelector, target) {\n interactUtils.iFrameDragFixOn(function () {\n if (_isDropzoneVisible()) {\n interact($resultArea.selector).fire({\n type: 'drop',\n target: $dropzoneElement.eq(0),\n relatedTarget: target\n });\n }\n interact(draggableSelector).fire({\n type: 'dragend',\n target: target\n });\n });\n }\n\n if (isDragAndDropEnabled) {\n $dropzoneElement = $$1('<li>', { class: 'dropzone qti-choice' });\n $$1('<div>', { class: 'qti-block' }).appendTo($dropzoneElement);\n\n dragOptions = {\n inertia: false,\n autoScroll: true,\n restrict: {\n restriction: '.qti-interaction',\n endOnly: false,\n elementRect: { top: 0, left: 0, bottom: 1, right: 1 }\n }\n };\n\n // makes choices draggables\n interact(choiceSelector)\n .draggable(\n _.assign({}, dragOptions, {\n onstart: function (e) {\n const $target = $$1(e.target);\n let scale;\n $target.addClass('dragged');\n\n _iFrameDragFix(choiceSelector, e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n },\n onmove: function (e) {\n const $target = $$1(e.target);\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n if (_isDropzoneVisible()) {\n _adjustDropzonePosition($target);\n }\n },\n onend: function (e) {\n const $target = $$1(e.target);\n $target.removeClass('dragged');\n\n interactUtils.restoreOriginalPosition($target);\n interactUtils.iFrameDragFixOff();\n }\n })\n )\n .styleCursor(false);\n\n // makes result draggables\n interact(resultSelector)\n .draggable(\n _.assign({}, dragOptions, {\n onstart: function (e) {\n const $target = $$1(e.target);\n let scale;\n $target.addClass('dragged');\n\n _setSelection($target);\n\n // move dragged result to drag container\n $dragContainer.show();\n $dragContainer.offset($target.offset());\n if (orientation === 'horizontal') {\n $dragContainer.width($$1(e.currentTarget).width());\n } else {\n $dragContainer.width($target.parent().width());\n }\n $dragContainer.append($target);\n\n _iFrameDragFix(resultSelector, e.target);\n scale = interactUtils.calculateScale(e.target);\n scaleX = scale[0];\n scaleY = scale[1];\n },\n onmove: function (e) {\n const $target = $$1(e.target);\n interactUtils.moveElement(e.target, e.dx / scaleX, e.dy / scaleY);\n if (_isDropzoneVisible()) {\n _adjustDropzonePosition($target);\n }\n },\n onend: function (e) {\n const $target = $$1(e.target),\n hasBeenDroppedInResultArea = $target.parent === $resultArea;\n\n $target.removeClass('dragged');\n $dragContainer.hide();\n\n if (!hasBeenDroppedInResultArea) {\n _removeChoice();\n }\n\n interactUtils.restoreOriginalPosition($target);\n interactUtils.iFrameDragFixOff();\n }\n })\n )\n .styleCursor(false);\n\n // makes result area droppable\n interact($resultArea.selector).dropzone({\n overlap: 0.5,\n ondragenter: function (e) {\n const $dragged = $$1(e.relatedTarget);\n _insertDropzone($dragged);\n $dragged.addClass('droppable');\n },\n ondrop: function (e) {\n const $dragged = $$1(e.relatedTarget),\n dropzoneIndex = $$1(resultSelector).index($dropzoneElement);\n\n this.ondragleave(e);\n\n _addChoiceToSelection($dragged, dropzoneIndex);\n interactUtils.restoreOriginalPosition($dragged);\n },\n ondragleave: function (e) {\n const $dragged = $$1(e.relatedTarget);\n $dropzoneElement.remove();\n $dragged.removeClass('droppable');\n }\n });\n }\n\n function _isDropzoneVisible() {\n return $$1.contains($container.get(0), $dropzoneElement.get(0));\n }\n\n function _insertDropzone($dragged) {\n const draggedMiddle = _getMiddleOf($dragged),\n previousMiddle = {\n x: 0,\n y: 0\n };\n let insertPosition;\n\n // look for position where to insert dropzone\n $$1(resultSelector).each(function (index) {\n const currentMiddle = _getMiddleOf($$1(this));\n\n if (orientation !== 'horizontal') {\n if (draggedMiddle.y > previousMiddle.y && draggedMiddle.y < currentMiddle.y) {\n insertPosition = index;\n return false;\n }\n previousMiddle.y = currentMiddle.y;\n } else {\n if (draggedMiddle.x > previousMiddle.x && draggedMiddle.x < currentMiddle.x) {\n insertPosition = index;\n return false;\n }\n previousMiddle.x = currentMiddle.x;\n }\n });\n // append dropzone to DOM\n if (typeof insertPosition !== 'undefined') {\n $$1(resultSelector).eq(insertPosition).before($dropzoneElement);\n } else {\n // no index found, we just append to the end\n $resultArea.append($dropzoneElement);\n }\n\n // style dropzone\n $dropzoneElement.height($dragged.height());\n $dropzoneElement.find('div').text($dragged.text());\n }\n\n function _adjustDropzonePosition($dragged) {\n const draggedBox = $dragged.get(0).getBoundingClientRect(),\n $prevResult = $dropzoneElement.prev('.qti-choice'),\n $nextResult = $dropzoneElement.next('.qti-choice'),\n prevMiddle = $prevResult.length > 0 ? _getMiddleOf($prevResult) : false,\n nextMiddle = $nextResult.length > 0 ? _getMiddleOf($nextResult) : false;\n\n if (orientation !== 'horizontal') {\n if (prevMiddle && draggedBox.top < prevMiddle.y) {\n $prevResult.before($dropzoneElement);\n }\n if (nextMiddle && draggedBox.bottom > nextMiddle.y) {\n $nextResult.after($dropzoneElement);\n }\n } else {\n if (prevMiddle && draggedBox.left < prevMiddle.x) {\n $prevResult.before($dropzoneElement);\n }\n if (nextMiddle && draggedBox.right > nextMiddle.x) {\n $nextResult.after($dropzoneElement);\n }\n }\n }\n\n function _getMiddleOf($element) {\n const elementBox = $element.get(0).getBoundingClientRect();\n return {\n x: elementBox.left + elementBox.width / 2,\n y: elementBox.top + elementBox.height / 2\n };\n }\n\n // rendering init\n\n _setInstructions(interaction);\n\n //bind event listener in case the attributes change dynamically on runtime\n $$1(document).on('attributeChange.qti-widget.commonRenderer', function (e, data) {\n if (data.element.getSerial() === interaction.getSerial()) {\n if (data.key === 'maxChoices' || data.key === 'minChoices') {\n instructionMgr.removeInstructions(interaction);\n _setInstructions(interaction);\n instructionMgr.validateInstructions(interaction);\n }\n }\n });\n\n _freezeSize($container);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10283\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n const setResponse = function (interaction, response) {\n const $container = containerHelper.get(interaction);\n const $choiceArea = $$1('.choice-area', $container);\n const $resultArea = $$1('.result-area', $container);\n\n if (response === null || _.isEmpty(response)) {\n resetResponse(interaction);\n } else {\n try {\n _.each(pciResponse.unserialize(response, interaction), function (identifier) {\n $resultArea.append($choiceArea.find(`[data-identifier=\"${identifier}\"]`));\n });\n } catch (e) {\n throw new Error(`wrong response format in argument : ${e}`);\n }\n }\n\n instructionMgr.validateInstructions(interaction);\n };\n\n const _getRawResponse = function (interaction) {\n const $container = containerHelper.get(interaction);\n const response = [];\n $$1('.result-area>li', $container).each(function () {\n response.push($$1(this).data('identifier'));\n });\n return response;\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10283\n *\n * @param {object} interaction\n * @returns {object}\n */\n const getResponse = function (interaction) {\n return pciResponse.serialize(_getRawResponse(interaction), interaction);\n };\n\n /**\n * Set additionnal data to the template (data that are not really part of the model).\n * @param {Object} interaction - the interaction\n * @param {Object} [data] - interaction custom data\n * @returns {Object} custom data\n */\n const getCustomData = function (interaction, data) {\n return _.merge(data || {}, {\n horizontal: interaction.attr('orientation') === 'horizontal'\n });\n };\n\n /**\n * Destroy the interaction by leaving the DOM exactly in the same state it was before loading the interaction.\n * @param {Object} interaction - the interaction\n */\n const destroy = function (interaction) {\n const $container = containerHelper.get(interaction);\n\n //first, remove all events\n const selectors = [\n '.choice-area >li:not(.deactivated)',\n '.result-area >li',\n '.icon-add-to-selection',\n '.icon-remove-from-selection',\n '.icon-move-before',\n '.icon-move-after'\n ];\n selectors.forEach(function unbindInteractEvents(selector) {\n interact($container.find(selector).selector).unset();\n });\n\n $$1(document).off('.commonRenderer');\n\n $container.find('.order-interaction-area').removeAttr('style');\n\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n const setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n\n //restore order of previously shuffled choices\n if (_.isArray(state.order) && state.order.length === _.size(interaction.getChoices())) {\n const $container = containerHelper.get(interaction);\n\n $$1('.choice-area .qti-choice', $container)\n .sort(function (a, b) {\n const aIndex = _.indexOf(state.order, $$1(a).data('identifier'));\n const bIndex = _.indexOf(state.order, $$1(b).data('identifier'));\n if (aIndex > bIndex) {\n return 1;\n }\n if (aIndex < bIndex) {\n return -1;\n }\n return 0;\n })\n .detach()\n .appendTo($$1('.choice-area', $container));\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n const getState = function getState(interaction) {\n const state = {};\n const response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n\n //we store also the choice order if shuffled\n if (interaction.attr('shuffle') === true) {\n const $container = containerHelper.get(interaction);\n\n state.order = [];\n $$1('.choice-area .qti-choice', $container).each(function () {\n state.order.push($$1(this).data('identifier'));\n });\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the order interaction\n * @exports qtiCommonRenderer/renderers/interactions/OrderInteraction\n */\n var OrderInteraction = {\n qtiClass: 'orderInteraction',\n getData: getCustomData,\n template: tpl,\n render,\n getContainer: containerHelper.get,\n setResponse,\n getResponse,\n resetResponse,\n destroy,\n setState,\n getState\n };\n\n return OrderInteraction;\n\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) 2014-2020 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\ndefine('qtiCustomInteractionContext',['lodash'], function(_) {\n 'use strict';\n\n //need a global reference to have pciHooks shared in two different requirejs context (\"default\" and \"portableCustomInteraction\")\n window._pciHooks = window._pciHooks || {};\n\n /**\n * Global object accessible by all PCIs\n *\n * @type Object\n */\n return {\n /**\n * register a custom interaction (its runtime model) in global registery\n * register a renderer\n *\n * @param {Object} pciHook\n * @returns {undefined}\n */\n register(pciHook) {\n const typeIdentifier =\n typeof pciHook.getTypeIdentifier === 'function' ? pciHook.getTypeIdentifier() : pciHook.typeIdentifier;\n if (typeIdentifier) {\n window._pciHooks[typeIdentifier] = pciHook;\n } else {\n throw new Error('invalid PCI hook');\n }\n },\n /**\n * notify when a custom interaction is ready for test taker interaction\n *\n * @param {string} pciInstance\n * @fires custominteractionready\n */\n notifyReady(pciInstance) {\n //@todo add pciIntance as event data and notify event to delivery engine\n },\n /**\n * notify when a custom interaction is completed by test taker\n *\n * @param {string} pciInstance\n * @fires custominteractiondone\n */\n notifyDone(pciInstance) {\n //@todo add pciIntance as event data and notify event to delivery engine\n },\n\n onready(customInteraction, state) {\n //to be implemented in future story\n },\n ondone(customInteraction, response, state, status) {\n //to be implemented in future story\n },\n\n /**\n * Get a cloned object representing the PCI model\n *\n * @param {string} pciTypeIdentifier\n * @returns {Object} clonedPciModel\n */\n createPciInstance(pciTypeIdentifier) {\n const registeredPCI = window._pciHooks[pciTypeIdentifier];\n\n if (!registeredPCI) {\n throw new Error('no portable custom interaction hook found with the id ' + pciTypeIdentifier);\n }\n\n return _.cloneDeep(registeredPCI);\n }\n };\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/instanciator',['qtiCustomInteractionContext'], function (qtiCustomInteractionContext) { 'use strict';\n\n qtiCustomInteractionContext = qtiCustomInteractionContext && Object.prototype.hasOwnProperty.call(qtiCustomInteractionContext, 'default') ? qtiCustomInteractionContext['default'] : qtiCustomInteractionContext;\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-2021 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var instanciator = {\n /**\n * Get the PCI instance associated to the interaction object\n * If none exists, create a new one based on the PCI typeIdentifier\n *\n * @param {Object} interaction - the js object representing the interaction\n * @returns {Object} PCI instance\n */\n getPci(interaction) {\n let pciTypeIdentifier;\n let pci = interaction.data('pci');\n\n if (!pci) {\n pciTypeIdentifier = interaction.typeIdentifier;\n pci = qtiCustomInteractionContext.createPciInstance(pciTypeIdentifier);\n if (pci) {\n //binds the PCI instance to TAO interaction object and vice versa\n interaction.data('pci', pci);\n pci._taoCustomInteraction = interaction;\n } else {\n throw new Error('no custom interaction hook found for the type ' + pciTypeIdentifier);\n }\n }\n\n return pci;\n },\n\n /**\n * Associate a PCI instance to the interaction object\n * @param {Object} interaction - the js object representing the interaction\n * @param {Object} instance - PCI instance\n */\n setPci(interaction, instance) {\n interaction.data('pci', instance);\n }\n };\n\n return instanciator;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/common',['lodash', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/instanciator'], function (_, containerHelper, instanciator) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instanciator = instanciator && Object.prototype.hasOwnProperty.call(instanciator, 'default') ? instanciator['default'] : instanciator;\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-2021 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n function commonPciRenderer(runtime) {\n return {\n getRequiredModules: function getRequiredModules() {\n var requireEntries = [];\n //load hook if applicable\n if (runtime.hook) {\n requireEntries.push(runtime.hook.replace(/\\.js$/, ''));\n }\n //load libs\n _.forEach(runtime.libraries, function(lib) {\n requireEntries.push(lib.replace(/\\.js$/, ''));\n });\n //load stylesheets\n _.forEach(runtime.stylesheets, function(stylesheet) {\n requireEntries.push('css!' + stylesheet.replace(/\\.css$/, ''));\n });\n return requireEntries;\n },\n createInstance: function(interaction, context) {\n var id = interaction.attr('responseIdentifier');\n var pci = instanciator.getPci(interaction);\n var properties = _.clone(interaction.properties);\n var assetManager = context.assetManager;\n var pciAssetManager = {\n resolve: function pciAssetResolve(url) {\n var resolved = assetManager.resolveBy('portableElementLocation', url);\n if (resolved === url || _.isUndefined(resolved)) {\n return assetManager.resolve(url);\n } else {\n return resolved;\n }\n }\n };\n pci.initialize(\n id,\n containerHelper\n .get(interaction)\n .children()\n .get(0),\n properties,\n pciAssetManager\n );\n return Promise.resolve(pci);\n },\n /**\n *\n * @param {Object }interaction\n * @returns {Promise?} the interaction destroy step can be async and can return an optional Promise\n */\n destroy: function destroy(interaction) {\n return instanciator.getPci(interaction).destroy();\n },\n setState: function setState(interaction, state) {\n instanciator.getPci(interaction).setSerializedState(state);\n },\n getState: function getState(interaction) {\n return instanciator.getPci(interaction).getSerializedState();\n }\n };\n }\n\n return commonPciRenderer;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/ims',['lodash', 'core/logger', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/instanciator'], function (_, loggerFactory, containerHelper, instanciator) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instanciator = instanciator && Object.prototype.hasOwnProperty.call(instanciator, 'default') ? instanciator['default'] : instanciator;\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-2021 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n const logger = loggerFactory('taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/ims');\n\n const pciDoneCallback = pci => {\n //standard callback function to be implemented in a future story\n logger.info('pciDoneCallback called on PCI ' + pci.typeIdentifier);\n };\n\n /**\n * Key under the IMS PCI constructor is stored on interaction\n */\n const pciConstructorDataKey = 'pciConstructor';\n\n function defaultPciRenderer(runtime) {\n return {\n getRequiredModules() {\n const requireEntries = [];\n // load modules\n _.forEach(runtime.modules, function (module, name) {\n requireEntries.push(name);\n });\n return requireEntries;\n },\n /**\n * Saves the original IMS PCI module to be able to reinstanciate later\n * @param {Object} interaction\n * @param {Object} pciConstructor\n */\n setPCIConstructor(interaction, pciConstructor) {\n interaction.data(pciConstructorDataKey, pciConstructor);\n },\n /**\n * Returns with original IMS PCI module\n * @param {Object} interaction\n */\n getPCIConstructor(interaction) {\n return interaction.data(pciConstructorDataKey);\n },\n createInstance(interaction, context) {\n let pciConstructor = this.getPCIConstructor(interaction);\n const properties = _.clone(interaction.properties);\n\n // save original IMS PCI module first time to be able to reinstanciate later if necessary\n if (!pciConstructor) {\n pciConstructor = instanciator.getPci(interaction);\n this.setPCIConstructor(interaction, pciConstructor);\n }\n\n // serialize any array or object properties\n _.forOwn(properties, function (propVal, propKey) {\n properties[propKey] = _.isArray(propVal) || _.isObject(propVal) ? JSON.stringify(propVal) : propVal;\n });\n\n let pciReadyCallback;\n const readyPromise = new Promise(resolve => {\n pciReadyCallback = resolve;\n });\n\n const config = {\n properties,\n templateVariables: {}, //not supported yet\n boundTo: context.response || {},\n onready: pciReadyCallback,\n ondone: pciDoneCallback,\n status: 'interacting' //only support interacting state currently(TODO: solution, review),\n };\n\n pciConstructor.getInstance(containerHelper.get(interaction).get(0), config, context.state);\n\n return readyPromise.then(instance => {\n instanciator.setPci(interaction, instance);\n return instance;\n });\n },\n destroy: function destroy(interaction) {\n instanciator.getPci(interaction).oncompleted();\n },\n /**\n * IMS PCI does not have setState, so PCI should be destroyed and reinstanciated with response.\n * This function should run only in review mode.\n * @param {Object} interaction\n * @param {Object} state - state that should be set\n * @returns {Promise<Object>} - Resolves with newly created instance\n */\n setReviewState(interaction, state) {\n this.destroy(interaction);\n return this.createInstance(interaction, { response: { RESPONSE: state.response } });\n },\n setState: _.noop,\n getState(interaction) {\n return instanciator.getPci(interaction).getState();\n }\n };\n }\n\n return defaultPciRenderer;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/PortableCustomInteraction',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/PortableElement', 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/instanciator', 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/common', 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/ims', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/portableElementRegistry/ciRegistry'], function (_, Handlebars, __, DOMPurify, containerHelper, PortableElement, instanciator, commonPciRenderer, imsPciRenderer, util, ciRegistry) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n PortableElement = PortableElement && Object.prototype.hasOwnProperty.call(PortableElement, 'default') ? PortableElement['default'] : PortableElement;\n instanciator = instanciator && Object.prototype.hasOwnProperty.call(instanciator, 'default') ? instanciator['default'] : instanciator;\n commonPciRenderer = commonPciRenderer && Object.prototype.hasOwnProperty.call(commonPciRenderer, 'default') ? commonPciRenderer['default'] : commonPciRenderer;\n imsPciRenderer = imsPciRenderer && Object.prototype.hasOwnProperty.call(imsPciRenderer, 'default') ? imsPciRenderer['default'] : imsPciRenderer;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n ciRegistry = ciRegistry && Object.prototype.hasOwnProperty.call(ciRegistry, 'default') ? ciRegistry['default'] : ciRegistry;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"\\n lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-interaction qti-customInteraction\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.markup) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.markup); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\";\n return buffer;\n });\n function tpl(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) 2014-2021 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var _setPciModel = function _setPciModel(interaction, runtime) {\n var pciRenderer;\n if (runtime.model === 'IMSPCI') {\n pciRenderer = imsPciRenderer(runtime);\n } else {\n pciRenderer = commonPciRenderer(runtime);\n }\n interaction.data('pci-model', runtime.model);\n interaction.data('pci-renderer', pciRenderer);\n };\n\n var _getPciRenderer = function _getPciRenderer(interaction) {\n return interaction.data('pci-renderer');\n };\n\n /**\n * Execute javascript codes to bring the interaction to life.\n * At this point, the html markup must already be ready in the document.\n *\n * It is done in 5 steps :\n * 1. configure the paths\n * 2. require all required libs\n * 3. create a pci instance based on the interaction model\n * 4. initialize the rendering\n * 5. restore full state if applicable (state and/or response)\n *\n * @param {Object} interaction\n */\n var render = function render(interaction, options) {\n var self = this;\n\n options = options || {};\n return new Promise(function (resolve, reject) {\n var id = interaction.attr('responseIdentifier');\n var typeIdentifier = interaction.typeIdentifier;\n var assetManager = self.getAssetManager();\n var state;\n var response = {};\n\n if (options.state && options.state[id]) {\n state = options.state[id];\n }\n response[id] = { base: null };\n\n ciRegistry\n .loadRuntimes({ include: [typeIdentifier] })\n .then(function () {\n var pciRenderer;\n var runtime = ciRegistry.getRuntime(typeIdentifier);\n\n if (!runtime) {\n return reject('The runtime for the pci cannot be found : ' + typeIdentifier);\n }\n\n _setPciModel(interaction, runtime);\n\n pciRenderer = _getPciRenderer(interaction);\n\n window.require(\n pciRenderer.getRequiredModules(),\n function () {\n var pci = instanciator.getPci(interaction);\n if (pci) {\n pciRenderer.createInstance(interaction, {\n response: response,\n state: state,\n assetManager: assetManager\n }).then(instance => {\n //forward internal PCI event responseChange\n if (_.isFunction(instance.on)) {\n interaction.onPci('responseChange', function () {\n containerHelper.triggerResponseChangeEvent(interaction);\n });\n }\n resolve();\n });\n } else {\n reject('Unable to initialize pci \"' + id + '\"');\n }\n },\n reject\n );\n })\n .catch(function (error) {\n reject('Error loading runtime \"' + id + '\": ' + error);\n });\n });\n };\n\n /**\n * Programmatically set the response following the json schema described in\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * @param {Object} interaction\n * @param {Object} response\n */\n var setResponse = function setResponse(interaction, response) {\n instanciator.getPci(interaction).setResponse(response);\n };\n\n /**\n * Get the response in the json format described in\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * @param {Object} interaction\n * @returns {Object}\n */\n var getResponse = function getResponse(interaction) {\n return instanciator.getPci(interaction).getResponse();\n };\n\n /**\n * Remove the current response set in the interaction\n * The state may not be restored at this point.\n *\n * @param {Object} interaction\n */\n var resetResponse = function resetResponse(interaction) {\n instanciator.getPci(interaction).resetResponse();\n };\n\n /**\n * Reverse operation performed by render()\n * After this function is executed, only the inital naked markup remains\n * Event listeners are removed and the state and the response are reset\n *\n * @param {Object} interaction\n * @returns {Promise?} the interaction destroy step can be async and can return an optional Promise\n */\n var destroy = function destroy(interaction) {\n return _getPciRenderer(interaction).destroy(interaction);\n };\n\n /**\n * Restore the state of the interaction from the serializedState.\n *\n * @param {Object} interaction\n * @param {Object} serializedState - json format\n */\n var setState = function setState(interaction, serializedState) {\n _getPciRenderer(interaction).setState(interaction, serializedState);\n };\n\n /**\n * Get the current state of the interaction as a string.\n * It enables saving the state for later usage.\n *\n * @param {Object} interaction\n * @returns {Object} json format\n */\n var getState = function getState(interaction) {\n return _getPciRenderer(interaction).getState(interaction);\n };\n\n var getData = function getData(customInteraction, data) {\n //remove ns + fix media file path\n var markup = data.markup;\n markup = util.removeMarkupNamespaces(markup);\n markup = PortableElement.fixMarkupMediaSources(markup, this);\n data.markup = markup;\n\n return data;\n };\n\n var PortableCustomInteraction = {\n qtiClass: 'customInteraction',\n template: tpl,\n getData: getData,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n getState: getState,\n setState: setState\n };\n\n return PortableCustomInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/Prompt',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div\\n class=\\\"qti-prompt-container\\\"\\n data-html-editable-container\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <div class=\\\"qti-prompt\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-html-editable id=\\\"prompt-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var Prompt = {\n qtiClass: 'prompt',\n template: tpl,\n getContainer: containerHelper.get\n };\n\n return Prompt;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/SelectPointInteraction',['jquery', 'lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/Graphic', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager'], function ($$1, _, Handlebars, __, DOMPurify, graphic, pciResponse, containerHelper, instructionMgr) { '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 __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n graphic = graphic && Object.prototype.hasOwnProperty.call(graphic, 'default') ? graphic['default'] : graphic;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-graphicInteraction qti-selectPointInteraction clearfix\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"image-editor solid\\\">\\n <div id='graphic-paper-\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"' class=\\\"main-image-box\\\"></div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014-2017 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Get the responses from the interaction\n * @param {Object} interaction\n * @returns {Array} of points\n */\n var getRawResponse = function getRawResponse(interaction) {\n if (interaction && interaction.paper && _.isArray(interaction.paper.points)) {\n return _.map(interaction.paper.points, function(point) {\n return [point.x, point.y];\n });\n }\n return [];\n };\n\n /**\n * Add a new point to the interaction\n * @param {Object} interaction\n * @param {Object} point - the x/y point\n */\n var addPoint = function addPoint(interaction, point) {\n var maxChoices = interaction.attr('maxChoices');\n\n var pointChange = function pointChange() {\n containerHelper.triggerResponseChangeEvent(interaction);\n instructionMgr.validateInstructions(interaction);\n };\n\n if (maxChoices > 0 && getRawResponse(interaction).length >= maxChoices) {\n instructionMgr.validateInstructions(interaction);\n } else {\n if (!_.isArray(interaction.paper.points)) {\n interaction.paper.points = [];\n }\n\n graphic.createTarget(interaction.paper, {\n point: point,\n create: function create(target) {\n if (interaction.isTouch && target && target.getBBox) {\n graphic.createTouchCircle(interaction.paper, target.getBBox());\n }\n\n interaction.paper.points.push(point);\n\n pointChange();\n },\n remove: function remove() {\n _.remove(interaction.paper.points, point);\n\n pointChange();\n }\n });\n }\n };\n\n /**\n * Make the image clickable and place targets at the given position.\n * @param {Object} interaction\n */\n var enableSelection = function enableSelection(interaction) {\n var $container = containerHelper.get(interaction);\n var $imageBox = $container.find('.main-image-box');\n var isResponsive = $container.hasClass('responsive');\n var image = interaction.paper.getById('bg-image-' + interaction.serial);\n\n interaction.paper.isTouch = false;\n\n //used to see if we are in a touch context\n image.touchstart(function() {\n interaction.paper.isTouch = true;\n image.untouchstart();\n });\n\n //get the point on click\n image.click(function imageClicked(event) {\n addPoint(interaction, graphic.getPoint(event, interaction.paper, $imageBox, isResponsive));\n });\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {Object} interaction\n */\n var render = function render(interaction) {\n var self = this;\n\n return new Promise(function(resolve) {\n var $container = containerHelper.get(interaction);\n var background = interaction.object.attributes;\n\n $container.off('resized.qti-widget.resolve').one('resized.qti-widget.resolve', resolve);\n\n //create the paper\n interaction.paper = graphic.responsivePaper('graphic-paper-' + interaction.serial, interaction.serial, {\n width: background.width,\n height: background.height,\n img: self.resolveUrl(background.data),\n imgId: 'bg-image-' + interaction.serial,\n container: $container\n });\n\n //enable to select the paper to position a target\n enableSelection(interaction);\n\n //set up the constraints instructions\n instructionMgr.minMaxChoiceInstructions(interaction, {\n min: interaction.attr('minChoices'),\n max: interaction.attr('maxChoices'),\n choiceCount: false,\n getResponse: getRawResponse,\n onError: function(data) {\n if (data) {\n graphic.highlightError(data.target, 'success');\n }\n }\n });\n });\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {Object} interaction\n * @param {Object} response\n */\n var setResponse = function(interaction, response) {\n var responseValues;\n\n if (response && interaction.paper) {\n try {\n responseValues = pciResponse.unserialize(response, interaction);\n\n if (interaction.getResponseDeclaration().attr('cardinality') === 'single') {\n responseValues = [responseValues];\n }\n _(responseValues)\n .filter(function(point) {\n return _.isArray(point) && point.length === 2;\n })\n .forEach(function(point) {\n addPoint(interaction, {\n x: point[0],\n y: point[1]\n });\n });\n } catch (err) {\n return;\n }\n }\n };\n\n /**\n * Reset the current responses of the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {Object} interaction\n */\n var resetResponse = function resetResponse(interaction) {\n if (interaction && interaction.paper) {\n interaction.paper.points = [];\n\n interaction.paper.forEach(function(element) {\n var point = element.data('point');\n if (typeof point === 'object') {\n graphic.trigger(element, 'click');\n }\n });\n }\n };\n\n /**\n i* Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {Object} interaction\n * @returns {Object} the response\n */\n var getResponse = function(interaction) {\n return pciResponse.serialize(getRawResponse(interaction), interaction);\n };\n\n /**\n * Clean interaction destroy\n * @param {Object} interaction\n */\n var destroy = function destroy(interaction) {\n var $container;\n if (interaction.paper) {\n $container = containerHelper.get(interaction);\n\n $$1(window).off('resize.qti-widget.' + interaction.serial);\n $container.off('resize.qti-widget.' + interaction.serial);\n\n interaction.paper.clear();\n instructionMgr.removeInstructions(interaction);\n\n $$1('.main-image-box', $container)\n .empty()\n .removeAttr('style');\n $$1('.image-editor', $container).removeAttr('style');\n }\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Expose the common renderer for the interaction\n * @exports qtiCommonRenderer/renderers/interactions/SelectPointInteraction\n */\n var SelectPointInteraction = {\n qtiClass: 'selectPointInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return SelectPointInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/SliderInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'nouislider'], function ($$1, _, __, Handlebars, DOMPurify, containerHelper, pciResponse, nouislider) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n buffer += \"<div \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-interaction qti-blockInteraction qti-sliderInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"sliderInteraction\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" >\\r\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.prompt), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\r\\n <div class=\\\"instruction-container\\\"></div>\\r\\n</div>\\r\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var _slideTo = function(options) {\n options.sliderCurrentValue.find('.qti-slider-cur-value').text(options.value);\n options.sliderValue.val(options.value);\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n */\n const render = function(interaction) {\n const attributes = interaction.getAttributes(),\n $container = interaction.getContainer(),\n $el = $$1('<div />').attr({ id: `${attributes.responseIdentifier}-qti-slider`, class: 'qti-slider' }), //slider element\n $sliderLabels = $$1('<div />').attr({ class: 'qti-slider-values' }),\n $sliderCurrentValue = $$1('<div />').attr({\n id: `${attributes.responseIdentifier}-qti-slider-cur-value`,\n class: 'qti-slider-cur-value'\n }), //show the current selected value\n $sliderValue = $$1('<input />').attr({ type: 'hidden', id: `${attributes.responseIdentifier}-qti-slider-value`, class: 'qti-slider-value' }); //the input that always holds the slider value\n\n //getting the options\n let orientation = 'horizontal';\n const reverse = typeof attributes.reverse !== 'undefined' && attributes.reverse ? true : false, //setting the slider whether to be reverse or not\n min = parseInt(attributes.lowerBound),\n max = parseInt(attributes.upperBound),\n step = typeof attributes.step !== 'undefined' && attributes.step ? parseInt(attributes.step) : 1, //default value as per QTI standard\n steps = (max - min) / step; //number of the steps\n\n //add the containers\n $sliderCurrentValue\n .append(`<span class=\"qti-slider-cur-value-text\">${__('Current value:')}</span>`)\n .append('<span class=\"qti-slider-cur-value\"></span>');\n\n $sliderLabels\n .append(`<span class=\"slider-min\">${!reverse ? min : max}</span>`)\n .append(`<span class=\"slider-max\">${!reverse ? max : min}</span>`);\n\n interaction\n .getContainer()\n .append($el)\n .append($sliderLabels)\n .append($sliderCurrentValue)\n .append($sliderValue);\n\n //setting the orientation of the slider\n if (\n typeof attributes.orientation !== 'undefined' &&\n $$1.inArray(attributes.orientation, ['horizontal', 'vertical']) > -1\n ) {\n orientation = attributes.orientation;\n }\n\n let sliderSize = 0;\n\n if (orientation === 'horizontal') {\n $container.addClass('qti-slider-horizontal');\n } else {\n const maxHeight = 300;\n sliderSize = steps * 20;\n if (sliderSize > maxHeight) {\n sliderSize = maxHeight;\n }\n $container.addClass('qti-slider-vertical');\n $el.height(`${sliderSize}px`);\n $sliderLabels.height(`${sliderSize}px`);\n }\n\n //set the middle value if the stepLabel attribute is enabled\n if (typeof attributes.stepLabel !== 'undefined' && attributes.stepLabel) {\n const middleStep = parseInt(steps / 2),\n leftOffset = (100 / steps) * middleStep,\n middleValue = reverse ? max - middleStep * step : min + middleStep * step;\n\n if (orientation === 'horizontal') {\n $sliderLabels\n .find('.slider-min')\n .after(`<span class=\"slider-middle\" style=\"left:'${leftOffset}%\">${middleValue}</span>`);\n } else {\n $sliderLabels\n .find('.slider-min')\n .after(`<span class=\"slider-middle\" style=\"top:${leftOffset}%\">${middleValue}</span>`);\n }\n }\n\n //create the slider\n $el.noUiSlider({\n start: reverse ? max : min,\n range: {\n min: min,\n max: max\n },\n step: step,\n orientation: orientation\n }).on('slide', function() {\n let val = parseInt($$1(this).val());\n if (interaction.attr('reverse')) {\n val = max + min - val;\n }\n val = Math.round(val * 1000) / 1000;\n _slideTo({\n value: val,\n sliderValue: $sliderValue,\n sliderCurrentValue: $sliderCurrentValue\n });\n\n containerHelper.triggerResponseChangeEvent(interaction);\n });\n\n _slideTo({\n value: min,\n sliderValue: $sliderValue,\n sliderCurrentValue: $sliderCurrentValue\n });\n\n //bind event listener in case the attributes change dynamically on runtime\n $$1(document).on('attributeChange.qti-widget.commonRenderer', function(e, data) {\n if (data.element.getSerial() === interaction.getSerial()) {\n if (data.key === 'responseIdentifier' && data.value) {\n const attributesNew = interaction.getAttributes();\n // data.value and attributesNew.responseIdentifier is the same\n $container.find('.qti-slider').attr({ id: `${attributesNew.responseIdentifier}-qti-slider`});\n $container.find('.qti-slider-cur-value').attr({ id: `${attributesNew.responseIdentifier}-qti-slider-cur-value`});\n $container.find('.qti-slider-value').attr({ id: `${attributesNew.responseIdentifier}-qti-slider-value`});\n }\n }\n });\n };\n\n var resetResponse = function(interaction) {\n const attributes = interaction.getAttributes(),\n $container = interaction.getContainer(),\n $el = $container.find(`#${attributes.responseIdentifier}-qti-slider`),\n $sliderValue = $container.find(`#${attributes.responseIdentifier}-qti-slider-value`),\n $sliderCurrentValue = $container.find(`#${attributes.responseIdentifier}-qti-slider-cur-value`),\n min = parseInt(attributes.lowerBound),\n max = parseInt(attributes.upperBound),\n reverse = typeof attributes.reverse !== 'undefined' && attributes.reverse ? true : false,\n startValue = reverse ? max : min;\n\n _slideTo({\n value: min,\n sliderValue: $sliderValue,\n sliderCurrentValue: $sliderCurrentValue\n });\n\n $el.val(startValue);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function(interaction, response) {\n const attributes = interaction.getAttributes(),\n $container = interaction.getContainer(),\n $sliderValue = $container.find(`#${attributes.responseIdentifier}-qti-slider-value`),\n $sliderCurrentValue = $container.find(`#${attributes.responseIdentifier}-qti-slider-cur-value`),\n $el = $container.find(`#${attributes.responseIdentifier}-qti-slider`),\n min = parseInt(attributes.lowerBound),\n max = parseInt(attributes.upperBound);\n let value;\n\n value = pciResponse.unserialize(response, interaction)[0];\n\n _slideTo({\n value: value,\n sliderValue: $sliderValue,\n sliderCurrentValue: $sliderCurrentValue\n });\n\n $el.val(interaction.attr('reverse') ? max + min - value : value);\n };\n\n var _getRawResponse = function(interaction) {\n let value;\n const attributes = interaction.getAttributes(),\n baseType = interaction.getResponseDeclaration().attr('baseType'),\n min = parseInt(attributes.lowerBound),\n $container = interaction.getContainer(),\n $sliderValue = $container.find(`#${attributes.responseIdentifier}-qti-slider-value`);\n\n if (baseType === 'integer') {\n value = parseInt($sliderValue.val());\n } else if (baseType === 'float') {\n value = parseFloat($sliderValue.val());\n }\n\n return isNaN(value) ? min : value;\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n * @returns {object}\n */\n const getResponse = function(interaction) {\n return pciResponse.serialize([_getRawResponse(interaction)], interaction);\n };\n\n const destroy = function(interaction) {\n const $container = interaction.getContainer();\n\n $container.empty();\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n const setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n const getState = function getState(interaction) {\n const state = {};\n const response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n var SliderInteraction = {\n qtiClass: 'sliderInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return SliderInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/TextEntryInteraction',['jquery', 'lodash', 'i18n', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/PciResponse', 'taoQtiItem/qtiCommonRenderer/helpers/patternMask', 'util/locale', 'ui/tooltip'], function ($$1, _, __, Handlebars, DOMPurify, containerHelper, instructionMgr, pciResponse, patternMaskHelper, locale, tooltip) { '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 Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n pciResponse = pciResponse && Object.prototype.hasOwnProperty.call(pciResponse, 'default') ? pciResponse['default'] : pciResponse;\n patternMaskHelper = patternMaskHelper && Object.prototype.hasOwnProperty.call(patternMaskHelper, 'default') ? patternMaskHelper['default'] : patternMaskHelper;\n locale = locale && Object.prototype.hasOwnProperty.call(locale, 'default') ? locale['default'] : locale;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n buffer += \"<input\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n class=\\\"qti-interaction qti-inlineInteraction qti-textEntryInteraction\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"textEntryInteraction\\\"\\n type=\\\"text\\\"\\n>\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Hide the tooltip for the text input\n * @param {jQuery} $input\n */\n var hideTooltip = function hideTooltip($input) {\n if ($input.data('$tooltip')) {\n $input.data('$tooltip').hide();\n }\n };\n\n /**\n * Create/Show tooltip for the text input\n * @param {jQuery} $input\n * @param {String} theme\n * @param {String} message\n */\n var showTooltip = function showTooltip($input, theme, message) {\n if ($input.data('$tooltip')) {\n $input.data('$tooltip').updateTitleContent(message);\n } else {\n var textEntryTooltip = tooltip.create($input, message, {\n theme: theme,\n trigger: 'manual'\n });\n\n $input.data('$tooltip', textEntryTooltip);\n }\n\n $input.data('$tooltip').show();\n };\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n */\n var render = function render(interaction) {\n var attributes = interaction.getAttributes(),\n baseType = interaction.getResponseDeclaration().attr('baseType'),\n $input = interaction.getContainer(),\n expectedLength,\n updateMaxCharsTooltip,\n updatePatternMaskTooltip,\n patternMask = interaction.attr('patternMask'),\n maxChars = parseInt(patternMaskHelper.parsePattern(patternMask, 'chars'), 10);\n\n // Setting up baseType\n switch (baseType) {\n case 'integer':\n $input.attr('inputmode', 'numeric');\n break;\n case 'float':\n $input.attr('inputmode', 'decimal');\n break;\n default:\n $input.attr('inputmode', 'text');\n }\n\n //setting up the width of the input field\n if (attributes.expectedLength) {\n //adding 2 chars to include reasonable padding size\n expectedLength = parseInt(attributes.expectedLength) + 2;\n $input.css('width', expectedLength + 'ch');\n $input.css('min-width', expectedLength + 'ch');\n }\n\n //checking if there's a placeholder for the input\n if (attributes.placeholderText) {\n $input.attr('placeholder', attributes.placeholderText);\n }\n\n if (maxChars) {\n updateMaxCharsTooltip = function updateMaxCharsTooltip() {\n var count = $input.val().length;\n var message, messageType;\n\n if (count) {\n message = __('%d/%d', count, maxChars);\n } else {\n message = __('%d characters allowed', maxChars);\n }\n\n if (count >= maxChars) {\n $input.addClass('maxed');\n messageType = 'warning';\n } else {\n $input.removeClass('maxed');\n messageType = 'info';\n }\n\n showTooltip($input, messageType, message);\n if (count && messageType === 'warning') {\n hideTooltip($input);\n }\n };\n\n $input\n .attr('maxlength', maxChars)\n .on('focus.commonRenderer', function() {\n updateMaxCharsTooltip();\n })\n .on('keyup.commonRenderer', function() {\n updateMaxCharsTooltip();\n containerHelper.triggerResponseChangeEvent(interaction);\n })\n .on('blur.commonRenderer', function() {\n hideTooltip($input);\n });\n } else if (attributes.patternMask) {\n updatePatternMaskTooltip = function updatePatternMaskTooltip() {\n var regex = new RegExp(attributes.patternMask);\n\n hideTooltip($input);\n\n if ($input.val()) {\n if (regex.test($input.val())) {\n $input.removeClass('invalid');\n } else {\n $input.addClass('invalid');\n showTooltip($input, 'error', __('This is not a valid answer'));\n }\n }\n };\n\n $input\n .on('focus.commonRenderer', function() {\n updatePatternMaskTooltip();\n })\n .on('keyup.commonRenderer', function() {\n updatePatternMaskTooltip();\n containerHelper.triggerResponseChangeEvent(interaction);\n })\n .on('blur.commonRenderer', function() {\n hideTooltip($input);\n });\n } else {\n $input.on('keyup.commonRenderer', function() {\n containerHelper.triggerResponseChangeEvent(interaction);\n });\n }\n };\n\n var resetResponse = function resetResponse(interaction) {\n interaction.getContainer().val('');\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * Special value: the empty object value {} resets the interaction responses\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function setResponse(interaction, response) {\n var responseValue;\n\n try {\n responseValue = pciResponse.unserialize(response, interaction);\n } catch (e) {}\n\n if (responseValue && responseValue.length) {\n interaction.getContainer().val(responseValue[0]);\n }\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10333\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function getResponse(interaction) {\n var ret = { base: {} },\n value,\n $input = interaction.getContainer(),\n attributes = interaction.getAttributes(),\n baseType = interaction.getResponseDeclaration().attr('baseType'),\n numericBase = attributes.base || 10;\n\n if ($input.hasClass('invalid') || (attributes.placeholderText && $input.val() === attributes.placeholderText)) {\n //invalid response or response equals to the placeholder text are considered empty\n value = '';\n } else {\n if (baseType === 'integer') {\n value = locale.parseInt($input.val(), numericBase);\n } else if (baseType === 'float') {\n value = locale.parseFloat($input.val());\n } else if (baseType === 'string') {\n value = $input.val();\n }\n }\n\n ret.base[baseType] = isNaN(value) && typeof value === 'number' ? '' : value;\n\n return ret;\n };\n\n var destroy = function destroy(interaction) {\n $$1('input.qti-textEntryInteraction').each(function(index, el) {\n var $input = $$1(el);\n if ($input.data('$tooltip')) {\n $input.data('$tooltip').dispose();\n $input.removeData('$tooltip');\n }\n });\n\n //remove event\n $$1(document).off('.commonRenderer');\n containerHelper.get(interaction).off('.commonRenderer');\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n var TextEntryInteraction = {\n qtiClass: 'textEntryInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState\n };\n\n return TextEntryInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/interactions/UploadInteraction',['jquery', 'lodash', 'i18n', 'core/mimetype', 'handlebars', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/instructions/instructionManager', 'taoQtiItem/qtiCommonRenderer/helpers/uploadMime', 'ui/progressbar', 'ui/previewer', 'ui/modal', 'ui/waitForMedia'], function ($$1, _, __, mimetype, Handlebars, DOMPurify, containerHelper, instructionMgr, uploadHelper, progressbar, previewer, modal, waitForMedia) { '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 mimetype = mimetype && Object.prototype.hasOwnProperty.call(mimetype, 'default') ? mimetype['default'] : mimetype;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n instructionMgr = instructionMgr && Object.prototype.hasOwnProperty.call(instructionMgr, 'default') ? instructionMgr['default'] : instructionMgr;\n uploadHelper = uploadHelper && Object.prototype.hasOwnProperty.call(uploadHelper, 'default') ? uploadHelper['default'] : uploadHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var stack1, helper;\n if (helper = helpers.prompt) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.prompt); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"accept=\\\"\";\n if (helper = helpers.accept) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.accept); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-interaction qti-blockInteraction qti-uploadInteraction\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n\t\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.prompt), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n\t<div class=\\\"instruction-container\\\"></div>\\n <div class=\\\"file-upload fixed-grid-row lft\\\">\\n <div class=\\\"progressbar\\\"></div>\\n <span class=\\\"btn-info small col-4\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Browse...\", options) : helperMissing.call(depth0, \"__\", \"Browse...\", options)))\n + \"</span>\\n <span class=\\\"file-name placeholder col-8 truncate\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"No file selected\", options) : helperMissing.call(depth0, \"__\", \"No file selected\", options)))\n + \"</span>\\n <input type=\\\"file\\\" \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.accept), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"/>\\n </div>\\n <div class=\\\"file-upload-preview lft visible-file-upload-preview runtime-visible-file-upload-preview\\\">\\n <p class=\\\"nopreview\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"No preview available\", options) : helperMissing.call(depth0, \"__\", \"No preview available\", options)))\n + \"</p>\\n </div>\\n <div class=\\\"file-upload-preview-popup modal\\\">\\n <div class=\\\"modal-body\\\">\\n </div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var _initialInstructions = __('Browse your computer and select the appropriate file.');\n\n var _readyInstructions = __('The selected file is ready to be sent.');\n\n /**\n * Validate type of selected file\n * @param file\n * @param interaction\n * @returns {boolean}\n */\n var validateFileType = function validateFileType(file, interaction) {\n var expectedTypes = uploadHelper.getExpectedTypes(interaction, true);\n var filetype = mimetype.getMimeType(file);\n if (expectedTypes.length) {\n return _.indexOf(expectedTypes, filetype) >= 0;\n }\n return true;\n };\n\n /**\n * Compute the message to be displayed when an invalid file type has been selected\n *\n * @param {Object} interaction\n * @param {Function} userSelectedType\n * @param {Function} messageWrongType\n * @returns {String}\n */\n var getMessageWrongType = function getMessageWrongType(interaction, userSelectedType, messageWrongType) {\n var types = uploadHelper.getExpectedTypes(interaction);\n var expectedTypeLabels = _.map(_.uniq(types), function (type) {\n var mime = _.find(uploadHelper.getMimeTypes(), { mime: type });\n if (mime) {\n return mime.label;\n } else {\n return type;\n }\n });\n\n if (messageWrongType && _.isFunction(messageWrongType)) {\n return messageWrongType({\n userSelectedType: userSelectedType,\n types: expectedTypeLabels\n });\n } else {\n return __(\n 'Wrong type of file. Expected %s. The selected file has the mimetype \"%s\".',\n expectedTypeLabels.join(__(' or ')),\n userSelectedType\n );\n }\n };\n\n var _handleSelectedFiles = function _handleSelectedFiles(interaction, file, messageWrongType) {\n var reader;\n var $container = containerHelper.get(interaction);\n\n // Show information about the processed file to the candidate.\n var filename = file.name;\n var filetype = mimetype.getMimeType(file);\n instructionMgr.removeInstructions(interaction);\n instructionMgr.appendInstruction(interaction, _initialInstructions);\n\n if (!validateFileType(file, interaction)) {\n instructionMgr.removeInstructions(interaction);\n instructionMgr.appendInstruction(\n interaction,\n getMessageWrongType(interaction, filetype, messageWrongType),\n function () {\n this.setLevel('error');\n //clear preview\n }\n );\n instructionMgr.validateInstructions(interaction);\n return;\n }\n\n $container\n .find('.file-name')\n .empty()\n .append(filename);\n\n // Let's read the file to get its base64 encoded content.\n reader = new FileReader();\n\n // Update file processing progress.\n\n reader.onload = function (e) {\n var base64Data, commaPosition, base64Raw, $previewArea;\n\n instructionMgr.removeInstructions(interaction);\n instructionMgr.appendInstruction(interaction, _readyInstructions, function () {\n this.setLevel('success');\n });\n instructionMgr.validateInstructions(interaction);\n\n $container.find('.progressbar').progressbar('value', 100);\n\n base64Data = e.target.result;\n commaPosition = base64Data.indexOf(',');\n\n // Store the base64 encoded data for later use.\n base64Raw = base64Data.substring(commaPosition + 1);\n interaction.data('_response', { base: { file: { data: base64Raw, mime: filetype, name: filename } } });\n\n $previewArea = $container.find('.file-upload-preview');\n $previewArea.previewer({\n url: base64Data,\n name: filename,\n mime: filetype\n });\n\n // we wait for the image to be completely loaded\n $previewArea.waitForMedia(function () {\n var $originalImg = $previewArea.find('img'),\n $largeDisplay = $$1('.file-upload-preview-popup'),\n $item = $$1('.qti-item'),\n itemWidth = $item.width(),\n winWidth = $$1(window).width() - 80,\n fullHeight = $$1('body').height(),\n imgNaturalWidth,\n isOversized,\n modalWidth;\n\n if (!$originalImg.length) {\n return;\n }\n\n imgNaturalWidth = $originalImg[0].naturalWidth;\n isOversized = imgNaturalWidth > itemWidth;\n modalWidth = Math.min(winWidth, imgNaturalWidth);\n\n $previewArea.toggleClass('clickable', isOversized);\n\n if (!isOversized) {\n return;\n }\n\n $previewArea.on('click', function () {\n var $modalBody;\n\n $$1('.upload-ia-modal-bg').remove();\n\n // remove any previous unnecessary content before inserting the preview image\n $modalBody = $largeDisplay.find('.modal-body');\n $modalBody.empty().append($originalImg.clone());\n\n $largeDisplay\n .on('opened.modal', function () {\n // prevents the rest of the page from scrolling when modal is open\n $$1('.tao-item-scope.tao-preview-scope').css('overflow', 'hidden');\n\n $largeDisplay.css({\n width: modalWidth,\n height: fullHeight,\n left: (modalWidth - itemWidth - 40) / -2\n });\n })\n .on('closed.modal', function () {\n // make the page scrollable again\n $$1('.tao-item-scope.tao-preview-scope').css('overflow', 'auto');\n })\n .modal({ modalOverlayClass: 'modal-bg upload-ia-modal-bg' });\n });\n });\n };\n\n reader.onloadstart = function onloadstart() {\n instructionMgr.removeInstructions(interaction);\n $container.find('.progressbar').progressbar('value', 0);\n };\n\n reader.onprogress = function onprogress(e) {\n var percentProgress = Math.ceil((Math.round(e.loaded) / Math.round(e.total)) * 100);\n $container.find('.progressbar').progressbar('value', percentProgress);\n };\n\n reader.readAsDataURL(file);\n };\n\n /**\n * Resets the GUI state to the default display.\n *\n * @param {Object} interaction\n */\n function resetGui(interaction) {\n var $container = containerHelper.get(interaction);\n $container.find('.file-name').text(__('No file selected'));\n $container.find('.btn-info').text(__('Browse...'));\n }\n function callResetGui(interaction) {\n const renderer = interaction.getRenderer();\n if (_.isFunction(renderer.resetGui)) {\n renderer.resetGui(interaction);\n }\n }\n\n /**\n * Init rendering, called after template injected into the DOM\n * All options are listed in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n */\n function render(interaction) {\n var changeListener,\n self = this,\n $input;\n var $container = containerHelper.get(interaction);\n callResetGui(interaction);\n\n instructionMgr.appendInstruction(interaction, _initialInstructions);\n\n //init response\n interaction.data('_response', { base: null });\n\n changeListener = function (e) {\n var file = e.target.files[0];\n\n // Are you really sure something was selected\n // by the user... huh? :)\n if (typeof file !== 'undefined') {\n _handleSelectedFiles(interaction, file, self.getCustomMessage('upload', 'wrongType'));\n }\n };\n\n $input = $container.find('input');\n\n $container.find('.progressbar').progressbar();\n\n if (!window.FileReader) {\n throw new Error('FileReader API not supported! Please use a compliant browser!');\n }\n $input.bind('change', changeListener);\n\n // IE Specific hack, prevents button to slightly move on click\n $input.bind('mousedown', function (e) {\n e.preventDefault();\n $$1(this).blur();\n return false;\n });\n }\n var resetResponse = function resetResponse(interaction) {\n callResetGui(interaction);\n };\n\n /**\n * Set the response to the rendered interaction.\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @param {object} response\n */\n var setResponse = function setResponse(interaction, response) {\n var filename,\n $container = containerHelper.get(interaction);\n\n if (response.base !== null) {\n filename =\n typeof response.base.file.name !== 'undefined' ? response.base.file.name : 'previously-uploaded-file';\n $container\n .find('.file-name')\n .empty()\n .text(filename);\n }\n\n interaction.data('_response', response);\n };\n\n /**\n * Return the response of the rendered interaction\n *\n * The response format follows the IMS PCI recommendation :\n * http://www.imsglobal.org/assessment/pciv1p0cf/imsPCIv1p0cf.html#_Toc353965343\n *\n * Available base types are defined in the QTI v2.1 information model:\n * http://www.imsglobal.org/question/qtiv2p1/imsqti_infov2p1.html#element10321\n *\n * @param {object} interaction\n * @returns {object}\n */\n var getResponse = function getResponse(interaction) {\n return interaction.data('_response');\n };\n\n var destroy = function destroy(interaction) {\n //remove event\n $$1(document).off('.commonRenderer');\n containerHelper.get(interaction).off('.commonRenderer');\n\n //remove instructions\n instructionMgr.removeInstructions(interaction);\n\n //remove all references to a cache container\n containerHelper.reset(interaction);\n };\n\n /**\n * Set the interaction state. It could be done anytime with any state.\n *\n * @param {Object} interaction - the interaction instance\n * @param {Object} state - the interaction state\n */\n var setState = function setState(interaction, state) {\n if (_.isObject(state)) {\n if (state.response) {\n interaction.resetResponse();\n interaction.setResponse(state.response);\n }\n }\n };\n\n /**\n * Get the interaction state.\n *\n * @param {Object} interaction - the interaction instance\n * @returns {Object} the interaction current state\n */\n var getState = function getState(interaction) {\n var state = {};\n var response = interaction.getResponse();\n\n if (response) {\n state.response = response;\n }\n return state;\n };\n\n /**\n * Set additional data to the template (data that are not really part of the model).\n * @param {Object} interaction - the interaction\n * @param {Object} [data] - interaction custom data\n * @returns {Object} custom data\n * This way we could cover a lot more types. How could this be matched with the preview templates\n * in tao/views/js/ui/previewer.js\n */\n var getCustomData = function getCustomData(interaction, data) {\n return _.merge(data || {}, {\n accept: uploadHelper.getExpectedTypes(interaction, true).join(',')\n });\n };\n\n var UploadInteraction = {\n qtiClass: 'uploadInteraction',\n template: tpl,\n render: render,\n getContainer: containerHelper.get,\n setResponse: setResponse,\n getResponse: getResponse,\n resetResponse: resetResponse,\n destroy: destroy,\n setState: setState,\n getState: getState,\n getData: getCustomData,\n\n // Exposed private methods for qtiCreator\n resetGui: resetGui\n };\n\n return UploadInteraction;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Item',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/itemStylesheetHandler'], function (Handlebars, __, _, DOMPurify, containerHelper, itemStylesheetHandler) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n itemStylesheetHandler = itemStylesheetHandler && Object.prototype.hasOwnProperty.call(itemStylesheetHandler, 'default') ? itemStylesheetHandler['default'] : itemStylesheetHandler;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" id=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-item tao-scope runtime\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n <div\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.id), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" class=\\\"qti-itemBody \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n <div id=\\\"modalFeedbacks\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA;\n */\n\n var Item = {\n qtiClass: 'assessmentItem',\n template: tpl,\n getContainer: containerHelper.get,\n\n /**\n * Rendering initializations for the item\n * @param {Object} item - the item model\n */\n render: function render(item) {\n //target blank for all <a>\n containerHelper.targetBlank(containerHelper.get(item));\n\n //add stylesheets\n itemStylesheetHandler.attach(item.stylesheets);\n },\n\n /**\n * Unrender\n * @param {Object} item - the item model\n */\n destroy: function destroy(item) {\n //clear the container cache\n containerHelper.clear();\n\n //detach stylesheets\n if (item.stylesheets) {\n itemStylesheetHandler.detach(item.stylesheets);\n }\n }\n };\n\n return Item;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Math',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'mathJax'], function (_, Handlebars, __, DOMPurify, containerHelper, MathJax) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n MathJax = MathJax && Object.prototype.hasOwnProperty.call(MathJax, 'default') ? MathJax['default'] : MathJax;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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 += \"<span data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"math\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"><math display=\\\"block\\\">\";\n if (helper = helpers.raw) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.raw); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</math></span>\";\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"math\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"><math>\";\n if (helper = helpers.raw) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.raw); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</math></span>\";\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.block), {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function tpl(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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n // Do not wait between rendering each individual math element\n // http://docs.mathjax.org/en/latest/api/hub.html\n if (typeof MathJax !== 'undefined' && MathJax) {\n MathJax.Hub.processSectionDelay = 0;\n }\n\n var _Math = {\n qtiClass: 'math',\n template: tpl,\n getContainer: containerHelper.get,\n render: function render(math) {\n return new Promise(function (resolve) {\n var $item = containerHelper.get(math).closest('.qti-item');\n if (typeof MathJax !== 'undefined' && MathJax) {\n //MathJax needs to be exported globally to integrate with tools like TTS, it's weird...\n if (!window.MathJax) {\n window.MathJax = MathJax;\n }\n //defer execution fix some rendering issue in chrome\n if ($item.length) {\n MathJax.Hub.Queue(['Typeset', MathJax.Hub, $item[0]]);\n MathJax.Hub.Queue(resolve);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n };\n\n return _Math;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/container',['lodash', 'jquery'], function (_, $) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\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 /**\n * Prefix used to the variable storage\n * @type String\n */\n var _prefix = 'x-tao-';\n\n /**\n * Check if the element is of a qti container type\n *\n * @private\n * @param {Object} element\n * @returns {Boolean}\n */\n function _checkContainerType(element) {\n if (_.isFunction(element.initContainer) && _.isFunction(element.body)) {\n return true;\n } else {\n throw 'the element is not of a container type';\n }\n }\n\n /**\n * Get the body element of the container\n *\n * @private\n * @param {Object} element\n * @returns {JQuery}\n */\n function _getBodyDom(element) {\n if (_checkContainerType(element)) {\n return $('<div>')\n .html(element.body())\n .find('.x-tao-wrapper');\n }\n }\n\n /**\n * Add a class to the body element of the qti container\n *\n * @private\n * @param {Object} element\n * @param {String} newClass\n * @param {String} [oldClass]\n */\n function _setBodyDomClass(element, newClass, oldClass) {\n if (_checkContainerType(element) && (oldClass || newClass)) {\n var $wrapper = $('<div>').html(element.body());\n //set css class to element\n _setDomClass($wrapper, newClass, oldClass);\n //set to the model\n element.body($wrapper.html());\n }\n }\n\n /**\n * Switch class to the wrapped DOM\n *\n * @param {JQuery} $wrapper\n * @param {String} newClass\n * @param {String} oldClass\n * @returns {undefined}\n */\n function _setDomClass($wrapper, newClass, oldClass) {\n var $bodyDom = $wrapper.find('.x-tao-wrapper');\n if (!$bodyDom.length) {\n //create one\n $wrapper.wrapInner('<div class=\"x-tao-wrapper\">');\n $bodyDom = $wrapper.find('.x-tao-wrapper');\n }\n if (oldClass) {\n $bodyDom.removeClass(oldClass);\n }\n if (newClass) {\n $bodyDom.addClass(newClass);\n }\n }\n\n /**\n * Add manually the encoded information to a dom element\n *\n * @param {JQuery} $wrapper - the wrapper of the element that will holds the information\n * @param {String} dataName - the name of the information\n * @param {String} newValue - the new value to be added\n * @param {String} [oldValue] - the old value to be removed\n * @returns {undefined}\n */\n function setEncodedDataToDom($wrapper, dataName, newValue, oldValue) {\n _setDomClass($wrapper, _getEncodedDataString(dataName, newValue), _getEncodedDataString(dataName, oldValue));\n }\n\n /**\n * Get the full variable name for the data store\n *\n * @param {String} dataName\n * @param {String} value\n * @returns {String}\n */\n function _getEncodedDataString(dataName, value) {\n if (dataName && value) {\n return _prefix + dataName + '-' + value;\n }\n return '';\n }\n\n /**\n * Set a data string to the element identified by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @param {String} newValue\n * @returns {undefined}\n */\n function setEncodedData(element, dataName, newValue) {\n var oldValue = getEncodedData(element, dataName);\n return _setBodyDomClass(\n element,\n _getEncodedDataString(dataName, newValue),\n _getEncodedDataString(dataName, oldValue)\n );\n }\n\n /**\n * Remove the stored data from the element by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @returns {unresolved}\n */\n function removeEncodedData(element, dataName) {\n var oldValue = getEncodedData(element, dataName);\n if (dataName && oldValue) {\n _setBodyDomClass(element, '', _getEncodedDataString(dataName, oldValue));\n }\n }\n\n /**\n * Check if the stored data exist\n *\n * @param {Object} element\n * @param {String} dataName\n * @param {String} value\n * @returns {Boolean}\n */\n function hasEncodedData(element, dataName, value) {\n var $body = _getBodyDom(element);\n if ($body && $body.length && dataName && value) {\n return $body.hasClass(_getEncodedDataString(dataName, value));\n }\n return false;\n }\n\n /**\n * Get the encoded data identified by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @returns {String}\n */\n function getEncodedData(element, dataName) {\n var regex, matches;\n var $body = _getBodyDom(element);\n if (dataName && $body && $body.length && $body.attr('class')) {\n regex = new RegExp(_prefix + dataName + '-([a-zA-Z0-9-._]*)');\n matches = $body.attr('class').match(regex);\n if (matches) {\n return matches[1];\n }\n }\n }\n\n /**\n * Provide a set of helper functions to set,retirve and manage string data to a container type qti element.\n */\n var container = {\n setEncodedData: setEncodedData,\n hasEncodedData: hasEncodedData,\n getEncodedData: getEncodedData,\n removeEncodedData: removeEncodedData,\n setEncodedDataToDom: setEncodedDataToDom\n };\n\n return container;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/ModalFeedback',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiItem/helper/container', 'ui/waitForMedia', 'ui/modal'], function (_, Handlebars, __, DOMPurify, containerHelper, coreContainerHelper, waitForMedia, modal) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n coreContainerHelper = coreContainerHelper && Object.prototype.hasOwnProperty.call(coreContainerHelper, 'default') ? coreContainerHelper['default'] : coreContainerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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 \"modal \";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"<h2 class=\\\"qti-title modal-title\\\">\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.title)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"</h2>\";\n return buffer;\n }\n\n buffer += \"<div id=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-identifier=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.identifier)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" class=\\\"\";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.inline), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"qti-modalFeedback \";\n if (helper = helpers.feedbackStyle) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.feedbackStyle); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.title), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"modal-body\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n</div>\";\n return buffer;\n });\n function tpl(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) 2014-2019 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var modalFeedbackRenderer = {\n qtiClass: 'modalFeedback',\n template: tpl,\n getContainer: containerHelper.get,\n width: 600,\n getData: function(fb, data) {\n data.feedbackStyle = coreContainerHelper.getEncodedData(fb, 'modalFeedback');\n return data;\n },\n render: function(modalFeedback, data) {\n var $modal = containerHelper.get(modalFeedback);\n\n $modal.waitForMedia(function() {\n //when we are sure that media is loaded:\n $modal\n .on('opened.modal', function() {\n //set item body height\n var $itemBody = containerHelper.get(modalFeedback.getRootElement()).children('.qti-itemBody');\n var requiredHeight = $modal.outerHeight() + parseInt($modal.css('top'));\n if (requiredHeight > $itemBody.height()) {\n $itemBody.height(requiredHeight);\n }\n })\n .on('closed.modal', function() {\n data = data || {};\n\n if (_.isFunction(data.callback)) {\n data.callback.call(this);\n }\n })\n .modal({\n startClosed: false,\n minHeight: modalFeedbackRenderer.minHeight,\n width: modalFeedbackRenderer.width\n });\n });\n }\n };\n\n return modalFeedbackRenderer;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Object',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'ui/previewer'], function (Handlebars, __, _, DOMPurify, containerHelper, previewer) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-object-container\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {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 tpl(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) 2014 (original work) Open Assessment Technologies SA\n */\n\n var _Object = {\n qtiClass: 'object',\n template: tpl,\n getContainer: containerHelper.get,\n render: function(obj) {\n var $container = containerHelper.get(obj);\n var previewOptions = {\n url: obj.renderer.resolveUrl(obj.attr('data')),\n mime: obj.attr('type')\n };\n if (obj.attr('height')) {\n previewOptions.height = obj.attr('height');\n }\n if (obj.attr('width')) {\n previewOptions.width = obj.attr('width');\n }\n if (previewOptions.url && previewOptions.mime) {\n $container.previewer(previewOptions);\n }\n }\n };\n\n return _Object;\n\n});\n\n","define('qtiInfoControlContext',[],function(){\n\n //need a global reference to have picHooks shared in two different requirejs context (\"default\" and \"portableCustomInteraction\")\n window._picHooks = window._picHooks || {};\n\n /**\n * Global object accessible by all PICs\n *\n * @type Object\n */\n var taoQtiInfoControlContext = {\n /**\n * register a info control (its runtime model) in global registery\n * register a renderer\n *\n * @param {Object} picHook\n * @returns {undefined}\n */\n register : function(picHook){\n //@todo check picHook validity\n window._picHooks[picHook.getTypeIdentifier()] = picHook;\n },\n /**\n * notify when a info control is ready for test taker interaction\n *\n * @param {string} picInstance\n * @fires custominteractionready\n */\n notifyReady : function(picInstance){\n //@todo add pciInstance as event data and notify event to delivery engine\n },\n /**\n * Get a cloned object representing the PIC model\n *\n * @param {string} typeIdentifier\n * @returns {Object} clonedPciModel\n */\n createPciInstance : function(typeIdentifier){\n\n if(window._picHooks[typeIdentifier]){\n\n var instance = {},\n proto = window._picHooks[typeIdentifier];\n\n for(var name in proto){\n if(typeof proto[name] === 'function'){\n //@todo : delegate function call for better performance ?\n instance[name] = proto[name];\n }else if(proto[name] !== null && typeof proto[name] === 'object'){\n //a plain object:\n instance[name] = proto[name].constructor();\n }else{\n //not an object (nor a function) : e.g. 0, 123, '123', null, undefined\n instance[name] = proto[name];\n }\n }\n\n return instance;\n\n }else{\n throw 'no portable info control hook found with the id ' + typeIdentifier;\n }\n }\n };\n\n\n return taoQtiInfoControlContext;\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/PortableInfoControl',['lodash', 'handlebars', 'i18n', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'taoQtiItem/qtiCommonRenderer/helpers/PortableElement', 'qtiInfoControlContext', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/portableElementRegistry/icRegistry'], function (_, Handlebars, __, DOMPurify, containerHelper, PortableElement, qtiInfoControlContext, util, icRegistry) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n PortableElement = PortableElement && Object.prototype.hasOwnProperty.call(PortableElement, 'default') ? PortableElement['default'] : PortableElement;\n qtiInfoControlContext = qtiInfoControlContext && Object.prototype.hasOwnProperty.call(qtiInfoControlContext, 'default') ? qtiInfoControlContext['default'] : qtiInfoControlContext;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n icRegistry = icRegistry && Object.prototype.hasOwnProperty.call(icRegistry, 'default') ? icRegistry['default'] : icRegistry;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-infoControl\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.markup) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.markup); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\";\n return buffer;\n });\n function tpl(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 (original work) Open Assessment Technologies SA\n *\n */\n\n /**\n * Get the PIC instance associated to the infoControl object\n * If none exists, create a new one based on the PIC typeIdentifier\n *\n * @param {Object} infoControl - the js object representing the infoControl\n * @returns {Object} PIC instance\n */\n var _getPic = function(infoControl) {\n var typeIdentifier,\n pic = infoControl.data('pic') || undefined;\n\n if (!pic) {\n typeIdentifier = infoControl.typeIdentifier;\n pic = qtiInfoControlContext.createPciInstance(typeIdentifier);\n\n if (pic) {\n //binds the PIC instance to TAO infoControl object and vice versa\n infoControl.data('pic', pic);\n pic._taoInfoControl = infoControl;\n } else {\n throw 'no custom infoControl hook found for the type ' + typeIdentifier;\n }\n }\n\n return pic;\n };\n\n /**\n * Execute javascript codes to bring the infoControl to life.\n * At this point, the html markup must already be ready in the document.\n *\n * It is done in 5 steps :\n * 1. ensure the context is configured correctly\n * 2. require all required libs\n * 3. create a pic instance based on the infoControl model\n * 4. initialize the rendering\n * 5. restore full state if applicable\n *\n * @param {Object} infoControl\n * @param {Object} [options]\n */\n var render = function(infoControl, options) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var state = {}; //@todo pass state and response to renderer here:\n var id = infoControl.attr('id');\n var typeIdentifier = infoControl.typeIdentifier;\n var config = infoControl.properties;\n var $dom = containerHelper.get(infoControl).children();\n var assetManager = self.getAssetManager();\n\n icRegistry\n .loadRuntimes()\n .then(function() {\n var requireEntries = [];\n var runtime = icRegistry.getRuntime(typeIdentifier);\n\n if (!runtime) {\n return reject('The runtime for the pic cannot be found : ' + typeIdentifier);\n }\n\n //load the entrypoint, becomes optional per IMS PCI v1\n if (runtime.hook) {\n requireEntries.push(runtime.hook.replace(/\\.js$/, ''));\n }\n\n //load required libraries\n _.forEach(runtime.libraries, function(module) {\n requireEntries.push(module.replace(/\\.js$/, ''));\n });\n\n //load stylesheets\n _.forEach(runtime.stylesheets, function(stylesheet) {\n requireEntries.push('css!' + stylesheet.replace(/\\.css$/, ''));\n });\n\n //load the entrypoint\n window.require(requireEntries, function() {\n var pic = _getPic(infoControl);\n var picAssetManager = {\n resolve: function resolve(url) {\n var resolved = assetManager.resolveBy('portableElementLocation', url);\n if (resolved === url) {\n return assetManager.resolveBy('baseUrl', url);\n } else {\n return resolved;\n }\n }\n };\n\n if (pic) {\n //call pic initialize() to render the pic\n pic.initialize(id, $dom[0], config, picAssetManager);\n //restore context (state + response)\n pic.setSerializedState(state);\n\n return resolve();\n }\n\n return reject('Unable to initialize pic : ' + id);\n }, reject);\n })\n .catch(function(error) {\n reject('Error loading runtime : ' + id);\n });\n });\n };\n\n /**\n * Reverse operation performed by render()\n * After this function is executed, only the inital naked markup remains\n * Event listeners are removed and the state and the response are reset\n *\n * @param {Object} infoControl\n */\n var destroy = function destroy(infoControl) {\n _getPic(infoControl).destroy();\n };\n\n /**\n * Restore the state of the infoControl from the serializedState.\n *\n * @param {Object} infoControl - the element instance\n * @param {Object} state - the state to set\n */\n var setState = function setState(infoControl, state) {\n _getPic(infoControl).setSerializedState(state);\n };\n\n /**\n * Get the current state of the infoControl as a string.\n * It enables saving the state for later usage.\n *\n * @param {Object} infoControl - the element instance\n * @returns {Object} the state\n */\n var getState = function getState(infoControl) {\n return _getPic(infoControl).getSerializedState();\n };\n\n var PortableInfoControl = {\n qtiClass: 'infoControl',\n template: tpl,\n getData: function(infoControl, data) {\n //remove ns + fix media file path\n var markup = data.markup;\n markup = util.removeMarkupNamespaces(markup);\n markup = PortableElement.fixMarkupMediaSources(markup, this);\n data.markup = markup;\n return data;\n },\n render: render,\n getContainer: containerHelper.get,\n destroy: destroy,\n getState: getState,\n setState: setState\n };\n\n return PortableInfoControl;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/PrintedVariable',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<span data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"printedVariable\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n if (helper = helpers.value) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.value); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</span>\";\n return buffer;\n });\n function tpl(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 (under the project TAO-PRODUCT);\n */\n\n var PrintedVariable = {\n qtiClass: 'printedVariable',\n template: tpl,\n getContainer: containerHelper.get\n };\n\n return PrintedVariable;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/interactionHelper',['lodash', 'taoQtiItem/qtiItem/core/Element'], function (_, Element) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n\n /**\n * Common helper functions\n */\n var interactionHelper = {\n convertChoices: function(choices, outputType) {\n var ret = [],\n _this = this;\n\n _.each(choices, function(c) {\n if (Element.isA(c, 'choice')) {\n switch (outputType) {\n case 'serial':\n ret.push(c.getSerial());\n break;\n case 'identifier':\n ret.push(c.id());\n break;\n default:\n ret.push(c);\n }\n } else if (_.isArray(c)) {\n ret.push(_this.convertChoices(c, outputType));\n }\n });\n\n return ret;\n },\n findChoices: function(interaction, choices, inputType) {\n var ret = [],\n _this = this;\n\n _.each(choices, function(c) {\n var choice;\n if (_.isString(c)) {\n if (inputType === 'serial') {\n choice = interaction.getChoice(c);\n if (choice) {\n ret.push(choice);\n }\n } else if (inputType === 'identifier') {\n choice = interaction.getChoiceByIdentifier(c);\n if (choice) {\n ret.push(choice);\n }\n } else {\n ret.push(c);\n }\n } else if (_.isArray(c)) {\n ret.push(_this.findChoices(interaction, c, inputType));\n } else {\n ret.push(c);\n }\n });\n\n return ret;\n },\n shuffleChoices: function(choices) {\n var r = [], //returned array\n f = {}, //fixed choices array\n j = 0;\n\n for (var i in choices) {\n if (Element.isA(choices[i], 'choice')) {\n var choice = choices[i];\n if (choice.attr('fixed')) {\n f[j] = choice;\n }\n r.push(choice);\n j++;\n } else {\n throw 'invalid element in array: is not a qti choice';\n }\n }\n\n for (var n = 0; n < r.length - 1; n++) {\n if (f[n]) {\n continue;\n }\n var k = -1;\n do {\n k = n + Math.floor(Math.random() * (r.length - n));\n } while (f[k]);\n var tmp = r[k];\n r[k] = r[n];\n r[n] = tmp;\n }\n\n return r;\n },\n serialToIdentifier: function(interaction, choiceSerial) {\n var choice = interaction.getChoice(choiceSerial);\n if (choice) {\n return choice.id();\n } else {\n return '';\n }\n }\n };\n\n return interactionHelper;\n\n});\n\n","define('taoQtiItem/qtiRunner/core/Renderer',['lodash', 'jquery', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/interactionHelper', 'ui/themeLoader', 'ui/themes', 'core/moduleLoader', 'handlebars'], function (_, $, Element, interactionHelper, themeLoader, themesHelper, moduleLoader, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n interactionHelper = interactionHelper && Object.prototype.hasOwnProperty.call(interactionHelper, 'default') ? interactionHelper['default'] : interactionHelper;\n themeLoader = themeLoader && Object.prototype.hasOwnProperty.call(themeLoader, 'default') ? themeLoader['default'] : themeLoader;\n themesHelper = themesHelper && Object.prototype.hasOwnProperty.call(themesHelper, 'default') ? themesHelper['default'] : themesHelper;\n moduleLoader = moduleLoader && Object.prototype.hasOwnProperty.call(moduleLoader, 'default') ? moduleLoader['default'] : moduleLoader;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n //webpack trick : handlebar is usale only from cjs.\n //but anyway we should deprecate the practice to invoke\n //directly Handlebars at runtimej\n let hb = Handlebars;\n if(typeof hb.compile !== 'function'){\n hb = require('handlebars');\n }\n\n var _isValidRenderer = function(renderer) {\n var valid = true;\n\n if (typeof renderer !== 'object') {\n return false;\n }\n\n var classCorrect = false;\n if (renderer.qtiClass) {\n if (_.indexOf(_renderableClasses, renderer.qtiClass) >= 0) {\n classCorrect = true;\n } else {\n var pos = renderer.qtiClass.indexOf('.');\n if (pos > 0) {\n var qtiClass = renderer.qtiClass.slice(0, pos);\n var subClass = renderer.qtiClass.slice(pos + 1);\n if (_renderableSubclasses[qtiClass] && _.indexOf(_renderableSubclasses[qtiClass], subClass) >= 0) {\n classCorrect = true;\n }\n }\n }\n }\n if (!classCorrect) {\n valid = false;\n throw new Error('invalid qti class name in renderer declaration : ' + renderer.qtiClass);\n }\n\n if (!renderer.template) {\n valid = false;\n throw new Error('missing template in renderer declaration : ' + renderer.qtiClass);\n }\n\n return valid;\n };\n\n var _renderableClasses = [\n '_container',\n 'assessmentItem',\n 'stylesheet',\n 'responseDeclaration',\n 'outcomeDeclaration',\n 'responseProcessing',\n '_simpleFeedbackRule',\n '_tooltip',\n 'img',\n 'math',\n 'object',\n 'table',\n 'modalFeedback',\n 'rubricBlock',\n 'associateInteraction',\n 'choiceInteraction',\n 'extendedTextInteraction',\n 'gapMatchInteraction',\n 'graphicAssociateInteraction',\n 'graphicGapMatchInteraction',\n 'graphicOrderInteraction',\n 'hotspotInteraction',\n 'hottextInteraction',\n 'inlineChoiceInteraction',\n 'matchInteraction',\n 'mediaInteraction',\n 'orderInteraction',\n 'selectPointInteraction',\n 'sliderInteraction',\n 'textEntryInteraction',\n 'uploadInteraction',\n 'endAttemptInteraction',\n 'customInteraction',\n 'prompt',\n 'associableHotspot',\n 'gap',\n 'gapImg',\n 'gapText',\n 'hotspotChoice',\n 'hottext',\n 'inlineChoice',\n 'simpleAssociableChoice',\n 'simpleChoice',\n 'infoControl',\n 'include',\n 'printedVariable'\n ];\n\n /**\n * The list of qti element dependencies. It is used internally to load dependent qti classes\n */\n var _dependencies = {\n assessmentItem: ['stylesheet', '_container', 'prompt', 'modalFeedback'],\n rubricBlock: ['_container'],\n associateInteraction: ['simpleAssociableChoice'],\n choiceInteraction: ['simpleChoice'],\n gapMatchInteraction: ['gap', 'gapText'],\n graphicAssociateInteraction: ['associableHotspot'],\n graphicGapMatchInteraction: ['associableHotspot', 'gapImg'],\n graphicOrderInteraction: ['hotspotChoice'],\n hotspotInteraction: ['hotspotChoice'],\n hottextInteraction: ['hottext'],\n inlineChoiceInteraction: ['inlineChoice'],\n matchInteraction: ['simpleAssociableChoice'],\n orderInteraction: ['simpleChoice']\n };\n\n /**\n * The list of supported qti subclasses.\n */\n var _renderableSubclasses = {\n simpleAssociableChoice: ['associateInteraction', 'matchInteraction'],\n simpleChoice: ['choiceInteraction', 'orderInteraction']\n };\n\n /**\n * List of the default properties for the item\n */\n var _defaults = {\n shuffleChoices: true\n };\n\n /**\n * Get the location of the document, useful to define a baseUrl for the required context\n * @returns {String}\n */\n function getDocumentBaseUrl() {\n return window.location.protocol + '//' + window.location.host + window.location.pathname.replace(/([^\\/]*)$/, '');\n }\n\n /**\n * The built Renderer class\n * @constructor\n * @param {Object} [options] - the renderer options\n * @param {AssetManager} [options.assetManager] - The renderer needs an AssetManager to resolve URLs (see {@link taoItems/assets/manager})\n * @param {Boolean} [options.shuffleChoices = true] - Does the renderer take care of the shuffling\n * @param {Object} [options.decorators] - to set up rendering decorator\n * @param {preRenderDecorator} [options.decorators.before] - to set up a pre decorator\n * @param {postRenderDecorator} [options.decorators.after] - to set up a post decorator\n */\n var Renderer = function(options) {\n /**\n * Store the registered renderer location\n */\n var _locations = {};\n\n /**\n * Store loaded renderers\n */\n var _renderers = {};\n\n options = _.defaults(options || {}, _defaults);\n\n this.isRenderer = true;\n\n this.name = '';\n\n //store shuffled choice here\n this.shuffledChoices = [];\n\n /**\n * Get the actual renderer of the give qti class or subclass:\n * e.g. simplceChoice, simpleChoice.choiceInteraction, simpleChoice.orderInteraction\n */\n var _getClassRenderer = function(qtiClass) {\n var ret = null;\n if (_renderers[qtiClass]) {\n ret = _renderers[qtiClass];\n } else {\n var pos = qtiClass.indexOf('.');\n if (pos > 0) {\n qtiClass = qtiClass.slice(0, pos);\n if (_renderers[qtiClass]) {\n ret = _renderers[qtiClass];\n }\n }\n }\n return ret;\n };\n\n /**\n * Registers a QTI renderer class\n * @param {String} qtiClass\n * @param {Array} list\n * @returns {Boolean} `true` if the class has been successfully registered\n */\n function registerRendererClass(qtiClass, list) {\n var success = false;\n if (_locations[qtiClass] === false) {\n //mark this class as not renderable\n _renderers[qtiClass] = false;\n success = true;\n } else if (_locations[qtiClass]) {\n list.push(_locations[qtiClass]);\n success = true;\n }\n return success;\n }\n\n /**\n * Set the renderer options\n * @param {String} key - the name of the option\n * @param {*} value - the option vallue\n * @returns {Renderer} for chaining\n */\n this.setOption = function(key, value) {\n if (typeof key === 'string') {\n options[key] = value;\n }\n return this;\n };\n\n /**\n * Set the renderer options\n * @param {Object} opts - the options\n * @returns {Renderer} for chaining\n */\n this.setOptions = function(opts) {\n options = _.extend(options, opts);\n return this;\n };\n\n /**\n * Get the renderer option\n * @param {String} key - the name of the option\n * @returns {*|null} the option vallue\n */\n this.getOption = function(key) {\n if (typeof key === 'string' && options[key]) {\n return options[key];\n }\n return null;\n };\n\n this.getCustomMessage = function getCustomMessage(elementName, messageKey) {\n var messages = this.getOption('messages');\n if (messages && elementName && messages[elementName] && _.isString(messages[elementName][messageKey])) {\n //currently not translatable but potentially could be if the need raises\n return hb.compile(messages[elementName][messageKey]);\n } else {\n return null;\n }\n };\n\n /**\n * Get the bound assetManager\n * @returns {AssetManager} the assetManager\n */\n this.getAssetManager = function getAssetManager() {\n return options.assetManager;\n };\n\n /**\n * Get the bound theme loader\n * @returns {Object} the themeLoader\n */\n this.getThemeLoader = function getThemeLoader() {\n return this.themeLoader;\n };\n\n /**\n * Renders the template\n * @param {Object} element - the QTI model element\n * @param {Object} data - the data to give to the template\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the template results\n * @throws {Error} if the renderer is not set or has no template bound\n */\n this.renderTpl = function(element, data, qtiSubclass) {\n var res;\n var ret = '';\n var qtiClass = qtiSubclass || element.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n var decorators = this.getOption('decorators');\n\n if (!renderer || !_.isFunction(renderer.template)) {\n throw new Error('no renderer template loaded under the class name : ' + qtiClass);\n }\n\n //pre rendering decoration\n if (_.isObject(decorators) && _.isFunction(decorators.before)) {\n /**\n * @callback preRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.before(element, qtiSubclass);\n if (_.isString(res)) {\n ret += res;\n }\n }\n\n //render the template\n ret += renderer.template(data);\n\n //post rendering decoration\n if (_.isObject(decorators) && _.isFunction(decorators.after)) {\n /**\n * @callback postRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.after(element, qtiSubclass);\n if (_.isString(res)) {\n ret += res;\n }\n }\n return ret;\n };\n\n this.getData = function(element, data, qtiSubclass) {\n var ret = data,\n qtiClass = qtiSubclass || element.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.getData === 'function') {\n ret = renderer.getData.call(this, element, data);\n }\n }\n\n return ret;\n };\n\n this.renderDirect = function(tpl, data) {\n return hb.compile(tpl)(data);\n };\n\n this.getContainer = function(qtiElement, $scope, qtiSubclass) {\n var ret = null,\n qtiClass = qtiSubclass || qtiElement.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n ret = renderer.getContainer(qtiElement, $scope);\n } else {\n throw 'no renderer found for the class : ' + qtiElement.qtiClass;\n }\n return ret;\n };\n\n this.postRender = function(qtiElement, data, qtiSubclass) {\n var qtiClass = qtiSubclass || qtiElement.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer && typeof renderer.render === 'function') {\n return renderer.render.call(this, qtiElement, data);\n }\n };\n\n this.setResponse = function(qtiInteraction, response, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.setResponse === 'function') {\n ret = renderer.setResponse.call(this, qtiInteraction, response);\n var $container = renderer.getContainer.call(this, qtiInteraction);\n if ($container instanceof $ && $container.length) {\n $container.trigger('responseSet', [qtiInteraction, response]);\n }\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getResponse = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.getResponse === 'function') {\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.resetResponse = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.resetResponse === 'function') {\n ret = renderer.resetResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n * @returns {Object} the interaction's state\n *\n * @throws {Error} if no renderer is registered\n */\n this.getState = function(qtiInteraction, qtiSubclass) {\n var ret = false;\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.getState)) {\n ret = renderer.getState.call(this, qtiInteraction);\n } else {\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {Object} state - the interaction's state\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n *\n * @throws {Error} if no renderer is found\n */\n this.setState = function(qtiInteraction, state, qtiSubclass) {\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.setState)) {\n renderer.setState.call(this, qtiInteraction, state);\n } else {\n renderer.resetResponse.call(this, qtiInteraction);\n renderer.setResponse.call(this, qtiInteraction, state);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n };\n\n /**\n * Calls the renderer destroy.\n * Ask the renderer to run destroy if exists.\n *\n * @throws {Error} if no renderer is found\n */\n this.destroy = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.destroy)) {\n ret = renderer.destroy.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getLoadedRenderers = function() {\n return _renderers;\n };\n\n this.register = function(renderersLocations) {\n _.extend(_locations, renderersLocations);\n };\n\n this.load = function(callback, requiredClasses) {\n var self = this;\n var required = [];\n\n var themeData = themesHelper.getCurrentThemeData();\n if (themeData) {\n options.themes = themeData;\n }\n if (options.themes) {\n //resolve themes paths\n options.themes.base = this.resolveUrl(options.themes.base);\n _.forEach(options.themes.available, function(theme, index) {\n options.themes.available[index].path = self.resolveUrl(theme.path);\n });\n this.themeLoader = themeLoader(options.themes).load(options.preload);\n }\n\n if (requiredClasses) {\n if (_.isArray(requiredClasses)) {\n //exclude abstract classes\n requiredClasses = _.intersection(requiredClasses, _renderableClasses);\n\n //add dependencies\n _.each(requiredClasses, function(reqClass) {\n var deps = _dependencies[reqClass];\n if (deps) {\n requiredClasses = _.union(requiredClasses, deps);\n }\n });\n\n _.forEach(requiredClasses, function(qtiClass) {\n var requiredSubClasses;\n if (_renderableSubclasses[qtiClass]) {\n requiredSubClasses = _.intersection(requiredClasses, _renderableSubclasses[qtiClass]);\n _.each(requiredSubClasses, function(subclass) {\n if (\n !registerRendererClass(qtiClass + '.' + subclass, required) &&\n !registerRendererClass(qtiClass, required)\n ) {\n throw new Error(\n self.name +\n ' : missing qti class location declaration: ' +\n qtiClass +\n ', subclass: ' +\n subclass\n );\n }\n });\n } else {\n if (!registerRendererClass(qtiClass, required)) {\n throw new Error(self.name + ' : missing qti class location declaration: ' + qtiClass);\n }\n }\n });\n } else {\n throw new Error('invalid argument type: expected array for arg \"requireClasses\"');\n }\n } else {\n required = _.values(_locations);\n }\n\n moduleLoader([], ()=> true)\n .addList( required.map( module => ({ module, category: 'qti'}) ) )\n .load()\n .then( loaded => {\n loaded.forEach( clazz => {\n if (_isValidRenderer(clazz)) {\n _renderers[clazz.qtiClass] = clazz;\n }\n\n });\n if (typeof callback === 'function') {\n callback.call(self, _renderers);\n }\n });\n\n return this;\n };\n\n /**\n * Unload the renderer\n */\n this.unload = function unload() {\n if (this.themeLoader) {\n themeLoader(options.themes).unload();\n }\n return this;\n };\n\n /**\n * Define the shuffling manually\n *\n * @param {Object} interaction - the interaction\n * @param {Array} choices - the shuffled choices\n * @param {String} identificationType -\n */\n this.setShuffledChoices = function(interaction, choices, identificationType) {\n if (Element.isA(interaction, 'interaction')) {\n this.shuffledChoices[interaction.getSerial()] = _.pluck(\n interactionHelper.findChoices(interaction, choices, identificationType),\n 'serial'\n );\n }\n };\n\n /**\n * Get the choices shuffled for this interaction.\n *\n * @param {Object} interaction - the interaction\n * @param {Boolean} reshuffle - by default choices are shuffled only once and store, but if true you can force shuffling again\n * @param {String} returnedType - the choice type\n * @returns {Array} the choices\n */\n this.getShuffledChoices = function(interaction, reshuffle, returnedType) {\n var choices = [];\n var serial, i;\n\n if (Element.isA(interaction, 'interaction')) {\n serial = interaction.getSerial();\n\n //1st time, we shuffle (or asked to force shuffling)\n if (!this.shuffledChoices[serial] || reshuffle) {\n if (Element.isA(interaction, 'matchInteraction')) {\n this.shuffledChoices[serial] = [];\n for (i = 0; i < 2; i++) {\n choices[i] = interactionHelper.shuffleChoices(interaction.getChoices(i));\n this.shuffledChoices[serial][i] = _.pluck(choices[i], 'serial');\n }\n } else {\n choices = interactionHelper.shuffleChoices(interaction.getChoices());\n this.shuffledChoices[serial] = _.pluck(choices, 'serial');\n }\n\n //otherwise get the choices from the serials\n } else {\n if (Element.isA(interaction, 'matchInteraction')) {\n _.forEach(choices, function(choice, index) {\n if (index < 2) {\n _.forEach(this.shuffledChoices[serial][i], function(choiceSerial) {\n choice.push(interaction.getChoice(choiceSerial));\n });\n }\n });\n } else {\n _.forEach(this.shuffledChoices[serial], function(choiceSerial) {\n choices.push(interaction.getChoice(choiceSerial));\n });\n }\n }\n\n //do some type convertion\n if (returnedType === 'serial' || returnedType === 'identifier') {\n return interactionHelper.convertChoices(choices, returnedType);\n }\n\n //pass value only, not ref\n return _.clone(choices);\n }\n\n return [];\n };\n\n this.getRenderers = function() {\n return _renderers;\n };\n\n this.getLocations = function() {\n return _locations;\n };\n\n /**\n * Resolve URLs using the defined assetManager's strategies\n * @param {String} url - the URL to resolve\n * @returns {String} the resolved URL\n */\n this.resolveUrl = function resolveUrl(url) {\n if (!options.assetManager) {\n return url;\n }\n if (typeof url === 'string' && url.length > 0) {\n return options.assetManager.resolve(url);\n }\n };\n\n /**\n * @deprecated in favor of resolveUrl\n */\n this.getAbsoluteUrl = function(relUrl) {\n //let until method is removed\n console.warn('DEPRECATED used getAbsoluteUrl with ', arguments);\n\n //allow relative url output only if explicitely said so\n if (this.getOption('userRelativeUrl')) {\n return relUrl.replace(/^\\.?\\//, '');\n }\n\n if (/^http(s)?:\\/\\//i.test(relUrl) || /^data:[^\\/]+\\/[^;]+(;charset=[\\w]+)?;base64,/.test(relUrl)) {\n //already absolute or base64 encoded\n return relUrl;\n } else {\n var absUrl = '';\n var runtimeLocations = this.getOption('runtimeLocations');\n\n if (runtimeLocations && _.size(runtimeLocations)) {\n _.forIn(runtimeLocations, function(runtimeLocation, typeIdentifier) {\n if (relUrl.indexOf(typeIdentifier) === 0) {\n absUrl = relUrl.replace(typeIdentifier, runtimeLocation);\n return false; //break\n }\n });\n }\n\n if (absUrl) {\n return absUrl;\n } else {\n var baseUrl = this.getOption('baseUrl') || getDocumentBaseUrl();\n return baseUrl + relUrl;\n }\n }\n };\n\n this.setAreaBroker = function setAreaBroker(areaBroker) {\n this._areaBroker = areaBroker;\n };\n\n this.getAreaBroker = function getAreaBroker() {\n if (this._areaBroker) {\n return this._areaBroker;\n }\n };\n\n this.getItemCreator = function getItemCreator() {\n return this.getOption('itemCreator');\n };\n };\n\n /**\n * Expose the renderer's factory\n * @exports taoQtiItem/qtiRunner/core/Renderer\n */\n var Renderer$1 = {\n /**\n * Creates a new Renderer by extending the Renderer's prototype\n * @param {Object} renderersLocations -\n * @param {String} [name] - the new renderer name\n * @param {Object} [defaultOptions] - the renderer options\n */\n build: function(renderersLocations, name, defaultOptions) {\n var NewRenderer = function() {\n var options = _.isPlainObject(arguments[0]) ? arguments[0] : {};\n\n Renderer.apply(this);\n\n this.register(renderersLocations);\n this.name = name || '';\n this.setOptions(_.defaults(options, defaultOptions || {}));\n };\n NewRenderer.prototype = Renderer.prototype;\n return NewRenderer;\n }\n };\n\n return Renderer$1;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Renderer',['taoQtiItem/qtiRunner/core/Renderer', 'taoQtiItem/qtiCommonRenderer/renderers/config'], function (Renderer$1, config) { 'use strict';\n\n\tRenderer$1 = Renderer$1 && Object.prototype.hasOwnProperty.call(Renderer$1, 'default') ? Renderer$1['default'] : Renderer$1;\n\tconfig = config && Object.prototype.hasOwnProperty.call(config, 'default') ? config['default'] : config;\n\n\t/**\n\t * This program is free software; you can redistribute it and/or\n\t * modify it under the terms of the GNU General Public License\n\t * as published by the Free Software Foundation; under version 2\n\t * of the License (non-upgradable).\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\t *\n\t * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n\t */\n\n\tvar Renderer = Renderer$1.build(config.locations, config.name, config.options);\n\n\treturn Renderer;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/rendererProvider',['taoQtiItem/qtiCommonRenderer/renderers/Renderer'], function (QtiRenderer) { 'use strict';\n\n QtiRenderer = QtiRenderer && Object.prototype.hasOwnProperty.call(QtiRenderer, 'default') ? QtiRenderer['default'] : QtiRenderer;\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 (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * This is a provider wrapper for qtiCommonRenderer\n */\n var rendererProvider = {\n name: 'commonRenderer',\n init: () => {},\n getRenderer: () => QtiRenderer\n };\n\n return rendererProvider;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/RubricBlock',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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 += \"\\n<div class=\\\"grid-row qti-rubricBlock\\\" data-use=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.use)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-qti-class=\\\"rubricBlock\\\"\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n <div class=\\\"col-12\\\">\\n <div class=\\\"qti-rubricBlock-body\\\">\";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n </div>\\n</div>\\n\";\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.empty), {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 tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var RubricBlock = {\n qtiClass: 'rubricBlock',\n getContainer: containerHelper.get,\n template: tpl,\n getData: function getData(rubric, data) {\n if (rubric.isEmpty()) {\n data.empty = true;\n }\n return data;\n }\n };\n\n return RubricBlock;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Stylesheet',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"media=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.media)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<link \\n href=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.href)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \\n type=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.type)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\" \\n rel=\\\"stylesheet\\\" \\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" \\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.media), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n />\";\n return buffer;\n });\n function tpl(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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var Stylesheet = {\n qtiClass: 'stylesheet',\n template: tpl,\n getContainer: containerHelper.get\n };\n\n return Stylesheet;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Table',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container'], function (Handlebars, __, _, DOMPurify, containerHelper) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \" \"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1));\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"summary=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.summary)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \" lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<table\\n class=\\\"qti-table\";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['class']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n data-qti-class=\\\"table\\\"\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1.summary), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n >\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</table>\\n\";\n return buffer;\n });\n function tpl(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\n var Table = {\n qtiClass: 'table',\n getContainer: containerHelper.get,\n template: tpl\n };\n\n return Table;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Tooltip',['handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'taoQtiItem/qtiCommonRenderer/helpers/container', 'ui/tooltip'], function (Handlebars, __, _, DOMPurify, containerHelper, tooltip) { 'use strict';\n\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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;\n buffer += \"lang=\\\"\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang'])),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n return buffer;\n }\n\n buffer += \"<span\\n data-serial=\\\"\";\n if (helper = helpers.serial) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.serial); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n data-qti-class=\\\"_tooltip\\\"\\n data-role=\\\"tooltip-target\\\"\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.attributes)),stack1 == null || stack1 === false ? stack1 : stack1['xml:lang']), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n \";\n if (helper = helpers.body) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.body); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</span>\\n\";\n return buffer;\n });\n function tpl(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 (under the project TAO-PRODUCT);\n */\n\n var Tooltip = {\n qtiClass: '_tooltip',\n template: tpl,\n getContainer: containerHelper.get,\n render: function render(tooltipDOM) {\n var $container = containerHelper.get(tooltipDOM);\n var renderedTooltip = tooltip.create($container, tooltipDOM.content(), {\n theme: 'default',\n placement: 'top'\n });\n\n if ($container.data('$tooltip')) {\n $container.data('$tooltip').dispose();\n $container.removeData('$tooltip');\n }\n $container.data('$tooltip', renderedTooltip);\n }\n };\n\n return Tooltip;\n\n});\n\n","define('taoQtiItem/qtiItem/core/IdentifiedElement',['taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/util'], function (Element, util) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\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 (original work) Open Assessment Technologies SA\n *\n */\n\n /**\n * IdentifiedElement model\n */\n var IdentifiedElement = Element.extend({\n /**\n * Generates and assign an identifier\n * @param {String} prefix - identifier prefix\n * @param {Boolean} [useSuffix = true] - add a \"_ + index\" to the identifier\n * @returns {Object} for chaining\n */\n buildIdentifier: function buildIdentifier(prefix, useSuffix) {\n var item = this.getRootElement();\n var id = util.buildIdentifier(item, prefix || this.qtiClass, useSuffix);\n if (id) {\n this.attr('identifier', id);\n }\n return this;\n },\n\n /**\n * Get/set and identifier. It will be generated if it doesn't exists.\n * @param {String} [value] - set the value or get it if not set.\n * @returns {String} the identifier\n */\n id: function id(value) {\n if (!value && !this.attr('identifier')) {\n this.buildIdentifier(this.qtiClass, true);\n }\n return this.attr('identifier', value);\n }\n });\n\n return IdentifiedElement;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/Choice',['taoQtiItem/qtiItem/core/IdentifiedElement'], function (IdentifiedElement) { 'use strict';\n\n IdentifiedElement = IdentifiedElement && Object.prototype.hasOwnProperty.call(IdentifiedElement, 'default') ? IdentifiedElement['default'] : IdentifiedElement;\n\n var Choice = IdentifiedElement.extend({\n init: function(serial, attributes) {\n this._super(serial, attributes);\n },\n is: function(qtiClass) {\n return qtiClass === 'choice' || this._super(qtiClass);\n },\n getInteraction: function() {\n var found,\n ret = null,\n item = this.getRootElement();\n if (item) {\n found = item.find(this.serial);\n if (found) {\n ret = found.parent;\n }\n }\n return ret;\n }\n });\n\n return Choice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/Hotspot',['taoQtiItem/qtiItem/core/choices/Choice'], function (QtiChoice) { 'use strict';\n\n\tQtiChoice = QtiChoice && Object.prototype.hasOwnProperty.call(QtiChoice, 'default') ? QtiChoice['default'] : QtiChoice;\n\n\tvar QtiHotspot = QtiChoice.extend({});\n\n\treturn QtiHotspot;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/AssociableHotspot',['taoQtiItem/qtiItem/core/choices/Hotspot'], function (QtiHotspot) { 'use strict';\n\n QtiHotspot = QtiHotspot && Object.prototype.hasOwnProperty.call(QtiHotspot, 'default') ? QtiHotspot['default'] : QtiHotspot;\n\n var QtiAssociableHotspot = QtiHotspot.extend({\n qtiClass: 'associableHotspot'\n });\n\n return QtiAssociableHotspot;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/Mixin',[],function () { 'use strict';\n\n //@todo : need refactoring of qti item mixin with lodash.mixin()\n var Mixin = {\n augment: function(targetClass, methods, options) {\n if (typeof targetClass === 'function' && typeof methods === 'object') {\n for (var methodName in methods) {\n if (!Object.hasOwnProperty(targetClass.prototype, methodName)) {\n targetClass.prototype[methodName] = methods[methodName];\n } else {\n if (options && options.append) {\n var _parent = targetClass.prototype[methodName];\n targetClass.prototype[methodName] = function() {\n methods[methodName].apply(this, arguments);\n return _parent.apply(this, arguments);\n };\n }\n }\n }\n }\n }\n };\n\n return Mixin;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Container',['jquery', 'lodash', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/rendererConfig'], function ($, _, Element, rendererConfig) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\n var Container = Element.extend({\n qtiClass: '_container',\n init: function(body) {\n this._super(); //generate serial, attributes array always empty\n if (body && typeof body !== 'string') {\n throw 'the body of a container must be a string';\n }\n this.bdy = body || '';\n this.elements = {};\n },\n body: function(body) {\n if (typeof body === 'undefined') {\n return this.bdy;\n } else {\n if (typeof body === 'string') {\n this.bdy = body;\n $(document).trigger('containerBodyChange', {\n body: body,\n container: this,\n parent: this.parent()\n });\n } else {\n throw 'body must be a string';\n }\n }\n },\n setElements: function(elements, body) {\n var returnValue = false;\n\n for (var i in elements) {\n var elt = elements[i];\n if (elt instanceof Element) {\n body = body || this.bdy;\n if (body.indexOf(elt.placeholder()) === -1) {\n body += elt.placeholder(); //append the element if no placeholder found\n }\n\n elt.setRootElement(this.getRootElement() || null);\n this.elements[elt.getSerial()] = elt;\n $(document).trigger('containerElementAdded', {\n element: elt,\n container: this\n });\n\n returnValue = true;\n } else {\n returnValue = false;\n throw 'expected a qti element';\n }\n }\n\n this.body(body);\n\n return returnValue;\n },\n setElement: function(element, body) {\n return this.setElements([element], body);\n },\n removeElement: function(element) {\n var serial = '';\n if (typeof element === 'string') {\n serial = element;\n } else if (element instanceof Element) {\n serial = element.getSerial();\n }\n delete this.elements[serial];\n this.body(this.body().replace('{{' + serial + '}}', ''));\n return this;\n },\n getElements: function(qtiClass) {\n var elts = {};\n if (typeof qtiClass === 'string') {\n for (var serial in this.elements) {\n if (Element.isA(this.elements[serial], qtiClass)) {\n elts[serial] = this.elements[serial];\n }\n }\n } else {\n elts = _.clone(this.elements);\n }\n return elts;\n },\n getElement: function(serial) {\n return this.elements[serial] ? this.elements[serial] : null;\n },\n getComposingElements: function() {\n var elements = this.getElements();\n var elts = {};\n for (var serial in elements) {\n elts[serial] = elements[serial]; //pass individual object by ref, instead of the whole list(object)\n elts = _.extend(elts, elements[serial].getComposingElements());\n }\n return elts;\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n elementsData = [],\n tpl = this.body();\n\n for (var serial in this.elements) {\n var elt = this.elements[serial];\n if (typeof elt.render === 'function') {\n if (elt.qtiClass === '_container') {\n //@todo : container rendering merging, to be tested\n tpl = tpl.replace(elt.placeholder(), elt.render(renderer));\n } else {\n tpl = tpl.replace(elt.placeholder(), '{{{' + serial + '}}}');\n elementsData[serial] = elt.render(renderer);\n }\n } else {\n throw 'render() is not defined for the qti element: ' + serial;\n }\n }\n\n if (renderer.isRenderer) {\n return this._super(\n {\n body: renderer.renderDirect(tpl, elementsData),\n contentModel: this.contentModel || 'flow'\n },\n renderer,\n args.placeholder\n );\n } else {\n throw 'invalid qti renderer for qti container';\n }\n },\n postRender: function(data, altClassName, renderer) {\n renderer = renderer || this.getRenderer();\n\n var res = _(this.elements)\n .filter(function(elt) {\n return typeof elt.postRender === 'function';\n })\n .map(function(elt) {\n return elt.postRender(data, '', renderer);\n })\n .flatten(true)\n .value()\n .concat(this._super(data, altClassName, renderer));\n return res;\n },\n toArray: function() {\n var arr = {\n serial: this.serial,\n body: this.bdy,\n elements: {}\n };\n\n for (var serial in this.elements) {\n arr.elements[serial] = this.elements[serial].toArray();\n }\n\n return arr;\n },\n find: function(serial, parent) {\n var found = null;\n\n if (this.elements[serial]) {\n found = { parent: parent || this, element: this.elements[serial], location: 'body' };\n } else {\n _.each(this.elements, function(elt) {\n found = elt.find(serial);\n if (found) {\n return false; //break loop\n }\n });\n }\n\n return found;\n },\n isEmpty: function() {\n return !this.bdy;\n }\n });\n\n return Container;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/Container',['taoQtiItem/qtiItem/mixin/Mixin', 'taoQtiItem/qtiItem/core/Container'], function (Mixin, Container$1) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\n Container$1 = Container$1 && Object.prototype.hasOwnProperty.call(Container$1, 'default') ? Container$1['default'] : Container$1;\n\n var methods = {\n initContainer: function(body) {\n this.bdy = new Container$1(body || '');\n this.bdy.setRootElement(this.getRootElement() || null);\n this.bdy.contentModel = 'blockStatic';\n },\n getBody: function() {\n return this.bdy;\n },\n body: function(body) {\n var ret = this.bdy.body(body);\n return body ? this : ret; //for method chaining on get\n },\n setElement: function(element, body) {\n this.bdy.setElement(element, body);\n return this;\n },\n removeElement: function(element) {\n return this.bdy.removeElement(element);\n },\n getElements: function(qtiClass) {\n return this.bdy.getElements(qtiClass);\n },\n getElement: function(serial) {\n return this.bdy.getElement(serial);\n }\n };\n\n var Container = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return Container;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/ContainerChoice',['taoQtiItem/qtiItem/core/choices/Choice', 'taoQtiItem/qtiItem/mixin/Container'], function (Choice, Container) { 'use strict';\n\n Choice = Choice && Object.prototype.hasOwnProperty.call(Choice, 'default') ? Choice['default'] : Choice;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n var ContainerChoice = Choice.extend({\n init: function(serial, attributes) {\n this._super(serial, attributes);\n },\n is: function(qtiClass) {\n return qtiClass === 'containerChoice' || this._super(qtiClass);\n }\n });\n\n Container.augment(ContainerChoice);\n\n return ContainerChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/Gap',['taoQtiItem/qtiItem/core/choices/Choice'], function (QtiChoice) { 'use strict';\n\n QtiChoice = QtiChoice && Object.prototype.hasOwnProperty.call(QtiChoice, 'default') ? QtiChoice['default'] : QtiChoice;\n\n var QtiGap = QtiChoice.extend({\n qtiClass: 'gap'\n });\n\n return QtiGap;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Object',['taoQtiItem/qtiItem/core/Element', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (Element, _, rendererConfig) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var QtiObject = Element.extend({\n qtiClass: 'object',\n getMediaType: function() {\n var type = 'undefined';\n var mimetype = this.attr('type');\n if (mimetype) {\n if (mimetype.indexOf('video') === 0) {\n type = 'video';\n } else if (mimetype.indexOf('audio') === 0) {\n type = 'audio';\n } else if (mimetype.indexOf('image') === 0) {\n type = 'image';\n } else if (mimetype.indexOf('text/html') === 0) {\n type = 'html';\n } else {\n type = 'object';\n }\n }\n return type;\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {};\n\n switch (this.getMediaType()) {\n case 'video':\n defaultData.video = true;\n break;\n case 'audio':\n defaultData.audio = true;\n break;\n case 'html':\n defaultData.html = true;\n break;\n case 'image':\n default:\n defaultData.object = true;\n }\n\n defaultData.attributes = { data: renderer.resolveUrl(this.attr('data')) };\n defaultData.body = this._alt;\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n isEmpty: function() {\n return !this.attr('data');\n }\n });\n\n return QtiObject;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/GapImg',['taoQtiItem/qtiItem/core/choices/Choice', 'taoQtiItem/qtiItem/core/Object'], function (QtiChoice, QtiObject) { 'use strict';\n\n QtiChoice = QtiChoice && Object.prototype.hasOwnProperty.call(QtiChoice, 'default') ? QtiChoice['default'] : QtiChoice;\n QtiObject = QtiObject && Object.prototype.hasOwnProperty.call(QtiObject, 'default') ? QtiObject['default'] : QtiObject;\n\n var QtiGapImg = QtiChoice.extend({\n qtiClass: 'gapImg',\n //common methods to object containers (start)\n initObject: function(object) {\n this.object = object || new QtiObject();\n },\n getObject: function() {\n return this.object;\n }\n //common methods to object containers (end)\n });\n\n return QtiGapImg;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/GapText',['taoQtiItem/qtiItem/core/choices/ContainerChoice'], function (QtiContainerChoice) { 'use strict';\n\n QtiContainerChoice = QtiContainerChoice && Object.prototype.hasOwnProperty.call(QtiContainerChoice, 'default') ? QtiContainerChoice['default'] : QtiContainerChoice;\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 var QtiGapText = QtiContainerChoice.extend({\n qtiClass: 'gapText'\n });\n\n return QtiGapText;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/HotspotChoice',['taoQtiItem/qtiItem/core/choices/Hotspot'], function (QtiHotspot) { 'use strict';\n\n QtiHotspot = QtiHotspot && Object.prototype.hasOwnProperty.call(QtiHotspot, 'default') ? QtiHotspot['default'] : QtiHotspot;\n\n var QtiHotspotChoice = QtiHotspot.extend({\n qtiClass: 'hotspotChoice'\n });\n\n return QtiHotspotChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/ContainerInline',['taoQtiItem/qtiItem/mixin/Mixin', 'taoQtiItem/qtiItem/mixin/Container', 'lodash'], function (Mixin, Container, _) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n var methods = {};\n _.extend(methods, Container.methods);\n _.extend(methods, {\n initContainer: function(body) {\n Container.methods.initContainer.call(this, body);\n this.bdy.contentModel = 'inlineStatic';\n }\n });\n\n var ContainerInline = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return ContainerInline;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/Hottext',['taoQtiItem/qtiItem/core/choices/Choice', 'taoQtiItem/qtiItem/mixin/ContainerInline'], function (Choice, Container) { 'use strict';\n\n Choice = Choice && Object.prototype.hasOwnProperty.call(Choice, 'default') ? Choice['default'] : Choice;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n var Hottext = Choice.extend({\n qtiClass: 'hottext'\n });\n\n Container.augment(Hottext);\n\n return Hottext;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/TextVariableChoice',['jquery', 'lodash', 'taoQtiItem/qtiItem/core/choices/Choice', 'taoQtiItem/qtiItem/helper/rendererConfig'], function ($, _, QtiChoice, rendererConfig) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n QtiChoice = QtiChoice && Object.prototype.hasOwnProperty.call(QtiChoice, 'default') ? QtiChoice['default'] : QtiChoice;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var QtiTextVariableChoice = QtiChoice.extend({\n init: function(serial, attributes, text) {\n this._super(serial, attributes);\n this.val(text || '');\n },\n is: function(qtiClass) {\n return qtiClass === 'textVariableChoice' || this._super(qtiClass);\n },\n val: function(text) {\n if (typeof text === 'undefined') {\n return this.text;\n } else {\n if (typeof text === 'string') {\n this.text = text;\n $(document).trigger('choiceTextChange', {\n choice: this,\n text: text\n });\n } else {\n throw 'text must be a string';\n }\n }\n return this;\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n body: this.text\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n }\n });\n\n return QtiTextVariableChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/InlineChoice',['taoQtiItem/qtiItem/core/choices/TextVariableChoice'], function (QtiTextVariableChoice) { 'use strict';\n\n QtiTextVariableChoice = QtiTextVariableChoice && Object.prototype.hasOwnProperty.call(QtiTextVariableChoice, 'default') ? QtiTextVariableChoice['default'] : QtiTextVariableChoice;\n\n var QtiInlineChoice = QtiTextVariableChoice.extend({\n qtiClass: 'inlineChoice'\n });\n\n return QtiInlineChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/SimpleAssociableChoice',['taoQtiItem/qtiItem/core/choices/ContainerChoice'], function (QtiContainerChoice) { 'use strict';\n\n QtiContainerChoice = QtiContainerChoice && Object.prototype.hasOwnProperty.call(QtiContainerChoice, 'default') ? QtiContainerChoice['default'] : QtiContainerChoice;\n\n var QtiSimpleAssociableChoice = QtiContainerChoice.extend({\n qtiClass: 'simpleAssociableChoice'\n });\n\n return QtiSimpleAssociableChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/SimpleChoice',['taoQtiItem/qtiItem/core/choices/ContainerChoice'], function (QtiContainerChoice) { 'use strict';\n\n QtiContainerChoice = QtiContainerChoice && Object.prototype.hasOwnProperty.call(QtiContainerChoice, 'default') ? QtiContainerChoice['default'] : QtiContainerChoice;\n\n var QtiSimpleChoice = QtiContainerChoice.extend({\n qtiClass: 'simpleChoice'\n });\n\n return QtiSimpleChoice;\n\n});\n\n","define('taoQtiItem/qtiItem/core/choices/TextEntry',['taoQtiItem/qtiItem/core/choices/TextVariableChoice'], function (QtiTextVariableChoice) { 'use strict';\n\n QtiTextVariableChoice = QtiTextVariableChoice && Object.prototype.hasOwnProperty.call(QtiTextVariableChoice, 'default') ? QtiTextVariableChoice['default'] : QtiTextVariableChoice;\n\n var QtiTextEntry = QtiTextVariableChoice.extend({\r\n qtiClass: 'textEntry'\r\n });\n\n return QtiTextEntry;\n\n});\n\n","define('taoQtiItem/qtiItem/core/feedbacks/Feedback',['taoQtiItem/qtiItem/core/IdentifiedElement'], function (IdentifiedElement) { 'use strict';\n\n IdentifiedElement = IdentifiedElement && Object.prototype.hasOwnProperty.call(IdentifiedElement, 'default') ? IdentifiedElement['default'] : IdentifiedElement;\n\n var Feedback = IdentifiedElement.extend({\n is: function(qtiClass) {\n return qtiClass === 'feedback' || this._super(qtiClass);\n }\n });\n\n return Feedback;\n\n});\n\n","define('taoQtiItem/qtiItem/core/feedbacks/FeedbackBlock',['taoQtiItem/qtiItem/core/feedbacks/Feedback'], function (Feedback) { 'use strict';\n\n\tFeedback = Feedback && Object.prototype.hasOwnProperty.call(Feedback, 'default') ? Feedback['default'] : Feedback;\n\n\tvar FeedbackBlock = Feedback.extend({});\n\n\treturn FeedbackBlock;\n\n});\n\n","define('taoQtiItem/qtiItem/core/feedbacks/FeedbackInline',['taoQtiItem/qtiItem/core/feedbacks/Feedback'], function (Feedback) { 'use strict';\n\n\tFeedback = Feedback && Object.prototype.hasOwnProperty.call(Feedback, 'default') ? Feedback['default'] : Feedback;\n\n\tvar FeedbackInline = Feedback.extend({});\n\n\treturn FeedbackInline;\n\n});\n\n","define('taoQtiItem/qtiItem/core/feedbacks/ModalFeedback',['taoQtiItem/qtiItem/core/IdentifiedElement', 'taoQtiItem/qtiItem/mixin/Container'], function (IdentifiedElement, Container) { 'use strict';\n\n IdentifiedElement = IdentifiedElement && Object.prototype.hasOwnProperty.call(IdentifiedElement, 'default') ? IdentifiedElement['default'] : IdentifiedElement;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n var ModalFeedback = IdentifiedElement.extend({\n qtiClass: 'modalFeedback',\n is: function(qtiClass) {\n return qtiClass === 'feedback' || this._super(qtiClass);\n }\n });\n\n Container.augment(ModalFeedback);\n\n return ModalFeedback;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Img',['taoQtiItem/qtiItem/core/Element', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (Element, _, rendererConfig) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var Img = Element.extend({\n qtiClass: 'img',\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {};\n\n defaultData.attributes = {\n src: renderer.resolveUrl(this.attr('src'))\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n isEmpty: function() {\n return !this.attr('src');\n }\n });\n\n return Img;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/NamespacedElement',['taoQtiItem/qtiItem/mixin/Mixin', 'lodash'], function (Mixin, _) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\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) 2015 (original work) Open Assessment Technologies SA ;\n *\n */\n\n var methods = {\n getNamespace: function() {\n var relatedItem;\n var namespaces;\n var ns;\n\n if (this.ns && (this.ns.name || this.ns.uri)) {\n return _.clone(this.ns);\n } else {\n relatedItem = this.getRootElement();\n if (relatedItem) {\n namespaces = relatedItem.getNamespaces();\n for (ns in namespaces) {\n if (namespaces[ns].indexOf(this.nsUriFragment) > 0) {\n return {\n name: ns,\n uri: namespaces[ns]\n };\n }\n }\n //if no ns found in the item, set the default one!\n relatedItem.namespaces[this.defaultNsName] = this.defaultNsUri;\n return {\n name: this.defaultNsName,\n uri: this.defaultNsUri\n };\n }\n }\n\n return {};\n },\n setNamespace: function(name, uri) {\n this.ns = {\n name: name,\n uri: uri\n };\n }\n };\n\n var NamespacedElement = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return NamespacedElement;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Include',['taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/ContainerInline', 'taoQtiItem/qtiItem/mixin/NamespacedElement'], function (Element, Container, NamespacedElement) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n NamespacedElement = NamespacedElement && Object.prototype.hasOwnProperty.call(NamespacedElement, 'default') ? NamespacedElement['default'] : NamespacedElement;\n\n var Include = Element.extend({\n qtiClass: 'include',\n defaultNsName: 'xi',\n defaultNsUri: 'http://www.w3.org/2001/XInclude',\n nsUriFragment: 'XInclude',\n isEmpty: function() {\n return !this.attr('href') || this.getBody().isEmpty();\n }\n });\n Container.augment(Include);\n NamespacedElement.augment(Include);\n\n return Include;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/Interaction',['taoQtiItem/qtiItem/core/Element', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig', 'taoQtiItem/qtiItem/helper/util'], function (Element, _, rendererConfig, util) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n\n var QtiInteraction = Element.extend({\n init: function(serial, attributes) {\n this._super(serial, attributes);\n this.choices = {};\n },\n is: function(qtiClass) {\n return qtiClass === 'interaction' || this._super(qtiClass);\n },\n addChoice: function(choice) {\n choice.setRootElement(this.getRootElement() || null);\n this.choices[choice.getSerial()] = choice;\n return this;\n },\n getChoices: function() {\n var choices = {};\n for (var i in this.choices) {\n //prevent passing the whole array by ref\n choices[i] = this.choices[i];\n }\n return choices;\n },\n getChoice: function(serial) {\n var ret = null;\n if (this.choices[serial]) {\n ret = this.choices[serial];\n }\n return ret;\n },\n getChoiceByIdentifier: function(identifier) {\n for (var i in this.choices) {\n if (this.choices[i].id() === identifier) {\n return this.choices[i];\n }\n }\n return null;\n },\n getComposingElements: function() {\n var elts = this._super();\n //recursive to choices:\n for (var serial in this.choices) {\n if (Element.isA(this.choices[serial], 'choice')) {\n elts[serial] = this.choices[serial];\n elts = _.extend(elts, this.choices[serial].getComposingElements());\n }\n }\n return elts;\n },\n find: function(serial) {\n var found = this._super(serial);\n if (!found) {\n found = util.findInCollection(this, 'choices', serial);\n }\n return found;\n },\n getResponseDeclaration: function() {\n var response = null;\n var responseId = this.attr('responseIdentifier');\n if (responseId) {\n var item = this.getRootElement();\n if (item) {\n response = item.getResponseDeclaration(responseId);\n } else {\n throw 'cannot get response of an interaction out of its item context';\n }\n }\n return response;\n },\n /**\n * Render the interaction to the view.\n * The optional argument \"subClass\" allows distinguishing customInteraction: e.g. customInteraction.matrix, customInteraction.likertScale ...\n */\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n _type: this.qtiClass.replace(/([A-Z])/g, function($1) {\n return '_' + $1.toLowerCase();\n }),\n choices: [],\n choiceShuffle: true\n };\n\n if (!renderer) {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n\n var choices =\n this.attr('shuffle') && renderer.getOption('shuffleChoices')\n ? renderer.getShuffledChoices(this)\n : this.getChoices();\n var interactionData = { interaction: { serial: this.serial, attributes: this.attributes } };\n var _this = this;\n _.each(choices, function(choice) {\n if (Element.isA(choice, 'choice')) {\n try {\n var renderedChoice = choice.render(\n _.clone(interactionData, true),\n null,\n choice.qtiClass + '.' + _this.qtiClass,\n renderer\n ); //use interaction type as choice subclass\n defaultData.choices.push(renderedChoice);\n } catch (e) {\n //leave choices empty in case of error\n }\n }\n });\n\n var tplName = args.subclass ? this.qtiClass + '.' + args.subclass : this.qtiClass;\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, tplName, renderer);\n },\n postRender: function(data, altClassName, renderer) {\n var self = this;\n renderer = renderer || this.getRenderer();\n\n return _(this.getChoices())\n .filter(function(elt) {\n return Element.isA(elt, 'choice');\n })\n .map(function(choice) {\n return choice.postRender({}, choice.qtiClass + '.' + self.qtiClass, renderer);\n })\n .value()\n .concat(this._super(data, altClassName, renderer));\n },\n setResponse: function(values) {\n var ret = null;\n var renderer = this.getRenderer();\n if (renderer) {\n ret = renderer.setResponse(this, values);\n } else {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n return ret;\n },\n getResponse: function() {\n var ret = null;\n var renderer = this.getRenderer();\n if (renderer) {\n ret = renderer.getResponse(this);\n } else {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n return ret;\n },\n resetResponse: function() {\n var ret = null;\n var renderer = this.getRenderer();\n if (renderer) {\n ret = renderer.resetResponse(this);\n } else {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n return ret;\n },\n\n /**\n * Retrieve the state of the interaction.\n * The state is provided by the interaction's renderer.\n *\n * @returns {Object} the interaction's state\n * @throws {Error} if no renderer is found\n */\n getState: function() {\n var ret = null;\n var renderer = this.getRenderer();\n if (renderer) {\n if (_.isFunction(renderer.getState)) {\n ret = renderer.getState(this);\n }\n } else {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n return ret;\n },\n\n /**\n * Retrieve the state of the interaction.\n * The state will be given to the interaction's renderer.\n *\n * @param {Object} state - the interaction's state\n * @throws {Error} if no renderer is found\n */\n setState: function(state) {\n var renderer = this.getRenderer();\n if (renderer) {\n if (_.isFunction(renderer.setState)) {\n renderer.setState(this, state);\n }\n } else {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n },\n\n /**\n * Clean up an interaction rendering.\n * Ask the renderer to run destroy if exists.\n *\n * @throws {Error} if no renderer is found\n * @returns {Promise?} the interaction destroy step can be async and can return an optional Promise\n */\n clear: function() {\n var renderer = this.getRenderer();\n if (renderer && _.isFunction(renderer.destroy)) {\n return renderer.destroy(this);\n }\n },\n\n toArray: function() {\n var arr = this._super();\n arr.choices = {};\n for (var serial in this.choices) {\n if (Element.isA(this.choices[serial], 'choice')) {\n arr.choices[serial] = this.choices[serial].toArray();\n }\n }\n return arr;\n },\n\n getNormalMaximum: function getNormalMaximum() {\n //by default\n return false;\n }\n });\n\n return QtiInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/Prompt',['taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/ContainerInline'], function (Element, Container) { 'use strict';\n\n\tElement = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n\tContainer = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n\tvar Prompt = Element.extend({ qtiClass: 'prompt' });\n\tContainer.augment(Prompt);\n\n\treturn Prompt;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/BlockInteraction',['taoQtiItem/qtiItem/core/interactions/Interaction', 'taoQtiItem/qtiItem/core/interactions/Prompt', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (Interaction, Prompt, _, rendererConfig) { 'use strict';\n\n Interaction = Interaction && Object.prototype.hasOwnProperty.call(Interaction, 'default') ? Interaction['default'] : Interaction;\n Prompt = Prompt && Object.prototype.hasOwnProperty.call(Prompt, 'default') ? Prompt['default'] : Prompt;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var BlockInteraction = Interaction.extend({\n init: function(serial, attributes) {\n this._super(serial, attributes);\n this.prompt = new Prompt('');\n },\n is: function(qtiClass) {\n return qtiClass === 'blockInteraction' || this._super(qtiClass);\n },\n getComposingElements: function() {\n var elts = this._super();\n elts = _.extend(elts, this.prompt.getComposingElements());\n elts[this.prompt.getSerial()] = this.prompt;\n return elts;\n },\n find: function(serial) {\n return this._super(serial) || this.prompt.find(serial);\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n promptId: `prompt-${this.prompt.getSerial()}`,\n prompt: this.prompt.render(renderer)\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n postRender: function(data, altClassName, renderer) {\n renderer = renderer || this.getRenderer();\n return [].concat(this.prompt.postRender({}, '', renderer)).concat(this._super(data, altClassName, renderer));\n },\n toArray: function() {\n var arr = this._super();\n arr.prompt = this.prompt.toArray();\n return arr;\n }\n });\n\n return BlockInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/responseRules',[],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 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n var responseRules = {\n MATCH_CORRECT: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'match',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n {\n qtiClass: 'correct',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n },\n },\n {\n qtiClass: 'baseValue',\n attributes: {\n baseType: 'integer'\n },\n value: '1',\n },\n ],\n },\n },\n ],\n },\n }),\n MAP_RESPONSE: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'not',\n expressions: [\n {\n qtiClass: 'isNull',\n expressions: [{\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n }],\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n }\n },\n {\n qtiClass: 'mapResponse',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n },\n ],\n },\n }),\n MAP_RESPONSE_POINT: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'not',\n expressions: [\n {\n qtiClass: 'isNull',\n expressions: [{\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n }],\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n }\n },\n {\n qtiClass: 'mapResponsePoint',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n },\n ],\n },\n }),\n };\n\n return responseRules;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/response',['lodash', 'taoQtiItem/qtiItem/helper/responseRules'], function (_, responseRulesHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n responseRulesHelper = responseRulesHelper && Object.prototype.hasOwnProperty.call(responseRulesHelper, 'default') ? responseRulesHelper['default'] : responseRulesHelper;\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) 2014-2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n const _templateNames = {\n MATCH_CORRECT: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct',\n MAP_RESPONSE: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response',\n MAP_RESPONSE_POINT: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response_point',\n NONE: 'no_response_processing'\n };\n\n\n var response = {\n isUsingTemplate(response, tpl) {\n if (_.isString(tpl)) {\n if (tpl === response.template || _templateNames[tpl] === response.template) {\n return true;\n }\n }\n\n return false;\n },\n isValidTemplateName(tplName) {\n return !!this.getTemplateUriFromName(tplName);\n },\n getTemplateUriFromName(tplName) {\n return _templateNames[tplName] || '';\n },\n getTemplateNameFromUri(tplUri) {\n let tplName = '';\n\n _.forIn(_templateNames, (uri, name) => {\n if (uri === tplUri) {\n tplName = name;\n return false;\n }\n });\n\n return tplName;\n },\n getTemplateNameFromResponseRules(responseIdentifier, responseRules) {\n if (!responseRules) {\n return 'NONE';\n }\n\n const {\n responseIf: {\n responseRules: [outcomeRules = {}] = [],\n } = {}\n } = responseRules;\n const {\n attributes: {\n identifier: outcomeIdentifier,\n } = {},\n } = outcomeRules;\n\n if (!outcomeIdentifier) {\n return '';\n }\n\n return Object.keys(responseRulesHelper).find(\n (key) => _.isEqual(responseRules, responseRulesHelper[key](responseIdentifier, outcomeIdentifier))\n );\n }\n };\n\n return response;\n\n});\n\n","define('taoQtiItem/qtiItem/core/variables/VariableDeclaration',['taoQtiItem/qtiItem/core/IdentifiedElement'], function (IdentifiedElement) { 'use strict';\n\n IdentifiedElement = IdentifiedElement && Object.prototype.hasOwnProperty.call(IdentifiedElement, 'default') ? IdentifiedElement['default'] : IdentifiedElement;\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) 2014-2017 (original work) Open Assessment Technologies SA;\n *\n */\n\n /**\n * It is the top abstract class for all variable classes\n * (so not renderable and qtiClass undefined)\n */\n var VariableDeclaration = IdentifiedElement.extend({\n init: function init(serial, attributes) {\n this._super(serial, attributes);\n this.defaultValue = null;\n },\n is: function is(qtiClass) {\n return qtiClass === 'variableDeclaration' || this._super(qtiClass);\n },\n toArray: function toArray() {\n var arr = this._super();\n arr.defaultValue = this.defaultValue;\n return arr;\n },\n setDefaultValue: function setDefaultValue(value) {\n this.defaultValue = value;\n },\n getDefaultValue: function getDefaultValue() {\n return this.defaultValue;\n }\n });\n\n return VariableDeclaration;\n\n});\n\n","define('taoQtiItem/qtiItem/core/variables/OutcomeDeclaration',['taoQtiItem/qtiItem/core/variables/VariableDeclaration'], function (VariableDeclaration) { 'use strict';\n\n VariableDeclaration = VariableDeclaration && Object.prototype.hasOwnProperty.call(VariableDeclaration, 'default') ? VariableDeclaration['default'] : VariableDeclaration;\n\n var OutcomeDeclaration = VariableDeclaration.extend({\n qtiClass: 'outcomeDeclaration'\n });\n\n return OutcomeDeclaration;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/maxScore',['lodash', 'lib/gamp/gamp', 'taoQtiItem/qtiItem/helper/response', 'taoQtiItem/qtiItem/core/variables/OutcomeDeclaration'], function (_, gamp, responseHelper, OutcomeDeclaration) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n gamp = gamp && Object.prototype.hasOwnProperty.call(gamp, 'default') ? gamp['default'] : gamp;\n responseHelper = responseHelper && Object.prototype.hasOwnProperty.call(responseHelper, 'default') ? responseHelper['default'] : responseHelper;\n OutcomeDeclaration = OutcomeDeclaration && Object.prototype.hasOwnProperty.call(OutcomeDeclaration, 'default') ? OutcomeDeclaration['default'] : OutcomeDeclaration;\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\n var pairExists = function pairExists(collection, pair) {\n if (pair.length !== 2) {\n return false;\n }\n return collection[pair[0] + ' ' + pair[1]] || collection[pair[1] + ' ' + pair[0]];\n };\n\n var maxScore = {\n /**\n * Set the normal maximum to the item\n * @param {Object} item - the standard qti item model object\n */\n setNormalMaximum: function setNormalMaximum(item) {\n var normalMaximum,\n scoreOutcome = item.getOutcomeDeclaration('SCORE');\n\n //try setting the computed normal maximum only if the processing type is known, i.e. 'templateDriven'\n if (scoreOutcome && item.responseProcessing && item.responseProcessing.processingType === 'templateDriven') {\n normalMaximum = _.reduce(\n item.getInteractions(),\n function(acc, interaction) {\n var interactionMaxScore = interaction.getNormalMaximum();\n if (_.isNumber(interactionMaxScore)) {\n return gamp.add(acc, interactionMaxScore);\n } else {\n return false;\n }\n },\n 0\n );\n\n if (_.isNumber(normalMaximum)) {\n scoreOutcome.attr('normalMaximum', normalMaximum);\n } else {\n scoreOutcome.removeAttr('normalMaximum');\n }\n }\n },\n\n /**\n * Set the maximum score of the item\n * @param {Object} item - the standard qti item model object\n */\n setMaxScore: function setMaxScore(item) {\n var hasInvalidInteraction = false,\n scoreOutcome = item.getOutcomeDeclaration('SCORE'),\n customOutcomes,\n maxScore,\n maxScoreOutcome;\n\n //try setting the computed normal maximum only if the processing type is known, i.e. 'templateDriven'\n if (scoreOutcome && item.responseProcessing && item.responseProcessing.processingType === 'templateDriven') {\n maxScore = _.reduce(\n item.getInteractions(),\n function(acc, interaction) {\n var interactionMaxScore = interaction.getNormalMaximum();\n if (_.isNumber(interactionMaxScore)) {\n return gamp.add(acc, interactionMaxScore);\n } else {\n hasInvalidInteraction = true;\n return acc;\n }\n },\n 0\n );\n\n customOutcomes = _(item.getOutcomes()).filter(function(outcome) {\n return outcome.id() !== 'SCORE' && outcome.id() !== 'MAXSCORE';\n });\n\n if (customOutcomes.size()) {\n maxScore = customOutcomes.reduce(function(acc, outcome) {\n return gamp.add(acc, parseFloat(outcome.attr('normalMaximum') || 0));\n }, maxScore);\n }\n\n if (!hasInvalidInteraction || customOutcomes.size()) {\n maxScoreOutcome = item.getOutcomeDeclaration('MAXSCORE');\n if (!maxScoreOutcome) {\n //add new outcome\n maxScoreOutcome = new OutcomeDeclaration({\n cardinality: 'single',\n baseType: 'float'\n });\n\n //attach the outcome to the item before generating item-level unique id\n item.addOutcomeDeclaration(maxScoreOutcome);\n maxScoreOutcome.buildIdentifier('MAXSCORE', false);\n }\n maxScoreOutcome.setDefaultValue(maxScore);\n } else {\n //remove MAXSCORE:\n item.removeOutcome('MAXSCORE');\n }\n }\n },\n\n /**\n * Sort an array of associable choices by its matchMax attr value\n * @param {Array} choiceCollection\n * @returns {Array}\n */\n getMatchMaxOrderedChoices: function getMatchMaxOrderedChoices(choiceCollection) {\n return _(choiceCollection)\n .map(function(choice) {\n var matchMax = parseInt(choice.attr('matchMax'), 10);\n if (_.isNaN(matchMax)) {\n matchMax = 0;\n }\n return {\n matchMax: matchMax === 0 ? Infinity : matchMax,\n id: choice.id()\n };\n })\n .sortBy('matchMax')\n .reverse()\n .valueOf();\n },\n\n /**\n * Compute the maximum score of a \"choice\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n choiceInteractionBased: function choiceInteractionBased(interaction, options) {\n var responseDeclaration = interaction.getResponseDeclaration();\n var mapDefault = parseFloat(responseDeclaration.mappingAttributes.defaultValue || 0);\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var max,\n maxChoice,\n minChoice,\n scoreMaps,\n requiredChoiceCount,\n totalAnswerableResponse,\n sortedMapEntries,\n missingMapsCount;\n\n options = _.defaults(options || {}, { maxChoices: 0, minChoices: 0 });\n maxChoice = parseInt(interaction.attr('maxChoices') || options.maxChoices, 10);\n minChoice = 0 ;\n if (maxChoice && minChoice && maxChoice < minChoice) {\n return 0;\n }\n\n if (template === 'MATCH_CORRECT') {\n if (\n maxChoice &&\n _.isArray(responseDeclaration.correctResponse) &&\n (responseDeclaration.correctResponse.length > maxChoice ||\n responseDeclaration.correctResponse.length < minChoice)\n ) {\n //max choice does not enable selecting the correct responses\n max = 0;\n } else if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) && !responseDeclaration.correctResponse.length)\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = 1;\n }\n } else if (template === 'MAP_RESPONSE') {\n //at least a map entry is required to be valid QTI\n if (!responseDeclaration.mapEntries || !_.size(responseDeclaration.mapEntries)) {\n return 0;\n }\n\n //prepare constraint params\n requiredChoiceCount = minChoice;\n totalAnswerableResponse = maxChoice === 0 ? Infinity : maxChoice;\n\n //sort the score map entries by the score\n scoreMaps = _.values(responseDeclaration.mapEntries);\n sortedMapEntries = _(scoreMaps)\n .map(function(v) {\n return parseFloat(v);\n })\n .sortBy()\n .reverse()\n .first(totalAnswerableResponse);\n\n //if there is not enough map defined, compared to the minChoice constraint, fill in the rest of required choices with the default map\n missingMapsCount = minChoice - sortedMapEntries.size();\n _.times(missingMapsCount, function() {\n sortedMapEntries.push(mapDefault);\n });\n\n //if the map default is positive, the optimal strategy involves using as much mapDefault as possible\n if (mapDefault && mapDefault > 0) {\n if (maxChoice) {\n missingMapsCount = maxChoice - sortedMapEntries.size();\n } else {\n missingMapsCount = _.size(interaction.getChoices()) - sortedMapEntries.size();\n }\n if (missingMapsCount > 0) {\n _.times(missingMapsCount, function() {\n sortedMapEntries.push(mapDefault);\n });\n }\n }\n\n //calculate the maximum reachable score by choice map\n max = sortedMapEntries.reduce(function(acc, v) {\n var score = v;\n if (score < 0 && requiredChoiceCount <= 0) {\n //if the score is negative check if we have the choice not to pick it\n score = 0;\n }\n requiredChoiceCount--;\n return gamp.add(acc, score);\n }, 0);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n } else if (template === 'MAP_RESPONSE_POINT') {\n //map point response processing does not work on choice based interaction\n max = 0;\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"order\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n orderInteractionBased: function orderInteractionBased(interaction) {\n var minChoice = 0 ;\n var maxChoice = parseInt(interaction.attr('maxChoices') || 0, 10);\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var max;\n\n if (maxChoice && minChoice && maxChoice < minChoice) {\n return 0;\n }\n\n if (template === 'MATCH_CORRECT') {\n if (\n (_.isArray(responseDeclaration.correctResponse) &&\n (maxChoice && responseDeclaration.correctResponse.length > maxChoice)) ||\n (minChoice )\n ) {\n //max choice does not enable selecting the correct responses\n max = 0;\n } else if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) && !responseDeclaration.correctResponse.length)\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = 1;\n }\n } else if (template === 'MAP_RESPONSE' || template === 'MAP_RESPONSE_POINT') {\n //map response processing does not work on order based interaction\n max = 0;\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"associate\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n associateInteractionBased: function associateInteractionBased(interaction, options) {\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var maxAssoc = parseInt(interaction.attr('maxAssociations') || 0, 10);\n var minAssoc = 0 ;\n var mapDefault = parseFloat(responseDeclaration.mappingAttributes.defaultValue || 0);\n var max,\n requiredAssoc,\n totalAnswerableResponse,\n usedChoices,\n choicesIdentifiers,\n sortedMapEntries,\n i,\n allPossibleMapEntries,\n infiniteScoringPair;\n\n options = _.defaults(options || {}, { possiblePairs: [], checkInfinitePair: false });\n\n if (maxAssoc && minAssoc && maxAssoc < minAssoc) {\n return 0;\n }\n\n if (template === 'MATCH_CORRECT') {\n if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) &&\n (!responseDeclaration.correctResponse.length ||\n (maxAssoc && responseDeclaration.correctResponse.length > maxAssoc) ||\n (minAssoc )))\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = 1; //is possible until proven otherwise\n\n //get the list of choices used in map entries\n choicesIdentifiers = [];\n _.forEach(responseDeclaration.correctResponse, function(pair) {\n var choices;\n if (!_.isString(pair)) {\n return;\n }\n choices = pair.trim().split(' ');\n if (_.isArray(choices) && choices.length === 2) {\n choicesIdentifiers.push(choices[0].trim());\n choicesIdentifiers.push(choices[1].trim());\n }\n });\n\n //check if the choices usage are possible within the constraint defined in the interaction\n _.forEach(_.countBy(choicesIdentifiers), function(count, identifier) {\n var matchMax;\n var choice = interaction.getChoiceByIdentifier(identifier);\n if (!choice) {\n max = 0;\n return false;\n }\n matchMax = parseInt(choice.attr('matchMax'), 10);\n if (matchMax && matchMax < count) {\n max = 0;\n return false;\n }\n });\n }\n } else if (template === 'MAP_RESPONSE') {\n requiredAssoc = minAssoc;\n totalAnswerableResponse = maxAssoc === 0 ? Infinity : maxAssoc;\n usedChoices = {};\n\n //at least a map entry is required to be valid QTI\n if (!responseDeclaration.mapEntries || !_.size(responseDeclaration.mapEntries)) {\n return 0;\n }\n\n allPossibleMapEntries = _.clone(responseDeclaration.mapEntries);\n if (mapDefault && mapDefault > 0) {\n _.forEachRight(options.possiblePairs, function(pair) {\n if (!pairExists(allPossibleMapEntries, pair)) {\n allPossibleMapEntries[pair[0] + ' ' + pair[1]] = mapDefault;\n }\n });\n }\n\n //get the sorted list of mapentries ordered by the score\n sortedMapEntries = _(allPossibleMapEntries)\n .map(function(score, pair) {\n return {\n score: parseFloat(score),\n pair: pair\n };\n })\n .sortBy('score')\n .reverse()\n .filter(function(mapEntry) {\n var pair = mapEntry.pair;\n var choices, choiceId, choice, _usedChoices;\n\n if (!_.isString(pair)) {\n return false;\n }\n\n //check that the pair is possible in term of matchMax\n choices = pair.trim().split(' ');\n if (_.isArray(choices) && choices.length === 2) {\n //clone the global used choices array to brings the changes in that object first before storing in the actual object\n _usedChoices = _.cloneDeep(usedChoices);\n\n for (i = 0; i < 2; i++) {\n choiceId = choices[i];\n\n //collect choices usage to check if the pair is possible\n if (!_usedChoices[choiceId]) {\n choice = interaction.getChoiceByIdentifier(choiceId);\n if (!choice) {\n //unexisting choice, skip\n return false;\n }\n _usedChoices[choiceId] = {\n used: 0,\n max: parseInt(choice.attr('matchMax'), 10)\n };\n }\n if (\n _usedChoices[choiceId].max &&\n _usedChoices[choiceId].used === _usedChoices[choiceId].max\n ) {\n //skip\n return false;\n } else {\n _usedChoices[choiceId].used++;\n }\n }\n\n //identify the edge case when we can get infinite association pair that create an infinite score\n infiniteScoringPair =\n infiniteScoringPair ||\n (options.checkInfinitePair &&\n mapEntry.score > 0 &&\n _usedChoices[choices[0]].max === 0 &&\n _usedChoices[choices[1]].max === 0);\n\n //update the global used choices array\n _.assign(usedChoices, _usedChoices);\n return true;\n } else {\n //is not a correct response pair\n return false;\n }\n })\n .first(totalAnswerableResponse);\n\n //infinite score => no normalMaximum should be generated for it\n if (infiniteScoringPair) {\n return false;\n }\n\n //reduce the ordered list of map entries to calculate the max score\n max = sortedMapEntries.reduce(function(acc, v) {\n var score = v.score;\n if (v.score < 0 && requiredAssoc <= 0) {\n //if the score is negative check if we have the choice not to pick it\n score = 0;\n }\n requiredAssoc--;\n return gamp.add(acc, score);\n }, 0);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n } else if (template === 'MAP_RESPONSE_POINT') {\n max = 0;\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"gap match\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n gapMatchInteractionBased: function gapMatchInteractionBased(interaction) {\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var mapDefault = parseFloat(responseDeclaration.mappingAttributes.defaultValue || 0);\n var max,\n skippableWrongResponse,\n totalAnswerableResponse,\n usedChoices,\n usedGaps,\n group1,\n group2,\n allPossibleMapEntries;\n var getMatchMaxOrderedChoices = function getMatchMaxOrderedChoices(choiceCollection) {\n return _(choiceCollection)\n .map(function(choice) {\n return {\n matchMax: choice.attr('matchMax') === 0 ? Infinity : choice.attr('matchMax') || 0,\n id: choice.id()\n };\n })\n .sortBy('matchMax')\n .reverse()\n .valueOf();\n };\n var calculatePossiblePairs = function calculatePossiblePairs(gapMatchInteraction) {\n //get max number of pairs\n var pairs = [];\n var matchSet1 = getMatchMaxOrderedChoices(gapMatchInteraction.getChoices());\n var matchSet2 = getMatchMaxOrderedChoices(gapMatchInteraction.getGaps());\n\n _.forEach(matchSet1, function(choice1) {\n _.forEach(matchSet2, function(choice2) {\n pairs.push([choice1.id, choice2.id]);\n });\n });\n\n return pairs;\n };\n\n if (template === 'MATCH_CORRECT') {\n if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) && !responseDeclaration.correctResponse.length)\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = 1; //is possible until proven otherwise\n group1 = [];\n group2 = [];\n _.forEach(responseDeclaration.correctResponse, function(pair) {\n var choices;\n if (!_.isString(pair)) {\n return;\n }\n choices = pair.trim().split(' ');\n if (_.isArray(choices) && choices.length === 2) {\n group1.push(choices[0].trim());\n group2.push(choices[1].trim());\n }\n });\n\n _.forEach(_.countBy(group1), function(count, identifier) {\n var choice = interaction.getChoiceByIdentifier(identifier);\n var matchMax = parseInt(choice.attr('matchMax'), 10);\n if (matchMax && matchMax < count) {\n max = 0;\n return false;\n }\n });\n\n _.forEach(_.countBy(group2), function(count) {\n var matchMax = 1; //match max for a gap is always 1\n if ( matchMax < count) {\n max = 0;\n return false;\n }\n });\n }\n } else if (template === 'MAP_RESPONSE') {\n skippableWrongResponse = Infinity ;\n totalAnswerableResponse = Infinity ;\n usedChoices = {};\n usedGaps = {};\n\n //at least a map entry is required to be valid QTI\n if (!responseDeclaration.mapEntries || !_.size(responseDeclaration.mapEntries)) {\n return 0;\n }\n\n allPossibleMapEntries = _.clone(responseDeclaration.mapEntries);\n if (mapDefault && mapDefault > 0) {\n _.forEachRight(calculatePossiblePairs(interaction), function(pair) {\n if (!pairExists(allPossibleMapEntries, pair)) {\n allPossibleMapEntries[pair[0] + ' ' + pair[1]] = mapDefault;\n }\n });\n }\n\n max = _(allPossibleMapEntries)\n .map(function(score, pair) {\n return {\n score: parseFloat(score),\n pair: pair\n };\n })\n .sortBy('score')\n .reverse()\n .filter(function(mapEntry) {\n var pair = mapEntry.pair;\n var _usedChoices = _.cloneDeep(usedChoices);\n var choices, choiceId, gapId, choice;\n\n if (!_.isString(pair)) {\n return false;\n }\n\n choices = pair.trim().split(' ');\n if (_.isArray(choices) && choices.length === 2) {\n choiceId = choices[0];\n gapId = choices[1];\n if (!_usedChoices[choiceId]) {\n choice = interaction.getChoiceByIdentifier(choiceId);\n if (!choice) {\n //inexisting choice, skip\n return false;\n }\n _usedChoices[choiceId] = {\n used: 0,\n max: parseInt(choice.attr('matchMax'), 10)\n };\n }\n if (_usedChoices[choiceId].max && _usedChoices[choiceId].used === _usedChoices[choiceId].max) {\n //skip\n return false;\n }\n _usedChoices[choiceId].used++;\n\n if (!usedGaps[gapId]) {\n usedGaps[gapId] = {\n used: 0,\n max: 1\n };\n }\n if (usedGaps[gapId].max && usedGaps[gapId].used === usedGaps[gapId].max) {\n //skip\n return false;\n }\n usedGaps[gapId].used++;\n\n //if an only if it is ok, we merge the temporary used choices array into the global one\n _.assign(usedChoices, _usedChoices);\n return true;\n } else {\n //is not a correct response pair\n return false;\n }\n })\n .first(totalAnswerableResponse)\n .reduce(function(acc, v) {\n var score = v.score;\n if (score >= 0) {\n return acc + score;\n } else if (skippableWrongResponse > 0) {\n skippableWrongResponse--;\n return acc;\n } else {\n return acc + score;\n }\n }, 0);\n\n //console.log(usedChoices, allPossibleMapEntries, sortedMaps);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n } else if (template === 'MAP_RESPONSE_POINT') {\n max = false;\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"select point\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n selectPointInteractionBased: function selectPointInteractionBased(interaction) {\n var maxChoice = parseInt(interaction.attr('maxChoices'), 10);\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var max, skippableWrongResponse, totalAnswerableResponse;\n\n if (template === 'MATCH_CORRECT' || template === 'MAP_RESPONSE') {\n //such templates are not allowed\n return 0;\n } else if (template === 'MAP_RESPONSE_POINT') {\n //calculate the maximum reachable score by choice map\n skippableWrongResponse = Infinity ;\n totalAnswerableResponse = maxChoice === 0 ? Infinity : maxChoice;\n\n max = _(responseDeclaration.mapEntries)\n .map(function(v) {\n return parseFloat(v.mappedValue);\n })\n .sortBy()\n .reverse()\n .first(totalAnswerableResponse)\n .reduce(function(acc, v) {\n if (v >= 0) {\n return acc + v;\n } else if (skippableWrongResponse > 0) {\n skippableWrongResponse--;\n return acc;\n } else {\n return acc + v;\n }\n }, 0);\n max = parseFloat(max);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"slider\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n sliderInteractionBased: function sliderInteractionBased(interaction) {\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var max, scoreMaps;\n\n if (template === 'MATCH_CORRECT') {\n if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) && !responseDeclaration.correctResponse.length)\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = 1;\n }\n } else if (template === 'MAP_RESPONSE') {\n //at least a map entry is required to be valid QTI\n if (!responseDeclaration.mapEntries || !_.size(responseDeclaration.mapEntries)) {\n return 0;\n }\n\n //calculate the maximum reachable score by choice map\n scoreMaps = _.values(responseDeclaration.mapEntries);\n max = _(scoreMaps)\n .map(function(v) {\n return parseFloat(v);\n })\n .max();\n max = parseFloat(max);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n } else if (template === 'MAP_RESPONSE_POINT') {\n max = 0;\n }\n return max;\n },\n\n /**\n * Compute the maximum score of a \"text entry\" typed interaction\n * @param {Object} interaction - a standard interaction model object\n * @returns {Number}\n */\n textEntryInteractionBased: function textEntryInteractionBased(interaction) {\n var responseDeclaration = interaction.getResponseDeclaration();\n var template = responseHelper.getTemplateNameFromUri(responseDeclaration.template);\n var max, scoreMaps;\n\n /**\n * Check that a response is possible or not according to the defined patternmask\n * @param {String} value\n * @returns {Boolean}\n */\n var isPossibleResponse = function isPossibleResponse(value) {\n var patternMask = interaction.attr('patternMask');\n if (patternMask) {\n return !!value.match(new RegExp(patternMask));\n } else {\n //no restriction by pattern so always possible\n return true;\n }\n };\n\n if (template === 'MATCH_CORRECT') {\n if (\n !responseDeclaration.correctResponse ||\n (_.isArray(responseDeclaration.correctResponse) && !responseDeclaration.correctResponse.length)\n ) {\n //no correct response defined -> score always zero\n max = 0;\n } else {\n max = isPossibleResponse(responseDeclaration.correctResponse[0]) ? 1 : 0;\n }\n } else if (template === 'MAP_RESPONSE') {\n //at least a map entry is required to be valid QTI\n if (!responseDeclaration.mapEntries || !_.size(responseDeclaration.mapEntries)) {\n return 0;\n }\n\n //calculate the maximum reachable score by choice map\n scoreMaps = _.values(\n _.filter(responseDeclaration.mapEntries, function(score, key) {\n return isPossibleResponse(key);\n })\n );\n max = _(scoreMaps)\n .map(function(v) {\n return parseFloat(v);\n })\n .max();\n max = parseFloat(max);\n\n //compare the calculated maximum with the mapping upperbound\n if (responseDeclaration.mappingAttributes.upperBound) {\n max = Math.min(max, parseFloat(responseDeclaration.mappingAttributes.upperBound || 0));\n }\n } else if (template === 'MAP_RESPONSE_POINT') {\n max = 0;\n }\n return max;\n }\n };\n\n return maxScore;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/AssociateInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (BlockInteraction, maxScore) { 'use strict';\n\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var AssociateInteraction = BlockInteraction.extend({\n qtiClass: 'associateInteraction',\n getNormalMaximum: function getNormalMaximum() {\n var calculatePossiblePairs = function calculatePossiblePairs(associateInteraction) {\n var i,\n j,\n pairs = [];\n var choices = maxScore.getMatchMaxOrderedChoices(associateInteraction.getChoices());\n for (i = 0; i < choices.length; i++) {\n for (j = i; j < choices.length; j++) {\n pairs.push([choices[i].id, choices[j].id]);\n }\n }\n return pairs;\n };\n return maxScore.associateInteractionBased(this, { possiblePairs: calculatePossiblePairs(this) });\n }\n });\n\n return AssociateInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/ChoiceInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (BlockInteraction, maxScore) { 'use strict';\n\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var ChoiceInteraction = BlockInteraction.extend({\n qtiClass: 'choiceInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.choiceInteractionBased(this);\n }\n });\n\n return ChoiceInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/ContainerInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/mixin/Container'], function (BlockInteraction, Container) { 'use strict';\n\n\tBlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n\tContainer = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n\tvar ContainerInteraction = BlockInteraction.extend({});\n\tContainer.augment(ContainerInteraction);\n\n\treturn ContainerInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/CustomElement',['taoQtiItem/qtiItem/mixin/Mixin', 'lodash'], function (Mixin, _) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n var methods = {\n prop: function(name, value) {\n if (name) {\n if (value !== undefined) {\n this.properties[name] = value;\n } else {\n if (typeof name === 'object') {\n for (var prop in name) {\n this.prop(prop, name[prop]);\n }\n } else if (typeof name === 'string') {\n if (this.properties[name] === undefined) {\n return undefined;\n } else {\n return this.properties[name];\n }\n }\n }\n }\n return this;\n },\n removeProp: function(propNames) {\n var _this = this;\n if (typeof propNames === 'string') {\n propNames = [propNames];\n }\n _.each(propNames, function(propName) {\n delete _this.attributes[propName];\n });\n return this;\n },\n getProperties: function() {\n return _.clone(this.properties);\n },\n getMarkupNamespace: function() {\n if (this.markupNs && this.markupNs.name && this.markupNs.uri) {\n return _.clone(this.markupNs);\n } else {\n var relatedItem = this.getRootElement();\n if (relatedItem) {\n //set the default one:\n relatedItem.namespaces[this.defaultMarkupNsName] = this.defaultMarkupNsUri;\n return {\n name: this.defaultMarkupNsName,\n uri: this.defaultMarkupNsUri\n };\n }\n }\n\n return {};\n },\n setMarkupNamespace: function(name, uri) {\n this.markupNs = {\n name: name,\n uri: uri\n };\n }\n };\n\n var CustomElement = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return CustomElement;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/CustomInteraction',['lodash', 'taoQtiItem/qtiItem/core/interactions/Interaction', 'taoQtiItem/qtiItem/mixin/CustomElement', 'taoQtiItem/qtiItem/mixin/NamespacedElement', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (_, Interaction, CustomElement, NamespacedElement, rendererConfig) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Interaction = Interaction && Object.prototype.hasOwnProperty.call(Interaction, 'default') ? Interaction['default'] : Interaction;\n CustomElement = CustomElement && Object.prototype.hasOwnProperty.call(CustomElement, 'default') ? CustomElement['default'] : CustomElement;\n NamespacedElement = NamespacedElement && Object.prototype.hasOwnProperty.call(NamespacedElement, 'default') ? NamespacedElement['default'] : NamespacedElement;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var CustomInteraction = Interaction.extend({\n qtiClass: 'customInteraction',\n defaultNsName: 'pci',\n defaultNsUri: 'http://www.imsglobal.org/xsd/portableCustomInteraction',\n nsUriFragment: 'portableCustomInteraction',\n defaultMarkupNsName: 'html5',\n defaultMarkupNsUri: 'html5',\n init: function(serial, attributes) {\n this._super(serial, attributes);\n\n this.typeIdentifier = '';\n this.markup = '';\n this.properties = {};\n this.libraries = [];\n this.entryPoint = '';\n\n //note : if the uri is defined, it will be set the uri in the xml on xml serialization,\n //which may trigger xsd validation, which is troublesome for html5 (use xhtml5 maybe ?)\n this.markupNs = {};\n\n this.pciReadyCallbacks = [];\n },\n is: function(qtiClass) {\n return qtiClass === 'customInteraction' || this._super(qtiClass);\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n typeIdentifier: this.typeIdentifier,\n markup: this.markup,\n properties: this.properties,\n libraries: this.libraries,\n entryPoint: this.entryPoint,\n ns: {\n pci: this.getNamespace().name + ':'\n }\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n toArray: function() {\n var arr = this._super();\n arr.markup = this.markup;\n arr.properties = this.properties;\n return arr;\n },\n getMarkupNamespace: function() {\n if (this.markupNs && this.markupNs.name && this.markupNs.uri) {\n return _.clone(this.markupNs);\n } else {\n var relatedItem = this.getRootElement();\n if (relatedItem) {\n //set the default one:\n relatedItem.namespaces[this.defaultMarkupNsName] = this.defaultMarkupNsUri;\n return {\n name: this.defaultMarkupNsName,\n uri: this.defaultMarkupNsUri\n };\n }\n }\n\n return {};\n },\n setMarkupNamespace: function(name, uri) {\n this.markupNs = {\n name: name,\n uri: uri\n };\n },\n onPciReady: function(callback) {\n this.pciReadyCallbacks.push(callback);\n\n if (this.data('pci')) {\n //if pci is already ready, call it immediately\n this.triggerPciReady();\n }\n },\n triggerPciReady: function() {\n var _this = this,\n pci = this.data('pci');\n\n if (pci) {\n _.each(this.pciReadyCallbacks, function(fn) {\n fn.call(_this, pci);\n });\n\n //empty the stack of ready callbacks\n this.pciReadyCallbacks = [];\n\n //mark the interaction as ready\n this.data('pciReady', true);\n } else {\n throw 'cannot trigger pci ready when no pci is actually attached to the interaction';\n }\n },\n onPci: function(event, callback) {\n this.onPciReady(function(pci) {\n if (_.isFunction(pci.on)) {\n pci.on(event, callback);\n } else {\n throw 'the pci does not implement on() function';\n }\n });\n return this;\n },\n offPci: function(event) {\n this.onPciReady(function(pci) {\n if (_.isFunction(pci.off)) {\n pci.off(event);\n } else {\n throw 'the pci does not implement off() function';\n }\n });\n return this;\n },\n triggerPci: function(event, args) {\n this.onPciReady(function(pci) {\n if (_.isFunction(pci.off)) {\n pci.trigger(event, args);\n } else {\n throw 'the pci does not implement off() function';\n }\n });\n return this;\n }\n });\n\n //add portable element standard functions\n CustomElement.augment(CustomInteraction);\n NamespacedElement.augment(CustomInteraction);\n\n return CustomInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/InlineInteraction',['taoQtiItem/qtiItem/core/interactions/Interaction'], function (Interaction) { 'use strict';\n\n Interaction = Interaction && Object.prototype.hasOwnProperty.call(Interaction, 'default') ? Interaction['default'] : Interaction;\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 (original work) Open Assessment Technologies SA\n *\n */\n\n var InlineInteraction = Interaction.extend({\n is: function(qtiClass) {\n return qtiClass === 'inlineInteraction' || this._super(qtiClass);\n }\n });\n\n return InlineInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/EndAttemptInteraction',['taoQtiItem/qtiItem/core/interactions/InlineInteraction'], function (InlineInteraction) { 'use strict';\n\n InlineInteraction = InlineInteraction && Object.prototype.hasOwnProperty.call(InlineInteraction, 'default') ? InlineInteraction['default'] : InlineInteraction;\n\n var EndAttemptInteraction = InlineInteraction.extend({\n qtiClass: 'endAttemptInteraction'\n });\n\n return EndAttemptInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/ExtendedTextInteraction',['lodash', 'taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/helper/rendererConfig', 'taoQtiItem/qtiItem/helper/maxScore'], function (_, BlockInteraction, rendererConfig, maxScore) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var ExtendedTextInteraction = BlockInteraction.extend({\n qtiClass: 'extendedTextInteraction',\n render: function render() {\n var i,\n args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n multiple: false,\n maxStringLoop: []\n },\n response = this.getResponseDeclaration();\n\n if (\n this.attr('maxStrings') &&\n (response.attr('cardinality') === 'multiple' || response.attr('cardinality') === 'ordered')\n ) {\n defaultData.multiple = true;\n for (i = 0; i < this.attr('maxStrings'); i++) {\n defaultData.maxStringLoop.push(i + ''); //need to convert to string. The tpl engine fails otherwise\n }\n }\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.textEntryInteractionBased(this);\n }\n });\n\n return ExtendedTextInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/GapMatchInteraction',['taoQtiItem/qtiItem/core/interactions/ContainerInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (ContainerInteraction, maxScore) { 'use strict';\n\n ContainerInteraction = ContainerInteraction && Object.prototype.hasOwnProperty.call(ContainerInteraction, 'default') ? ContainerInteraction['default'] : ContainerInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GapMatchInteraction = ContainerInteraction.extend({\n qtiClass: 'gapMatchInteraction',\n getGaps: function getGaps() {\n return this.getBody().getElements('gap');\n },\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.gapMatchInteractionBased(this);\n }\n });\n\n return GapMatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/ObjectInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/core/Object'], function (QtiBlockInteraction, QtiObject) { 'use strict';\n\n QtiBlockInteraction = QtiBlockInteraction && Object.prototype.hasOwnProperty.call(QtiBlockInteraction, 'default') ? QtiBlockInteraction['default'] : QtiBlockInteraction;\n QtiObject = QtiObject && Object.prototype.hasOwnProperty.call(QtiObject, 'default') ? QtiObject['default'] : QtiObject;\n\n var QtiObjectInteraction = QtiBlockInteraction.extend({\n //common methods to object containers (start)\n initObject: function(object) {\n this.object = object || new QtiObject();\n },\n getObject: function() {\n return this.object;\n }\n //common methods to object containers (end)\n });\n\n return QtiObjectInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/GraphicInteraction',['taoQtiItem/qtiItem/core/interactions/ObjectInteraction', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (QtiObjectInteraction, _, rendererConfig) { 'use strict';\n\n QtiObjectInteraction = QtiObjectInteraction && Object.prototype.hasOwnProperty.call(QtiObjectInteraction, 'default') ? QtiObjectInteraction['default'] : QtiObjectInteraction;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var QtiGraphicInteraction = QtiObjectInteraction.extend({\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n backgroundImage: this.object.getAttributes(),\n object: this.object.render(renderer)\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n }\n });\n\n return QtiGraphicInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/GraphicAssociateInteraction',['taoQtiItem/qtiItem/core/interactions/GraphicInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (GraphicInteraction, maxScore) { 'use strict';\n\n GraphicInteraction = GraphicInteraction && Object.prototype.hasOwnProperty.call(GraphicInteraction, 'default') ? GraphicInteraction['default'] : GraphicInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GraphicAssociateInteraction = GraphicInteraction.extend({\n qtiClass: 'graphicAssociateInteraction',\n getNormalMaximum: function getNormalMaximum() {\n var calculatePossiblePairs = function calculatePossiblePairs(associateInteraction) {\n var i,\n j,\n pairs = [];\n var choices = maxScore.getMatchMaxOrderedChoices(associateInteraction.getChoices());\n for (i = 0; i < choices.length; i++) {\n for (j = i; j < choices.length; j++) {\n if (i !== j) {\n pairs.push([choices[i].id, choices[j].id]);\n }\n }\n }\n return pairs;\n };\n return maxScore.associateInteractionBased(this, { possiblePairs: calculatePossiblePairs(this) });\n }\n });\n\n return GraphicAssociateInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/GraphicGapMatchInteraction',['taoQtiItem/qtiItem/core/interactions/GraphicInteraction', 'taoQtiItem/qtiItem/core/Element', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig', 'taoQtiItem/qtiItem/helper/maxScore'], function (GraphicInteraction, Element, _, rendererConfig, maxScore) { 'use strict';\n\n GraphicInteraction = GraphicInteraction && Object.prototype.hasOwnProperty.call(GraphicInteraction, 'default') ? GraphicInteraction['default'] : GraphicInteraction;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GraphicGapMatchInteraction = GraphicInteraction.extend({\n qtiClass: 'graphicGapMatchInteraction',\n init: function init(serial, attributes) {\n this._super(serial, attributes);\n this.gapImgs = {};\n },\n addGapImg: function addGapImg(gapImg) {\n if (Element.isA(gapImg, 'gapImg')) {\n gapImg.setRootElement(this.getRootElement() || null);\n this.gapImgs[gapImg.getSerial()] = gapImg;\n }\n },\n removeGapImg: function removeGapImg(gapImg) {\n var serial = '';\n if (typeof gapImg === 'string') {\n serial = gapImg;\n } else if (Element.isA(gapImg, 'gapImg')) {\n serial = gapImg.getSerial();\n }\n delete this.gapImgs[serial];\n return this;\n },\n getGapImgs: function getGapImgs() {\n return _.clone(this.gapImgs);\n },\n getGapImg: function getGapImg(serial) {\n return this.gapImgs[serial];\n },\n getChoiceByIdentifier: function getChoiceByIdentifier(identifier) {\n var choice = this._super(identifier);\n if (!choice) {\n //if not found among the choices, search the gapImgs\n choice = _.find(this.gapImgs, function(elt) {\n return elt && elt.id() === identifier;\n });\n }\n return choice;\n },\n getComposingElements: function getComposingElements() {\n var serial,\n elts = this._super();\n //recursive to choices:\n for (serial in this.gapImgs) {\n elts[serial] = this.gapImgs[serial];\n elts = _.extend(elts, this.gapImgs[serial].getComposingElements());\n }\n return elts;\n },\n find: function find(serial) {\n var found = this._super(serial);\n if (!found) {\n if (this.gapImgs[serial]) {\n found = { parent: this, element: this.gapImgs[serial] };\n }\n }\n return found;\n },\n render: function render() {\n var serial,\n args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n gapImgs: []\n };\n\n //note: no choice shuffling option available for graphic gap match\n var gapImgs = this.getGapImgs();\n for (serial in gapImgs) {\n if (Element.isA(gapImgs[serial], 'choice')) {\n defaultData.gapImgs.push(gapImgs[serial].render({}, null, '', renderer));\n }\n }\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n toArray: function toArray() {\n var serial,\n gapImgs,\n arr = this._super();\n arr.gapImgs = {};\n gapImgs = this.getGapImgs();\n for (serial in gapImgs) {\n arr.gapImgs[serial] = gapImgs[serial].toArray();\n }\n return arr;\n },\n getNormalMaximum: function getNormalMaximum() {\n var calculatePossiblePairs = function calculatePossiblePairs(graphicGapInteraction) {\n var pairs = [];\n var matchSet1 = maxScore.getMatchMaxOrderedChoices(graphicGapInteraction.getGapImgs());\n var matchSet2 = maxScore.getMatchMaxOrderedChoices(graphicGapInteraction.getChoices());\n\n _.forEach(matchSet1, function(choice1) {\n _.forEach(matchSet2, function(choice2) {\n pairs.push([choice1.id, choice2.id]);\n });\n });\n\n return pairs;\n };\n return maxScore.associateInteractionBased(this, {\n possiblePairs: calculatePossiblePairs(this),\n checkInfinitePair: true\n });\n }\n });\n\n return GraphicGapMatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/GraphicOrderInteraction',['taoQtiItem/qtiItem/core/interactions/GraphicInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (GraphicInteraction, maxScore) { 'use strict';\n\n GraphicInteraction = GraphicInteraction && Object.prototype.hasOwnProperty.call(GraphicInteraction, 'default') ? GraphicInteraction['default'] : GraphicInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var GraphicOrderInteraction = GraphicInteraction.extend({\n qtiClass: 'graphicOrderInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.orderInteractionBased(this);\n }\n });\n\n return GraphicOrderInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/HotspotInteraction',['taoQtiItem/qtiItem/core/interactions/GraphicInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (GraphicInteraction, maxScore) { 'use strict';\n\n GraphicInteraction = GraphicInteraction && Object.prototype.hasOwnProperty.call(GraphicInteraction, 'default') ? GraphicInteraction['default'] : GraphicInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var HotspotInteraction = GraphicInteraction.extend({\n qtiClass: 'hotspotInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.choiceInteractionBased(this);\n }\n });\n\n return HotspotInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/HottextInteraction',['taoQtiItem/qtiItem/core/interactions/ContainerInteraction', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/maxScore'], function (ContainerInteraction, Element, maxScore) { 'use strict';\n\n ContainerInteraction = ContainerInteraction && Object.prototype.hasOwnProperty.call(ContainerInteraction, 'default') ? ContainerInteraction['default'] : ContainerInteraction;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var HottextInteraction = ContainerInteraction.extend({\n qtiClass: 'hottextInteraction',\n getChoices: function() {\n return this.getBody().getElements('hottext');\n },\n getChoice: function(serial) {\n var element = this.getBody().getElement(serial);\n return Element.isA(element, 'choice') ? element : null;\n },\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.choiceInteractionBased(this);\n }\n });\n\n return HottextInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/InlineChoiceInteraction',['taoQtiItem/qtiItem/core/interactions/InlineInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (InlineInteraction, maxScore) { 'use strict';\n\n InlineInteraction = InlineInteraction && Object.prototype.hasOwnProperty.call(InlineInteraction, 'default') ? InlineInteraction['default'] : InlineInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var InlineChoiceInteraction = InlineInteraction.extend({\n qtiClass: 'inlineChoiceInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.choiceInteractionBased(this, { maxChoices: 1 });\n }\n });\n\n return InlineChoiceInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/MatchInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/core/choices/SimpleAssociableChoice', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/qtiItem/helper/maxScore'], function (BlockInteraction, SimpleAssociableChoice, _, rendererConfig, util, maxScore) { 'use strict';\n\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n SimpleAssociableChoice = SimpleAssociableChoice && Object.prototype.hasOwnProperty.call(SimpleAssociableChoice, 'default') ? SimpleAssociableChoice['default'] : SimpleAssociableChoice;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var MatchInteraction = BlockInteraction.extend({\n qtiClass: 'matchInteraction',\n init: function init(serial, attributes) {\n this._super(serial, attributes);\n this.choices = [{}, {}];\n },\n addChoice: function addChoice(choice, matchSet) {\n matchSet = parseInt(matchSet);\n if (this.choices[matchSet]) {\n choice.setRootElement(this.getRootElement() || null);\n this.choices[matchSet][choice.getSerial()] = choice;\n }\n },\n getChoices: function getChoices(matchSet) {\n matchSet = parseInt(matchSet);\n if (this.choices[matchSet]) {\n return _.clone(this.choices[matchSet]);\n } else {\n return _.clone(this.choices);\n }\n },\n getChoice: function getChoice(serial) {\n return this.choices[0][serial] || this.choices[1][serial] || null;\n },\n getChoiceByIdentifier: function getChoiceByIdentifier(identifier) {\n var i, matchSet, serial;\n //recursive to both match sets:\n for (i = 0; i < 2; i++) {\n matchSet = this.getChoices(i);\n for (serial in matchSet) {\n if (matchSet[serial] instanceof SimpleAssociableChoice && matchSet[serial].id() === identifier) {\n return matchSet[serial];\n }\n }\n }\n return null;\n },\n getComposingElements: function getComposingElements() {\n var i, matchSet, serial;\n var elts = this._super();\n //recursive to both match sets:\n for (i = 0; i < 2; i++) {\n matchSet = this.getChoices(i);\n for (serial in matchSet) {\n if (matchSet[serial] instanceof SimpleAssociableChoice) {\n elts[serial] = matchSet[serial];\n elts = _.extend(elts, matchSet[serial].getComposingElements());\n }\n }\n }\n\n return elts;\n },\n find: function find(serial) {\n var found = this._super(serial);\n if (!found) {\n found = util.findInCollection(this, ['choices.0', 'choices.1'], serial);\n }\n return found;\n },\n render: function render() {\n var args = rendererConfig.getOptionsFromArguments(arguments);\n var renderer = args.renderer || this.getRenderer();\n var defaultData = {\n matchSet1: [],\n matchSet2: []\n };\n var choices, i, matchSet, serial;\n var interactionData = { interaction: { serial: this.serial, attributes: this.attributes } };\n\n if (!renderer) {\n throw 'no renderer found for the interaction ' + this.qtiClass;\n }\n\n if (this.attr('shuffle') && renderer.getOption('shuffleChoices')) {\n choices = renderer.getShuffledChoices(this);\n } else {\n choices = this.getChoices();\n }\n\n for (i = 0; i < 2; i++) {\n matchSet = choices[i];\n for (serial in matchSet) {\n if (matchSet[serial] instanceof SimpleAssociableChoice) {\n defaultData['matchSet' + (i + 1)].push(\n matchSet[serial].render(\n _.clone(interactionData, true),\n null,\n 'simpleAssociableChoice.matchInteraction',\n renderer\n )\n );\n }\n }\n }\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n postRender: function postRender(data, altClassName, renderer) {\n renderer = renderer || this.getRenderer();\n return _(this.getChoices())\n .map(function(choices) {\n return _(choices)\n .filter(function(choice) {\n return choice instanceof SimpleAssociableChoice;\n })\n .map(function(choice) {\n return choice.postRender({}, 'simpleAssociableChoice.matchInteraction', renderer);\n })\n .value();\n })\n .flatten(true)\n .value()\n .concat(this._super(data, altClassName, renderer));\n },\n toArray: function toArray() {\n var i, matchSet, serial;\n var arr = this._super();\n arr.choices = { 0: {}, 1: {} };\n for (i = 0; i < 2; i++) {\n matchSet = this.getChoices(i);\n for (serial in matchSet) {\n if (matchSet[serial] instanceof SimpleAssociableChoice) {\n arr.choices[i][serial] = matchSet[serial].toArray();\n }\n }\n }\n return arr;\n },\n getNormalMaximum: function getNormalMaximum() {\n var calculatePossiblePairs = function calculatePossiblePairs(matchInteraction) {\n //get max number of pairs\n var pairs = [];\n var matchSet1 = maxScore.getMatchMaxOrderedChoices(matchInteraction.getChoices(0));\n var matchSet2 = maxScore.getMatchMaxOrderedChoices(matchInteraction.getChoices(1));\n\n _.forEach(matchSet1, function(choice1) {\n _.forEach(matchSet2, function(choice2) {\n pairs.push([choice1.id, choice2.id]);\n });\n });\n\n return pairs;\n };\n return maxScore.associateInteractionBased(this, { possiblePairs: calculatePossiblePairs(this) });\n }\n });\n\n return MatchInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/MediaInteraction',['lodash', 'taoQtiItem/qtiItem/core/interactions/ObjectInteraction', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (_, ObjectInteraction, rendererConfig) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n ObjectInteraction = ObjectInteraction && Object.prototype.hasOwnProperty.call(ObjectInteraction, 'default') ? ObjectInteraction['default'] : ObjectInteraction;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\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) 2014-2017 (original work) Open Assessment Technologies SA ;\n */\n\n var MediaInteraction = ObjectInteraction.extend({\n qtiClass: 'mediaInteraction',\n render: function render() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n object: this.object.render({}, null, '', renderer)\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n getNormalMaximum: function getNormalMaximum() {\n return 0;\n }\n });\n\n return MediaInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/OrderInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (BlockInteraction, maxScore) { 'use strict';\n\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var OrderInteraction = BlockInteraction.extend({\n qtiClass: 'orderInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.orderInteractionBased(this);\n }\n });\n\n return OrderInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/SelectPointInteraction',['taoQtiItem/qtiItem/core/interactions/GraphicInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (GraphicInteraction, maxScore) { 'use strict';\n\n GraphicInteraction = GraphicInteraction && Object.prototype.hasOwnProperty.call(GraphicInteraction, 'default') ? GraphicInteraction['default'] : GraphicInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SelectPointInteraction = GraphicInteraction.extend({\n qtiClass: 'selectPointInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.selectPointInteractionBased(this);\n }\n });\n\n return SelectPointInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/SliderInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (BlockInteraction, maxScore) { 'use strict';\n\n BlockInteraction = BlockInteraction && Object.prototype.hasOwnProperty.call(BlockInteraction, 'default') ? BlockInteraction['default'] : BlockInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var SliderInteraction = BlockInteraction.extend({\n qtiClass: 'sliderInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.sliderInteractionBased(this);\n }\n });\n\n return SliderInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/TextEntryInteraction',['taoQtiItem/qtiItem/core/interactions/InlineInteraction', 'taoQtiItem/qtiItem/helper/maxScore'], function (InlineInteraction, maxScore) { 'use strict';\n\n InlineInteraction = InlineInteraction && Object.prototype.hasOwnProperty.call(InlineInteraction, 'default') ? InlineInteraction['default'] : InlineInteraction;\n maxScore = maxScore && Object.prototype.hasOwnProperty.call(maxScore, 'default') ? maxScore['default'] : maxScore;\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) 2014-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var TextEntryInteraction = InlineInteraction.extend({\n qtiClass: 'textEntryInteraction',\n getNormalMaximum: function getNormalMaximum() {\n return maxScore.textEntryInteractionBased(this);\n }\n });\n\n return TextEntryInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/core/interactions/UploadInteraction',['taoQtiItem/qtiItem/core/interactions/BlockInteraction'], function (InlineInteraction) { 'use strict';\n\n InlineInteraction = InlineInteraction && Object.prototype.hasOwnProperty.call(InlineInteraction, 'default') ? InlineInteraction['default'] : InlineInteraction;\n\n var UploadInteraction = InlineInteraction.extend({\n qtiClass: 'uploadInteraction'\n });\n\n return UploadInteraction;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/ContainerItemBody',['taoQtiItem/qtiItem/mixin/Mixin', 'taoQtiItem/qtiItem/mixin/Container', 'lodash'], function (Mixin, Container, _) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n var methods = {};\n _.extend(methods, Container.methods);\n _.extend(methods, {\n initContainer: function(body) {\n Container.methods.initContainer.call(this, body);\n this.bdy.contentModel = 'itemBody';\n }\n });\n\n var ContainerItemBody = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return ContainerItemBody;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Item',['taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/core/IdentifiedElement', 'taoQtiItem/qtiItem/mixin/ContainerItemBody', 'lodash', 'jquery', 'taoQtiItem/qtiItem/helper/util'], function (Element, IdentifiedElement, Container, _, $, util) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n IdentifiedElement = IdentifiedElement && Object.prototype.hasOwnProperty.call(IdentifiedElement, 'default') ? IdentifiedElement['default'] : IdentifiedElement;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n var Item = IdentifiedElement.extend({\n qtiClass: 'assessmentItem',\n init: function init(serial, attributes) {\n this._super(serial, attributes);\n this.rootElement = this;\n this.stylesheets = {};\n this.responses = {};\n this.outcomes = {};\n this.modalFeedbacks = {};\n this.namespaces = {};\n this.schemaLocations = {};\n this.responseProcessing = null;\n this.apipAccessibility = null;\n },\n getInteractions: function getInteractions() {\n var interactions = [];\n var elts = this.getComposingElements();\n for (var serial in elts) {\n if (Element.isA(elts[serial], 'interaction')) {\n interactions.push(elts[serial]);\n }\n }\n return interactions;\n },\n addResponseDeclaration: function addResponseDeclaration(response) {\n if (Element.isA(response, 'responseDeclaration')) {\n response.setRootElement(this);\n this.responses[response.getSerial()] = response;\n } else {\n throw 'is not a qti response declaration';\n }\n return this;\n },\n getResponseDeclaration: function getResponseDeclaration(identifier) {\n for (var i in this.responses) {\n if (this.responses[i].attr('identifier') === identifier) {\n return this.responses[i];\n }\n }\n return null;\n },\n addOutcomeDeclaration: function addOutcomeDeclaration(outcome) {\n if (Element.isA(outcome, 'outcomeDeclaration')) {\n outcome.setRootElement(this);\n this.outcomes[outcome.getSerial()] = outcome;\n } else {\n throw 'is not a qti outcome declaration';\n }\n return this;\n },\n getOutcomeDeclaration: function getOutcomeDeclaration(identifier) {\n var found;\n _.forEach(this.outcomes, function(outcome) {\n if (outcome.id() === identifier) {\n found = outcome;\n return false;\n }\n });\n return found;\n },\n getOutcomes: function getOutcomes() {\n return _.clone(this.outcomes);\n },\n removeOutcome: function removeOutcome(identifier) {\n var outcome = this.getOutcomeDeclaration(identifier);\n if (outcome) {\n this.outcomes = _.omit(this.outcomes, outcome.getSerial());\n }\n },\n addModalFeedback: function addModalFeedback(feedback) {\n if (Element.isA(feedback, 'modalFeedback')) {\n feedback.setRootElement(this);\n this.modalFeedbacks[feedback.getSerial()] = feedback;\n } else {\n throw 'is not a qti modal feedback';\n }\n return this;\n },\n getComposingElements: function getComposingElements() {\n var elts = this._super(),\n _this = this;\n _.forEach(['responses', 'outcomes', 'modalFeedbacks', 'stylesheets'], function(elementCollection) {\n for (var i in _this[elementCollection]) {\n var elt = _this[elementCollection][i];\n elts[i] = elt;\n elts = _.extend(elts, elt.getComposingElements());\n }\n });\n if (this.responseProcessing instanceof Element) {\n elts[this.responseProcessing.getSerial()] = this.responseProcessing;\n }\n return elts;\n },\n find: function find(serial) {\n var found = this._super(serial);\n\n if (!found) {\n found = util.findInCollection(this, ['responses', 'outcomes', 'modalFeedbacks', 'stylesheets'], serial);\n }\n\n return found;\n },\n getResponses: function getResponses() {\n return _.clone(this.responses);\n },\n getRootElement: function getRootElement() {\n return this;\n },\n addNamespace: function addNamespace(name, uri) {\n this.namespaces[name] = uri;\n },\n setNamespaces: function setNamespaces(namespaces) {\n this.namespaces = namespaces;\n },\n getNamespaces: function getNamespaces() {\n return _.clone(this.namespaces);\n },\n setSchemaLocations: function setSchemaLocations(locations) {\n this.schemaLocations = locations;\n },\n getSchemaLocations: function getSchemaLocations() {\n return _.clone(this.schemaLocations);\n },\n setApipAccessibility: function setApipAccessibility(apip) {\n this.apipAccessibility = apip || null;\n },\n getApipAccessibility: function getApipAccessibility() {\n return this.apipAccessibility;\n },\n addStylesheet: function addStylesheet(stylesheet) {\n if (Element.isA(stylesheet, 'stylesheet')) {\n stylesheet.setRootElement(this);\n this.stylesheets[stylesheet.getSerial()] = stylesheet;\n } else {\n throw 'is not a qti stylesheet declaration';\n }\n return this;\n },\n removeStyleSheet: function removeStyleSheet(stylesheet) {\n delete this.stylesheets[stylesheet.getSerial()];\n return this;\n },\n stylesheetExists: function stylesheetExists(href) {\n var exists = false;\n _.forEach(this.stylesheets, function(stylesheet) {\n if (stylesheet.attr('href') === href) {\n exists = true;\n return false; //break each loop\n }\n });\n return exists;\n },\n setResponseProcessing: function setResponseProcessing(rp) {\n if (Element.isA(rp, 'responseProcessing')) {\n rp.setRootElement(this);\n this.responseProcessing = rp;\n } else {\n throw 'is not a response processing';\n }\n return this;\n },\n toArray: function toArray() {\n var arr = this._super();\n var toArray = function(elt) {\n return elt.toArray();\n };\n arr.namespaces = this.namespaces;\n arr.schemaLocations = this.schemaLocations;\n arr.outcomes = _.map(this.outcomes, toArray);\n arr.responses = _.map(this.responses, toArray);\n arr.stylesheets = _.map(this.stylesheets, toArray);\n arr.modalFeedbacks = _.map(this.modalFeedbacks, toArray);\n arr.responseProcessing = this.responseProcessing.toArray();\n return arr;\n },\n isEmpty: function isEmpty() {\n var body = this.body().trim();\n\n if (body) {\n //hack to fix #2652\n var $dummy = $('<div>').html(body),\n $children = $dummy.children();\n\n if ($children.length === 1 && $children.hasClass('empty')) {\n return true;\n } else {\n return false;\n }\n } else {\n return true;\n }\n },\n\n /**\n * Clean up an item rendering.\n * Ask the renderer to run destroy if exists.\n */\n clear: function clear() {\n var renderer = this.getRenderer();\n if (renderer) {\n if (_.isFunction(renderer.destroy)) {\n renderer.destroy(this);\n }\n }\n }\n });\n\n Container.augment(Item);\n\n return Item;\n\n});\n\n","define('taoQtiItem/qtiItem/core/qtiClasses',[],function () { 'use strict';\n\n var qtiClasses = {\n _container: 'taoQtiItem/qtiItem/core/Container',\n assessmentItem: 'taoQtiItem/qtiItem/core/Item',\n responseProcessing: 'taoQtiItem/qtiItem/core/ResponseProcessing',\n _simpleFeedbackRule: 'taoQtiItem/qtiItem/core/response/SimpleFeedbackRule',\n stylesheet: 'taoQtiItem/qtiItem/core/Stylesheet',\n math: 'taoQtiItem/qtiItem/core/Math',\n img: 'taoQtiItem/qtiItem/core/Img',\n object: 'taoQtiItem/qtiItem/core/Object',\n outcomeDeclaration: 'taoQtiItem/qtiItem/core/variables/OutcomeDeclaration',\n responseDeclaration: 'taoQtiItem/qtiItem/core/variables/ResponseDeclaration',\n rubricBlock: 'taoQtiItem/qtiItem/core/RubricBlock',\n associableHotspot: 'taoQtiItem/qtiItem/core/choices/AssociableHotspot',\n gap: 'taoQtiItem/qtiItem/core/choices/Gap',\n gapImg: 'taoQtiItem/qtiItem/core/choices/GapImg',\n gapText: 'taoQtiItem/qtiItem/core/choices/GapText',\n hotspotChoice: 'taoQtiItem/qtiItem/core/choices/HotspotChoice',\n hottext: 'taoQtiItem/qtiItem/core/choices/Hottext',\n inlineChoice: 'taoQtiItem/qtiItem/core/choices/InlineChoice',\n simpleAssociableChoice: 'taoQtiItem/qtiItem/core/choices/SimpleAssociableChoice',\n simpleChoice: 'taoQtiItem/qtiItem/core/choices/SimpleChoice',\n associateInteraction: 'taoQtiItem/qtiItem/core/interactions/AssociateInteraction',\n choiceInteraction: 'taoQtiItem/qtiItem/core/interactions/ChoiceInteraction',\n endAttemptInteraction: 'taoQtiItem/qtiItem/core/interactions/EndAttemptInteraction',\n extendedTextInteraction: 'taoQtiItem/qtiItem/core/interactions/ExtendedTextInteraction',\n gapMatchInteraction: 'taoQtiItem/qtiItem/core/interactions/GapMatchInteraction',\n graphicAssociateInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicAssociateInteraction',\n graphicGapMatchInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicGapMatchInteraction',\n graphicOrderInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicOrderInteraction',\n hotspotInteraction: 'taoQtiItem/qtiItem/core/interactions/HotspotInteraction',\n hottextInteraction: 'taoQtiItem/qtiItem/core/interactions/HottextInteraction',\n inlineChoiceInteraction: 'taoQtiItem/qtiItem/core/interactions/InlineChoiceInteraction',\n matchInteraction: 'taoQtiItem/qtiItem/core/interactions/MatchInteraction',\n mediaInteraction: 'taoQtiItem/qtiItem/core/interactions/MediaInteraction',\n orderInteraction: 'taoQtiItem/qtiItem/core/interactions/OrderInteraction',\n prompt: 'taoQtiItem/qtiItem/core/interactions/Prompt',\n selectPointInteraction: 'taoQtiItem/qtiItem/core/interactions/SelectPointInteraction',\n sliderInteraction: 'taoQtiItem/qtiItem/core/interactions/SliderInteraction',\n textEntryInteraction: 'taoQtiItem/qtiItem/core/interactions/TextEntryInteraction',\n uploadInteraction: 'taoQtiItem/qtiItem/core/interactions/UploadInteraction',\n feedbackBlock: 'taoQtiItem/qtiItem/core/feedbacks/FeedbackBlock',\n feedbackInline: 'taoQtiItem/qtiItem/core/feedbacks/FeedbackInline',\n modalFeedback: 'taoQtiItem/qtiItem/core/feedbacks/ModalFeedback',\n customInteraction: 'taoQtiItem/qtiItem/core/interactions/CustomInteraction',\n infoControl: 'taoQtiItem/qtiItem/core/PortableInfoControl',\n include: 'taoQtiItem/qtiItem/core/Include',\n table: 'taoQtiItem/qtiItem/core/Table',\n printedVariable: 'taoQtiItem/qtiItem/core/PrintedVariable',\n _tooltip: 'taoQtiItem/qtiItem/core/Tooltip'\n };\n\n return qtiClasses;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/xmlNsHandler',[],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) 2017 (original work) Open Assessment Technologies SA\n */\n\n /**\n * XML namespace handling\n */\n\n /**\n * Elements that need to be prefixed\n *\n * @see http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd\n * @type {string}\n */\n var prefixed = 'article|aside|bdi|figure|footer|header|nav|rb|rp|rt|rtc|ruby|section';\n\n /**\n * Find a possibly existing prefix\n *\n * @param namespaces\n * @param html5Ns\n * @returns {*}\n */\n function getPrefix(namespaces, html5Ns) {\n var key;\n for (key in namespaces) {\n if (namespaces[key] === html5Ns) {\n return key;\n }\n }\n return 'qh5';\n }\n\n var xmlNsHandler = {\n /**\n * Remove prefix to make sure elements are properly displayed\n *\n * @param body\n */\n stripNs: function stripNs(body) {\n var pattern = '([\\\\w]+)\\\\:(' + prefixed + ')';\n var openRegEx = new RegExp('(<' + pattern + ')', 'gi');\n var closeRegEx = new RegExp('(<\\\\/' + pattern + '>)', 'gi');\n return body.replace(openRegEx, '<$3').replace(closeRegEx, '</$3>');\n },\n\n /**\n * Add a prefix to those elements that require one\n *\n * @param xml\n * @param namespaces\n * @returns {*}\n */\n restoreNs: function restoreNs(xml, namespaces) {\n var xmlRe = new RegExp('(<(' + prefixed + ')[^>]*>|<\\\\/(' + prefixed + ')>)', 'gi');\n var tagRe = new RegExp('((<)(' + prefixed + ')([^>]*)(>)|(<\\\\/)(' + prefixed + ')(>))', 'i');\n var xmlMatch = xml.match(xmlRe);\n var imsXsd = 'http://www.imsglobal.org/xsd';\n var html5Ns = imsXsd + '/imsqtiv2p2_html5_v1p0';\n var prefix = getPrefix(namespaces, html5Ns);\n var prefixAtt = 'xmlns:' + prefix + '=\"' + html5Ns + '\"';\n var i = xmlMatch ? xmlMatch.length : 0;\n var tagMatch;\n\n if (!xmlMatch) {\n return xml;\n }\n\n while (i--) {\n tagMatch = xmlMatch[i].match(tagRe);\n xml = xml.replace(\n xmlMatch[i],\n tagMatch[5]\n ? '<' + prefix + ':' + tagMatch[3] + tagMatch[4] + '>'\n : '</' + prefix + ':' + tagMatch[7] + '>'\n );\n }\n\n // we found matches but no namespace has been set\n if (xmlMatch.length && xml.indexOf(prefixAtt) === -1) {\n xml = xml.replace('<assessmentItem', '<assessmentItem ' + prefixAtt);\n }\n\n // make sure the item is set to qti 2.2\n xml = xml.replace('xmlns=\"' + imsXsd + '/imsqti_v2p1\"', 'xmlns=\"' + imsXsd + '/imsqti_v2p2\"');\n xml = xml.replace(\n 'xsi:schemaLocation=\"' + imsXsd + '/imsqti_v2p1 imsqti_v2p1.xsd\"',\n 'xsi:schemaLocation=\"' + imsXsd + '/imsqti_v2p2 ' + imsXsd + '/qti/qtiv2p2/imsqti_v2p2.xsd\"'\n );\n\n return xml;\n }\n };\n\n return xmlNsHandler;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/itemScore',[],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 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Returns iteraction score response rule object\n *\n * @param {String} responseIdentifiers interactions reponse indentifiers\n * @returns {Obeject}\n */\n var itemScore = (responseIdentifiers) => {\n const outcomeExpressions = responseIdentifiers.map((outcomeIdentifier) => ({\n qtiClass: 'variable',\n attributes: {\n identifier: `SCORE_${outcomeIdentifier}`,\n },\n }));\n\n return {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: 'SCORE',\n },\n expression: {\n qtiClass: 'sum',\n expressions: outcomeExpressions,\n },\n };\n };\n\n return itemScore;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Loader',['lodash', 'class', 'taoQtiItem/qtiItem/core/qtiClasses', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/xmlNsHandler', 'core/moduleLoader', 'taoQtiItem/qtiItem/helper/response', 'taoQtiItem/qtiItem/helper/itemScore'], function (_, _class, qtiClasses, Element, xmlNsHandler, moduleLoader, responseHelper, itemScoreHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n qtiClasses = qtiClasses && Object.prototype.hasOwnProperty.call(qtiClasses, 'default') ? qtiClasses['default'] : qtiClasses;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n xmlNsHandler = xmlNsHandler && Object.prototype.hasOwnProperty.call(xmlNsHandler, 'default') ? xmlNsHandler['default'] : xmlNsHandler;\n moduleLoader = moduleLoader && Object.prototype.hasOwnProperty.call(moduleLoader, 'default') ? moduleLoader['default'] : moduleLoader;\n responseHelper = responseHelper && Object.prototype.hasOwnProperty.call(responseHelper, 'default') ? responseHelper['default'] : responseHelper;\n itemScoreHelper = itemScoreHelper && Object.prototype.hasOwnProperty.call(itemScoreHelper, 'default') ? itemScoreHelper['default'] : itemScoreHelper;\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-2020 (original work) Open Assessment Technologies SA ;\n *\n */\n\n /**\n * If a property is given as a serialized JSON object, parse it directly to a JS object\n */\n const loadPortableCustomElementProperties = (portableElement, rawProperties) => {\n var properties = {};\n\n _.forOwn(rawProperties, (value, key) => {\n try {\n properties[key] = JSON.parse(value);\n } catch (e) {\n properties[key] = value;\n }\n });\n portableElement.properties = properties;\n };\n\n const loadPortableCustomElementData = (portableElement, data) => {\n portableElement.typeIdentifier = data.typeIdentifier;\n portableElement.markup = data.markup;\n portableElement.entryPoint = data.entryPoint;\n portableElement.libraries = data.libraries;\n portableElement.setNamespace('', data.xmlns);\n\n loadPortableCustomElementProperties(portableElement, data.properties);\n };\n\n var Loader = Class.extend({\n init(item, classesLocation) {\n this.qti = {}; //loaded qti classes are store here\n this.classesLocation = {};\n this.item = item || null; //starts either from scratch or with an existing item object\n\n this.setClassesLocation(classesLocation || qtiClasses); //load default location for qti classes model\n },\n setClassesLocation(qtiClassesList) {\n _.extend(this.classesLocation, qtiClassesList);\n\n return this;\n },\n getRequiredClasses(data) {\n let ret = [];\n\n for (let i in data) {\n if (i === 'qtiClass' && data[i] !== '_container' && i !== 'rootElement') {\n //although a _container is a concrete class in TAO, it is not defined in QTI standard\n ret.push(data[i]);\n } else if (typeof data[i] === 'object' && i !== 'responseRules') {\n //responseRules should'nt be part of the parsing\n ret = _.union(ret, this.getRequiredClasses(data[i]));\n }\n }\n\n return ret;\n },\n loadRequiredClasses(data, callback, reload) {\n let requiredClass;\n const requiredClasses = this.getRequiredClasses(data, reload);\n const required = [];\n\n for (let i in requiredClasses) {\n requiredClass = requiredClasses[i];\n if (this.classesLocation[requiredClass]) {\n required.push({\n module: this.classesLocation[requiredClass],\n category: 'qti'\n });\n } else {\n throw new Error(`missing qti class location declaration : ${requiredClass}`);\n }\n }\n\n moduleLoader([], () => true).addList(required).load().then(loadeded => {\n loadeded.forEach(QtiClass => {\n this.qti[QtiClass.prototype.qtiClass] = QtiClass;\n });\n callback.call(this, this.qti);\n });\n },\n getLoadedClasses() {\n return _.keys(this.qti);\n },\n loadItemData(data, callback) {\n this.loadRequiredClasses(data, Qti => {\n if (typeof data === 'object' && data.qtiClass === 'assessmentItem') {\n //unload an item from it's serial (in case of a reload)\n if (data.serial) {\n Element.unsetElement(data.serial);\n }\n\n this.item = new Qti.assessmentItem(data.serial, data.attributes || {});\n this.loadContainer(this.item.getBody(), data.body);\n\n for (let i in data.outcomes) {\n const outcome = this.buildOutcome(data.outcomes[i]);\n\n if (outcome) {\n this.item.addOutcomeDeclaration(outcome);\n }\n }\n\n for (let i in data.feedbacks) {\n const feedback = this.buildElement(data.feedbacks[i]);\n\n if (feedback) {\n this.item.addModalFeedback(feedback);\n }\n }\n\n for (let i in data.stylesheets) {\n const stylesheet = this.buildElement(data.stylesheets[i]);\n\n if (stylesheet) {\n this.item.addStylesheet(stylesheet);\n }\n }\n\n //important : build responses after all modal feedbacks and outcomes has been loaded, because the simple feedback rules need to reference them\n let responseRules = data.responseProcessing && data.responseProcessing.responseRules\n ? [...data.responseProcessing.responseRules]\n : [];\n for (let i in data.responses) {\n const responseIdentifier = data.responses[i].identifier;\n const responseRuleItemIndex = responseRules.findIndex(({ responseIf: {\n expression: {\n expressions: [expression = {}] = [],\n } = {}\n } = {} }) => expression.attributes\n && expression.attributes.identifier === responseIdentifier\n || (\n expression.expressions\n && expression.expressions[0]\n && expression.expressions[0].attributes\n && expression.expressions[0].attributes.identifier === responseIdentifier\n )\n );\n const [responseRule] = responseRuleItemIndex !== -1\n ? responseRules.splice(responseRuleItemIndex, 1)\n : [];\n\n const response = this.buildResponse(\n data.responses[i],\n responseRule\n );\n\n if (response) {\n this.item.addResponseDeclaration(response);\n\n const feedbackRules = data.responses[i].feedbackRules;\n\n if (feedbackRules) {\n _.forIn(feedbackRules, (fbData, serial) => {\n const {\n attributes: {\n identifier: feedbackOutcomeIdentifier,\n } = {}\n } = data.outcomes[fbData.feedbackOutcome] || {};\n response.feedbackRules[serial] = this.buildSimpleFeedbackRule(fbData, response);\n\n // remove feedback response rule from response rules array\n const feedbackResponseRuleIndex = responseRules.findIndex(({\n responseIf: {\n responseRules: [setOutcomeResponseRule = {}] = [],\n } = {}\n }) => {\n const { attributes = {}, qtiClass } = setOutcomeResponseRule;\n const outcomeIdentifier = attributes.identifier;\n\n return feedbackOutcomeIdentifier === outcomeIdentifier\n && qtiClass === 'setOutcomeValue';\n });\n\n if (feedbackResponseRuleIndex !== -1) {\n responseRules.splice(feedbackResponseRuleIndex, 1);\n }\n });\n }\n }\n }\n\n const responseIdentifiers = Object.keys(this.item.responses || {})\n .map((responseKey) => this.item.responses[responseKey].attributes.identifier);\n\n if (data.responseProcessing) {\n const customResponseProcessing =\n (\n responseRules.length > 0\n && !(\n responseRules.length === 1\n && _.isEqual(\n responseRules[0],\n itemScoreHelper(\n responseIdentifiers\n )\n )\n )\n )\n || (\n this.item.responses\n && Object.keys(this.item.responses)\n .some((responseKey) => !this.item.responses[responseKey].template)\n );\n\n this.item.setResponseProcessing(this.buildResponseProcessing(data.responseProcessing, customResponseProcessing));\n }\n this.item.setNamespaces(data.namespaces);\n this.item.setSchemaLocations(data.schemaLocations);\n this.item.setApipAccessibility(data.apipAccessibility);\n }\n\n if (typeof callback === 'function') {\n callback.call(this, this.item);\n }\n });\n },\n loadAndBuildElement(data, callback) {\n this.loadRequiredClasses(data, () => {\n const element = this.buildElement(data);\n\n if (typeof callback === 'function') {\n callback.call(this, element);\n }\n });\n },\n loadElement(element, data, callback) {\n this.loadRequiredClasses(data, () => {\n this.loadElementData(element, data);\n\n if (typeof callback === 'function') {\n callback.call(this, element);\n }\n });\n },\n /**\n * Load ALL given elements into existing loaded item\n *\n * @todo to be renamed to loadItemElements\n * @param {object} data\n * @param {function} callback\n * @returns {undefined}\n */\n loadElements(data, callback) {\n if (!this.item) {\n throw new Error('QtiLoader : cannot load elements in empty item');\n }\n\n this.loadRequiredClasses(data, () => {\n const allElements = this.item.getComposingElements();\n\n for (let i in data) {\n const elementData = data[i];\n\n if (elementData && elementData.qtiClass && elementData.serial) {\n //find and update element\n if (allElements[elementData.serial]) {\n this.loadElementData(allElements[elementData.serial], elementData);\n }\n }\n }\n\n if (typeof callback === 'function') {\n callback.call(this, this.item);\n }\n });\n },\n buildResponse(data, responseRule) {\n const response = this.buildElement(data);\n\n response.template = responseHelper.getTemplateUriFromName(\n responseHelper.getTemplateNameFromResponseRules(data.identifier, responseRule)\n )\n || data.howMatch\n || null;\n\n response.defaultValue = data.defaultValue || null;\n response.correctResponse = data.correctResponses || null;\n\n if (_.size(data.mapping)) {\n response.mapEntries = data.mapping;\n } else if (_.size(data.areaMapping)) {\n response.mapEntries = data.areaMapping;\n } else {\n response.mapEntries = {};\n }\n\n response.mappingAttributes = data.mappingAttributes || {};\n\n return response;\n },\n buildSimpleFeedbackRule(data, response) {\n const feedbackRule = this.buildElement(data);\n\n feedbackRule.setCondition(response, data.condition, data.comparedValue || null);\n\n // feedbackRule.comparedOutcome = this.item.responses[data.comparedOutcome] || null;\n feedbackRule.feedbackOutcome = this.item.outcomes[data.feedbackOutcome] || null;\n feedbackRule.feedbackThen = this.item.modalFeedbacks[data.feedbackThen] || null;\n feedbackRule.feedbackElse = this.item.modalFeedbacks[data.feedbackElse] || null;\n\n //associate the compared outcome to the feedbacks if applicable\n const comparedOutcome = feedbackRule.comparedOutcome;\n\n if (feedbackRule.feedbackThen) {\n feedbackRule.feedbackThen.data('relatedResponse', comparedOutcome);\n }\n\n if (feedbackRule.feedbackElse) {\n feedbackRule.feedbackElse.data('relatedResponse', comparedOutcome);\n }\n\n return feedbackRule;\n },\n buildOutcome(data) {\n const outcome = this.buildElement(data);\n outcome.defaultValue = data.defaultValue || null;\n\n return outcome;\n },\n buildResponseProcessing(data, customResponseProcessing) {\n const rp = this.buildElement(data);\n\n if (customResponseProcessing) {\n rp.xml = data.data;\n rp.processingType = 'custom';\n } else {\n rp.processingType = 'templateDriven';\n }\n\n return rp;\n },\n loadContainer(bodyObject, bodyData) {\n if (!Element.isA(bodyObject, '_container')) {\n throw new Error('bodyObject must be a QTI Container');\n }\n\n if (!(bodyData && typeof bodyData.body === 'string' && typeof bodyData.elements === 'object')) {\n throw new Error('wrong bodydata format');\n }\n\n for (let serial in bodyData.elements) {\n const eltData = bodyData.elements[serial];\n const element = this.buildElement(eltData);\n\n //check if class is loaded:\n if (element) {\n bodyObject.setElement(element, bodyData.body);\n }\n }\n\n bodyObject.body(xmlNsHandler.stripNs(bodyData.body));\n },\n buildElement(elementData) {\n if (!(elementData && elementData.qtiClass && elementData.serial)) {\n throw new Error('wrong elementData format');\n }\n\n const className = elementData.qtiClass;\n\n if (!this.qti[className]) {\n throw new Error(`the qti element class does not exist: ${className}`);\n }\n\n const elt = new this.qti[className](elementData.serial);\n this.loadElementData(elt, elementData);\n\n return elt;\n },\n loadElementData(element, data) {\n //merge attributes when loading element data\n const attributes = _.defaults(data.attributes || {}, element.attributes || {});\n element.setAttributes(attributes);\n\n if (element.body && data.body) {\n if (element.bdy) {\n this.loadContainer(element.getBody(), data.body);\n }\n }\n\n if (element.object && data.object) {\n if (element.object) {\n this.loadObjectData(element.object, data.object);\n }\n }\n\n if (Element.isA(element, 'interaction')) {\n this.loadInteractionData(element, data);\n } else if (Element.isA(element, 'choice')) {\n this.loadChoiceData(element, data);\n } else if (Element.isA(element, 'math')) {\n this.loadMathData(element, data);\n } else if (Element.isA(element, 'infoControl')) {\n this.loadPicData(element, data);\n } else if (Element.isA(element, '_tooltip')) {\n this.loadTooltipData(element, data);\n }\n\n return element;\n },\n loadInteractionData(interaction, data) {\n if (Element.isA(interaction, 'blockInteraction')) {\n if (data.prompt) {\n this.loadContainer(interaction.prompt.getBody(), data.prompt);\n }\n }\n\n this.buildInteractionChoices(interaction, data);\n\n if (Element.isA(interaction, 'customInteraction')) {\n this.loadPciData(interaction, data);\n }\n },\n buildInteractionChoices(interaction, data) {\n // note: Qti.ContainerInteraction (Qti.GapMatchInteraction and Qti.HottextInteraction) has already been parsed by builtElement(interacionData);\n if (data.choices) {\n if (Element.isA(interaction, 'matchInteraction')) {\n for (let set = 0; set < 2; set++) {\n if (!data.choices[set]) {\n throw new Error(`missing match set #${set}`);\n }\n\n const matchSet = data.choices[set];\n\n for (let serial in matchSet) {\n const choice = this.buildElement(matchSet[serial]);\n\n if (choice) {\n interaction.addChoice(choice, set);\n }\n }\n }\n } else {\n for (let serial in data.choices) {\n const choice = this.buildElement(data.choices[serial]);\n\n if (choice) {\n interaction.addChoice(choice);\n }\n }\n }\n\n if (Element.isA(interaction, 'graphicGapMatchInteraction')) {\n if (data.gapImgs) {\n for (let serial in data.gapImgs) {\n const gapImg = this.buildElement(data.gapImgs[serial]);\n\n if (gapImg) {\n interaction.addGapImg(gapImg);\n }\n }\n }\n }\n }\n },\n loadChoiceData(choice, data) {\n if (Element.isA(choice, 'textVariableChoice')) {\n choice.val(data.text);\n } else if (Element.isA(choice, 'gapImg')) ; else if (Element.isA(choice, 'gapText')) {\n // this ensure compatibility of Qti 2.1 items\n if (!choice.body()) {\n choice.body(data.text);\n }\n } else if (Element.isA(choice, 'containerChoice')) ;\n },\n loadObjectData(object, data) {\n object.setAttributes(data.attributes);\n\n //@todo: manage object like a container\n if (data._alt) {\n if (data._alt.qtiClass === 'object') {\n object._alt = Loader.buildElement(data._alt);\n } else {\n object._alt = data._alt;\n }\n }\n },\n loadMathData(math, data) {\n math.ns = data.ns || {};\n math.setMathML(data.mathML || '');\n _.forIn(data.annotations || {}, (value, encoding) => {\n math.setAnnotation(encoding, value);\n });\n },\n loadTooltipData(tooltip, data) {\n tooltip.content(data.content);\n },\n loadPciData(pci, data) {\n loadPortableCustomElementData(pci, data);\n },\n loadPicData(pic, data) {\n loadPortableCustomElementData(pic, data);\n }\n });\n\n return Loader;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Math',['jquery', 'lodash', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/rendererConfig', 'taoQtiItem/qtiItem/mixin/NamespacedElement'], function ($, _, Element, rendererConfig, NamespacedElement) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n NamespacedElement = NamespacedElement && Object.prototype.hasOwnProperty.call(NamespacedElement, 'default') ? NamespacedElement['default'] : NamespacedElement;\n\n var Math;\n\n /**\n * Remove the closing MathML tags and remove useless line breaks before and after it\n *\n * @param {String} mathML\n * @param {String} nsName\n * @returns {String}\n */\n function _stripMathTags(mathML, nsName) {\n var regex = new RegExp('<(/)?' + (nsName ? nsName + ':' : '') + 'math[^>]*>', 'g');\n return mathML\n .replace(regex, '')\n .replace(/^\\s*[\\r\\n]/gm, '') //remove first blank line\n .replace(/\\s*[\\r\\n]$/gm, ''); //last blank line\n }\n\n /**\n * Remove mathML ns name prefix from the mathML\n *\n * @param {String} mathML\n * @param {String} nsName\n * @returns {String}\n */\n function _stripNamespace(mathML, nsName) {\n var regex = new RegExp('<(/)?' + (nsName ? nsName + ':' : ''), 'g');\n return mathML.replace(regex, '<$1');\n }\n\n /**\n * Check if the mathML string is to be considered empty\n *\n * @param {String} mathStr\n * @returns {Boolean}\n */\n function _isEmptyMathML(mathStr) {\n var $math,\n mathText,\n hasContent = false;\n\n if (mathStr && mathStr.trim()) {\n $math = $($.parseHTML(mathStr));\n mathText = $math.text();\n hasContent = _.isString(mathText) && !!mathText.trim();\n }\n\n return !hasContent;\n }\n\n Math = Element.extend({\n qtiClass: 'math',\n defaultNsName: 'm',\n defaultNsUri: 'http://www.w3.org/1998/Math/MathML',\n nsUriFragment: 'MathML',\n init: function(serial, attributes) {\n this._super(serial, attributes);\n this.ns = null;\n this.mathML = '';\n this.annotations = {};\n },\n setAnnotation: function(encoding, value) {\n this.annotations[encoding] = _.unescape(value);\n },\n getAnnotation: function(encoding) {\n return this.annotations[encoding];\n },\n removeAnnotation: function(encoding) {\n delete this.annotations[encoding];\n },\n setMathML: function(mathML) {\n var ns = this.getNamespace(),\n nsName = ns.name && ns.uri ? ns.name : '';\n\n mathML = _stripMathTags(mathML, nsName);\n if (ns) {\n mathML = _stripNamespace(mathML, nsName);\n }\n this.mathML = mathML;\n },\n getMathML: function() {\n return this.mathML;\n },\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n tag = this.qtiClass,\n raw = this.mathML,\n body = raw,\n ns = this.getNamespace(),\n annotations = '',\n encoding,\n defaultData;\n\n for (encoding in this.annotations) {\n annotations +=\n '<annotation encoding=\"' + encoding + '\">' + _.escape(this.annotations[encoding]) + '</annotation>';\n }\n\n if (annotations) {\n if (raw.indexOf('</semantics>') > 0) {\n raw = raw.replace('</semantics>', annotations + '</semantics>');\n } else {\n raw = '<semantics>' + raw + annotations + '</semantics>';\n }\n }\n\n if (ns && ns.name) {\n body = raw.replace(/<(\\/)?([^!<])/g, '<$1' + ns.name + ':$2');\n tag = ns.name + ':' + tag;\n }\n\n body = body.replace(/<!--.*?-->/g, ''); // remove Mathjax-generated comments\n body = body.replace(/<!--.*?-->/g, ''); // fix for broken items because of Mathjax comments\n\n defaultData = {\n block: this.attr('display') === 'block' ? true : false,\n body: body,\n raw: raw,\n tag: tag,\n ns: ns\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n isEmpty: function() {\n return _isEmptyMathML(this.mathML) && (!this.annotations.latex || !this.annotations.latex.trim());\n }\n });\n\n NamespacedElement.augment(Math);\n\n var Math$1 = Math;\n\n return Math$1;\n\n});\n\n","define('taoQtiItem/qtiItem/core/PortableInfoControl',['lodash', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/CustomElement', 'taoQtiItem/qtiItem/mixin/NamespacedElement', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (_, Element, CustomElement, NamespacedElement, rendererConfig) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n CustomElement = CustomElement && Object.prototype.hasOwnProperty.call(CustomElement, 'default') ? CustomElement['default'] : CustomElement;\n NamespacedElement = NamespacedElement && Object.prototype.hasOwnProperty.call(NamespacedElement, 'default') ? NamespacedElement['default'] : NamespacedElement;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var PortableInfoControl = Element.extend({\n qtiClass: 'infoControl',\n defaultNsName: 'pic',\n defaultNsUri: 'http://www.imsglobal.org/xsd/portableInfoControl',\n nsUriFragment: 'portableInfoControl',\n defaultMarkupNsName: 'html5',\n defaultMarkupNsUri: 'html5',\n\n init: function(serial, attributes) {\n this._super(serial, attributes);\n\n this.typeIdentifier = '';\n this.markup = '';\n this.properties = {};\n this.libraries = [];\n this.entryPoint = '';\n\n //note : if the uri is defined, it will be set the uri in the xml on xml serialization,\n //which may trigger xsd validation, which is troublesome for html5 (use xhtml5 maybe ?)\n this.markupNs = {};\n\n //stack of callback waiting to be ready\n this.readyStack = [];\n },\n\n is: function(qtiClass) {\n return qtiClass === 'infoControl' || this._super(qtiClass);\n },\n\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n typeIdentifier: this.typeIdentifier,\n markup: this.markup,\n properties: this.properties,\n libraries: this.libraries,\n entryPoint: this.entryPoint,\n ns: {\n pic: this.getNamespace().name + ':'\n }\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n },\n\n /**\n * Retrieve the state of the infoControl\n * The call will be delegated to the infoControl's renderer.\n *\n * @returns {Object} the state\n */\n getState: function getState() {\n var ret = null;\n var renderer = this.getRenderer();\n if (renderer && _.isFunction(renderer.getState)) {\n ret = renderer.getState(this);\n }\n return ret;\n },\n\n /**\n * Set the state of the infoControl\n * The state will be set to the infoControl's renderer.\n *\n * @param {Object} state - the infoControl's state\n */\n setState: function setState(state) {\n var renderer = this.getRenderer();\n if (renderer && _.isFunction(renderer.getState)) {\n renderer.setState(this, state);\n }\n },\n\n toArray: function() {\n var arr = this._super();\n arr.markup = this.markup;\n arr.properties = this.properties;\n return arr;\n },\n\n /**\n * Execute a callback when the PIC is ready (ie. registered, loaded and rendererd)\n * @param {Function} cb - the function to execute once ready\n */\n onReady: function onReady(cb) {\n this.readyStack.push(cb);\n\n //if we are ready this will pop the stack\n if (this.data('_ready') && this.data('pic')) {\n this.triggerReady();\n }\n },\n\n /**\n * Define the PIC as ready and consume the waiting functions in the stack.\n */\n triggerReady: function triggerReady() {\n var self = this;\n _.forEach(this.readyStack, function(cb) {\n cb.call(self, self.data('pic'));\n });\n\n //empty the stack\n this.readyStack = [];\n\n //mark the infoControl as ready\n this.data('_ready', true);\n }\n });\n\n //add portable element standard functions\n CustomElement.augment(PortableInfoControl);\n NamespacedElement.augment(PortableInfoControl);\n\n return PortableInfoControl;\n\n});\n\n","define('taoQtiItem/qtiItem/core/PrintedVariable',['taoQtiItem/qtiItem/core/Element'], function (Element) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\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 var PrintedVariable = Element.extend({\n qtiClass: 'printedVariable'\n });\n\n return PrintedVariable;\n\n});\n\n","define('taoQtiItem/qtiItem/core/response/SimpleFeedbackRule',['taoQtiItem/qtiItem/core/Element', 'lodash'], function (Element, _) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\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) 2014 (original work) Open Assessment Technologies SA;\n *\n */\n\n var SimpleFeedbackRule = Element.extend({\n qtiClass: '_simpleFeedbackRule',\n serial: '',\n rootElement: null,\n init: function(serial, feedbackOutcome, feedbackThen, feedbackElse) {\n this._super(serial, {});\n\n this.condition = 'correct';\n this.comparedOutcome = null;\n this.comparedValue = 0.0;\n\n this.feedbackOutcome = feedbackOutcome;\n if (Element.isA(feedbackThen, 'feedback')) {\n this.feedbackThen = feedbackThen;\n } else {\n this.feedbackThen = null;\n }\n if (Element.isA(feedbackElse, 'feedback')) {\n this.feedbackElse = feedbackThen;\n } else {\n this.feedbackElse = null;\n }\n },\n setCondition: function(comparedOutcome, condition, comparedValue) {\n var _comparedValues = [];\n if (Element.isA(comparedOutcome, 'variableDeclaration')) {\n switch (condition) {\n case 'correct':\n case 'incorrect':\n if (Element.isA(comparedOutcome, 'responseDeclaration')) {\n this.comparedOutcome = comparedOutcome;\n this.condition = condition;\n } else {\n throw 'invalid outcome type: must be a responseDeclaration';\n }\n break;\n case 'lt':\n case 'lte':\n case 'equal':\n case 'gte':\n case 'gt':\n if (comparedValue !== null && comparedValue !== undefined) {\n this.comparedOutcome = comparedOutcome;\n this.condition = condition;\n this.comparedValue = comparedValue;\n } else {\n throw 'compared value must not be null';\n }\n break;\n case 'choices':\n if (\n Element.isA(comparedOutcome, 'responseDeclaration') &&\n comparedValue !== null &&\n _.isArray(comparedValue)\n ) {\n var choices = _.values(comparedOutcome.getInteraction().getChoices());\n this.comparedOutcome = comparedOutcome;\n this.condition = condition;\n _.each(comparedValue, function(v) {\n if (v instanceof Element) {\n _comparedValues.push(v);\n } else if (_.isString(v)) {\n _.each(choices, function(c) {\n if (c.attr('identifier') === v) {\n _comparedValues.push(c);\n return false; //break\n }\n });\n }\n });\n\n this.comparedValue = _comparedValues;\n } else {\n throw 'compared value must not be null';\n }\n break;\n default:\n throw 'unknown condition type : '.condition;\n }\n } else {\n throw 'invalid outcome type: must be a variableDeclaration';\n }\n\n return this;\n },\n setFeedbackElse: function(feedback) {\n if (Element.isA(feedback, 'feedback')) {\n this.feedbackElse = feedback;\n }\n },\n toArray: function() {\n var val = this.comparedValue;\n var _toString = function(v) {\n if (val instanceof Element) {\n return val.attr('identifier');\n } else {\n return val + '';\n }\n };\n if (_.isArray(val)) {\n val = _.map(val, _toString);\n } else {\n val = _toString();\n }\n return {\n condition: this.condition,\n comparedOutcome: this.comparedOutcome.id(),\n comparedValue: val\n };\n }\n });\n\n return SimpleFeedbackRule;\n\n});\n\n","define('taoQtiItem/qtiItem/core/ResponseProcessing',['taoQtiItem/qtiItem/core/Element'], function (Element) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n\n var ResponseProcessing = Element.extend({\n qtiClass: 'responseProcessing',\n processingType: '',\n xml: '',\n toArray: function() {\n var arr = this._super();\n arr.processingType = this.processingType;\n arr.xml = this.xml;\n return arr;\n }\n });\n\n return ResponseProcessing;\n\n});\n\n","define('taoQtiItem/qtiItem/core/RubricBlock',['taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/Container'], function (Element, Container) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\n\n var RubricBlock = Element.extend({\n qtiClass: 'rubricBlock',\n isEmpty: function isEmpty() {\n return !(this.bdy && this.bdy.body());\n }\n });\n\n Container.augment(RubricBlock);\n\n return RubricBlock;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Stylesheet',['taoQtiItem/qtiItem/core/Element', 'lodash', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (Element, _, rendererConfig) { 'use strict';\n\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\n\n var Stylesheet = Element.extend({\n qtiClass: 'stylesheet',\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {};\n\n defaultData.attributes = { href: renderer.resolveUrl(this.attr('href')) };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n }\n });\n\n return Stylesheet;\n\n});\n\n","define('taoQtiItem/qtiItem/mixin/ContainerTable',['taoQtiItem/qtiItem/mixin/Mixin', 'taoQtiItem/qtiItem/mixin/Container', 'lodash'], function (Mixin, Container, _) { 'use strict';\n\n Mixin = Mixin && Object.prototype.hasOwnProperty.call(Mixin, 'default') ? Mixin['default'] : Mixin;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\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) 2017 (original work) Open Assessment Technologies SA;\n */\n\n var methods = {};\n _.extend(methods, Container.methods);\n _.extend(methods, {\n initContainer: function(body) {\n Container.methods.initContainer.call(this, body);\n this.bdy.contentModel = 'table';\n }\n });\n\n var ContainerTable = {\n augment: function(targetClass) {\n Mixin.augment(targetClass, methods);\n },\n methods: methods\n };\n\n return ContainerTable;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Table',['lodash', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/ContainerTable'], function (_, Element, Container) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n Container = Container && Object.prototype.hasOwnProperty.call(Container, 'default') ? Container['default'] : Container;\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 var Table = Element.extend({\n qtiClass: 'table'\n });\n\n Container.augment(Table);\n\n Table = Table.extend({\n // on table creation, we might get a body wrapped in a table element, that we need to get rid of\n body: function(newBody) {\n if (_.isString(newBody)) {\n newBody = newBody.replace('<table>', '').replace('</table>', '');\n }\n return this._super(newBody);\n }\n });\n\n var Table$1 = Table;\n\n return Table$1;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Tooltip',['lodash', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/mixin/ContainerInline', 'taoQtiItem/qtiItem/helper/rendererConfig'], function (_, Element, ContainerInline, rendererConfig) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n ContainerInline = ContainerInline && Object.prototype.hasOwnProperty.call(ContainerInline, 'default') ? ContainerInline['default'] : ContainerInline;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\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 var Tooltip = Element.extend({\n qtiClass: '_tooltip',\n\n init: function(serial, attributes, newContent) {\n this._super(serial, attributes);\n this.content(newContent || '');\n },\n\n /**\n * Set/get the content of the tooltip\n * @param {String} newContent - as HTML\n * @returns {Element|String}\n */\n content: function content(newContent) {\n if (typeof newContent === 'undefined') {\n return this.tooltipContent;\n } else {\n if (typeof newContent === 'string') {\n this.tooltipContent = newContent;\n } else {\n throw new Error('newContent must be a string');\n }\n }\n return this;\n },\n\n /**\n * Adds the tooltip content to the template data\n */\n render: function() {\n var args = rendererConfig.getOptionsFromArguments(arguments),\n renderer = args.renderer || this.getRenderer(),\n defaultData = {\n content: this.tooltipContent\n };\n\n return this._super(_.merge(defaultData, args.data), args.placeholder, args.subclass, renderer);\n }\n });\n\n ContainerInline.augment(Tooltip);\n\n return Tooltip;\n\n});\n\n","define('taoQtiItem/qtiItem/core/variables/ResponseDeclaration',['taoQtiItem/qtiItem/core/variables/VariableDeclaration', 'lodash'], function (VariableDeclaration, _) { 'use strict';\n\n VariableDeclaration = VariableDeclaration && Object.prototype.hasOwnProperty.call(VariableDeclaration, 'default') ? VariableDeclaration['default'] : VariableDeclaration;\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) 2014 (original work) Open Assessment Technologies SA;\n *\n */\n\n var ResponseDeclaration = VariableDeclaration.extend({\n qtiClass: 'responseDeclaration',\n init: function(serial, attributes) {\n this._super(serial, attributes);\n\n //MATCH_CORRECT, MAP_RESPONSE, MAP_RESPONSE_POINT\n this.template = ''; //previously called 'howMatch'\n\n //when template equals ont of the \"map\" one (MAP_RESPONSE, MAP_RESPONSE_POINT)\n this.mappingAttributes = {};\n this.mapEntries = {};\n\n //correct response [0..*]\n this.correctResponse = null;\n\n //tao internal usage:\n this.feedbackRules = {};\n },\n getFeedbackRules: function() {\n return _.values(this.feedbackRules);\n },\n getComposingElements: function() {\n var elts = this._super();\n elts = _.extend(elts, this.feedbackRules);\n return elts;\n },\n toArray: function() {\n var arr = this._super();\n arr.howMatch = this.template;\n arr.correctResponses = this.correctResponse;\n arr.mapping = this.mapEntries;\n arr.mappingAttributes = this.mappingAttributes;\n arr.feedbackRules = _.map(this.feedbackRules, function(rule) {\n return rule.toArray();\n });\n return arr;\n },\n getInteraction: function() {\n var interaction = null;\n var responseId = this.id();\n var item = this.getRootElement();\n var interactions = item.getInteractions();\n _.each(interactions, function(i) {\n if (i.attributes.responseIdentifier === responseId) {\n interaction = i;\n return false; //break\n }\n });\n return interaction;\n },\n isCardinality: function(cardinalities) {\n var comparison;\n if (_.isArray(cardinalities)) {\n comparison = cardinalities;\n } else if (_.isString(cardinalities)) {\n cardinalities = [cardinalities];\n } else {\n return false;\n }\n return _.indexOf(comparison, this.attr('cardinality')) >= 0;\n }\n });\n\n return ResponseDeclaration;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/EventMgr',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n //@todo : complete with namespace managements\n function EventMgr() {\n var events = {};\n\n this.get = function(event) {\n if (event && events[event]) {\n return _.clone(events[event]);\n } else {\n return [];\n }\n };\n\n this.on = function(event, callback) {\n var tokens = event.split('.');\n if (tokens[0]) {\n var name = tokens.shift();\n events[name] = events[name] || [];\n events[name].push({\n ns: tokens,\n callback: callback\n });\n }\n };\n\n this.off = function(event) {\n if (event && events[event]) {\n events[event] = [];\n }\n };\n\n this.trigger = function(event, data) {\n if (events[event]) {\n _.each(events[event], function(e) {\n //@todo check ns:\n e.callback.apply(\n {\n type: event,\n ns: []\n },\n data\n );\n });\n }\n };\n }\n\n return EventMgr;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/pci',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n var pci = {\n getRawValues: function(pciVar) {\n if (_.isPlainObject(pciVar)) {\n if (pciVar.base !== undefined) {\n return _.values(pciVar.base);\n } else if (pciVar.list) {\n return _.values(pciVar.list);\n }\n }\n throw 'unsupported type ';\n }\n };\n\n return pci;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/modalFeedback',['jquery', 'lodash', 'taoQtiItem/qtiItem/helper/pci', 'taoQtiItem/qtiItem/helper/container'], function ($, _, pci, containerHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pci = pci && Object.prototype.hasOwnProperty.call(pci, 'default') ? pci['default'] : pci;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\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 /**\n * Provide the feedbackMessage signature to check if the feedback contents should be considered equals\n *\n * @param {type} feedback\n * @returns {String}\n */\n var getFeedbackMessageSignature = function getFeedbackMessageSignature(feedback) {\n return ('' + feedback.body() + feedback.attr('title'))\n .toLowerCase()\n .trim()\n .replace(/x-tao-[a-zA-Z0-9\\-._\\s]*/g, '');\n };\n\n /**\n * Extract the display information for an interaction-related feedback\n *\n * @private\n * @param {Object} interaction - a qti interaction object\n * @returns {Object} Object containing useful display information\n */\n var extractDisplayInfo = function extractDisplayInfo(interaction) {\n var $interactionContainer = interaction.getContainer();\n var responseIdentifier = interaction.attr('responseIdentifier');\n var messageGroupId, $displayContainer;\n\n if (interaction.is('inlineInteraction')) {\n $displayContainer = $interactionContainer.closest('[class*=\" col-\"], [class^=\"col-\"]');\n messageGroupId = $displayContainer.attr('data-messageGroupId');\n if (!messageGroupId) {\n //generate a messageFromId\n messageGroupId = _.uniqueId('inline_message_group_');\n $displayContainer.attr('data-messageGroupId', messageGroupId);\n }\n } else {\n messageGroupId = responseIdentifier;\n $displayContainer = $interactionContainer;\n }\n\n return {\n responseIdentifier: responseIdentifier,\n interactionContainer: $interactionContainer,\n displayContainer: $displayContainer,\n messageGroupId: messageGroupId,\n order: -1\n };\n };\n\n /**\n * Get interaction display information sorted in the order of appearance within the item\n *\n * @param {Object} item\n * @returns {Array}\n */\n var getInteractionsDisplayInfo = function getInteractionsDisplayInfo(item) {\n var interactionsDisplayInfo = [];\n var $itemContainer = item.getContainer();\n var interactionOrder = 0;\n\n //extract all interaction related information needed to display their\n _.forEach(item.getComposingElements(), function(element) {\n if (element.is('interaction')) {\n interactionsDisplayInfo.push(extractDisplayInfo(element));\n }\n });\n\n //sort interactionsDisplayInfo on the item level\n $itemContainer.find('.qti-interaction').each(function() {\n var self = this;\n _.forEach(interactionsDisplayInfo, function(_interactionInfo) {\n if (_interactionInfo.interactionContainer[0] === self) {\n _interactionInfo.order = interactionOrder;\n return false;\n }\n });\n interactionOrder++;\n });\n interactionsDisplayInfo = _.sortBy(interactionsDisplayInfo, 'order');\n\n return interactionsDisplayInfo;\n };\n\n /**\n * Returns feedbacks according to the given itemSession variables\n *\n * @param {Object} item - the standard tao qti item object\n * @param {Object} itemSession - session information containing the list of feedbacks to display\n * @returns {Array} renderingFeedbacks - feedbacks to be displayed\n */\n var getFeedbacks = function getFeedbacks(item, itemSession) {\n var messages = {};\n var $itemContainer = item.getContainer();\n var $itemBody = $('.qti-itemBody', $itemContainer);\n var interactionsDisplayInfo = getInteractionsDisplayInfo(item);\n var renderingQueue = [];\n\n _.forEach(item.modalFeedbacks, function(feedback) {\n var feedbackIds, message, $container, comparedOutcome, _currentMessageGroupId, interactionInfo;\n var outcomeIdentifier = feedback.attr('outcomeIdentifier');\n var order = -1;\n\n //verify if the feedback should be displayed\n if (itemSession[outcomeIdentifier]) {\n //is the feedback in the list of feedbacks to be displayed ?\n feedbackIds = pci.getRawValues(itemSession[outcomeIdentifier]);\n if (!_.contains(feedbackIds, feedback.id())) {\n return true; //continue with next feedback\n }\n\n //which group of feedbacks (interaction related) the feedback belongs to ?\n message = getFeedbackMessageSignature(feedback);\n comparedOutcome = containerHelper.getEncodedData(feedback, 'relatedOutcome');\n interactionInfo = _.find(interactionsDisplayInfo, { responseIdentifier: comparedOutcome });\n if (comparedOutcome && interactionInfo) {\n $container = interactionInfo.displayContainer;\n _currentMessageGroupId = interactionInfo.messageGroupId;\n order = interactionInfo.order;\n } else {\n $container = $itemBody;\n _currentMessageGroupId = '__item__';\n }\n //is this message already displayed ?\n if (!messages[_currentMessageGroupId]) {\n messages[_currentMessageGroupId] = [];\n }\n\n if (_.contains(messages[_currentMessageGroupId], message)) {\n return true; //continue\n } else {\n messages[_currentMessageGroupId].push(message);\n }\n\n //ok, display feedback\n renderingQueue.push({\n feedback: feedback,\n $container: $container,\n order: order\n });\n }\n });\n\n renderingQueue = _.sortBy(renderingQueue, 'order');\n\n return renderingQueue;\n };\n\n /**\n * Provide helper function for collecting feedbacks\n */\n var modalFeedback = {\n getFeedbacks: getFeedbacks\n };\n\n return modalFeedback;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/Parser',['jquery'], function ($) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n\n /**\n * Experimental parser\n *\n */\n\n var Parser = function() {\n var _$xml = null;\n this.loadXML = function(xml) {\n _$xml = $.parseXML(xml);\n };\n this.getDOM = function() {\n return _$xml;\n };\n };\n\n return Parser;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/simpleParser',['lodash', 'jquery', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/qtiItem/core/Loader'], function (_, $, util, Loader) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n Loader = Loader && Object.prototype.hasOwnProperty.call(Loader, 'default') ? Loader['default'] : Loader;\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) 2021 (original work) Open Assessment Technologies SA\n **/\n\n const _parsableElements = ['img', 'object', 'printedVariable'];\n const _qtiClassNames = {\n rubricblock: 'rubricBlock',\n printedvariable: 'printedVariable'\n };\n const _qtiAttributesNames = {\n powerform: 'powerForm',\n mappingindicator: 'mappingIndicator'\n };\n\n const _defaultOptions = {\n ns: {\n math: '',\n include: 'xi',\n table: 'table',\n image: 'img',\n object: ''\n },\n loaded: null,\n model: null\n };\n\n let parser;\n\n function _getElementSelector(qtiClass, ns) {\n return ns ? ns + '\\\\:' + qtiClass + ',' + qtiClass : qtiClass;\n }\n\n function getQtiClassFromXmlDom($node) {\n let qtiClass = $node.prop('tagName').toLowerCase();\n\n //remove ns :\n qtiClass = qtiClass.replace(/.*:/, '');\n\n return _qtiClassNames[qtiClass] ? _qtiClassNames[qtiClass] : qtiClass;\n }\n\n function buildElement($elt) {\n const qtiClass = getQtiClassFromXmlDom($elt);\n\n const elt = {\n qtiClass: qtiClass,\n serial: util.buildSerial(qtiClass + '_'),\n attributes: {}\n };\n\n $.each($elt[0].attributes, function () {\n let attrName;\n if (this.specified) {\n attrName = _qtiAttributesNames[this.name] || this.name;\n elt.attributes[attrName] = this.value;\n }\n });\n\n return elt;\n }\n\n function buildMath($elt, options) {\n const elt = buildElement($elt);\n\n //set annotations:\n elt.annotations = {};\n $elt.find(_getElementSelector('annotation', options.ns.math)).each(function () {\n const $annotation = $(this);\n const encoding = $annotation.attr('encoding');\n if (encoding) {\n elt.annotations[encoding] = _.unescape($annotation.html());\n }\n $annotation.remove();\n });\n\n //set math xml\n elt.mathML = $elt.html();\n\n //set ns:\n elt.ns = {\n name: 'm',\n uri: 'http://www.w3.org/1998/Math/MathML' //@todo : remove hardcoding there\n };\n\n return elt;\n }\n\n function buildTooltip(targetHtml, contentId, contentHtml) {\n const qtiClass = '_tooltip';\n\n return {\n elements: {},\n qtiClass: qtiClass,\n serial: util.buildSerial(qtiClass + '_'),\n attributes: {\n 'aria-describedby': contentId\n },\n content: contentHtml,\n body: {\n elements: {},\n serial: util.buildSerial('container'),\n body: targetHtml\n }\n };\n }\n\n function parseTable($elt, elt, options) {\n elt.body = {\n body: '',\n elements: {}\n };\n\n const $parsedTable = parseContainer($elt, options);\n elt.body.body = $parsedTable.body;\n elt.body.elements = $parsedTable.elements;\n return elt;\n }\n\n function parseContainer($container, options) {\n const ret = {\n serial: util.buildSerial('_container_'),\n body: '',\n elements: {}\n };\n // table should be in top as it needs to be parsed first\n $container.find('table').each(function () {\n const $qtiElement = $(this);\n let element = buildElement($qtiElement);\n\n element = parseTable($qtiElement, element, options);\n ret.elements[element.serial] = element;\n $qtiElement.replaceWith(_placeholder(element));\n });\n\n $container.find(_getElementSelector('math', options.ns.math)).each(function () {\n const $qtiElement = $(this);\n const element = buildMath($qtiElement, options);\n\n ret.elements[element.serial] = element;\n $qtiElement.replaceWith(_placeholder(element));\n });\n\n $container.find(_getElementSelector('include', options.ns.include)).each(function () {\n const $qtiElement = $(this);\n const element = buildElement($qtiElement);\n\n ret.elements[element.serial] = element;\n $qtiElement.replaceWith(_placeholder(element));\n });\n\n $container.find('[data-role=\"tooltip-target\"]').each(function () {\n let element,\n $target = $(this),\n $content,\n contentId = $target.attr('aria-describedBy'),\n contentHtml;\n\n if (contentId) {\n $content = $container.find('#' + contentId);\n if ($content.length) {\n contentHtml = $content.html();\n\n element = buildTooltip($target.html(), contentId, contentHtml);\n\n ret.elements[element.serial] = element;\n $target.replaceWith(_placeholder(element));\n $content.remove();\n }\n }\n });\n\n _.each(_parsableElements, function (qtiClass) {\n $container.find(qtiClass).each(function () {\n const $qtiElement = $(this);\n const element = buildElement($qtiElement);\n ret.elements[element.serial] = element;\n $qtiElement.replaceWith(_placeholder(element));\n });\n });\n\n ret.body = $container.html();\n return ret;\n }\n\n function _placeholder(element) {\n return '{{' + element.serial + '}}';\n }\n\n parser = {\n parse: function (xmlStr, opts) {\n const options = _.merge(_.clone(_defaultOptions), opts || {});\n\n const $container = $(xmlStr);\n\n const element = buildElement($container);\n\n const data = parseContainer($container, options);\n\n let loader;\n\n if (!_.isUndefined(data.body)) {\n element.body = data;\n }\n\n if (_.isFunction(options.loaded) && options.model) {\n loader = new Loader().setClassesLocation(options.model);\n loader.loadAndBuildElement(element, options.loaded);\n }\n\n return element;\n }\n };\n\n var parser$1 = parser;\n\n return parser$1;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/xincludeLoader',['jquery', 'lodash', 'taoQtiItem/qtiItem/helper/simpleParser', 'taoQtiItem/qtiItem/core/Loader'], function ($, _, simpleParser, Loader) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n simpleParser = simpleParser && Object.prototype.hasOwnProperty.call(simpleParser, 'default') ? simpleParser['default'] : simpleParser;\n Loader = Loader && Object.prototype.hasOwnProperty.call(Loader, 'default') ? Loader['default'] : Loader;\n\n function load(xinclude, baseUrl, callback) {\n const href = xinclude.attr('href');\n if (href && baseUrl) {\n //require xml :\n require([`text!${baseUrl}${href}`], function (stimulusXml) {\n const $wrapper = $.parseXML(stimulusXml);\n const $sampleXMLrootNode = $wrapper.children;\n const $stimulus = $('<include>').append($sampleXMLrootNode);\n const mathNs = 'm'; //for 'http://www.w3.org/1998/Math/MathML'\n const data = simpleParser.parse($stimulus, {\n ns: {\n math: mathNs\n }\n });\n\n new Loader().loadElement(xinclude, data, function () {\n if (_.isFunction(callback)) {\n const loadedClasses = this.getLoadedClasses();\n loadedClasses.push('_container'); //the _container class is always required\n callback(xinclude, data, loadedClasses);\n }\n });\n }, function () {\n //in case the file does not exist\n callback(xinclude, false, []);\n });\n }\n }\n\n var xincludeLoader = {\n load\n };\n\n return xincludeLoader;\n\n});\n\n","define('taoQtiItem/runner/provider/manager/picManager',['jquery', 'lodash', 'taoQtiItem/qtiItem/core/Element'], function ($, _, Element) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\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 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * The template of a PicManager instance\n * @type {picManager}\n */\n var picManager = {\n /**\n * Creates a manager for a particular PIC\n *\n * @param {Object} pic\n * @param {QtiItem} item\n * @returns {picManager}\n */\n init: function init(pic, item) {\n if (Element.isA(pic, 'infoControl')) {\n this._pic = pic;\n }\n\n if (Element.isA(item, 'assessmentItem')) {\n this._item = item;\n }\n\n return this;\n },\n\n /**\n * Gets the managed PIC\n *\n * @returns {Object} the descriptor of the PIC\n */\n getPic: function getPic() {\n return this._pic;\n },\n\n /**\n * Gets the related Item\n *\n * @returns {QtiItem} the Item\n */\n getItem: function getItem() {\n return this._item;\n },\n\n /**\n * Gets the PIC serial\n * @returns {String}\n */\n getSerial: function getSerial() {\n return this._pic && this._pic.serial;\n },\n\n /**\n * Gets the PIC type identifier\n * @returns {String}\n */\n getTypeIdentifier: function getTypeIdentifier() {\n return this._pic && this._pic.typeIdentifier;\n },\n\n /**\n * Gets the underlying DOM element of the managed PIC\n * @returns {{pic: (jQuery), tool: (jQuery), button: (jQuery), broken: (Boolean))}|*} An object providing the underlying DOM elements of the PIC and its tool\n */\n getDom: function getDom() {\n if (!this._dom) {\n var serial = this.getSerial();\n var pic, tool;\n\n if (serial) {\n pic = $('[data-serial=\"' + serial + '\"]');\n if (pic.length) {\n tool = $('[data-pic-serial=\"' + serial + '\"]');\n\n if (!tool.length) {\n tool = pic.children().first();\n }\n\n this._dom = {\n pic: pic,\n tool: tool,\n button: tool.find('.sts-button'),\n broken: pic.is(':empty') // tells if the tool has been moved outside of the PIC\n };\n }\n }\n }\n\n return this._dom;\n },\n\n /**\n * Enables the PIC.\n * @fires enable\n * @returns {picManager}\n */\n enable: function enable() {\n // @todo: find a better solution for disabling/enabling a PIC\n var dom = this.getDom();\n if (dom) {\n // just remove the disabled state and destroy the disable mask\n dom.button.removeClass('disabled');\n dom.tool.find('.sts-button-disable-mask').remove();\n\n this.disabled = false;\n this.trigger('enable');\n }\n\n return this;\n },\n\n /**\n * Disables the PIC\n * @fires disable\n * @returns {picManager}\n */\n disable: function disable() {\n // @todo: find a better solution for disabling/enabling a PIC\n var dom = this.getDom();\n var button;\n if (dom) {\n // set a disabled state by adding a CSS class, then mask the button with a top-level element\n button = dom.button.addClass('disabled');\n\n $('<div class=\"sts-button-disable-mask\" style=\"position:absolute;z-index:10000000000000\"></div>')\n .appendTo(dom.tool)\n .offset(button.offset())\n .width(button.outerWidth())\n .height(button.outerHeight());\n\n // also hide any sub component\n dom.tool.find('.sts-container, .sts-menu-container').addClass('sts-hidden-container');\n\n this.disabled = true;\n this.trigger('disable');\n }\n\n return this;\n },\n\n /**\n * Shows the PIC\n * @fires show\n * @returns {picManager}\n */\n show: function show() {\n var dom = this.getDom();\n if (dom) {\n dom.tool.show();\n\n this.trigger('show');\n }\n\n return this;\n },\n\n /**\n * Hides the PIC\n * @fires hide\n * @returns {picManager}\n */\n hide: function hide() {\n var dom = this.getDom();\n if (dom) {\n dom.tool.hide();\n\n this.trigger('hide');\n }\n\n return this;\n },\n\n /**\n * Triggers an event on the underlying DOM element\n * @param {String} eventName\n * @returns {picManager}\n */\n trigger: function trigger(eventName) {\n var dom = this.getDom();\n var args = _.rest(arguments, 1);\n\n args.unshift(this);\n\n if (dom) {\n // trigger the event, if the tool has been moved outside of the PIC, trigger also the event on the PIC\n dom.tool.trigger(eventName, args);\n if (dom.broken) {\n dom.pic.trigger(eventName, args);\n }\n }\n\n return this;\n }\n };\n\n /**\n * The template of a PicManagerCollection instance\n * @type {picManagerCollection}\n */\n var picManagerCollection = {\n /**\n * Creates the collection of PIC from an Item\n *\n * @param {QtiItem} item\n * @returns {picManagerCollection}\n */\n init: function init(item) {\n if (Element.isA(item, 'assessmentItem')) {\n this._item = item;\n }\n\n return this;\n },\n\n /**\n * Gets the list of PIC managers for the PIC provided by the running item.\n *\n * @param {Boolean} [force] Force a list rebuild\n * @returns {Array} Returns the list of managers for the provided PIC\n */\n getList: function getList(force) {\n var self = this;\n\n // build the list if empty\n if (force || !self._list) {\n self._map = {};\n self._list = [];\n if (self._item) {\n _.forEach(self._item.getElements(), function(element) {\n var manager;\n\n if (Element.isA(element, 'infoControl')) {\n manager = managerFactory(element, self._item);\n self._list.push(manager);\n self._map[element.serial] = manager;\n self._map[element.typeIdentifier] = manager;\n }\n });\n }\n }\n\n return this._list;\n },\n\n /**\n * Gets the manager of the first PIC matching the identifier from the list provided by the running item.\n *\n * @param {String} picId The PIC typeIdentifier or serial\n * @returns {Object} The manager of the PIC\n */\n getPic: function getPic(picId) {\n this.getList();\n return this._map[picId];\n },\n\n /**\n * Executes an action on a particular PIC from the running item.\n * @param {String} picId The PIC typeIdentifier or serial\n * @param {String} action The name of the action to call\n * @returns {*} Returns the action result\n */\n execute: function execute(picId, action) {\n var pic = this.getPic(picId);\n if (pic && pic[action]) {\n return pic[action].apply(pic, _.rest(arguments, 2));\n }\n },\n\n /**\n * Executes an action on each PIC provided by the running item.\n * @param {String} action The name of the action to call\n * @param {Function} [filter] An optional filter to reduce the list\n * @returns {picManagerCollection}\n */\n executeAll: function executeAll(action, filter) {\n var args = _.rest(arguments, 2);\n var cb;\n\n if (typeof filter === 'function') {\n cb = function(pic) {\n if (filter.call(pic, pic) && pic[action]) {\n pic[action].apply(pic, args);\n }\n };\n } else {\n cb = function(pic) {\n if (pic[action]) {\n pic[action].apply(pic, args);\n }\n };\n }\n\n return this.each(cb);\n },\n\n /**\n * Calls a callback function on each listed PIC from the running item.\n * @param {Function} cb The callback function to apply on each listed PIC\n * @returns {picManagerCollection}\n */\n each: function each(cb) {\n _.forEach(this.getList(), cb);\n return this;\n },\n\n /**\n * Enables a PIC provided by the running item.\n *\n * @param {String} picId The PIC typeIdentifier or serial\n * @returns {picManagerCollection}\n */\n enablePic: function enablePic(picId) {\n this.execute(picId, 'enable');\n return this;\n },\n\n /**\n * Disables a PIC provided by the running item.\n *\n * @param {String} picId The PIC typeIdentifier or serial\n * @returns {picManagerCollection}\n */\n disablePic: function disablePic(picId) {\n this.execute(picId, 'disable');\n return this;\n },\n\n /**\n * Shows a PIC provided by the running item.\n *\n * @param {String} picId The PIC typeIdentifier or serial\n * @returns {picManagerCollection}\n */\n showPic: function showPic(picId) {\n this.execute(picId, 'show');\n return this;\n },\n\n /**\n * Hides a PIC provided by the running item.\n *\n * @param {String} picId The PIC typeIdentifier or serial\n * @returns {picManagerCollection}\n */\n hidePic: function hidePic(picId) {\n this.execute(picId, 'hide');\n return this;\n },\n\n /**\n * Enables all PIC provided by the running item.\n *\n * @param {Function} [filter] An optional filter to reduce the list of PIC to enable\n * @returns {picManagerCollection}\n */\n enableAll: function enableAll(filter) {\n this.executeAll('enable', filter);\n return this;\n },\n\n /**\n * Disables all PIC provided by the running item.\n *\n * @param {Function} [filter] An optional filter to reduce the list of PIC to disable\n * @returns {picManagerCollection}\n */\n disableAll: function disableAll(filter) {\n this.executeAll('disable', filter);\n return this;\n },\n\n /**\n * Shows all PIC provided by the running item.\n *\n * @param {Function} [filter] An optional filter to reduce the list of PIC to show\n * @returns {picManagerCollection}\n */\n showAll: function showAll(filter) {\n this.executeAll('show', filter);\n return this;\n },\n\n /**\n * Hides all PIC provided by the running item.\n *\n * @param {Function} [filter] An optional filter to reduce the list of PIC to hide\n * @returns {picManagerCollection}\n */\n hideAll: function hideAll(filter) {\n this.executeAll('hide', filter);\n return this;\n }\n };\n\n /**\n * Creates a PIC manager for a particular Item.\n * @param {Object} pic\n * @param {QtiItem} item\n * @returns {picManager} Returns the instance of the PIC manager\n */\n var managerFactory = function managerFactory(pic, item) {\n var manager = _.clone(picManager, true);\n return manager.init(pic, item);\n };\n\n /**\n * Creates a PIC manager for a particular Item.\n * @param {QtiItem} item\n * @returns {picManager} Returns the instance of the PIC manager\n */\n var collectionFactory = function collectionFactory(item) {\n var collection = _.clone(picManagerCollection, true);\n return collection.init(item);\n };\n\n var picManager$1 = {\n collection: collectionFactory,\n manager: managerFactory\n };\n\n return picManager$1;\n\n});\n\n","define('taoQtiItem/runner/provider/manager/userModules',['lodash', 'module'], function (_, module) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\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 var userModules = {\n /**\n * Load user modules defined in the module config\n * @param {Array} [userModules] - manually specify user modules to load instead of getting them from the module config\n * @returns {Promise}\n */\n load: function load(userModules) {\n var config = module.config();\n\n if (!userModules || !_.isArray(userModules)) {\n if (config && config.userModules && _.isArray(config.userModules)) {\n userModules = config.userModules;\n } else {\n userModules = [];\n }\n }\n if(!userModules.length){\n return Promise.resolve();\n }\n return new Promise(function(resolve, reject) {\n window.require(userModules, function() {\n _.forEach(arguments, function(dependency) {\n if (dependency && _.isFunction(dependency.exec)) {\n dependency.exec();\n }\n });\n resolve();\n }, function(err) {\n reject(err.message);\n });\n });\n }\n };\n\n return userModules;\n\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 */\ndefine('taoQtiItem/portableElementRegistry/provider/sideLoadingProviderFactory',[],function(){\n 'use strict';\n\n /**\n * Generic portable element provider than loads portable elements directly on the client side\n *\n * Sample usage :\n * var pciProvider = sideLoadingProviderFactory(pciManifestArray);\n * pciProvider.add('anotherPciXYZ', anotherPciXYZObject);\n *\n */\n return function sideLoadingProviderFactory(portableElements){\n\n var _registry = portableElements;\n\n return {\n /**\n * Side load the portable element here\n * @param id\n * @param pathToManifest\n */\n add : function add(id, portableElement){\n _registry[id] = portableElement;\n return this;\n },\n /**\n * Implementation of the mandatory method load() of a portable element provider\n *\n * @returns {Promise} resolved when the added pci registered through their manifest are loaded\n */\n load : function load(){\n return _registry;\n }\n };\n };\n});\n","define('taoQtiItem/reviewRenderer/renderers/config',['lodash', 'context', 'ui/themes', 'taoItems/assets/manager', 'taoItems/assets/strategies', 'module', 'taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy'], function (_, context, themes, assetManagerFactory, assetStrategies, module, portableAssetStrategy) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n themes = themes && Object.prototype.hasOwnProperty.call(themes, 'default') ? themes['default'] : themes;\n assetManagerFactory = assetManagerFactory && Object.prototype.hasOwnProperty.call(assetManagerFactory, 'default') ? assetManagerFactory['default'] : assetManagerFactory;\n assetStrategies = assetStrategies && Object.prototype.hasOwnProperty.call(assetStrategies, 'default') ? assetStrategies['default'] : assetStrategies;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n portableAssetStrategy = portableAssetStrategy && Object.prototype.hasOwnProperty.call(portableAssetStrategy, 'default') ? portableAssetStrategy['default'] : portableAssetStrategy;\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 (under the project TAO-PRODUCT);\n *\n */\n\n const itemThemes = themes.get('items');\n const moduleConfig = module.config();\n\n //Create asset manager stack\n const assetManager = assetManagerFactory(\n [\n {\n name: 'theme',\n handle: url => {\n if (\n itemThemes &&\n url.path &&\n (url.path === itemThemes.base || _.contains(_.pluck(itemThemes.available, 'path'), url.path))\n ) {\n return context.root_url + url.toString();\n }\n }\n },\n assetStrategies.taomedia,\n assetStrategies.external,\n assetStrategies.base64,\n assetStrategies.itemCssNoCache,\n assetStrategies.baseUrl,\n portableAssetStrategy\n ],\n { baseUrl: '' }\n ); //baseUrl is not predefined in the config, but should be set upon renderer instantiating\n\n //renderers locations\n const locations = {\n assessmentItem: 'taoQtiItem/qtiCommonRenderer/renderers/Item',\n _container: 'taoQtiItem/qtiCommonRenderer/renderers/Container',\n _simpleFeedbackRule: false,\n _tooltip: 'taoQtiItem/qtiCommonRenderer/renderers/Tooltip',\n stylesheet: 'taoQtiItem/qtiCommonRenderer/renderers/Stylesheet',\n outcomeDeclaration: false,\n responseDeclaration: false,\n responseProcessing: false,\n img: 'taoQtiItem/qtiCommonRenderer/renderers/Img',\n math: 'taoQtiItem/qtiCommonRenderer/renderers/Math',\n object: 'taoQtiItem/qtiCommonRenderer/renderers/Object',\n table: 'taoQtiItem/qtiCommonRenderer/renderers/Table',\n printedVariable: 'taoQtiItem/qtiCommonRenderer/renderers/PrintedVariable',\n rubricBlock: 'taoQtiItem/qtiCommonRenderer/renderers/RubricBlock',\n modalFeedback: 'taoQtiItem/qtiCommonRenderer/renderers/ModalFeedback',\n prompt: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/Prompt',\n infoControl: 'taoQtiItem/qtiCommonRenderer/renderers/PortableInfoControl',\n include: 'taoQtiItem/qtiCommonRenderer/renderers/Include',\n\n // Interactions/Choices customised for reviewRenderer\n\n choiceInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/ChoiceInteraction',\n extendedTextInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/ExtendedTextInteraction',\n orderInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/OrderInteraction',\n associateInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/AssociateInteraction',\n matchInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/MatchInteraction',\n textEntryInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/TextEntryInteraction',\n sliderInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/SliderInteraction',\n inlineChoiceInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/InlineChoiceInteraction',\n 'simpleChoice.choiceInteraction': 'taoQtiItem/reviewRenderer/renderers/choices/SimpleChoice.ChoiceInteraction',\n hottext: 'taoQtiItem/reviewRenderer/renderers/choices/Hottext',\n inlineChoice: 'taoQtiItem/qtiCommonRenderer/renderers/choices/InlineChoice',\n hottextInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HottextInteraction',\n hotspotInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/HotspotInteraction',\n hotspotChoice: false,\n associableHotspot: false,\n gapMatchInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/GapMatchInteraction',\n selectPointInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/SelectPointInteraction',\n graphicOrderInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/GraphicOrderInteraction',\n graphicAssociateInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/GraphicAssociateInteraction',\n graphicGapMatchInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/GraphicGapMatchInteraction',\n uploadInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/UploadInteraction',\n customInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/PortableCustomInteraction',\n mediaInteraction: 'taoQtiItem/reviewRenderer/renderers/interactions/MediaInteraction',\n\n // Interactions/Choices inherited from qtiCommonRenderer\n\n gap: 'taoQtiItem/qtiCommonRenderer/renderers/choices/Gap',\n gapText: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapText',\n 'simpleChoice.orderInteraction': 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction',\n 'simpleAssociableChoice.matchInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction',\n 'simpleAssociableChoice.associateInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction',\n gapImg: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapImg',\n endAttemptInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/EndAttemptInteraction',\n };\n\n var config = {\n name: 'reviewRenderer',\n locations,\n options: {\n assetManager,\n themes: itemThemes,\n enableDragAndDrop: {\n associate: !!moduleConfig.associateDragAndDrop,\n gapMatch: !!moduleConfig.gapMatchDragAndDrop,\n graphicGapMatch: !!moduleConfig.graphicGapMatchDragAndDrop,\n order: !!moduleConfig.orderDragAndDrop\n },\n messages: moduleConfig.messages\n }\n };\n\n return config;\n\n});\n\n","define('taoQtiItem/reviewRenderer/renderers/Renderer',['taoQtiItem/qtiRunner/core/Renderer', 'taoQtiItem/reviewRenderer/renderers/config'], function (Renderer$1, config) { 'use strict';\n\n\tRenderer$1 = Renderer$1 && Object.prototype.hasOwnProperty.call(Renderer$1, 'default') ? Renderer$1['default'] : Renderer$1;\n\tconfig = config && Object.prototype.hasOwnProperty.call(config, 'default') ? config['default'] : config;\n\n\t/*\n\t * This program is free software; you can redistribute it and/or\n\t * modify it under the terms of the GNU General Public License\n\t * as published by the Free Software Foundation; under version 2\n\t * of the License (non-upgradable).\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\t *\n\t * Copyright (c) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n\t *\n\t */\n\n\tvar Renderer = Renderer$1.build(config.locations, config.name, config.options);\n\n\treturn Renderer;\n\n});\n\n","define('taoQtiItem/reviewRenderer/renderers/rendererProvider',['taoQtiItem/reviewRenderer/renderers/Renderer'], function (ReviewRenderer) { 'use strict';\n\n ReviewRenderer = ReviewRenderer && Object.prototype.hasOwnProperty.call(ReviewRenderer, 'default') ? ReviewRenderer['default'] : ReviewRenderer;\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 (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * This is a provider wrapper for reviewRenderer\n */\n var rendererProvider = {\n name: 'reviewRenderer',\n init: () => {},\n getRenderer: () => ReviewRenderer\n };\n\n return rendererProvider;\n\n});\n\n","define('taoQtiItem/runner/rendererStrategies',['core/logger', 'core/providerRegistry', 'taoQtiItem/qtiCommonRenderer/renderers/rendererProvider', 'taoQtiItem/reviewRenderer/renderers/rendererProvider'], function (loggerFactory, providerRegistry, qtiRenderer, reviewRenderer) { 'use strict';\n\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n providerRegistry = providerRegistry && Object.prototype.hasOwnProperty.call(providerRegistry, 'default') ? providerRegistry['default'] : providerRegistry;\n qtiRenderer = qtiRenderer && Object.prototype.hasOwnProperty.call(qtiRenderer, 'default') ? qtiRenderer['default'] : qtiRenderer;\n reviewRenderer = reviewRenderer && Object.prototype.hasOwnProperty.call(reviewRenderer, 'default') ? reviewRenderer['default'] : reviewRenderer;\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 (under the project TAO-PRODUCT);\n *\n */\n\n const logger = loggerFactory('taoQtiItem/runner/rendererStrategies');\n\n /**\n * The default renderer provider. It should be the QTI common renderer.\n * @type string\n */\n const defaultRenderer = qtiRenderer.name;\n\n /**\n * Alias mapping for particular names.\n * Gives the appropriate renderer based on the IMS view property.\n * Read more about IMS view here:\n * https://www.imsglobal.org/question/qtiv2p2p2/QTIv2p2p2-ASI-InformationModelv1p0/imsqtiv2p2p2_asi_v1p0_InfoModelv1p0.html#FigEnumeratedListClass_DataModel_View\n *\n * @type {Object}\n */\n const alias = {\n author: qtiRenderer.name,\n candidate: qtiRenderer.name,\n proctor: reviewRenderer.name,\n scorer: reviewRenderer.name,\n testConstructor: qtiRenderer.name,\n tutor: reviewRenderer.name\n };\n\n /**\n * Gets the name of an existing renderer.\n * If the wanted renderer does not exist, it will fallback to the default one.\n * A warning will be issue for unknown names.\n * @param {String} name\n * @returns {String}\n */\n function getProviderName(name) {\n const providers = rendererStrategies.getAvailableProviders();\n\n if (providers.includes(name)) {\n return name;\n }\n\n if (alias[name]) {\n return alias[name];\n }\n\n if (name) {\n logger.warn(`Unknown QTI Item Runner renderer ${name}!`);\n }\n\n return defaultRenderer;\n }\n\n /**\n * This renderer manager registers two different renderers at the moment:\n * - qtiCommonRenderer: Standard renderer used for test taker view\n * - reviewRenderer: This renderer is meant to render items in review mode (which is ready-only with some enhancement)\n *\n * @param {string} rendererName\n * @returns {*|{init(): *, getRenderer(): *}|init}\n */\n function rendererStrategies(rendererName) {\n const providerName = getProviderName(rendererName);\n const provider = rendererStrategies.getProvider(providerName);\n const renderer = {\n /**\n * Initializes the renderer.\n * @returns {renderer}\n */\n init() {\n provider.init.call(this);\n return this;\n },\n\n /**\n * Gets the renderer's name\n * @returns {String}\n */\n getName() {\n return provider.name;\n },\n\n /**\n * Gets the renderer\n * @returns {renderer}\n */\n getRenderer() {\n return provider.getRenderer();\n }\n };\n\n return renderer.init();\n }\n\n providerRegistry(rendererStrategies);\n\n rendererStrategies.registerProvider(qtiRenderer.name, qtiRenderer);\n rendererStrategies.registerProvider(reviewRenderer.name, reviewRenderer);\n\n return rendererStrategies;\n\n});\n\n","define('taoQtiItem/runner/provider/qti',['jquery', 'lodash', 'context', 'taoQtiItem/qtiItem/core/Loader', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/portableElementRegistry/ciRegistry', 'taoQtiItem/portableElementRegistry/icRegistry', 'taoQtiItem/portableElementRegistry/provider/sideLoadingProviderFactory', 'taoQtiItem/runner/rendererStrategies', 'taoQtiItem/runner/provider/manager/picManager', 'taoQtiItem/runner/provider/manager/userModules', 'taoQtiItem/qtiItem/helper/modalFeedback', 'taoItems/assets/manager', 'util/locale'], function ($, _, context, QtiLoader, Element, ciRegistry, icRegistry, sideLoadingProviderFactory, rendererStrategies, picManager, userModules, modalFeedbackHelper, manager, locale) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n QtiLoader = QtiLoader && Object.prototype.hasOwnProperty.call(QtiLoader, 'default') ? QtiLoader['default'] : QtiLoader;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n ciRegistry = ciRegistry && Object.prototype.hasOwnProperty.call(ciRegistry, 'default') ? ciRegistry['default'] : ciRegistry;\n icRegistry = icRegistry && Object.prototype.hasOwnProperty.call(icRegistry, 'default') ? icRegistry['default'] : icRegistry;\n sideLoadingProviderFactory = sideLoadingProviderFactory && Object.prototype.hasOwnProperty.call(sideLoadingProviderFactory, 'default') ? sideLoadingProviderFactory['default'] : sideLoadingProviderFactory;\n rendererStrategies = rendererStrategies && Object.prototype.hasOwnProperty.call(rendererStrategies, 'default') ? rendererStrategies['default'] : rendererStrategies;\n picManager = picManager && Object.prototype.hasOwnProperty.call(picManager, 'default') ? picManager['default'] : picManager;\n userModules = userModules && Object.prototype.hasOwnProperty.call(userModules, 'default') ? userModules['default'] : userModules;\n modalFeedbackHelper = modalFeedbackHelper && Object.prototype.hasOwnProperty.call(modalFeedbackHelper, 'default') ? modalFeedbackHelper['default'] : modalFeedbackHelper;\n locale = locale && Object.prototype.hasOwnProperty.call(locale, 'default') ? locale['default'] : locale;\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) 2014-2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n var timeout = (context.timeout > 0 ? context.timeout + 1 : 30) * 1000;\n\n /**\n * @exports taoQtiItem/runner/provider/qti\n */\n var qtiItemRuntimeProvider = {\n init: function (itemData, done) {\n var self = this;\n\n var rendererOptions = _.merge(\n {\n assetManager: this.assetManager\n },\n _.pick(this.options, ['themes', 'preload', 'view'])\n );\n\n const Renderer = rendererStrategies(rendererOptions.view).getRenderer();\n\n this._renderer = new Renderer(rendererOptions);\n\n this._loader = new QtiLoader();\n\n this._loader.loadItemData(itemData, function (item) {\n if (!item) {\n return self.trigger('error', 'Unable to load item from the given data.');\n }\n\n self._item = item;\n self._renderer.load(function () {\n self._item.setRenderer(this);\n\n done();\n }, this.getLoadedClasses());\n });\n },\n\n render: function (elt, done, options) {\n var self = this;\n\n options = _.defaults(options || {}, { state: {} });\n\n if (this._item) {\n try {\n //render item html\n elt.innerHTML = this._item.render({});\n\n // apply RTL layout according to item language\n const $item = $(elt).find('.qti-item');\n const $itemBody = $item.find('.qti-itemBody');\n const itemDir = $itemBody.attr('dir');\n if (!itemDir) {\n const itemLang = $item.attr('lang');\n $itemBody.attr('dir', locale.getLanguageDirection(itemLang));\n }\n } catch (e) {\n self.trigger('error', 'Error in template rendering : ' + e.message);\n }\n try {\n if (options.portableElements) {\n //if the option to directly load portable elements is provided, use only this one\n if (options.portableElements.pci) {\n ciRegistry.resetProviders();\n ciRegistry.registerProvider(\n 'pciDeliveryProvider',\n sideLoadingProviderFactory(options.portableElements.pci)\n );\n }\n if (options.portableElements.pic) {\n icRegistry.resetProviders();\n icRegistry.registerProvider(\n 'picDeliveryProvider',\n sideLoadingProviderFactory(options.portableElements.pic)\n );\n }\n }\n\n // Race between postRendering and timeout\n // postRendering waits for everything to be resolved or one reject\n Promise.race([\n Promise.all(this._item.postRender(options)),\n new Promise(function (resolve, reject) {\n _.delay(\n reject,\n timeout,\n new Error(\n 'It seems that there is an error during item loading. The error has been reported. The test will be paused.'\n )\n );\n })\n ])\n .then(function () {\n $(elt)\n .off('responseChange')\n .on('responseChange', function () {\n self.trigger('statechange', self.getState());\n self.trigger('responsechange', self.getResponses());\n })\n .off('endattempt')\n .on('endattempt', function (e, responseIdentifier) {\n self.trigger('endattempt', responseIdentifier || e.originalEvent.detail);\n })\n .off('themechange')\n .on('themechange', function (e, themeName) {\n var themeLoader = self._renderer.getThemeLoader();\n themeName = themeName || e.originalEvent.detail;\n if (themeLoader) {\n themeLoader.change(themeName);\n }\n });\n\n /**\n * Lists the PIC provided by this item.\n * @event qti#listpic\n */\n self.trigger('listpic', picManager.collection(self._item));\n\n return userModules.load().then(done);\n })\n .catch(function (renderingError) {\n done(); // in case of postRendering issue, we are also done\n const error = new Error(\n 'Error in post rendering : ' + renderingError instanceof Error\n ? renderingError.message\n : renderingError\n );\n error.unrecoverable = true;\n self.trigger('error', error);\n });\n } catch (err) {\n self.trigger('error', 'Error in post rendering : ' + err.message);\n }\n }\n },\n\n /**\n * Clean up stuffs\n */\n clear: function (elt, done) {\n var self = this;\n\n if (self._item) {\n Promise.all(\n this._item.getInteractions().map(function (interaction) {\n return interaction.clear();\n })\n )\n .then(function () {\n self._item.clear();\n\n $(elt).off('responseChange').off('endattempt').off('themechange').off('feedback').empty();\n\n if (self._renderer) {\n self._renderer.unload();\n }\n\n self._item = null;\n })\n .then(done)\n .catch(function (err) {\n self.trigger('error', 'Something went wrong while destroying an interaction: ' + err.message);\n });\n } else {\n done();\n }\n },\n\n /**\n * Get state implementation.\n * @returns {Object} that represents the state\n */\n getState: function getState() {\n var state = {};\n if (this._item) {\n //get the state from interactions\n _.forEach(this._item.getInteractions(), function (interaction) {\n state[interaction.attr('responseIdentifier')] = interaction.getState();\n });\n\n //get the state from infoControls\n _.forEach(this._item.getElements(), function (element) {\n if (Element.isA(element, 'infoControl') && element.attr('id')) {\n state.pic = state.pic || {};\n state.pic[element.attr('id')] = element.getState();\n }\n });\n }\n return state;\n },\n\n /**\n * Set state implementation.\n * @param {Object} state - the state\n */\n setState: function setState(state) {\n if (this._item && state) {\n //set interaction state\n _.forEach(this._item.getInteractions(), function (interaction) {\n var id = interaction.attr('responseIdentifier');\n if (id && state[id]) {\n interaction.setState(state[id]);\n }\n });\n\n //set info control state\n if (state.pic) {\n _.forEach(this._item.getElements(), function (element) {\n if (Element.isA(element, 'infoControl') && state.pic[element.attr('id')]) {\n element.setState(state.pic[element.attr('id')]);\n }\n });\n }\n }\n },\n\n getResponses: function () {\n var responses = {};\n if (this._item) {\n _.reduce(\n this._item.getInteractions(),\n function (res, interaction) {\n responses[interaction.attr('responseIdentifier')] = interaction.getResponse();\n return responses;\n },\n responses\n );\n }\n return responses;\n },\n\n renderFeedbacks: function (feedbacks, itemSession, done) {\n var self = this;\n\n var _renderer = self._item.getRenderer();\n var _loader = new QtiLoader(self._item);\n\n // loading feedbacks from response into the current item\n _loader.loadElements(feedbacks, function (item) {\n _renderer.load(function () {\n var renderingQueue = modalFeedbackHelper.getFeedbacks(item, itemSession);\n\n done(renderingQueue);\n }, this.getLoadedClasses());\n });\n }\n };\n\n return qtiItemRuntimeProvider;\n\n});\n\n","define('taoQtiItem/runner/qtiItemRunner',['taoItems/runner/api/itemRunner', 'taoQtiItem/runner/provider/qti'], function (itemRunner, qtiRuntimeProvider) { 'use strict';\n\n\titemRunner = itemRunner && Object.prototype.hasOwnProperty.call(itemRunner, 'default') ? itemRunner['default'] : itemRunner;\n\tqtiRuntimeProvider = qtiRuntimeProvider && Object.prototype.hasOwnProperty.call(qtiRuntimeProvider, 'default') ? qtiRuntimeProvider['default'] : qtiRuntimeProvider;\n\n\t/*\n\t * This program is free software; you can redistribute it and/or\n\t * modify it under the terms of the GNU General Public License\n\t * as published by the Free Software Foundation; under version 2\n\t * of the License (non-upgradable).\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\t *\n\t * Copyright (c) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n\t *\n\t */\n\n\t//register the QTI Provider\n\titemRunner.register('qti', qtiRuntimeProvider);\n\n\treturn itemRunner;\n\n});\n\n","\ndefine(\"taoQtiItem/loader/taoQtiItemRunner.bundle\", function(){});\n","define(\"taoQtiItem/loader/taoQtiItemRunner.min\", [\"taoItems/loader/taoItemsRunner.min\"], function(){});\n"]} |