tao-test/app/taoMediaManager/views/js/loader/taoMediaManager.min.js.map

1 line
323 KiB
XML

{"version":3,"sources":["../qtiCreator/tpl/relatedItemsPopup!tpl","../qtiCreator/tpl/relatedItemsClassPopup!tpl","../qtiCreator/tpl/forbiddenClassAction!tpl","../../taoMediaManagerCss/media!css","../controller/actions.js","../qtiCreator/helper/createDummyItemData.js","../qtiCreator/helper/sharedStimulusLoader.js","../qtiCreator/renderers/config.js","../qtiCreator/renderers/Renderer.js","../qtiCreator/helper/creatorRenderer.js","../qtiCreator/editor/propertiesPanel.js","../qtiXmlRenderer/renderers/config.js","../qtiXmlRenderer/renderers/Renderer.js","../qtiCreator/helper/xmlRenderer.js","../qtiCreator/editor/interactionsPanel.js","../qtiCreator/sharedStimulusCreator.js","../qtiCreator/component/tpl/sharedStimulusAuthoring!tpl","../qtiCreator/component/sharedStimulusAuthoring.js","../controller/authoring.js","../previewer/component/qtiSharedStimulusItem.js","../controller/editInstance.js","../controller/routes.js","../previewer/adapter/item/qtiSharedStimulusItem.js","../previewer/proxy/qtiSharedStimulusItem.js","../qtiCreator/widgets/helpers/content.js","../qtiCreator/widgets/states/Active.js","../qtiCreator/widgets/static/states/Active.js","../qtiCreator/helper/ckConfigurator.js","../qtiCreator/editor/ckEditor/htmlEditor.js","../qtiCreator/tpl/forms/static/text!tpl","../qtiCreator/widgets/static/text/states/Active.js","../qtiCreator/widgets/static/text/states/states.js","../qtiCreator/widgets/static/text/Widget.js","../qtiCreator/editor/blockAdder/blockAdder.js","../qtiCreator/editor/containerEditor.js","../qtiCreator/plugins/content/blockAdder.js","../qtiCreator/plugins/menu/preview.js","../qtiCreator/plugins/menu/save.js","../qtiCreator/plugins/navigation/back.js","../qtiCreator/widgets/static/img/states/Active.js","../qtiCreator/widgets/static/img/states/states.js","../qtiCreator/widgets/static/img/Widget.js","../qtiCreator/renderers/Img.js","../qtiCreator/tpl/forms/item!tpl","../qtiCreator/widgets/item/states/Active.js","../qtiCreator/widgets/item/states/states.js","../qtiCreator/widgets/item/Widget.js","../qtiCreator/renderers/tpl/wrap!tpl","../qtiCreator/renderers/Item.js","../qtiCreator/widgets/static/object/states/Active.js","../qtiCreator/widgets/static/object/states/states.js","../qtiCreator/widgets/static/object/Widget.js","../qtiCreator/renderers/Object.js","../qtiCreator/widgets/static/table/states/Active.js","../qtiCreator/widgets/static/table/states/states.js","../qtiCreator/widgets/static/table/Widget.js","../qtiCreator/renderers/Table.js","../qtiXmlRenderer/tpl/item!tpl","../qtiXmlRenderer/renderers/Item.js","onLayerEnd0.js","module-create.js","/github/workspace/tao/views/build/config-wrap-end-default.js"],"names":[],"mappings":"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","sourcesContent":["\ndefine('tpl!taoMediaManager/qtiCreator/tpl/relatedItemsPopup', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"<li>\"\n + escapeExpression(((stack1 = (depth0 && depth0.label)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"</li>\";\n return buffer;\n }\n\n buffer += escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"This\", options) : helperMissing.call(depth0, \"__\", \"This\", options)))\n + \" <b>\";\n if (helper = helpers.name) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.name); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"is currently used in\", options) : helperMissing.call(depth0, \"__\", \"is currently used in\", options)))\n + \" \";\n if (helper = helpers.number) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.number); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \" \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"item(s)\", options) : helperMissing.call(depth0, \"__\", \"item(s)\", options)))\n + \":\\n<ul>\\n\";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.items), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</ul>\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Are you sure you want to delete this\", options) : helperMissing.call(depth0, \"__\", \"Are you sure you want to delete this\", options)))\n + \" <b>\";\n if (helper = helpers.name) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.name); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b>?\";\n return buffer;\n });\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/tpl/relatedItemsClassPopup', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\";\n\n\n buffer += \"<b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Warning\", options) : helperMissing.call(depth0, \"__\", \"Warning\", options)))\n + \"</b><br><br>\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"You are about to delete the class\", options) : helperMissing.call(depth0, \"__\", \"You are about to delete the class\", options)))\n + \" <b>\";\n if (helper = helpers.name) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.name); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b>, \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"which contains assets that are in use elsewhere.\", options) : helperMissing.call(depth0, \"__\", \"which contains assets that are in use elsewhere.\", options)))\n + \"\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Deleting this class will break the items and the tests that are currently using them.\", options) : helperMissing.call(depth0, \"__\", \"Deleting this class will break the items and the tests that are currently using them.\", options)))\n + \"<br><br>\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Are you sure you want to delete this class and all of its content?\", options) : helperMissing.call(depth0, \"__\", \"Are you sure you want to delete this class and all of its content?\", options)));\n return buffer;\n });\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/tpl/forbiddenClassAction', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\";\n\n\n buffer += \"<b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Forbidden action\", options) : helperMissing.call(depth0, \"__\", \"Forbidden action\", options)))\n + \"</b><br><br>\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"The class\", options) : helperMissing.call(depth0, \"__\", \"The class\", options)))\n + \" <b>\";\n if (helper = helpers.name) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.name); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b> \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"you are trying to delete is too large and contains too many subclasses.\", options) : helperMissing.call(depth0, \"__\", \"you are trying to delete is too large and contains too many subclasses.\", options)))\n + \"<br>\\n\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Please delete the subclasses before.\", options) : helperMissing.call(depth0, \"__\", \"Please delete the subclasses before.\", options)));\n return buffer;\n });\n});\n\n","\ndefine('css!taoMediaManagerCss/media',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\n\ndefine('taoMediaManager/controller/actions',[\n 'lodash',\n 'jquery',\n 'i18n',\n 'layout/actions/binder',\n 'uri',\n 'layout/section',\n 'core/request',\n 'core/router',\n 'core/logger',\n 'ui/feedback',\n 'ui/dialog/confirm',\n 'ui/dialog/alert',\n 'util/url',\n 'tpl!taoMediaManager/qtiCreator/tpl/relatedItemsPopup',\n 'tpl!taoMediaManager/qtiCreator/tpl/relatedItemsClassPopup',\n 'tpl!taoMediaManager/qtiCreator/tpl/forbiddenClassAction',\n 'css!taoMediaManagerCss/media.css'\n], function (\n _,\n $,\n __,\n binder,\n uri,\n section,\n request,\n router,\n loggerFactory,\n feedback,\n confirmDialog,\n alertDialog,\n urlUtil,\n relatedItemsPopupTpl,\n relatedItemsClassPopupTpl,\n forbiddenClassActionTpl\n) {\n 'use strict';\n\n const logger = loggerFactory('taoMediaManager/manageMedia');\n\n binder.register('newSharedStimulus', function instanciate(actionContext) {\n const self = this;\n const classUri = uri.decode(actionContext.classUri);\n\n return request({\n url: self.url,\n data: JSON.stringify({ classUri: classUri }),\n method: 'POST'\n })\n .then(function (response) {\n //backward compat format for jstree\n if (actionContext.tree) {\n $(actionContext.tree).trigger('addnode.taotree', [\n {\n uri: uri.decode(response.data.id),\n label: response.data.name,\n parent: uri.decode(actionContext.classUri),\n cssClass: 'node-instance'\n }\n ]);\n }\n\n //return format (resourceSelector)\n return {\n uri: uri.decode(response.data.id),\n label: response.data.name,\n classUri: uri.decode(actionContext.classUri),\n type: 'instance'\n };\n })\n .catch(err => {\n if (!_.isUndefined(err.message)) {\n feedback().error(err.message);\n }\n logger.error(err);\n });\n });\n binder.register('sharedStimulusAuthoring', function sharedStimulusAuthoring(actionContext) {\n section\n .updateContentBlock('')\n .create({\n id: 'authoring',\n name: __('Authoring'),\n url: this.url,\n content: ' ',\n visible: false\n })\n .show();\n const $panel = $('#panel-authoring');\n $panel.attr('data-id', actionContext.id);\n $panel.attr('data-uri', actionContext.uri);\n // duplicate behaviour of $doc.ajaxComplete in tao/views/js/controller/backoffice.js\n // as in old way - request html from server\n router.dispatch(`${this.url}?id=${actionContext.id}`);\n });\n binder.register('deleteSharedStimulus', function remove(actionContext) {\n const self = this;\n let data = {};\n let mediaRelationsData = {type: 'media'};\n\n if (actionContext.context[0] === 'instance') {\n mediaRelationsData.sourceId = actionContext.id\n } else {\n mediaRelationsData.classId = actionContext.id\n }\n data.uri = uri.decode(actionContext.uri);\n data.classUri = uri.decode(actionContext.classUri);\n data.id = actionContext.id;\n data.signature = actionContext.signature;\n return new Promise(function (resolve, reject) {\n request({\n url: urlUtil.route('index', 'ResourceRelations', 'tao'),\n data: mediaRelationsData,\n method: 'GET',\n noToken: true\n }).then(function (responseRelated) {\n let message;\n const haveItemReferences = responseRelated.data.relations;\n const name = $('a.clicked', actionContext.tree).text().trim();\n if (actionContext.context[0] === 'instance') {\n if (haveItemReferences.length === 0) {\n message = `${__('Are you sure you want to delete this')} <b>${name}</b>?`;\n } else {\n message = relatedItemsPopupTpl({\n name,\n number: haveItemReferences.length,\n items: haveItemReferences\n });\n }\n } else if (actionContext.context[0] !== 'instance') {\n if (haveItemReferences.length === 0) {\n message = `${__('Are you sure you want to delete this class and all of its content?')}`;\n } else if (haveItemReferences.length !== 0) {\n message = relatedItemsClassPopupTpl({\n name,\n number: haveItemReferences.length,\n items: haveItemReferences\n });\n }\n }\n callConfirmModal(actionContext, message, self.url, data, resolve, reject)\n }).catch(errorObject => {\n let message;\n if (actionContext.context[0] === 'class' && errorObject.response.code === 999) {\n message = forbiddenClassActionTpl();\n }\n callAlertModal(actionContext, message, reject)\n });\n });\n });\n\n function callConfirmModal(actionContext, message, url, data, resolve, reject) {\n confirmDialog(\n message,\n () => accept(actionContext, url, data, resolve, reject),\n () => cancel(reject)\n );\n }\n\n function callAlertModal(actionContext, message, reject) {\n alertDialog(\n message,\n () => cancel(reject)\n );\n }\n\n function accept(actionContext, url, data, resolve, reject) {\n return request({\n url: url,\n method: 'POST',\n data: data,\n dataType: 'json'\n }).then(function (response) {\n if (response.success && response.deleted) {\n feedback().success(response.message || __('Resource deleted'));\n\n if (actionContext.tree) {\n $(actionContext.tree).trigger('removenode.taotree', [\n {\n id: actionContext.uri || actionContext.classUri\n }\n ]);\n }\n return resolve({\n uri: actionContext.uri || actionContext.classUri\n });\n } else {\n reject(response.msg || __('Unable to delete the selected resource'));\n }\n });\n }\n\n function cancel(reject) {\n reject({ cancel: true });\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n\ndefine('taoMediaManager/qtiCreator/helper/createDummyItemData',[\n 'taoQtiItem/qtiCreator/model/Item'\n], function(Item) {\n 'use strict';\n\n const _generateIdentifier = function _generateIdentifier(uri) {\n const pos = uri.lastIndexOf('#');\n return uri.substr(pos + 1);\n };\n\n const creatorDummyItemData = function(sharedStimulusData) {\n const newItem = new Item().id(_generateIdentifier(sharedStimulusData.id)).attr('title', sharedStimulusData.name);\n newItem.data('new', true);\n newItem.data('dummy', true);\n\n const itemData = Object.assign({}, newItem);\n delete itemData.bdy;\n delete itemData.rootElement;\n\n itemData.body = sharedStimulusData.body.body;\n itemData.qtiClass = 'assessmentItem';\n itemData.responseProcessing = {\n attributes: {},\n qtiClass: \"responseProcessing\",\n responseRules: [],\n serial: `response_${sharedStimulusData.body.serial}`\n };\n itemData.response = {};\n if (sharedStimulusData.body.attributes['xml:lang']) {\n itemData.attributes['xml:lang'] = sharedStimulusData.body.attributes['xml:lang'];\n }\n\n return itemData;\n };\n return creatorDummyItemData;\n});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n\ndefine('taoMediaManager/qtiCreator/helper/sharedStimulusLoader',[\n 'jquery',\n 'taoQtiItem/qtiItem/core/Loader',\n 'taoQtiItem/qtiCreator/model/qtiClasses',\n 'taoMediaManager/qtiCreator/helper/createDummyItemData',\n 'core/dataProvider/request',\n 'util/url'\n], function($, Loader, qtiClasses, creatorDummyItemData, request, urlUtil) {\n 'use strict';\n\n const qtiNamespace = 'http://www.imsglobal.org/xsd/imsqti_v2p2';\n\n const qtiSchemaLocation = {\n 'http://www.imsglobal.org/xsd/imsqti_v2p2' : 'http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd'\n };\n\n const languagesUrl = urlUtil.route('index', 'Languages', 'tao');\n\n const creatorLoader = {\n loadSharedStimulus(config, callback) {\n\n if (config.id) {\n const languagesList = request(languagesUrl);\n const assetData = request(config.assetDataUrl, { id : config.id });\n Promise.all([languagesList, assetData]).then((values) => {\n let loader, itemData;\n\n itemData = creatorDummyItemData(values[1]);\n\n loader = new Loader().setClassesLocation(qtiClasses);\n loader.loadItemData(itemData, function(loadedItem) {\n let namespaces;\n\n // convert item to current QTI version\n namespaces = loadedItem.getNamespaces();\n namespaces[''] = qtiNamespace;\n loadedItem.setNamespaces(namespaces);\n loadedItem.setSchemaLocations(qtiSchemaLocation);\n\n //add languages list to the item\n if (languagesList) {\n loadedItem.data('languagesList', values[0]);\n }\n\n callback(loadedItem, this.getLoadedClasses());\n });\n });\n }\n }\n };\n\n return creatorLoader;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA;\n */\n\ndefine('taoMediaManager/qtiCreator/renderers/config',[\n 'lodash',\n 'taoQtiItem/qtiCommonRenderer/renderers/config',\n 'taoItems/assets/manager',\n 'taoItems/assets/strategies'\n], function (_, commonRenderConfig, assetManagerFactory, assetStrategies) {\n 'use strict';\n\n //asset manager using base url\n const assetManager = assetManagerFactory(\n [assetStrategies.taomedia, assetStrategies.external, assetStrategies.base64, assetStrategies.baseUrl],\n { baseUrl: '' }\n );\n\n const locations = _.defaults(\n {\n _container: 'taoQtiItem/qtiCreator/renderers/Container',\n _tooltip: 'taoQtiItem/qtiCreator/renderers/Tooltip',\n assessmentItem: 'taoMediaManager/qtiCreator/renderers/Item',\n img: 'taoMediaManager/qtiCreator/renderers/Img',\n math: 'taoQtiItem/qtiCreator/renderers/Math',\n object: 'taoMediaManager/qtiCreator/renderers/Object',\n table: 'taoMediaManager/qtiCreator/renderers/Table'\n },\n commonRenderConfig.locations\n );\n\n return {\n name: 'creatorRenderer',\n locations: locations,\n options: {\n assetManager: assetManager\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) 2020 (original work) Open Assessment Technologies SA;\n */\n\n/**\n * Define the Qti Item Creator Renderer\n */\ndefine('taoMediaManager/qtiCreator/renderers/Renderer',[\n 'taoQtiItem/qtiRunner/core/Renderer',\n 'taoMediaManager/qtiCreator/renderers/config'\n], function(Renderer, config){\n 'use strict';\n\n return Renderer.build(config.locations, config.name, config.options);\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\ndefine('taoMediaManager/qtiCreator/helper/creatorRenderer',[\n 'jquery',\n 'lodash',\n 'taoMediaManager/qtiCreator/renderers/Renderer',\n 'taoItems/assets/manager',\n 'taoItems/assets/strategies',\n 'util/dom'\n], function ($, _, Renderer, assetManagerFactory, assetStrategies, dom) {\n 'use strict';\n\n //configure and instanciate once only:\n let creatorRenderer = null;\n\n /**\n * Get a preconfigured renderer singleton\n *\n * @param {Boolean} reset\n * @param {Object} config\n * @param {Object} areaBroker - the QtiCreator area broker\n * @returns {Object} - a configured instance of creatorRenderer\n */\n const get = function (reset, config, areaBroker) {\n let $bodyEltForm;\n\n config = config || {};\n config.properties = config.properties || {};\n\n if (!creatorRenderer || reset) {\n $bodyEltForm = creatorRenderer ? creatorRenderer.getOption('bodyElementOptionForm') : null;\n if (reset || !$bodyEltForm || !$bodyEltForm.length || !dom.contains($bodyEltForm)) {\n // Renderer with binded locations from taoMediaManager/qtiCreator/renderers/config.js\n creatorRenderer = new Renderer({\n lang: '',\n uri: '',\n shuffleChoices: false,\n itemOptionForm: $('#item-editor-item-property-bar .panel'),\n bodyElementOptionForm: areaBroker.getElementPropertyPanelArea(),\n textOptionForm: $('#item-editor-text-property-bar .panel'),\n mediaManager: {\n appendContainer: '#mediaManager',\n browseUrl: config.properties.getFilesUrl,\n uploadUrl: config.properties.fileUploadUrl,\n deleteUrl: config.properties.fileDeleteUrl,\n downloadUrl: config.properties.fileDownloadUrl,\n fileExistsUrl: config.properties.fileExistsUrl,\n path: config.properties.path,\n root: config.properties.root\n },\n qtiCreatorContext: config.qtiCreatorContext,\n locations: config.properties.locations\n });\n\n //update the resolver baseUrl\n creatorRenderer.getAssetManager().setData({ baseUrl: config.properties.baseUrl || '' });\n\n creatorRenderer.setAreaBroker(areaBroker);\n\n // extend creator renderer to give access to the creator context\n _.assign(creatorRenderer, {\n getCreatorContext: function getCreatorContext() {\n return this.getOption('qtiCreatorContext');\n }\n });\n }\n }\n\n return creatorRenderer;\n };\n\n return {\n get: get,\n\n setOption: function (name, value) {\n return get().setOption(name, value);\n },\n setOptions: function (options) {\n return get().setOptions(options);\n },\n load: function (qtiClasses, done) {\n return get().load(function (...rest) {\n if (_.isFunction(done)) {\n done.apply(this, rest);\n }\n }, qtiClasses);\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) 2020 (original work) Open Assessment Technologies SA;\n *\n */\n\ndefine('taoMediaManager/qtiCreator/editor/propertiesPanel',[\n 'taoQtiItem/qtiCreator/helper/panel'\n], function(panel) {\n 'use strict';\n\n /**\n * Set up the properties panel, including the style editor\n * @param {jQueryElement} $container - the panel container\n */\n return function setUpInteractionPanel($container){\n panel.initSidebarAccordion($container);\n panel.initFormVisibilityListener();\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) 2020 (original work) Open Assessment Technlogies SA;\n *\n */\n\n/**\n * Config of the QTI XML renderer\n *\n * @author Hanna Dzmitryieva <hanna@taotesting.com>\n */\ndefine('taoMediaManager/qtiXmlRenderer/renderers/config',[\n 'taoItems/assets/manager'\n], function(assetManagerFactory){\n 'use strict';\n\n //all assets are normalized (relative)\n const assetManager = assetManagerFactory([{\n name : 'nomalize',\n handle: function normalizeStrategy(url){\n if(url){\n return url.toString().replace(/^\\.?\\//, '');\n }\n }\n }]);\n\n /**\n * The XML Renderer config\n */\n return {\n name : 'xmlRenderer',\n locations : {\n '_container' : 'taoQtiItem/qtiXmlRenderer/renderers/Container',\n 'assessmentItem' : 'taoMediaManager/qtiXmlRenderer/renderers/Item',\n '_tooltip' : 'taoQtiItem/qtiXmlRenderer/renderers/Tooltip',\n 'math' : 'taoQtiItem/qtiXmlRenderer/renderers/Math',\n 'img' : 'taoQtiItem/qtiXmlRenderer/renderers/Img',\n 'object' : 'taoQtiItem/qtiXmlRenderer/renderers/Object',\n 'table' : 'taoQtiItem/qtiXmlRenderer/renderers/Table',\n },\n options : {\n assetManager : assetManager\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) 2020 (original work) Open Assessment Technologies SA;\n *\n */\n\ndefine('taoMediaManager/qtiXmlRenderer/renderers/Renderer',['taoQtiItem/qtiRunner/core/Renderer', 'taoMediaManager/qtiXmlRenderer/renderers/config'], function(Renderer, config){\n 'use strict';\n\n return Renderer.build(config.locations, config.name, config.options);\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoMediaManager/qtiCreator/helper/xmlRenderer',[\n 'core/logger',\n 'taoMediaManager/qtiXmlRenderer/renderers/Renderer',\n 'taoQtiItem/qtiItem/core/Element'\n], function(loggerFactory, XmlRenderer, Element){\n 'use strict';\n\n const logger = loggerFactory('taoMediaManager/qtiCreator/helper/xmlRenderer');\n\n const _xmlRenderer = new XmlRenderer().load();\n\n const _render = function(element){\n let xml = '';\n try{\n if(element instanceof Element) {\n xml = element.render(_xmlRenderer);\n }\n }catch(e){\n logger.error(e);\n }\n return xml;\n };\n\n return {\n render : _render,\n get : function(){\n return _xmlRenderer;\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) 2021 (original work) Open Assessment Technologies SA ;\n *\n */\n\n/**\n * This module let's you set up the interaction panel\n *\n * @author Hanna Dzmitryieva <hanna@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/editor/interactionsPanel',[\n 'lodash',\n 'i18n',\n 'taoQtiItem/qtiCreator/editor/interactionsToolbar',\n 'taoQtiItem/qtiCreator/helper/panel'\n], function (_, __, interactionsToolbar, panel) {\n 'use strict';\n\n /**\n * Set up the interaction selection panel\n * @param {jQueryElement} $container - the panel container\n */\n return function setUpInteractionPanel($container) {\n const tagTitles = {\n inlineInteractions: __('Inline Interactions')\n };\n const interactions = {\n _container: {\n label: __('Text Block'),\n icon: 'icon-font',\n description: __(\n 'Block contains the content (stimulus) of the item such as text or image. It is also required for Inline Interactions.'\n ),\n short: __('Block'),\n qtiClass: '_container',\n tags: [tagTitles.inlineInteractions, 'text'],\n group: __('inline-interactions')\n }\n };\n\n // create toolbar\n interactionsToolbar.create($container, interactions);\n\n // init accordions\n panel.initSidebarAccordion($container);\n // init special subgroup\n panel.toggleInlineInteractionGroup();\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) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\n\n/**\n * The item creator factory let's you create (guess what...)\n *\n * The item creator is \"unfinished\" because all parts aren't yet independants and the loading is anarhic,\n * however the item creator does a 1st job of wrapping the item creator's bootstrap.\n *\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/sharedStimulusCreator',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'core/eventifier',\n 'taoQtiItem/qtiCreator/context/qtiCreatorContext',\n 'taoMediaManager/qtiCreator/helper/sharedStimulusLoader',\n 'taoMediaManager/qtiCreator/helper/creatorRenderer',\n 'taoQtiItem/qtiCreator/helper/commonRenderer', //for read-only element : preview + xinclude\n 'taoQtiItem/qtiCreator/helper/xincludeRenderer',\n 'taoMediaManager/qtiCreator/editor/propertiesPanel',\n 'taoQtiItem/qtiCreator/model/helper/event',\n 'taoMediaManager/qtiCreator/helper/xmlRenderer',\n 'taoQtiItem/qtiItem/helper/xmlNsHandler',\n 'core/request',\n 'util/url',\n 'taoMediaManager/qtiCreator/editor/interactionsPanel'\n], function (\n $,\n _,\n __,\n eventifier,\n qtiCreatorContextFactory,\n sharedStimulusLoader,\n creatorRenderer,\n commonRenderer,\n xincludeRenderer,\n propertiesPanel,\n eventHelper,\n xmlRenderer,\n xmlNsHandler,\n request,\n urlUtil,\n interactionPanel\n) {\n 'use strict';\n\n /**\n * Load an item\n * @param {String} id - the item ID\n * @param {String} uri - the item URI\n * @param {String} assetDataUrl - the data url\n *\n * @returns {Promise} that resolve with the loaded item model\n */\n const loadSharedStimulus = function loadSharedStimulus(id, uri, assetDataUrl) {\n return new Promise(function (resolve, reject) {\n sharedStimulusLoader.loadSharedStimulus({ id, uri, assetDataUrl }, function (item) {\n if (!item) {\n reject(new Error('Unable to load the Shared Stimulus'));\n }\n\n //set useful data :\n item.data('uri', uri);\n resolve(item);\n });\n });\n };\n\n /**\n * Build a new Item Creator\n * @param {Object} config - the creator's configuration\n * @param {String} config.properties.uri - the URI of the item to load (properties structure is kept as legacy)\n * @param {String} config.properties.label - the label of the item to load (properties structure is kept as legacy)\n * @param {String} config.properties.baseUrl - the base URL used to resolve assets\n * @param {String[]} [config.interactions] - the list of additional interactions to load (PCI)\n * @param {String[]} [config.infoControls] - the list of info controls to load (PIC)\n * @param {areaBroker} areaBroker - a mapped areaBroker\n * @param {Function[]} pluginFactories - the plugin's factory, ready to be instantiated\n * @returns {itemCreator} an event emitter object, with the usual lifecycle\n * @throws {TypeError}\n */\n const sharedStimulusCreatorFactory = function sharedStimulusCreatorFactory(config, areaBroker, pluginFactories) {\n let itemCreator;\n const qtiCreatorContext = qtiCreatorContextFactory();\n const plugins = {};\n\n /**\n * Run a method in all plugins\n *\n * @param {String} method - the method to run\n * @returns {Promise} once that resolve when all plugins are done\n */\n const pluginRun = function pluginRun(method) {\n const execStack = [];\n\n _.forEach(plugins, function (plugin) {\n if (_.isFunction(plugin[method])) {\n execStack.push(plugin[method]());\n }\n });\n\n return Promise.all(execStack);\n };\n\n //validate parameters\n if (!_.isPlainObject(config)) {\n throw new TypeError('The item creator configuration is required');\n }\n if (!config.properties || _.isEmpty(config.properties.uri) || _.isEmpty(config.properties.baseUrl)) {\n throw new TypeError(\n 'The creator configuration must contains the required properties triples: uri, label and baseUrl'\n );\n }\n if (!areaBroker) {\n throw new TypeError('Without an areaBroker there are no chance to see something you know');\n }\n\n //factor the new itemCreator\n itemCreator = eventifier({\n //lifecycle\n\n /**\n * Initialize the item creator:\n * - set up the registries for portable elements\n * - load the item\n * - instantiate and initialize the plugins\n *\n * @returns {itemCreator} chains\n * @fires itemCreator#init - once initialized\n * @fires itemCreator#error - if something went wrong\n */\n init() {\n //instantiate the plugins first\n _.forEach(pluginFactories, pluginFactory => {\n const plugin = pluginFactory(this, areaBroker);\n plugins[plugin.getName()] = plugin;\n });\n\n // quick-fix: clear all ghost events listeners\n // prevent ghosting of item states and other properties\n $(document).off('.qti-widget');\n\n /**\n * Save the item on \"save\" event\n * @event itemCreator#save\n * @param {Boolean} [silent] - true to not trigger the success feedback\n * @fires itemCreator#saved once the save is done\n * @fires itemCreator#error\n */\n this.on('save', silent => {\n const item = this.getItem();\n\n const xml = xmlNsHandler.restoreNs(xmlRenderer.render(item), item.getNamespaces());\n request({\n url: urlUtil.route('patch', 'SharedStimulus', 'taoMediaManager', { id: config.properties.id }),\n type: 'POST',\n contentType: 'application/json',\n dataType: 'json',\n data: JSON.stringify({ body: xml }),\n method: 'PATCH',\n noToken: true\n })\n .then(() => {\n if (!silent) {\n this.trigger('success');\n }\n\n this.trigger('saved');\n })\n .catch(err => {\n this.trigger('error', err);\n });\n });\n\n this.on('exit', function () {\n $('.item-editor-item', areaBroker.getItemPanelArea()).empty();\n this.destroy();\n });\n\n loadSharedStimulus(config.properties.id, config.properties.uri, config.properties.assetDataUrl)\n .then(item => {\n if (!_.isObject(item)) {\n this.trigger('error', new Error(`Unable to load the item ${config.properties.label}`));\n return;\n }\n\n this.item = item;\n return true;\n })\n .then(() => pluginRun('init'))\n .then(() => {\n /**\n * @event itemCreator#init the initialization is done\n * @param {Object} item - the loaded item\n */\n this.trigger('init', this.item);\n })\n .then(() => {\n // forward context error\n qtiCreatorContext.on('error', err => {\n this.trigger('error', err);\n });\n return qtiCreatorContext.init();\n })\n .catch(err => {\n this.trigger('error', err);\n });\n\n return this;\n },\n\n /**\n * Renders the creator\n * Because of the actual structure, it also intialize some components (panels, toolbars, etc.).\n *\n * @returns {itemCreator} chains\n * @fires itemCreator#render - once everything is in place\n * @fires itemCreator#ready - once the creator's components' are ready (not yet reliable)\n * @fires itemCreator#error - if something went wrong\n */\n render() {\n const self = this;\n const item = this.getItem();\n\n if (!item || !_.isFunction(item.getUsedClasses)) {\n return this.trigger('error', new Error('We need an item to render.'));\n }\n\n //configure commonRenderer for the preview and initial qti element rendering\n commonRenderer.setContext(areaBroker.getItemPanelArea());\n commonRenderer.get(true, config).setOption('baseUrl', config.properties.baseUrl);\n\n interactionPanel(areaBroker.getInteractionPanelArea());\n\n //the renderers' widgets do not handle async yet, so we rely on this event\n //TODO ready should be triggered once every renderer's widget is done (ie. promisify everything)\n $(document).on('ready.qti-widget', (e, elt) => {\n if (elt.element.qtiClass === 'assessmentItem') {\n this.trigger('ready');\n }\n });\n\n // pass an context reference to the renderer\n config.qtiCreatorContext = qtiCreatorContext;\n\n creatorRenderer\n .get(true, config, areaBroker)\n .setOptions(config.properties)\n .load(function () {\n let widget;\n\n //set renderer\n item.setRenderer(this);\n\n //render item (body only) into the \"drop-area\"\n areaBroker.getItemPanelArea().append(item.render());\n\n //\"post-render it\" to initialize the widget\n Promise.all(item.postRender(_.clone(config.properties)))\n .then(function () {\n //set reference to item widget object\n areaBroker.getContainer().data('widget', item);\n\n widget = item.data('widget');\n _.each(item.getComposingElements(), function (element) {\n if (element.qtiClass === 'include') {\n xincludeRenderer.render(element.data('widget'), config.properties.baseUrl);\n }\n });\n\n propertiesPanel(areaBroker.getPropertyPanelArea(), widget, config.properties);\n\n //init event listeners:\n eventHelper.initElementToWidgetListeners();\n\n return pluginRun('render').then(function () {\n self.trigger('render');\n });\n })\n .catch(function (err) {\n self.trigger('error', err);\n });\n }, item.getUsedClasses());\n\n return this;\n },\n\n /**\n * Clean up everything and destroy the item creator\n *\n * @returns {itemCreator} chains\n */\n destroy() {\n $(document).off('.qti-widget');\n\n pluginRun('destroy')\n .then(() => qtiCreatorContext.destroy())\n .then(() => {\n this.trigger('destroy');\n })\n .catch(err => {\n this.trigger('error', err);\n });\n return this;\n },\n\n //accessors\n\n /**\n * Give an access to the loaded item\n * @returns {Object} the item\n */\n getItem() {\n return this.item;\n },\n\n getSharedStimulusId() {\n return config.properties.id;\n },\n\n /**\n * Give an access to the config\n * @returns {Object} the config\n */\n getConfig() {\n return config;\n }\n });\n\n return itemCreator;\n };\n\n return sharedStimulusCreatorFactory;\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/component/tpl/sharedStimulusAuthoring', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div id=\\\"item-editor-scope\\\" data-content-target=\\\"wide\\\">\\n\\n <nav class=\\\"action-bar plain content-action-bar horizontal-action-bar\\\">\\n <ul class=\\\"menu-left action-group plain item-editor-menu\\\"></ul>\\n\\n <ul class=\\\"menu action-group plain item-editor-menu\\\"></ul>\\n\\n <ul class=\\\"menu-right action-group plain item-editor-menu\\\"></ul>\\n </nav>\\n <div class=\\\"wrapper clearfix content sidebar-popup-parent\\\" id=\\\"item-editor-wrapper\\\">\\n\\n <!-- interaction panel -->\\n <div class=\\\"item-editor-sidebar-wrapper left-bar\\\">\\n <form class=\\\"item-editor-sidebar\\\" id=\\\"item-editor-interaction-bar\\\" autocomplete=\\\"off\\\"></form>\\n </div>\\n\\n <!-- item panel -->\\n <main id=\\\"item-editor-panel\\\" class=\\\"clearfix\\\">\\n\\n <div class=\\\"item-editor-bar\\\">\\n <h1 class=\\\"truncate\\\"></h1>\\n <div id=\\\"toolbar-top\\\"></div>\\n </div>\\n\\n <div id=\\\"item-editor-scoll-container\\\">\\n <div id=\\\"item-editor-scroll-outer\\\">\\n <div id=\\\"item-editor-scroll-inner\\\">\\n <!-- item goes here -->\\n </div>\\n </div>\\n </div>\\n\\n </main>\\n\\n <!-- properties panel -->\\n <div class=\\\"item-editor-sidebar-wrapper right-bar sidebar-popup-parent\\\">\\n <div class=\\\"item-editor-sidebar\\\" id=\\\"item-editor-item-widget-bar\\\">\\n <div class=\\\"item-editor-item-related sidebar-right-section-box\\\" id=\\\"item-editor-item-property-bar\\\">\\n <section class=\\\"tool-group clearfix\\\" id=\\\"sidebar-right-item-properties\\\">\\n <h2>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Passage Properties\", options) : helperMissing.call(depth0, \"__\", \"Passage Properties\", options)))\n + \"</h2>\\n <div class=\\\"panel\\\"></div>\\n </section>\\n </div>\\n <div class=\\\"item-editor-item-related sidebar-right-section-box\\\" id=\\\"item-editor-text-property-bar\\\">\\n <section class=\\\"tool-group clearfix\\\" id=\\\"sidebar-right-text-block-properties\\\">\\n <h2>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Passage Properties\", options) : helperMissing.call(depth0, \"__\", \"Passage Properties\", options)))\n + \"</h2>\\n <div class=\\\"panel\\\"></div>\\n </section>\\n </div>\\n <div class=\\\"item-editor-body-element-related sidebar-right-section-box\\\" id=\\\"item-editor-body-element-property-bar\\\">\\n <section class=\\\"tool-group clearfix\\\" id=\\\"sidebar-right-body-element-properties\\\">\\n <h2><?= __('Element Properties') ?></h2>\\n\\n <div class=\\\"panel\\\"></div>\\n </section>\\n </div>\\n </div>\\n </div>\\n <!-- /properties panel -->\\n\\n\\n </div>\\n\\n <div id=\\\"mediaManager\\\"></div>\\n <div id=\\\"modal-container\\\"></div>\\n</div>\";\n return buffer;\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) 2020 Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/component/sharedStimulusAuthoring',[\n 'lodash',\n 'ui/component',\n 'core/pluginLoader',\n 'taoMediaManager/qtiCreator/sharedStimulusCreator',\n 'taoQtiItem/qtiCreator/editor/areaBroker',\n 'tpl!taoMediaManager/qtiCreator/component/tpl/sharedStimulusAuthoring',\n 'context',\n 'css!taoQtiItemCss/qti-runner.css',\n 'css!taoQtiItemCss/themes/default.css',\n 'css!taoQtiItemCss/item-creator.css'\n], function (\n _,\n componentFactory,\n pluginLoaderFactory,\n sharedStimulusCreatorFactory,\n areaBrokerFactory,\n componentTpl,\n context\n) {\n 'use strict';\n\n const defaultPlugins = [{\n module: 'taoQtiItem/qtiCreator/plugins/content/title',\n bundle: 'taoQtiItem/loader/taoQtiItem.min',\n category: 'content'\n }, {\n module: 'taoMediaManager/qtiCreator/plugins/navigation/back',\n bundle: 'taoMediaManager/loader/taoMediaManager.min',\n category: 'menu'\n }, {\n module: 'taoMediaManager/qtiCreator/plugins/menu/save',\n bundle: 'taoMediaManager/loader/taoMediaManager.min',\n category: 'menu'\n }, {\n module: 'taoMediaManager/qtiCreator/plugins/menu/preview',\n bundle: 'taoMediaManager/loader/taoMediaManager.min',\n category: 'menu'\n }, {\n module: 'taoQtiItem/qtiCreator/plugins/content/changeTracker',\n bundle: 'taoQtiItem/loader/taoQtiItem.min',\n category: 'content'\n }, {\n module: 'taoMediaManager/qtiCreator/plugins/content/blockAdder',\n bundle: 'taoMediaManager/loader/taoMediaManager.min',\n category: 'content'\n }];\n /**\n * Embeds the assets creator UI in a component\n *\n * @example\n * const container = $();\n * const config = {\n * plugins: [],\n * properties: {\n * uri: 'http://item#rdf-123',\n * baseUrl: 'http://foo/bar/',\n * // ...\n * }\n * };\n * const component = sharedStimulusAuthoringFactory(container, config)\n * .on('ready', function onComponentReady() {\n * // ...\n * });\n *\n * @param {HTMLElement|String} container\n * @param {Object} config - The setup for the sharedStimulus creator\n * @param {Object} config.properties - The list of properties expected by the sharedStimulus creator\n * @param {Object} config.properties.uri - The URI of the sharedStimulus to author\n * @param {Object} config.properties.id - The ID of the sharedStimulus to author\n * @param {Object} config.properties.baseUrl - The base URL to retrieve the assets\n * @param {String} config.properties.sharedStimulusDataUrl - URL for getting sharedStimulus data (passed through to sharedStimulusCreator)\n * @param {Object[]} [config.plugins] - Additional plugins to load\n * @returns {component}\n * @fires ready - When the component is ready to work\n */\n function sharedStimulusAuthoringFactory(container, config = {}) {\n let areaBroker;\n let sharedStimulusCreator;\n\n const plugins = Array.isArray(config.plugins) ? config.plugins : [];\n config.plugins = [...defaultPlugins, ...plugins];\n\n const pluginLoader = pluginLoaderFactory();\n\n const api = {\n /**\n * Gets access to the area broker\n * @returns {areaBroker}\n */\n getAreaBroker() {\n return areaBroker;\n }\n };\n\n const sharedStimulusAuthoring = componentFactory(api)\n // set the component's layout\n .setTemplate(componentTpl)\n\n // auto render on init\n .on('init', function () {\n // load plugins dynamically\n _.forEach(this.getConfig().plugins, plugin => {\n if (plugin && plugin.module) {\n if (plugin.exclude) {\n pluginLoader.remove(plugin.module);\n } else {\n pluginLoader.add(plugin);\n }\n }\n });\n\n // load the plugins, then render the sharedStimulus creator\n pluginLoader.load(!!context.bundle)\n .then(() => this.render(container))\n .catch(err => this.trigger('error', err));\n })\n\n // renders the component\n .on('render', function () {\n const $container = this.getElement();\n areaBroker = areaBrokerFactory($container, {\n 'menu': $container.find('.menu'),\n 'menuLeft': $container.find('.menu-left'),\n 'menuRight': $container.find('.menu-right'),\n 'contentCreatorPanel': $container.find('#item-editor-panel'),\n 'editorBar': $container.find('#item-editor-panel .item-editor-bar'),\n 'title': $container.find('#item-editor-panel .item-editor-bar h1'),\n 'toolbar': $container.find('#item-editor-panel .item-editor-bar #toolbar-top'),\n 'interactionPanel': $container.find('#item-editor-interaction-bar'),\n 'propertyPanel': $container.find('#item-editor-item-widget-bar'),\n 'itemPanel': $container.find('#item-editor-scroll-inner'),\n 'itemPropertyPanel': $container.find('#sidebar-right-item-properties'),\n 'itemStylePanel': $container.find('#item-style-editor-bar'),\n 'modalContainer': $container.find('#modal-container'),\n 'elementPropertyPanel': $container.find('#item-editor-body-element-property-bar .panel')\n });\n\n sharedStimulusCreator = sharedStimulusCreatorFactory(this.getConfig(), areaBroker, pluginLoader.getPlugins())\n .spread(this, 'error success ready')\n .on('init', function () {\n this.render();\n })\n .on('destroy', function () {\n sharedStimulusCreator = null;\n sharedStimulusAuthoring.destroy();\n })\n .init();\n })\n\n .on('destroy', function () {\n if (sharedStimulusCreator) {\n sharedStimulusCreator.destroy();\n }\n sharedStimulusCreator = null;\n areaBroker = null;\n });\n\n // initialize the component with the provided config\n // defer the call to allow to listen to the init event\n _.defer(() => sharedStimulusAuthoring.init(config));\n\n return sharedStimulusAuthoring;\n }\n\n return sharedStimulusAuthoringFactory;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020-2021 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\ndefine('taoMediaManager/controller/authoring',[\n 'i18n',\n 'lodash',\n 'jquery',\n 'uri',\n 'taoMediaManager/qtiCreator/component/sharedStimulusAuthoring',\n 'ui/feedback',\n 'util/url',\n 'core/dataProvider/request',\n 'core/logger'\n], function (__, _, $, uri, sharedStimulusAuthoringFactory, feedback, urlUtil, request, loggerFactory) {\n 'use strict';\n\n const logger = loggerFactory('taoMediaManager/authoring');\n\n const manageMediaController = {\n /**\n * Controller entry point\n */\n start() {\n const $panel = $('#panel-authoring');\n const assetDataUrl = urlUtil.route('get', 'SharedStimulus', 'taoMediaManager');\n const assetId = uri.decode($panel.attr('data-id'));\n let previewEnabled = false;\n\n request(assetDataUrl, { id : assetId })\n .then(response => {\n if (response.permissions == 'READ') {\n previewEnabled = true;\n }\n }).then(response => {\n sharedStimulusAuthoringFactory($panel, {\n properties: {\n uri: $panel.attr('data-uri'),\n id: assetId,\n assetDataUrl,\n fileUploadUrl: urlUtil.route('upload', 'ItemContent', 'taoItems'),\n fileDeleteUrl: urlUtil.route('delete', 'ItemContent', 'taoItems'),\n fileDownloadUrl: urlUtil.route('download', 'ItemContent', 'taoItems'),\n fileExistsUrl: urlUtil.route('fileExists', 'ItemContent', 'taoItems'),\n getFilesUrl: urlUtil.route('files', 'ItemContent', 'taoItems'),\n baseUrl: urlUtil.route('getFile', 'MediaManager', 'taoMediaManager', { uri: '' }),\n path: 'taomedia://mediamanager/',\n root: 'mediamanager',\n lang: 'en-US',\n previewEnabled: previewEnabled\n }\n })\n .on('success', () => {\n feedback().success(__('Your passage is saved'));\n })\n .on('error', err => {\n if (!_.isUndefined(err.message)) {\n feedback().error(err.message);\n }\n logger.error(err);\n });\n });\n }\n };\n\n return manageMediaController;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>\n */\ndefine('taoMediaManager/previewer/component/qtiSharedStimulusItem',[\n 'context',\n 'taoQtiTestPreviewer/previewer/runner',\n 'css!taoQtiTestPreviewer/previewer/provider/item/css/item'\n], function (context, previewerFactory) {\n 'use strict';\n\n /**\n * Builds a test runner to preview test item\n * @param {jQuery|HTMLElement|String} container - The container in which renders the component\n * @param {Object} [config] - The testRunner options\n * @param {String} [config.itemUri] - The ID of the SharedStimulus (for consisten with other providers)\n * @param {Object[]} [config.plugins] - Additional plugins to load\n * @param {String} [config.fullPage] - Force the previewer to occupy the full window.\n * @param {String} [config.readOnly] - Do not allow to modify the previewed item.\n * @param {Function} [template] - An optional template for the component\n * @returns {previewer}\n */\n return function qtiItemPreviewerFactory(container, config = {}, template = null) {\n const testRunnerConfig = {\n testDefinition: 'test-container',\n serviceCallId: 'previewer',\n providers: {\n runner: {\n id: 'qtiItemPreviewer',\n module: 'taoQtiTestPreviewer/previewer/provider/item/item',\n bundle: 'taoQtiTestPreviewer/loader/qtiPreviewer.min',\n category: 'runner'\n },\n proxy: {\n id: 'qtiSharedStimulusItemProxy',\n module: 'taoMediaManager/previewer/proxy/qtiSharedStimulusItem',\n bundle: 'taoMediaManager/loader/taoMediaManager.min',\n category: 'proxy'\n },\n communicator: {\n id: 'request',\n module: 'core/communicator/request',\n bundle: 'loader/vendor.min',\n category: 'communicator'\n },\n plugins: config.plugins || []\n },\n options: {\n view: config.view,\n readOnly: config.readOnly,\n fullPage: config.fullPage,\n plugins: config.pluginsOptions,\n hideActionBars: config.hideActionBars\n },\n proxyProvider: 'qtiSharedStimulusItemProxy'\n };\n\n //extra context config\n testRunnerConfig.loadFromBundle = !!context.bundle;\n\n return previewerFactory(container, testRunnerConfig, template).on('ready', runner => {\n if (config.itemState) {\n runner.on('renderitem', () => runner.itemRunner.setState(config.itemState));\n }\n if (config.itemUri) {\n return runner.loadItem(config.itemUri);\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\ndefine('taoMediaManager/controller/editInstance',[\n 'jquery',\n 'lodash',\n 'layout/actions/binder',\n 'ui/previewer',\n 'util/url',\n 'taoMediaManager/previewer/component/qtiSharedStimulusItem',\n 'core/logger',\n 'ui/feedback',\n], function($, _, binder, previewer, urlUtil, qtiItemPreviewerFactory, loggerFactory, feedback) {\n 'use strict';\n\n const logger = loggerFactory('taoMediaManager/editInstance');\n\n const manageMediaController = {\n\n /**\n * Controller entry point\n */\n start() {\n\n const $previewer = $('.previewer');\n let file = {};\n file.url = $previewer.data('url');\n file.mime = $previewer.data('type');\n\n const isPreviewEnabled = $previewer.data('enabled');\n const isPassage = file.mime === 'application/qti+xml';\n\n if (isPreviewEnabled) {\n if (!isPassage) {\n // to hide the loading icon, inherited from the .previewer\n file.containerClass = 'no-background';\n $previewer.previewer(file);\n } else {\n qtiItemPreviewerFactory($previewer, {itemUri: $('#edit-media').data('uri')})\n .on('error', function (err) {\n if (!_.isUndefined(err.message)) {\n feedback().error(err.message);\n }\n logger.error(err);\n });\n }\n }\n\n if (isPassage) {\n $('#media-authoring').show();\n } else {\n $('#media-authoring').hide();\n }\n\n $('#edit-media').off()\n .on('click', function() {\n const action = { binding : 'load' , url: urlUtil.route('editMedia', 'MediaImport', 'taoMediaManager') };\n binder.exec(action, { classUri : this.dataset.classuri , id : this.dataset.uri } || this._resourceContext);\n });\n }\n };\n\n return manageMediaController;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n//@see http://forge.taotesting.com/projects/tao/wiki/Front_js\ndefine('taoMediaManager/controller/routes',[],function(){\n 'use strict';\n\n return {\n 'MediaManager': {\n 'deps': 'controller/actions',\n 'actions': {\n 'editInstance' : 'controller/editInstance',\n 'authoring': 'controller/authoring'\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>\n */\ndefine('taoMediaManager/previewer/adapter/item/qtiSharedStimulusItem',['lodash', 'core/logger', 'taoMediaManager/previewer/component/qtiSharedStimulusItem', 'ui/feedback'], function (\n _,\n loggerFactory,\n qtiItemPreviewerFactory,\n feedback\n) {\n 'use strict';\n\n const logger = loggerFactory('taoMediaManager/previewer');\n\n /**\n * List of required plugins that should be loaded in order to make the previewer work properly\n * @type {Object[]}\n */\n const defaultPlugins = [\n {\n module: 'taoQtiTestPreviewer/previewer/plugins/controls/close',\n bundle: 'taoQtiTestPreviewer/loader/qtiPreviewer.min',\n category: 'controls'\n },\n {\n module: 'taoQtiTestPreviewer/previewer/plugins/tools/scale/scale',\n bundle: 'taoQtiTestPreviewer/loader/qtiPreviewer.min',\n category: 'tools'\n },\n {\n module: 'taoQtiTest/runner/plugins/tools/itemThemeSwitcher/itemThemeSwitcher',\n bundle: 'taoQtiTest/loader/testPlugins.min',\n category: 'tools'\n }\n ];\n\n /**\n * Wraps the legacy item previewer in order to be loaded by the taoItems previewer factory\n */\n return {\n name: 'qtiSharedStimulusItem',\n\n /**\n * Builds and shows the legacy item previewer\n *\n * @param {String} sharedStimulusId - The ID of the SharedStimulus to load\n * @param {Object} state - The state of the item\n * @param {Object} [config] - Some config entries\n * @param {Object[]} [config.plugins] - Additional plugins to load\n * @param {String} [config.fullPage] - Force the previewer to occupy the full window.\n * @param {String} [config.readOnly] - Do not allow to modify the previewed item.\n * @returns {Object}\n */\n init(sharedStimulusId, config = {}) {\n config.itemUri = sharedStimulusId;\n config.plugins = Array.isArray(config.plugins) ? [...defaultPlugins, ...config.plugins] : defaultPlugins;\n return qtiItemPreviewerFactory(window.document.body, config).on('error', function (err) {\n if (!_.isUndefined(err.message)) {\n feedback().error(err.message);\n }\n logger.error(err);\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * Test runner proxy for the QTI item previewer\n *\n * @author Hanna Dzmitryieva <hanna@taotesting.com>\n */\ndefine('taoMediaManager/previewer/proxy/qtiSharedStimulusItem',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'core/promiseQueue',\n 'core/dataProvider/request',\n 'util/url',\n 'taoMediaManager/qtiCreator/helper/createDummyItemData'\n], function ($, _, __, promiseQueue, request, urlUtil, creatorDummyItemData) {\n 'use strict';\n\n const serviceController = 'SharedStimulus';\n const serviceExtension = 'taoMediaManager';\n /**\n * QTI proxy definition\n * Related to remote services calls\n * @type {Object}\n */\n return {\n name: 'qtiSharedStimulusItemProxy',\n\n /**\n * Installs the proxy\n */\n install: function install() {\n /**\n * A promise queue to ensure requests run sequentially\n */\n this.queue = promiseQueue();\n },\n /**\n * Initializes the proxy\n * @returns {Promise} - Returns a promise. The proxy will be fully initialized on resolve.\n * Any error will be provided if rejected.\n */\n init: function init() {\n // the method must return a promise with Object\n return Promise.resolve({});\n },\n\n /**\n * Uninstalls the proxy\n * @returns {Promise} - Returns a promise. The proxy will be fully uninstalled on resolve.\n * Any error will be provided if rejected.\n */\n destroy: function destroy() {\n // no request, just a resources cleaning\n this.queue = null;\n\n // the method must return a promise\n return Promise.resolve();\n },\n\n /**\n * Gets an item definition by its identifier, also gets its current state\n * @param {String} identifier - The identifier of the sharedStimulus to get\n * @returns {Promise} - Returns a promise. The item data will be provided on resolve.\n * Any error will be provided if rejected.\n */\n getItem: function getItem(identifier) {\n return request(urlUtil.route('get', serviceController, serviceExtension), { id: identifier }, 'GET').then(\n function (data) {\n const itemData = creatorDummyItemData(data);\n data.baseUrl = urlUtil.route('getFile', 'MediaManager', 'taoMediaManager', { uri: '' });\n data.content = {\n type: 'qti',\n data: itemData\n };\n return data;\n }\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) 2015 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\ndefine('taoMediaManager/qtiCreator/widgets/helpers/content',[\n 'jquery',\n 'lodash',\n 'taoMediaManager/qtiCreator/helper/creatorRenderer',\n 'taoQtiItem/qtiCreator/model/helper/container',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content'\n], function($, _, creatorRenderer, containerHelper, gridContentHelper){\n 'use strict';\n // all files that use qtiCreator/helper/creatorRenderer should be copied from taoQtiItem\n // because they should use proper locations that are binded in Renderer\n // qtiCreator/helper/creatorRenderer use qtiCreator/renderers/Renderer\n // qtiCreator/renderers/Renderer return Renderer with binded locations from qtiCreator/renderers/config\n\n const contentHelper = {};\n\n /**\n * Create elements from a widget box having the 'data-new=true' attribute\n * - render the elements at their placeholder in $container\n * - apply callback on each widget\n * @param {DOMElement} container - element that will contain the new ones\n * @param {JQuery} $container - DOM container where the new elements are created\n * @param {String} data - corresponding HTML (?)\n * @param {function} callback - will be triggered for each new created element\n */\n contentHelper.createElements = function createElements(container, $container, data, callback) {\n\n const $dummy = $('<div>').html(data);\n\n containerHelper.createElements(container, gridContentHelper.getContent($dummy), function(newElts){\n\n creatorRenderer.get().load(function(){\n\n _.each(newElts, function(serial) {\n let $placeholder,\n $widget,\n widget;\n\n $placeholder = $container.find(`.widget-box[data-new][data-qti-class=${serial.qtiClass}]`);\n\n serial.setRenderer(this);\n serial.render($placeholder);\n\n //render widget\n serial.postRender();\n\n widget = serial.data('widget');\n $widget = widget.$original;\n\n //inform height modification\n $widget.trigger('contentChange.gridEdit');\n\n if(_.isFunction(callback)){\n callback(widget);\n }\n }.bind(this));\n\n }, this.getUsedClasses());\n });\n\n };\n\n contentHelper.changeInnerWidgetState = function _changeInnerWidgetState(outerWidget, state){\n\n const selector = [];\n _.forEach(['img', 'math', 'object', 'include'], function(qtiClass){\n selector.push(`[data-html-editable] .widget-${qtiClass}`);\n });\n\n outerWidget.$container.find(selector.join(',')).each(function(){\n const innerWidget = $(this).data('widget');\n if(innerWidget){\n innerWidget.changeState(state);\n }\n });\n };\n\n return contentHelper;\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 Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/states/Active',[\n 'jquery',\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/helpers/content'\n], function($, stateFactory, contentHelper){\n 'use strict';\n\n return stateFactory.create('active', function(){\n\n const _widget = this.widget,\n container = _widget.$container[0],\n item = _widget.element.getRootElement(),\n areaBroker = _widget.getAreaBroker(),\n $modalFeedbacksArea = $('#modalFeedbacks'),\n outerContainer = document.querySelector(\"#item-editor-scroll-outer\");\n\n function checkIfWidgetShouldSleep(e) {\n return container !== e.target\n && !$.contains(container, e.target)\n && $.contains(outerContainer, e.target) // in case click on scrollbar\n && (!areaBroker || !areaBroker.getEditorBarArea || !$.contains(areaBroker.getEditorBarArea().get(0), e.target))\n && (!$modalFeedbacksArea.length || !$.contains($modalFeedbacksArea[0], e.target)) //if click triggered inside the #modalFeedback then state must not be changed.\n && ($(e.target).data('role') !== 'restore')\n && !($(e.target).closest('.widget-popup').length);\n }\n\n //move to sleep state by clicking anywhere outside the interaction\n areaBroker.getContentCreatorPanelArea().on(`mousedown.active.${_widget.serial}`, function(e){\n if (checkIfWidgetShouldSleep(e)){\n _widget.changeState('sleep');\n }\n }).on('beforesave.qti-creator.active', function(){\n _widget.changeState('sleep');\n }).on('styleedit.active', function(){\n _widget.changeState('sleep');\n });\n\n $(document).on('open-preview.qti-item', function(){\n _widget.changeState('sleep');\n });\n\n if(item && item.data('widget')){\n //in item editing context:\n item.data('widget').$container.on('resizestart.gridEdit.active beforedragoverstart.gridEdit.active', function(){\n _widget.changeState('sleep');\n });\n }\n\n }, function(){\n const areaBroker = this.widget.getAreaBroker();\n\n contentHelper.changeInnerWidgetState(this.widget, 'sleep');\n\n this.widget.$container.off('.active');\n areaBroker.getContentCreatorPanelArea().off(`.active.${this.widget.serial}`);\n\n const item = this.widget.element.getRootElement();\n if(item && item.data('widget')){\n item.data('widget').$container.off('.active');\n }\n\n });\n});\n\n","define('taoMediaManager/qtiCreator/widgets/static/states/Active',[\n 'jquery',\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/states/Active'\n], function($, stateFactory, Active){\n 'use strict';\n\n return stateFactory.extend(Active, function(){\n\n var _widget = this.widget,\n $container = _widget.$container;\n\n _widget.beforeStateInit(function(e, element, state){\n var serial = element.getSerial(),\n composingElts;\n\n if((state.name === 'active' && serial !== _widget.serial) || state.name === 'choice'){\n\n if(_widget.element.qtiClass === 'rubricBlock'){\n //exclude\n composingElts = _widget.element.getComposingElements();\n if(!composingElts[element.serial]){\n _widget.changeState('sleep');\n }\n }else{\n //call sleep whenever other widget is active\n _widget.changeState('sleep');\n }\n\n }\n\n }, 'otherActive');\n\n $container.on('mouseenter.active', function(e){\n e.stopPropagation();\n $container.parent().trigger('mouseleave.sleep');\n }).on('mouseleave.active', function(e){\n e.stopPropagation();\n $container.parent().trigger('mouseenter.sleep');\n }).on('click.active', function(e){\n e.stopPropagation();\n });\n\n }, function(){\n const _widget = this.widget,\n areaBroker = _widget.getAreaBroker();\n\n _widget.$container.off('.active');\n areaBroker.getContentCreatorPanelArea().off(`.active.${_widget.serial}`);\n\n _widget.offEvents('otherActive');\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Hanna Dzmitryieva <hanna@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/helper/ckConfigurator',['lodash', 'ui/ckeditor/ckConfigurator', 'mathJax'], function(_, ckConfigurator, mathJax) {\n 'use strict';\n\n const _defaults = {\n qtiImage : true,\n qtiMedia : true,\n qtiInclude : false,\n underline : true,\n mathJax : !!mathJax,\n removePlugins: 'taoqtiinclude'\n };\n\n /**\n * Generate a configuration object for CKEDITOR\n *\n * @param {object} editor instance of ckeditor\n * @param {String} 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 {String} [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 * @returns {Function} - a function for get the config\n *\n * @see http://docs.ckeditor.com/#!/api/CKEDITOR.config\n */\n const getConfig = function(editor, toolbarType = 'qtiInline', options) {\n return ckConfigurator.getConfig(editor, toolbarType, _.defaults(options || {}, _defaults));\n };\n\n return {\n getConfig : getConfig\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 (under the project TAO-PRODUCT);\n */\ndefine('taoMediaManager/qtiCreator/editor/ckEditor/htmlEditor',[\n 'lodash',\n 'i18n',\n 'jquery',\n 'ckeditor',\n 'core/promise',\n 'taoMediaManager/qtiCreator/helper/ckConfigurator',\n 'taoQtiItem/qtiItem/core/Element',\n 'taoMediaManager/qtiCreator/widgets/helpers/content',\n 'taoQtiItem/qtiCreator/widgets/helpers/deletingState'\n], function(\n _,\n __,\n $,\n CKEditor,\n Promise,\n ckConfigurator,\n Element,\n contentHelper,\n deletingHelper\n){\n 'use strict';\n\n const _defaults = {\n placeholder : __('some text ...'),\n shieldInnerContent : true,\n passthroughInnerContent : false,\n autofocus : true\n };\n\n const placeholderClass = 'cke-placeholder';\n\n let editorFactory;\n\n //prevent auto inline editor creation:\n CKEditor.disableAutoInline = true;\n\n /**\n * @param {JQuery} $editable - the element to be transformed into an editor\n * @param {JQuery} $editableContainer - the container of the editor\n * @param {Object} [options]\n * @param {String} [options.placeholder] - the place holder text\n * @param {Boolean} [options.shieldInnerContent] - define if the inner widget content should be protected or not\n * @param {Boolean} [options.passthroughInnerContent] - define if the inner widget content should be accessible directly or not\n * @param {String} [options.removePlugins] - a coma-separated list of plugins that should not be loaded: 'plugin1,plugin2,plugin3'\n * @param {Boolean} [options.autofocus] - automatically focus\n * @returns {Object} CKEditor\n */\n function _buildEditor($editable, $editableContainer, options){\n\n let ckConfig;\n const widget = (options.data || {}).widget,\n areaBroker = widget && widget.getAreaBroker && widget.getAreaBroker(),\n $toolbarArea = areaBroker && areaBroker.getToolbarArea && areaBroker.getToolbarArea();\n\n options = _.defaults(options, _defaults);\n\n if( !($editable instanceof $) || !$editable.length){\n throw new Error('invalid jquery element for $editable');\n }\n if( !($editableContainer instanceof $) || !$editableContainer.length){\n throw new Error('invalid jquery element for $editableContainer');\n }\n\n if (options.placeholder && options.placeholder !== '') {\n if ($editable.is('input')) {\n $editable.attr('placeholder', options.placeholder);\n } else {\n $editable.attr('data-placeholder', options.placeholder);\n }\n }\n\n ckConfig = {\n dtdMode : 'qti',\n autoParagraph : false,\n removePlugins : options.removePlugins || '',\n enterMode : options.enterMode || CKEditor.ENTER_P,\n floatSpaceDockedOffsetY : 10,\n sharedSpaces : {\n top: ($toolbarArea && $toolbarArea.attr('id')) || 'toolbar-top'\n },\n taoQtiItem : {\n /**\n * @param {DOM} tempWidget - this contains the DOM nodes created by a ckEditor plugin,\n * wrapped in a temporary widget container (= a widget container with a [data-new=\"true\"] attribute)\n */\n insert : function(tempWidget){\n const $newContent = $(tempWidget).clone(); // we keep the original content for later use\n if(options.data && options.data.container && options.data.widget){\n contentHelper.createElements(options.data.container, $editable, _htmlEncode(this.getData()), function(createdWidget){\n const createdElement = createdWidget.element;\n\n if (_.isFunction(createdElement.initContainer)) {\n createdElement.body($newContent.html());\n createdWidget.rebuild();\n createdWidget = createdElement.data('widget');\n }\n _activateInnerWidget(options.data.widget, createdWidget);\n });\n }\n }\n },\n on : {\n instanceReady : function(e){\n let widgets = {};\n const editor = e.editor;\n\n //store it in editable elt data attr\n $editable.data('editor', editor);\n $editable.data('editor-options', options);\n\n //need to debounce the callback to prevent the changes made by undo to trigger the event change twice\n editor.on('change', _.debounce(function markupChanged(){\n _detectWidgetDeletion($editable, widgets, editor);\n if(_.isFunction(options.change)){\n options.change.call(editor, _htmlEncode(editor.getData()));\n }\n }, 100, {\n leading: true\n }));\n\n managePlaceholder($editable, editor);\n\n if(options.data && options.data.container){\n\n //store in data-qti-container attribute the editor instance as soon as it is ready\n $editable.data('qti-container', options.data.container);\n\n //init editable\n widgets = _rebuildWidgets(options.data.container, $editable, {\n restoreState : true\n });\n if(options.shieldInnerContent){\n _shieldInnerContent($editable, options.data.widget);\n }\n }\n\n if (options.autofocus) {\n _focus(editor);\n }\n\n $editable.trigger('editorready', [editor]);\n\n $('.qti-item').trigger('toolbarchange');\n },\n blur : function() {\n if ($toolbarArea) {\n $toolbarArea.hide();\n }\n },\n focus : function(){\n if ($toolbarArea) {\n $toolbarArea.show();\n }\n\n //callback:\n if(_.isFunction(options.focus)){\n options.focus.call(this, _htmlEncode(this.getData()));\n }\n\n $editable.trigger('editorfocus');\n\n $('.qti-item').trigger('toolbarchange');\n },\n configLoaded : function(e){\n //@todo : do we really have to wait here to initialize the config?\n let toolbarType = '';\n if(options.toolbar && _.isArray(options.toolbar)){\n ckConfig.toolbar = options.toolbar;\n }else{\n toolbarType = getTooltypeFromContainer($editableContainer);\n }\n\n if(typeof options.qtiMedia !== 'undefined'){\n ckConfig.qtiMedia = options.qtiMedia;\n }\n if(typeof options.qtiImage !== 'undefined'){\n ckConfig.qtiImage = options.qtiImage;\n }\n if(typeof options.qtiInclude !== 'undefined'){\n ckConfig.qtiInclude = options.qtiInclude;\n }\n if(typeof options.highlight !== 'undefined'){\n ckConfig.highlight = options.highlight;\n }\n\n e.editor.config = ckConfigurator.getConfig(e.editor, toolbarType, ckConfig);\n },\n afterPaste : function(){\n //@todo : we may add some processing on the editor after paste\n }\n }\n };\n\n return CKEditor.inline($editable[0], ckConfig);\n }\n\n /**\n * Handle the placeholder for non-input elements.\n * To avoid CK nasty side-effects of using the placeholder attribute on non-input elements,\n * we handle the placeholder with css.\n * @param {JQuery} $editable\n * @param {Object} editor\n */\n function managePlaceholder($editable, editor) {\n if (!$editable.is('input')) {\n togglePlaceholder($editable);\n\n editor.on('change', function() {\n togglePlaceholder($editable);\n });\n }\n }\n\n /**\n * Toggle the placeholder class on the editable depending on its content\n * @param {JQuery} $editable\n */\n function togglePlaceholder($editable) {\n const nonEmptyContent = ['img', 'table', 'math', 'object', 'printedVariable', '.tooltip-target'];\n\n if ($editable.text().trim() === ''\n && ! $editable.find(nonEmptyContent.join(',')).length\n ) {\n $editable.addClass(placeholderClass);\n } else {\n removePlaceholder($editable);\n }\n }\n\n function removePlaceholder($editable) {\n $editable.removeClass(placeholderClass);\n }\n\n /**\n * Assess\n * @param {type} $editableContainer\n * @returns {String}\n */\n function getTooltypeFromContainer($editableContainer){\n\n let toolbarType = 'qtiFlow';\n // build parameter for toolbar\n if($editableContainer.hasClass('widget-blockInteraction') || $editableContainer.hasClass('widget-textBlock') || $editableContainer.hasClass('widget-rubricBlock')){\n toolbarType = 'qtiBlock';\n }else if($editableContainer.hasClass('qti-prompt-container') || $editableContainer.hasClass('widget-hottext')){\n toolbarType = 'qtiInline';\n }\n return toolbarType;\n }\n\n /**\n * Find an inner element by its data attribute name\n * @param {JQuery} $container\n * @param {String} dataAttribute\n * @returns {JQuery} collection\n */\n function _find($container, dataAttribute){\n let $collection;\n\n if($container.data(dataAttribute)){\n $collection = $container;\n }else{\n $collection = $container.find(`[data-${dataAttribute}=true]`);\n }\n return $collection;\n }\n\n /**\n * Rebuild all innerwidgets located inside a container\n *\n * @param {Object} container\n * @param {JQuery} $container\n * @param {Object} options\n * @returns {Object} widgets\n */\n function _rebuildWidgets(container, $container, options){\n const widgets = {};\n options = options || {};\n\n //re-init all widgets:\n _.each(_.values(container.elements), function(elt){\n\n const widget = elt.data('widget'),\n currentState = widget.getCurrentState().name;\n\n widgets[elt.serial] = widget.rebuild({\n context : $container,\n ready : function(elWidget){\n if(options.restoreState){\n //restore current state\n elWidget.changeState(currentState);\n }\n }\n });\n });\n\n $container.trigger('widgetCreated', [widgets, container]);\n\n return widgets;\n }\n\n /**\n * Find the widget container by its serial\n *\n * @param {JQuery} $container\n * @param {String} serial\n * @returns {JQuery} $widget\n */\n function _findWidgetContainer($container, serial){\n return $container.find(`.widget-box[data-serial='${serial}']`);\n }\n\n /**\n * Detect if an inner widget has been removed\n *\n * @param {JQuery} $container\n * @param {Array} widgets\n * @param {Object} editor\n * @returns {undefined}\n */\n function _detectWidgetDeletion($container, widgets, editor){\n\n const deleted = [];\n const container = $container.data('qti-container');\n let $widget;\n\n _.each(widgets, function(w){\n\n if(!w.element.data('removed')){\n $widget = _findWidgetContainer($container, w.serial);\n if(!$widget.length){\n deleted.push(w);\n }\n }\n\n });\n\n if(deleted.length){\n const undoCmd = editor.getCommand( 'undo');\n const $messageBox = deletingHelper.createInfoBox(deleted);\n\n $messageBox.on('confirm.deleting', function(){\n\n _.each(deleted, function(w){\n w.element.remove();\n w.destroy();\n });\n\n editor.resetUndo();\n\n }).on('undo.deleting', function(){\n\n editor.undoManager.undo();\n\n //need to rebuild the inner widgets in case the undo restored some qti elements\n _rebuildWidgets(container, $container, {\n restoreState : true\n });\n\n _shieldInnerContent($container, container.data('widget'));\n });\n\n if (undoCmd){\n //catch ckeditor's undo event to trigger the same behaviour as the undo action dialog\n undoCmd.on('afterUndo', function(){\n $messageBox.find('a.undo').click();\n });\n }\n\n }\n }\n\n /**\n * @param {JQuery} $widget - the widget to be protected\n * @returns {JQuery} The added layer (shield)\n */\n function addShield($widget){\n const $shield = $('<button>', {\n 'class' : 'html-editable-shield'\n });\n\n $widget.attr('contenteditable', false);\n $widget.append($shield);\n return $shield;\n }\n\n /**\n * Protect the inner widgets of a container\n *\n * @param {JQuery} $container\n * @param {Object} containerWidget\n * @returns {undefined}\n */\n function _shieldInnerContent($container, containerWidget){\n\n $container.find('.widget-box').each(function(){\n const $widget = $(this);\n\n addShield($widget).on('click', function(e){\n let innerWidget;\n\n //click on shield:\n //1. this.widget.changeState('sleep');\n //2. clicked widget.changeState('active');\n\n e.stopPropagation();\n\n innerWidget = $widget.data('widget');\n _activateInnerWidget(containerWidget, innerWidget);\n });\n });\n\n }\n\n /**\n * Activate the inner widget\n *\n * @param {Object} containerWidget\n * @param {Object} innerWidget\n * @returns {undefined}\n */\n function _activateInnerWidget(containerWidget, innerWidget){\n let listenToWidgetCreation;\n const event = `widgetCreated.${innerWidget.serial}`;\n\n if(containerWidget && containerWidget.element && containerWidget.element.qtiClass){\n\n listenToWidgetCreation = function(){\n containerWidget.$container\n .on(event, function(e, widgets){\n const targetWidget = widgets[innerWidget.serial];\n if(targetWidget){\n containerWidget.$container.off(event);\n //FIXME potential race condition ? (debounce the enclosing event handler ?)\n _.delay(function(){\n if(Element.isA(targetWidget.element, 'interaction')){\n targetWidget.changeState('question');\n } else{\n targetWidget.changeState('active');\n }\n }, 100);\n }\n });\n\n };\n\n if(Element.isA(containerWidget.element, '_container') && !containerWidget.element.data('stateless')){\n\n //only _container that are NOT stateless need to change its state to sleep before activating the new one.\n listenToWidgetCreation();\n containerWidget.changeState('sleep');\n\n }else if(Element.isA(containerWidget.element, 'interaction')){\n\n listenToWidgetCreation();\n containerWidget.changeState('sleep');\n\n }else if(Element.isA(containerWidget.element, 'choice')){\n\n listenToWidgetCreation();\n containerWidget.changeState('question');\n\n }else if(Element.isA(containerWidget.element, 'table')){\n\n listenToWidgetCreation();\n containerWidget.changeState('sleep');\n\n }else if(Element.isA(innerWidget.element, 'choice')){\n\n innerWidget.changeState('choice');\n\n }else{\n\n innerWidget.changeState('active');\n }\n\n }else{\n\n innerWidget.changeState('active');\n }\n }\n\n /**\n * Special encoding of ouput html generated from ie8 : moved to xmlRenderer\n * @param {String} encodedStr\n * @returns {String} encodedStr\n */\n function _htmlEncode(encodedStr){\n return encodedStr;\n }\n\n /**\n * Focus the editor and set the cursor to the end\n *\n * @param {Object} editor - the ckeditor instance\n * @returns {undefined}\n */\n function _focus(editor){\n if (editor.editable() && editor.editable().$.parentNode){\n editor.focus();\n const range = editor.createRange();\n range.moveToElementEditablePosition(editor.editable(), true);\n editor.getSelection().selectRanges([range]);\n }\n }\n\n editorFactory = {\n /**\n * Check if all data-html-editable has an editor\n *\n * @param {type} $container\n * @returns {undefined}\n */\n hasEditor : function($container){\n\n let hasEditor = false;\n\n _find($container, 'html-editable').each(function(){\n hasEditor = !!$(this).data('editor');\n return hasEditor; //continue if true, break if false\n });\n\n return hasEditor;\n },\n /**\n * Instanciate the editor\n *\n * @param {JQuery} $container\n * @param {Object} [editorOptions]\n * @param {String} [editorOptions.placeholder] - the place holder text\n * @param {Boolean} [editorOptions.shieldInnerContent] - define if the inner widget content should be protected or not\n * @param {Boolean} [editorOptions.passthroughInnerContent] - define if the inner widget content should be accessible directly or not\n * @param {Boolean} [editorOptions.enterMode] - what is the behavior of the \"Enter\" key (see ENTER_MODE_xxx in ckEditor configuration)\n * @returns {undefined}\n */\n buildEditor : function($container, editorOptions){\n const buildTasks = [];\n _find($container, 'html-editable-container').each(function(){\n\n const $editableContainer = $(this),\n $editable = $editableContainer.find('[data-html-editable]');\n\n buildTasks.push(new Promise(function (resolve) {\n //need to make the element html editable to enable ck inline editing:\n $editable.attr('contenteditable', true);\n\n //build it\n _buildEditor($editable, $editableContainer, editorOptions);\n\n $editable.on('editorready', resolve);\n }));\n });\n return Promise.all(buildTasks);\n },\n /**\n * Destroy the editor\n *\n * @param {JQuery} $container\n * @returns {undefined}\n */\n destroyEditor : function($container){\n const destructTasks = [];\n _find($container, 'html-editable-container').each(function(){\n\n let editor,\n options;\n const $editableContainer = $(this),\n $editable = $editableContainer.find('[data-html-editable]');\n\n $editable.removeAttr('contenteditable');\n if($editable.data('editor')){\n\n destructTasks.push(new Promise(function (resolve) {\n editor = $editable.data('editor');\n options = $editable.data('editor-options');\n\n //before destroying, ensure that data is stored\n if(_.isFunction(options.change)){\n options.change.call(editor, _htmlEncode(editor.getData()));\n }\n\n removePlaceholder($editable);\n\n editor.on('destroy', function () {\n $editable.removeData('editor').removeData('editor-options');\n if($editable.data('qti-container')){\n _rebuildWidgets($editable.data('qti-container'), $editable);\n }\n\n $editable.trigger('editordestroyed');\n resolve();\n });\n\n editor.focusManager.blur(true);\n editor.destroy();\n }));\n }\n });\n return Promise.all(destructTasks);\n },\n /**\n * Get the editor content\n *\n * @param {JQuery} $editable\n * @returns {String}\n */\n getData : function($editable){\n const editor = $editable.data('editor');\n if(editor){\n return _htmlEncode(editor.getData());\n }else{\n throw new Error('no editor attached to the DOM element');\n }\n },\n /**\n * Allow to set the editor content. Works only with plain text for now.\n *\n * @param {JQuery} $editable\n * @param {String} data\n */\n setData : function($editable, data) {\n const editor = $editable.data('editor');\n if(editor){\n if (_.isString(data)) {\n editor.setData(_.escape(data));\n }\n }else{\n throw new Error('no editor attached to the DOM element');\n }\n },\n /**\n * Focus all the editors found in the given container\n *\n * @param {JQuery} $editable\n * @returns {undefined}\n */\n focus : function($editable){\n _find($editable, 'html-editable').each(function(){\n const editor = $(this).data('editor');\n if(editor){\n _focus(editor);\n }\n });\n }\n };\n\n return editorFactory;\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/tpl/forms/static/text', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\";\n\n\n buffer += \"<div class=\\\"panel\\\">\\n <label for=\\\"textBlockCssClass\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Text Block CSS Class\", options) : helperMissing.call(depth0, \"__\", \"Text Block CSS Class\", options)))\n + \"</label>\\n <span class=\\\"icon-help tooltipstered\\\" data-tooltip=\\\"~ .tooltip-content:first\\\" data-tooltip-theme=\\\"info\\\"></span>\\n <div class=\\\"tooltip-content\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Set a CSS class name in order to customize the display style.\", options) : helperMissing.call(depth0, \"__\", \"Set a CSS class name in order to customize the display style.\", options)))\n + \"</div>\\n <input type=\\\"text\\\" name=\\\"textBlockCssClass\\\" value=\\\"\";\n if (helper = helpers.textBlockCssClass) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.textBlockCssClass); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" />\\n</div>\";\n return buffer;\n });\n});\n\n","define('taoMediaManager/qtiCreator/widgets/static/text/states/Active',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/static/states/Active',\n 'taoMediaManager/qtiCreator/editor/ckEditor/htmlEditor',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content',\n 'taoQtiItem/qtiCreator/widgets/helpers/formElement',\n 'tpl!taoMediaManager/qtiCreator/tpl/forms/static/text'\n], function(stateFactory, Active, htmlEditor, content, formElement, formTpl){\n 'use strict';\n\n var wrapperCls = 'custom-text-box';\n\n var TextActive = stateFactory.extend(Active, function(){\n\n this.buildEditor();\n this.initForm();\n\n }, function(){\n\n this.destroyEditor();\n this.widget.$form.empty();\n });\n\n TextActive.prototype.buildEditor = function(){\n\n var widget = this.widget;\n var $editableContainer = widget.$container;\n var container = widget.element;\n var changeCallback = content.getChangeCallback(container);\n\n $editableContainer.attr('data-html-editable-container', true);\n\n if(!htmlEditor.hasEditor($editableContainer)){\n\n htmlEditor.buildEditor($editableContainer, {\n change : function(data) {\n changeCallback.call(this, data);\n\n // remove the form value if there is no content to apply on\n if (!data) {\n widget.$form.find('[name=\"textBlockCssClass\"]').val('');\n }\n },\n blur : function(){\n widget.changeState('sleep');\n },\n data : {\n widget : widget,\n container : container\n }\n });\n }\n };\n\n TextActive.prototype.destroyEditor = function(){\n //search and destroy the editor\n htmlEditor.destroyEditor(this.widget.$container);\n };\n\n TextActive.prototype.initForm = function(){\n var widget = this.widget;\n var $form = widget.$form;\n var blockCls = widget.$container.find(`.${wrapperCls}`).attr('class');\n\n $form.html(formTpl({\n textBlockCssClass: (blockCls || '').replace(wrapperCls, '').trim()\n }));\n\n formElement.initWidget($form);\n\n formElement.setChangeCallbacks($form, widget.element, {\n textBlockCssClass: function(element, value) {\n var $block = widget.$container.find(`.${wrapperCls}`);\n\n // prevent to have the wrapper class twice\n value = value.trim();\n if (value === wrapperCls) {\n value = '';\n }\n\n if (!value) {\n // no need to have a wrapper if no block class is set\n $block.children().unwrap();\n } else {\n if (!$block.length) {\n // no wrapper found, insert one\n $block = widget.$container\n .find('[data-html-editable=\"true\"]')\n .wrapInner('<div />')\n .children();\n }\n\n // replace the block class\n $block.attr('class', `${wrapperCls} ${value}`);\n }\n }\n });\n };\n\n return TextActive;\n});\n\n","define('taoMediaManager/qtiCreator/widgets/static/text/states/states',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/text/states/Sleep',\n 'taoMediaManager/qtiCreator/widgets/static/text/states/Active'\n], function(factory, states){\n 'use strict';\n\n return factory.createBundle(states, arguments);\n});\n","define('taoMediaManager/qtiCreator/widgets/static/text/Widget',[\n 'jquery',\n 'taoQtiItem/qtiCreator/widgets/static/Widget',\n 'taoMediaManager/qtiCreator/widgets/static/text/states/states',\n 'tpl!taoQtiItem/qtiCreator/tpl/toolbars/textBlock'\n], function($, Widget, states, toolbarTpl){\n 'use strict';\n\n const TextWidget = Widget.clone();\n\n TextWidget.initCreator = function(){\n\n Widget.initCreator.call(this);\n\n this.registerStates(states);\n\n };\n\n TextWidget.buildContainer = function(){\n\n const $wrap = $('<div>', {'data-serial' : this.element.serial, 'data-qti-class' : '_container', 'class' : 'widget-box widget-block widget-textBlock'})\n .append($('<div>', {'data-html-editable' : true}));\n\n this.$original.wrapInner($wrap);\n\n this.$container = this.$original.children('.widget-box');\n };\n\n TextWidget.createToolbar = function(){\n\n const $tlb = $(toolbarTpl({\n serial : this.serial,\n state : 'active'\n }));\n\n this.$container.append($tlb);\n\n $tlb.find('[data-role=\"delete\"]').on('click.widget-box', e => {\n e.stopPropagation();//to prevent direct deleting;\n this.changeState('deleting');\n });\n\n return this;\n };\n\n return TextWidget;\n});\n","define('taoMediaManager/qtiCreator/editor/blockAdder/blockAdder',[\n 'jquery',\n 'lodash',\n 'tpl!taoQtiItem/qtiCreator/editor/blockAdder/tpl/addColumnRow',\n 'taoQtiItem/qtiItem/core/Element',\n 'taoMediaManager/qtiCreator/helper/creatorRenderer',\n 'taoQtiItem/qtiCreator/model/helper/container',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content',\n 'taoMediaManager/qtiCreator/widgets/static/text/Widget'\n], function ($, _, adderTpl, Element, creatorRenderer, containerHelper, contentHelper, TextWidget) {\n 'use strict';\n\n const _wrap = '<div class=\"colrow\"></div>';\n const _placeholder = '<div class=\"placeholder\">';\n\n /**\n * Init the block adder on the item editor panel\n *\n * @param {Object} item - standard qti js object\n * @param {JQuery} $editorPanel - the container the selector popup will be located in\n */\n function create(item, $editorPanel) {\n /**\n * Get the qti item body dom\n *\n * @returns {JQuery}\n */\n function _getItemBody() {\n return $editorPanel.find('.qti-itemBody');\n }\n\n /**\n * Init insertion relative to a widget container\n *\n * @param {JQuery} $widget\n */\n function _initInsertion($widget) {\n const $wrap = $(_wrap);\n let $colRow = $widget.parent('.colrow');\n\n //trigger event to restore all currently active widget back to sleep state\n $editorPanel.trigger('beforesave.qti-creator.active');\n\n if (!$colRow.length) {\n $widget.wrap(_wrap);\n $colRow = $widget.parent('.colrow');\n }\n $colRow.after($wrap);\n\n const $placeholder = $(_placeholder);\n $wrap.addClass('tmp').prepend($placeholder);\n _insertElement('_container', $placeholder);\n }\n\n /**\n * End the current insertion state\n *\n * @returns {undefined}\n */\n function _endInsertion() {\n //need to update item body\n item.body(contentHelper.getContent(_getItemBody()));\n }\n\n /**\n * Function to define behaviour when the insertion is completed\n *\n * @param {JQuery} $wrap\n */\n function _done($wrap) {\n //remove tmp class\n $wrap.removeClass('tmp');\n _endInsertion();\n }\n\n /**\n * Append the \"plus\" button into a widget\n *\n * @param {JQuery} $widget\n * @returns {undefined}\n */\n function _appendButton($widget) {\n //only append button to no-tmp widget and only add it once:\n if (!$widget.children('.add-block-element').length && !$widget.parent('.colrow.tmp').length) {\n const $adder = $(adderTpl());\n $widget.append($adder);\n $adder.on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n const $widgetParent = $(this).parents('.widget-box');\n _initInsertion($widgetParent);\n });\n }\n }\n\n $editorPanel.find('.widget-textBlock').each(function () {\n _appendButton($(this));\n });\n\n //bind add event\n $editorPanel.on('ready.qti-widget', function (e, _widget) {\n const qtiElement = _widget.element;\n\n if (\n qtiElement.is('_container')\n ) {\n let $colRow = _widget.$container.parent('.colrow');\n if ($colRow.hasClass('tmp')) {\n _done($colRow);\n }\n if (!$colRow.length) {\n _widget.$container.wrap(_wrap);\n }\n _appendButton(_widget.$container);\n }\n });\n }\n\n /**\n * Create a new qti element in place of the give $placehoder\n *\n * @param {String} qtiClass\n * @param {JQuery} $placeholder\n */\n function _insertElement(qtiClass, $placeholder) {\n //a new qti element has been added: update the model + render\n $placeholder.removeAttr('id'); //prevent it from being deleted\n\n $placeholder.addClass('widget-box'); //required for it to be considered as a widget during container serialization\n $placeholder.attr({\n 'data-new': true,\n 'data-qti-class': qtiClass\n }); //add data attribute to get the dom ready to be replaced by rendering\n\n const $widget = $placeholder.parent().closest('.widget-box, .qti-item');\n const $editable = $placeholder.closest('[data-html-editable], .qti-itemBody');\n const widget = $widget.data('widget');\n const element = widget.element;\n const container = Element.isA(element, '_container') ? element : element.getBody();\n\n if (!element || !$editable.length) {\n throw new Error('cannot create new element');\n }\n\n containerHelper.createElements(container, contentHelper.getContent($editable), function (newElts) {\n const creator = creatorRenderer.get();\n creator.load(function () {\n for (const serial in newElts) {\n const elt = newElts[serial];\n let $widgetElem;\n let widgetElem;\n let $colParent = $placeholder.parent();\n\n elt.setRenderer(this);\n\n //the text widget is \"inner-wrapped\" so need to build a temporary container:\n $placeholder.replaceWith('<div class=\"text-block\"></div>');\n const $textBlock = $colParent.find('.text-block');\n $textBlock.html(elt.render());\n\n //build the widget\n widgetElem = TextWidget.build(elt, $textBlock, creator.getOption('textOptionForm'), {\n ready: function () {\n //remove the temorary container\n if (this.$container.parent('.text-block').length) {\n this.$container.unwrap();\n }\n this.changeState('active');\n }\n });\n $widgetElem = widgetElem.$container;\n\n //inform height modification\n $widgetElem.trigger('contentChange.gridEdit');\n $widgetElem.trigger('resize.gridEdit');\n }\n }, this.getUsedClasses());\n });\n }\n\n return {\n create: create\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 Technologies SA;\n *\n */\ndefine('taoMediaManager/qtiCreator/editor/containerEditor',[\n 'lodash',\n 'jquery',\n 'core/promise',\n 'taoQtiItem/qtiItem/core/Loader',\n 'taoQtiItem/qtiCreator/model/Container',\n 'taoQtiItem/qtiCreator/model/Item',\n 'taoQtiItem/qtiCreator/model/helper/event',\n 'taoQtiItem/qtiCreator/model/qtiClasses',\n 'taoQtiItem/qtiCreator/helper/commonRenderer',\n 'taoQtiItem/qtiCreator/helper/xmlRenderer',\n 'taoQtiItem/qtiItem/helper/simpleParser',\n 'taoMediaManager/qtiCreator/helper/creatorRenderer',\n 'taoQtiItem/qtiCreator/helper/xincludeRenderer',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content',\n 'taoQtiItem/qtiCreator/editor/ckEditor/htmlEditor'\n], function(_, $, Promise, Loader, Container, Item, event, allQtiClasses, commonRenderer, xmlRenderer, simpleParser, creatorRenderer, xincludeRenderer, content, htmlEditor) {\n 'use strict';\n // all files that use qtiCreator/helper/creatorRenderer should be copied from taoQtiItem\n // because they should use proper locations that are binded in Renderer\n // qtiCreator/helper/creatorRenderer use qtiCreator/renderers/Renderer\n // qtiCreator/renderers/Renderer return Renderer with binded locations from qtiCreator/renderers/config\n\n const _ns = 'containereditor';\n\n const _defaults = {\n change : _.noop,\n markup : '',\n markupSelector : '',\n qtiMedia : false\n };\n\n event.initElementToWidgetListeners();\n\n function parser($container){\n\n //detect math ns :\n const mathNs = 'm';//for 'http://www.w3.org/1998/Math/MathML'\n\n //parse qti xml content to build a data object\n const data = simpleParser.parse($container.clone(), {\n ns : {\n math : mathNs\n }\n });\n\n if (data.body) {\n return data.body;\n } else {\n throw new Error('invalid content for qti container');\n }\n }\n\n /**\n * Transform the given dom element into a rich-text editor\n *\n * @param {JQuery} $container - the container of the DOM element that is going to editable\n * @param {Object} [options]\n * @param {String} [options.markup] - the markup to be use as the initial editor content\n * @param {String} [options.markupSelector] - the element in $xontainer that holds the html to be used as the initial editor content\n * @param {Object} [options.related] - define the qti element object this editor is attached too. Very important to edit a picture or math element inside it because prevents leaving the editing state of the related element.\n * @param {Function} [options.change] - the callback called when the editor content has been modified\n * @param {String} [options.placeholder] - the placeholder text of the container editor when\n * @param {Array} [options.toolbar] - the ck toolbar\n * @param {Boolean} [options.qtiMedia=false] - allow insert media object\n * @param {Object} [options.areaBroker] - allow to set a custom areaBroker on the renderer\n * @param {String} [options.removePlugins] - a coma-separated plugin list that should not be loaded\n * @param {Object} [options.metadata] - some metadata to attach to the root element (ex: { myDataName: 'myDataValue' })\n * @param {Boolean} [options.resetRenderer] - force resetting the renderer\n * @param {Boolean} [options.autofocus] - automatically focus the editor\n * @returns {undefined}\n */\n function create($container, options){\n\n let html, htmls, data, loader;\n\n options = _.defaults(options || {}, _defaults);\n\n //assign proper markup\n if (options.markup) {\n html = options.markup;\n if (options.markupSelector) {\n htmls = extractHtmlFromMarkup(html, options.markupSelector);\n html = htmls[0] || '';\n }\n $container.html(html);\n }\n\n data = parser($container);\n loader = new Loader().setClassesLocation(allQtiClasses);\n loader.loadRequiredClasses(data, function() {\n\n let item,\n containerEditors,\n renderer,\n qtiClasses = ['img', 'object', 'math', 'include', 'printedVariable', '_container', '_tooltip'];\n\n //create a new container object\n const container = new Container();\n\n //tag the new container as statelss, which means that its state is not supposed to change\n container.data('stateless', true);\n\n $container.data('container', container);\n\n //need to attach a container to the item to enable innserElement.remove()\n //@todo fix this\n item = new Item().setElement(container);\n container.setRootElement(item);\n\n if (options.metadata) {\n _.each(options.metadata, function (value, name) {\n item.data(name, value);\n });\n }\n\n //associate it to the interaction?\n if (options.related) {\n containerEditors = options.related.data('container-editors') || [];\n containerEditors.push(container);\n options.related.data('container-editors', containerEditors);\n }\n\n this.loadContainer(container, data);\n\n //apply common renderer :\n renderer = creatorRenderer.get(options.resetRenderer, {}, options.areaBroker);\n renderer.load(function() {\n\n const baseUrl = this.getOption('baseUrl');\n container.setRenderer(this);\n $container.html(container.render());\n container.postRender();\n\n //resolve xinclude\n _.each(container.getComposingElements(), function(element){\n if(element.qtiClass === 'include'){\n xincludeRenderer.render(element.data('widget'), baseUrl);\n }\n });\n\n buildContainer($container);\n buildEditor($container, container, {\n placeholder : options.placeholder || '',\n toolbar : options.toolbar || '',\n qtiMedia : options.qtiMedia,\n highlight : options.highlight,\n removePlugins : options.removePlugins || '',\n areaBroker : options.areaBroker,\n autofocus : options.autofocus || false\n });\n\n $container\n .off(`.${ _ns}`)\n .on(event.getList(_ns + event.getNs() + event.getNsModel()).join(' '), _.throttle(function(){\n var editorContent = container.render(xmlRenderer.get());\n $container.trigger(`containerchange.${ _ns}`, [editorContent]);\n\n if(_.isFunction(options.change)){\n options.change(editorContent);\n }\n }, 600));\n\n $container.trigger('editorready.containereditor');\n\n }, qtiClasses);\n\n });\n\n }\n\n function buildContainer($container) {\n $container.wrapInner($('<div>', {'class' : 'container-editor', 'data-html-editable' : true}));\n }\n\n function cleanup($container) {\n const container = $container.data('container');\n return new Promise(function (resolve) {\n if(container) {\n $(document).off(`.${ container.serial}`);\n commonRenderer.load(['img', 'object', 'math', 'include', '_container', 'printedVariable', '_tooltip'], function(){\n $container.html(container.render(this));\n resolve();\n });\n\n $container.removeData('container');\n } else {\n resolve();\n }\n });\n }\n\n /**\n * create a false widget that is required in html editor\n *\n * @param {JQuery} $editableContainer\n * @param {Object} container\n * @param {Object} options\n * @param {Object} options.areaBroker\n * @returns {Object} The fake widget object\n */\n function createFakeWidget($editableContainer, container, options) {\n\n var widget = {\n $container : $editableContainer,\n element : container,\n changeState : _.noop,\n getAreaBroker : function getAreaBroker() {\n return options.areaBroker;\n }\n };\n //associate the widget to the container\n container.data('widget', widget);\n\n return widget;\n }\n\n function buildEditor($editableContainer, container, options) {\n\n $editableContainer.attr('data-html-editable-container', true);\n\n if (!htmlEditor.hasEditor($editableContainer)) {\n\n htmlEditor.buildEditor($editableContainer, _.defaults(options || {}, {\n shieldInnerContent : false,\n passthroughInnerContent : false,\n change : content.getChangeCallback(container),\n data : {\n widget : createFakeWidget($editableContainer, container, options),\n container : container\n }\n }));\n }\n }\n\n function destroy($editableContainer) {\n return htmlEditor.destroyEditor($editableContainer)\n .then(function() {\n $editableContainer.removeAttr('data-html-editable-container');\n return cleanup($editableContainer);\n });\n }\n\n function extractHtmlFromMarkup(markupStr, selector) {\n const $found = $('<div>').html(markupStr).find(selector);\n let ret = [];\n $found.each(function(){\n ret.push($(this).html());\n });\n return ret;\n }\n\n return {\n create : create,\n destroy : destroy\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\n/**\n * This plugin add a \"plus\" button below each content block to add content more easily.\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/plugins/content/blockAdder',[\n 'i18n',\n 'core/plugin',\n 'taoMediaManager/qtiCreator/editor/blockAdder/blockAdder'\n], function(__, pluginFactory, blockAdder){\n 'use strict';\n\n /**\n * Returns the configured plugin\n * @returns {Function} the plugin\n */\n return pluginFactory({\n\n name : 'blockAdder',\n\n /**\n * Hook to the host's init\n */\n init : function init(){},\n\n /**\n * Hook to the host's render\n */\n render : function render(){\n\n //set up the block adder\n blockAdder.create(\n this.getHost().getItem(),\n this.getAreaBroker().getItemPanelArea()\n );\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * This plugin displays add the preview button and launch it.\n * It also provides a mechanism that ask to save\n * the item before the preview (if the item has changed - should).\n *\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\n\ndefine('taoMediaManager/qtiCreator/plugins/menu/preview',[\n 'jquery',\n 'i18n',\n 'core/plugin',\n 'ui/hider',\n 'taoMediaManager/previewer/adapter/item/qtiSharedStimulusItem',\n 'tpl!taoQtiItem/qtiCreator/plugins/button',\n], function($, __, pluginFactory, hider, previewerFactory, buttonTpl) {\n 'use strict';\n\n /**\n * Returns the configured plugin\n * @returns {Function} the plugin\n */\n return pluginFactory({\n name : 'preview',\n\n /**\n * Initialize the plugin (called during itemCreator's init)\n * @fires {itemCreator#preview}\n */\n init() {\n const SharedStimulusCreator = this.getHost();\n\n /**\n * Preview an item\n * @event SharedStimulusCreator#preview\n * @param {String} uri - the uri of this item to preview\n */\n SharedStimulusCreator.on('preview', (id) => {\n\n // TO DO should be created empty item with shared stimulus inside\n previewerFactory.init(id, {\n readOnly: false,\n fullPage: true\n });\n });\n\n const sharedStimulusConfig = SharedStimulusCreator.getConfig();\n if (sharedStimulusConfig.properties.previewEnabled) {\n //creates the preview button\n this.$element = $(buttonTpl({\n icon: 'preview',\n title: __('Preview the item'),\n text: __('Preview'),\n cssClass: 'preview-trigger',\n testId: 'preview-the-asset'\n })).on('click', e => {\n $(document).trigger('open-preview.qti-item');\n e.preventDefault();\n this.disable();\n SharedStimulusCreator.trigger('preview', SharedStimulusCreator.getSharedStimulusId());\n this.enable();\n });\n }\n },\n\n /**\n * Initialize the plugin (called during SharedStimulusCreator's render)\n */\n render() {\n //attach the element to the menu area\n const $container = this.getAreaBroker().getMenuArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the SharedStimulusCreator's destroy phase\n */\n destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable() {\n this.$element\n .removeProp('disabled')\n .removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable() {\n this.$element\n .prop('disabled', true)\n .addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide() {\n hider.hide(this.$element);\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) 2020 (original work) Open Assessment Technologies SA ;\n */\n\n/**\n * This plugin adds a save button to the menu.\n * Could be useful, or not (Save is so 90's, we want auto-saving with undo/redo capabilities)\n *\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\n\ndefine('taoMediaManager/qtiCreator/plugins/menu/save',[\n 'jquery',\n 'i18n',\n 'core/plugin',\n 'ui/hider',\n 'tpl!taoQtiItem/qtiCreator/plugins/button'\n], function($, __, pluginFactory, hider, buttonTpl) {\n 'use strict';\n\n /**\n * Returns the configured plugin\n * @returns {Function} the plugin\n */\n return pluginFactory({\n name : 'save',\n\n /**\n * Initialize the plugin (called during itemCreator's init)\n */\n init() {\n const self = this;\n const sharedStimulusCreator = this.getHost();\n\n this.$element = $(buttonTpl({\n icon: 'save',\n title: __('Save the asset'),\n text : __('Save'),\n cssClass: 'save-trigger',\n testId: 'save-the-asset'\n })).on('click', function saveHandler(e){\n e.preventDefault();\n self.disable();\n sharedStimulusCreator.trigger('save');\n });\n\n this.hide();\n this.disable();\n\n sharedStimulusCreator.on('ready saved error', function(){\n self.enable();\n });\n },\n\n /**\n * Called during the sharedStimulusCreator's render phase\n */\n render() {\n //attach the element to the menu area\n const $container = this.getAreaBroker().getMenuArea();\n $container.append(this.$element);\n this.show();\n },\n\n /**\n * Called during the sharedStimulusCreator's destroy phase\n */\n destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable() {\n this.$element\n .removeProp('disabled')\n .removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable() {\n this.$element\n .prop('disabled', true)\n .addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide() {\n hider.hide(this.$element);\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) 2020 (original work) Open Assessment Technologies SA;\n */\n\n/**\n * This plugin adds a \"back\" button that does a History.go(-1)\n * (like your browser's back button).\n *\n * @author Juan Luis Gutierrez Dos Santos <juanluis.gutierrezdossantos@taotesting.com>\n */\n\ndefine('taoMediaManager/qtiCreator/plugins/navigation/back',[\n 'jquery',\n 'i18n',\n 'core/plugin',\n 'ui/hider',\n 'tpl!taoQtiItem/qtiCreator/plugins/button'\n], function($, __, pluginFactory, hider, buttonTpl) {\n 'use strict';\n\n /**\n * Returns the configured plugin\n * @returns {Function} the plugin\n */\n return pluginFactory({\n name : 'back',\n\n /**\n * Initialize the plugin\n */\n init() {\n const sharedStimulusCreator = this.getHost();\n\n sharedStimulusCreator.on('exit', function(){\n window.history.back();\n });\n\n this.$element = $(buttonTpl({\n icon: 'left',\n title: __('Back to Manage Assets'),\n text : __('Manage Assets'),\n cssClass: 'back-action',\n testId: 'manage-assets'\n })).on('click', function backHandler(e){\n e.preventDefault();\n sharedStimulusCreator.trigger('exit');\n });\n this.hide();\n },\n\n /**\n * Called during the sharedStimulusCreator's render phase\n */\n render() {\n //attach the element to the menu area\n const $container = this.getAreaBroker().getMenuLeftArea();\n $container.append(this.$element);\n this.show();\n },\n\n /**\n * Called during the sharedStimulusCreator's destroy phase\n */\n destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable() {\n this.$element\n .removeProp('disabled')\n .removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable() {\n this.$element\n .prop('disabled', true)\n .addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide(){\n hider.hide(this.$element);\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) 2021 (original work) Open Assessment Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/img/states/Active',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/Active',\n 'tpl!taoQtiItem/qtiCreator/tpl/forms/static/img',\n 'taoQtiItem/qtiCreator/widgets/helpers/formElement',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/inline',\n 'ui/image/ImgStateActive',\n], function (stateFactory, ActiveState, formTpl, formElement, inlineHelper, ImgStateActive) {\n 'use strict';\n return ImgStateActive(stateFactory, ActiveState, formTpl, formElement, inlineHelper);\n});\n\n","define('taoMediaManager/qtiCreator/widgets/static/img/states/states',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/img/states/Sleep',\n 'taoMediaManager/qtiCreator/widgets/static/img/states/Active'\n], function (factory, states) {\n 'use strict';\n\n return factory.createBundle(states, arguments);\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/img/Widget',[\n 'jquery',\n 'taoQtiItem/qtiCreator/widgets/static/Widget',\n 'taoMediaManager/qtiCreator/widgets/static/img/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/widget',\n 'tpl!taoQtiItem/qtiCreator/tpl/toolbars/media',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/inline',\n 'ui/mediaEditor/plugins/mediaAlignment/helper'\n], function ($, Widget, states, helper, toolbarTpl, inlineHelper, alignmentHelper) {\n 'use strict';\n\n const ImgWidget = Widget.clone();\n\n ImgWidget.initCreator = function initCreator(options) {\n const img = this.element;\n\n this.registerStates(states);\n\n Widget.initCreator.call(this);\n\n inlineHelper.togglePlaceholder(this);\n // Resets classes for dom elements: img and wrapper on initial load and in sleep / inactive mode\n alignmentHelper.initAlignment(this);\n\n //check file exists:\n inlineHelper.checkFileExists(this, 'src', options.baseUrl);\n $('#item-editor-scope').on(`filedelete.resourcemgr.${this.element.serial}`, (e, src) => {\n if (this.getAssetManager().resolve(img.attr('src')) === this.getAssetManager().resolve(src)) {\n img.attr('src', '');\n inlineHelper.togglePlaceholder(self);\n }\n });\n };\n\n ImgWidget.destroy = function destroy() {\n $('#item-editor-scope').off(`.${this.element.serial}`);\n };\n\n ImgWidget.getRequiredOptions = function getRequiredOptions() {\n return ['baseUrl', 'uri', 'lang', 'mediaManager', 'assetManager'];\n };\n\n ImgWidget.buildContainer = function buildContainer() {\n helper.buildInlineContainer(this);\n\n this.$container.css({\n width: this.element.attr('width'),\n height: this.element.attr('height')\n });\n if (this.$original[0]) {\n this.$original[0].setAttribute('width', '100%');\n this.$original[0].removeAttribute('height');\n }\n\n return this;\n };\n\n ImgWidget.createToolbar = function createToolbar() {\n helper.createToolbar(this, toolbarTpl);\n\n return this;\n };\n\n return ImgWidget;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\ndefine('taoMediaManager/qtiCreator/renderers/Img',[\n 'lodash',\n 'taoQtiItem/qtiCommonRenderer/renderers/Img',\n 'taoMediaManager/qtiCreator/widgets/static/img/Widget'\n], function (_, Renderer, Widget) {\n 'use strict';\n\n const CreatorImg = _.clone(Renderer);\n\n CreatorImg.render = function render(img, options) {\n options = options || {};\n options.baseUrl = this.getOption('baseUrl');\n options.uri = this.getOption('uri');\n options.lang = this.getOption('lang');\n options.mediaManager = this.getOption('mediaManager');\n options.assetManager = this.getAssetManager();\n\n Widget.build(img, Renderer.getContainer(img), this.getOption('bodyElementOptionForm'), options);\n };\n\n return CreatorImg;\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/tpl/forms/item', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <div class=\\\"panel\\\">\\n <label for=\\\"xml:lang\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Language\", options) : helperMissing.call(depth0, \"__\", \"Language\", options)))\n + \"\\n </label>\\n <span class=\\\"icon-help tooltipstered\\\" data-tooltip=\\\"~ .tooltip-content:first\\\" data-tooltip-theme=\\\"info\\\"></span>\\n <span class=\\\"tooltip-content\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Define item language.\", options) : helperMissing.call(depth0, \"__\", \"Define item language.\", options)))\n + \"\\n </span>\\n <select name=\\\"xml:lang\\\" class=\\\"select2\\\" data-has-search=\\\"false\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.languagesList), {hash:{},inverse:self.noop,fn:self.programWithDepth(2, program2, data, depth0),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </select>\\n </div>\\n\";\n return buffer;\n }\nfunction program2(depth0,data,depth1) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <option value=\\\"\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"\\\"\";\n stack1 = (helper = helpers.equal || (depth1 && depth1.equal),options={hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data},helper ? helper.call(depth0, (data == null || data === false ? data : data.key), (depth1 && depth1['xml:lang']), options) : helperMissing.call(depth0, \"equal\", (data == null || data === false ? data : data.key), (depth1 && depth1['xml:lang']), options));\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"</option>\\n \";\n return buffer;\n }\nfunction program3(depth0,data) {\n \n \n return \" selected=\\\"selected\\\"\";\n }\n\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.languagesList), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\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 Technologies SA ;\n *\n */\n\ndefine('taoMediaManager/qtiCreator/widgets/item/states/Active',[\n 'lodash',\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/states/Active',\n 'tpl!taoMediaManager/qtiCreator/tpl/forms/item',\n 'taoQtiItem/qtiCreator/widgets/helpers/formElement'\n], function(_, stateFactory, Active, formTpl, formElement){\n 'use strict';\n\n const ItemStateActive = stateFactory.create(Active, function enterActiveState() {\n const _widget = this.widget;\n const item = _widget.element;\n const $form = _widget.$form;\n\n //build form:\n $form.html(formTpl({\n 'xml:lang' : item.attr('xml:lang'),\n languagesList : item.data('languagesList')\n }));\n\n //init widget\n formElement.initWidget($form);\n\n //init data validation and binding\n formElement.setChangeCallbacks($form, item, {\n 'xml:lang' : formElement.getAttributeChangeCallback()\n });\n\n }, _.noop);\n\n return ItemStateActive;\n});\n\n","define('taoMediaManager/qtiCreator/widgets/item/states/states',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/item/states/Active'\n], function(factory){\n 'use strict';\n\n return factory.createBundle(arguments);\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\n\ndefine('taoMediaManager/qtiCreator/widgets/item/Widget',[\n 'lodash',\n 'i18n',\n 'jquery',\n 'core/promise',\n 'util/url',\n 'taoQtiItem/qtiCreator/widgets/Widget',\n 'taoMediaManager/qtiCreator/widgets/item/states/states',\n 'taoQtiItem/qtiItem/core/Element',\n 'taoMediaManager/qtiCreator/helper/creatorRenderer',\n 'taoQtiItem/qtiCreator/model/helper/container',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content',\n 'taoQtiItem/qtiCreator/helper/xmlRenderer',\n 'taoQtiItem/qtiCreator/helper/devTools',\n 'taoMediaManager/qtiCreator/widgets/static/text/Widget',\n 'taoQtiItem/qtiItem/helper/xmlNsHandler',\n 'taoQtiItem/qtiCreator/editor/jquery.gridEditor'\n], function(\n _,\n __,\n $,\n Promise,\n urlUtil,\n Widget,\n states,\n Element,\n creatorRenderer,\n containerHelper,\n contentHelper,\n xmlRenderer,\n devTools,\n TextWidget,\n xmlNsHandler\n){\n 'use strict';\n\n const ItemWidget = Widget.clone();\n\n ItemWidget.initCreator = function(config) {\n const self = this;\n this.registerStates(states);\n\n Widget.initCreator.call(this);\n\n if (!config || !config.uri) {\n throw new Error('missing required config parameter uri in item widget initialization');\n }\n\n this.saveItemUrl = config.saveItemUrl;\n\n this.renderer = config.renderer;\n\n this.itemUri = config.uri;\n\n //this.initUiComponents();\n\n return new Promise(function(resolve) {\n self.initTextWidgets(function() {\n\n //when the text widgets are ready:\n this.initGridEditor();\n\n //active debugger\n this.debug({\n state : false,\n xml : false\n });\n\n resolve();\n });\n });\n };\n\n ItemWidget.buildContainer = function() {\n this.$container = this.$original;\n };\n\n ItemWidget.initUiComponents = function() {\n\n const element = this.element,\n $saveBtn = $('#save-trigger');\n\n //listen to invalid states:\n this.on('metaChange', function(data){\n if (data.element.getSerial() === element.getSerial() && data.key === 'invalid') {\n const invalid = element.data('invalid');\n if (_.size(invalid)) {\n $saveBtn.addClass('disabled');\n } else {\n $saveBtn.removeClass('disabled');\n }\n }\n }, true);\n\n };\n\n ItemWidget.initGridEditor = function() {\n\n const self = this,\n item = this.element,\n $itemBody = this.$container.find('.qti-itemBody'),\n $itemEditorPanel = $('#item-editor-panel');\n\n $itemBody.gridEditor();\n $itemBody.gridEditor('resizable');\n $itemBody.gridEditor('addInsertables', $('.tool-list > [data-qti-class]:not(.disabled)'), {\n helper : function() {\n return $(this).find('.icon').clone().addClass('dragging');\n }\n });\n\n $itemBody.on('beforedragoverstart.gridEdit', function() {\n\n $itemEditorPanel.addClass('dragging');\n $itemBody.removeClass('hoverable').addClass('inserting');\n\n }).on('dragoverstop.gridEdit', function() {\n\n $itemEditorPanel.removeClass('dragging');\n $itemBody.addClass('hoverable').removeClass('inserting');\n\n }).on('dropped.gridEdit.insertable', function(e, qtiClass, $placeholder) {\n\n //a new qti element has been added: update the model + render\n $placeholder.removeAttr('id');//prevent it from being deleted\n\n if (qtiClass === 'rubricBlock') {\n //qti strange exception: a rubricBlock must be the first child of itemBody, nothing else...\n //so in this specific case, consider the whole row as the rubricBlock\n //by the way, in our grid system, rubricBlock can only have a width of col-12\n $placeholder = $placeholder.parent('.col-12').parent('.grid-row');\n }\n\n $placeholder.addClass('widget-box');//required for it to be considered as a widget during container serialization\n $placeholder.attr({\n 'data-new' : true,\n 'data-qti-class' : qtiClass\n });//add data attribute to get the dom ready to be replaced by rendering\n\n const $widget = $placeholder.parent().closest('.widget-box, .qti-item');\n const $editable = $placeholder.closest('[data-html-editable], .qti-itemBody');\n const widget = $widget.data('widget');\n const element = widget.element;\n const container = Element.isA(element, '_container') ? element : element.getBody();\n\n if (!element || !$editable.length) {\n throw new Error('cannot create new element');\n }\n\n containerHelper.createElements(container, contentHelper.getContent($editable), function(newElts) {\n\n creatorRenderer.get().load(function() {\n\n _.forEach(newElts, (elt) => {\n let $eltWidget,\n eltwWdget,\n $colParent = $placeholder.parent();\n\n\n elt.setRenderer(this);\n\n if (Element.isA(elt, '_container')) {\n $colParent.empty();//clear the col content, and leave an empty text field\n $colParent.html(elt.render());\n eltwWdget = self.initTextWidget(elt, $colParent);\n $eltWidget = eltwWdget.$container;\n } else {\n elt.render($placeholder);\n\n //TODO resolve the promise it returns\n elt.postRender();\n eltwWdget = elt.data('widget');\n if (Element.isA(elt, 'blockInteraction')) {\n $eltWidget = eltwWdget.$container;\n } else {\n //leave the container in place\n $eltWidget = eltwWdget.$original;\n }\n }\n\n //inform height modification\n $eltWidget.trigger('contentChange.gridEdit');\n $eltWidget.trigger('resize.gridEdit');\n\n //active it right away:\n if (Element.isA(elt, 'interaction')) {\n eltwWdget.changeState('question');\n } else {\n eltwWdget.changeState('active');\n }\n\n });\n }, this.getUsedClasses());\n });\n\n }).on('resizestop.gridEdit', function() {\n\n item.body($itemBody.gridEditor('getContent'));\n\n });\n\n };\n\n const _detachElements = function(container, elements) {\n\n const containerElements = {};\n _.each(elements, function(elementSerial){\n containerElements[elementSerial] = container.elements[elementSerial];\n delete container.elements[elementSerial];\n });\n return containerElements;\n };\n\n ItemWidget.initTextWidgets = function(callback) {\n\n let self = this,\n item = this.element,\n $originalContainer = this.$container,\n i = 1,\n subContainers = [];\n\n callback = callback || _.noop;\n\n //temporarily tag col that need to be transformed into\n $originalContainer.find('.qti-itemBody > .grid-row').each(function() {\n\n const $row = $(this);\n\n if (!$row.hasClass('widget-box')) {//not a rubricBlock\n $row.children().each(function() {\n\n let $col = $(this),\n isTextBlock = false;\n\n $col.contents().each(function() {\n if(this.nodeType === 3 && this.nodeValue && this.nodeValue.trim()){\n isTextBlock = true;\n return false;\n }\n });\n\n const $widget = $col.children();\n if ($widget.length > 1 || !$widget.hasClass('widget-blockInteraction')) {//not an immediate qti element\n if ($widget.hasClass('colrow')) {\n $widget.each(function() {\n const $subElement = $(this);\n const $subWidget = $subElement.children();\n if ($subWidget.length > 1 || !$subWidget.hasClass('widget-blockInteraction')) {\n $subElement.attr('data-text-block-id', `text-block-${i}`);\n i++;\n }\n });\n } else {\n isTextBlock = true;\n }\n }\n\n if (isTextBlock) {\n $col.attr('data-text-block-id', `text-block-${i}`);\n i++;\n }\n });\n }\n });\n\n //clone the container to create the new container model:\n const $clonedContainer = $originalContainer.clone();\n $clonedContainer.find('.qti-itemBody > .grid-row [data-text-block-id]').each(function() {\n\n const $originalTextBlock = $(this),\n textBlockId = $originalTextBlock.data('text-block-id'),\n $subContainer = $originalTextBlock.clone(),\n subContainerElements = contentHelper.serializeElements($subContainer),\n subContainerBody = $subContainer.html();//get serialized body\n\n $originalTextBlock.removeAttr('data-text-block-id').html('{{_container:new}}');\n\n subContainers.push({\n body : subContainerBody,\n elements : subContainerElements,\n $original : $originalContainer.find(`[data-text-block-id=\"${textBlockId}\"]`).removeAttr('data-text-block-id')\n });\n });\n\n //create new container model with the created sub containers\n contentHelper.serializeElements($clonedContainer);\n\n const serializedItemBody = $clonedContainer.find('.qti-itemBody').html(),\n itemBody = item.getBody();\n\n if (subContainers.length) {\n\n containerHelper.createElements(itemBody, serializedItemBody, function(newElts) {\n\n if (_.size(newElts) !== subContainers.length) {\n\n throw new Error(\"number of sub-containers mismatch\");\n\n } else {\n\n _.each(newElts, function(container){\n\n const containerData = subContainers.shift();//get data in order\n const containerElements = _detachElements(itemBody, containerData.elements);\n\n container.setElements(containerElements, containerData.body);\n\n self.initTextWidget(container, containerData.$original);\n\n });\n\n _.defer(function(){\n callback.call(self);\n });\n }\n });\n\n } else {\n\n callback.call(self);\n }\n\n };\n\n ItemWidget.initTextWidget = function(container, $col) {\n return TextWidget.build(container, $col, this.renderer.getOption('textOptionForm'), {});\n };\n\n /**\n * Enable debugging\n *\n * @param {Object} [options] - log state change in console\n * @param {Boolean} [options.state = false] - log state change in console\n * @param {Boolean} [options.xml = false] - real-time qti xml display under the creator\n */\n ItemWidget.debug = function(options) {\n\n options = options || {};\n\n if (options.state) {\n devTools.listenStateChange();\n }\n\n if (options.xml) {\n const $code = $('<code>', {'class' : 'language-markup'}),\n $pre = $('<pre>', {'class' : 'line-numbers'}).append($code);\n\n $('#item-editor-wrapper').append($pre);\n devTools.liveXmlPreview(this.element, $code);\n }\n\n };\n\n function hasUnsupportedInteraction(xml) {\n const $qti = $(xml);\n return ($qti.find('div.qti-interaction.qti-customInteraction[data-serial]').length > 0);\n }\n\n return ItemWidget;\n});\n\n","\ndefine('tpl!taoMediaManager/qtiCreator/renderers/tpl/wrap', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n \n\n\n return \"<div class=\\\"grid-row\\\"><div class=\\\"col-12\\\"></div></div>\";\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) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\ndefine('taoMediaManager/qtiCreator/renderers/Item',[\n 'jquery',\n 'lodash',\n 'taoQtiItem/qtiCommonRenderer/renderers/Item',\n 'taoMediaManager/qtiCreator/widgets/item/Widget',\n 'tpl!taoQtiItem/qtiCreator/tpl/item',\n 'tpl!taoMediaManager/qtiCreator/renderers/tpl/wrap'\n], function($, _, CommonRenderer, Widget, tpl, wrapTpl) {\n 'use strict';\n\n const CreatorItem = _.clone(CommonRenderer);\n\n const _normalizeItemBody = function _normalizeItemBody($itemBody) {\n\n $itemBody.children().each(function(){\n const $child = $(this);\n //must be a grid-row for editing:\n if (!$child.hasClass('grid-row') && !$child.hasClass('qti-infoControl')) {\n $child.wrap(wrapTpl());\n }\n });\n\n return $itemBody;\n };\n\n CreatorItem.template = tpl;\n\n CreatorItem.render = function render(item, options) {\n\n const $itemContainer = CommonRenderer.getContainer(item);\n\n _normalizeItemBody($itemContainer.find('.qti-itemBody'));\n\n options = options || {};\n options.state = 'active';//the item widget never sleeps ! <- this sounds very scary!\n options.renderer = this;\n\n return Widget.build(\n item,\n $itemContainer,\n this.getOption('itemOptionForm'),\n options\n );\n };\n\n return CreatorItem;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/object/states/Active',[\n 'lodash',\n 'jquery',\n 'i18n',\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/Active',\n 'tpl!taoQtiItem/qtiCreator/tpl/forms/static/object',\n 'taoQtiItem/qtiCreator/widgets/helpers/formElement',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/inline',\n 'ui/mediaEditor/mediaEditorComponent',\n 'ui/previewer',\n 'ui/resourcemgr',\n 'ui/tooltip'\n], function (_, $, __, stateFactory, Active, formTpl, formElement, inlineHelper, mediaEditorComponent) {\n 'use strict';\n /**\n * media Editor instance if has been initialized\n * @type {null}\n */\n let mediaEditor = null;\n let $panelObjectSize = null;\n let $panelMediaSize = null;\n\n const _config = {\n renderingThrottle: 1000,\n fileFilters:\n 'image/jpeg,image/png,image/gif,image/svg+xml,video/mp4,video/avi,video/ogv,video/mpeg,video/ogg,video/quicktime,video/webm,video/x-ms-wmv,video/x-flv,audio/mp3,audio/vnd.wav,audio/ogg,audio/vorbis,audio/webm,audio/mpeg,application/ogg,audio/aac,application/pdf'\n };\n\n const ObjectStateActive = stateFactory.extend(\n Active,\n function () {\n this.initForm();\n },\n function () {\n if (mediaEditor) {\n mediaEditor.destroy();\n }\n mediaEditor = null;\n $panelObjectSize = null;\n $panelMediaSize = null;\n this.widget.$original.off('playerready');\n this.widget.$form.empty();\n }\n );\n\n const refreshRendering = _.throttle(function refreshRendering(widget) {\n const obj = widget.element;\n const $container = widget.$original;\n const 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 }, _config.renderingThrottle);\n\n const setMediaSizeEditor = widget => {\n const qtiObject = widget.element;\n const type = qtiObject.attr('type');\n if (/video/.test(type)) {\n const $container = widget.$original;\n const mediaplayer = $container.data('player');\n let width = qtiObject.attr('width');\n let height = qtiObject.attr('height');\n if (!/%/.test(width)) {\n // if we don't have % width we need calculate default % width\n const originalSize = mediaplayer.getMediaOriginalSize();\n if (!originalSize.width) {\n // video is not loaded yet\n return;\n }\n const containerWidth = $container.closest('.widget-textBlock').width();\n // the default % and by that the size of the video is based on the original video size compared to the container size\n if (!width) {\n width = Math.round(100 / (containerWidth / originalSize.width));\n height = 0;\n } else if (height) {\n // for old format (px and height is set) the default % is calculated on rendered width and height\n const scaleHeight =\n (Math.max(height || 0, 200) - $container.find('.mediaplayer .controls').height()) /\n originalSize.height;\n const scaleWidth = Math.max(width || 0, 200) / originalSize.width;\n const scale = Math.min(scaleHeight, scaleWidth);\n width = Math.round(100 / (containerWidth / (scale * originalSize.width)));\n qtiObject.removeAttr('height');\n height = 0;\n }\n }\n const onChange = _.debounce(nMedia => {\n if (qtiObject.attr('width') !== `${nMedia['width']}%`) {\n const newWidth = `${Math.round(nMedia['width'])}%`;\n qtiObject.attr('width', newWidth);\n mediaplayer.resize(newWidth, 'auto');\n }\n }, 200);\n if (mediaEditor) {\n mediaEditor.destroy();\n }\n mediaEditor = mediaEditorComponent(\n $panelMediaSize,\n {\n $node: $container.find('.mediaplayer .media'),\n $container: $container,\n type: qtiObject.attr('type'),\n width,\n height,\n responsive: true\n },\n {\n mediaDimension: {\n active: true,\n showResponsiveToggle: false\n }\n }\n ).on('change', onChange);\n }\n };\n const hideShowPanels = type => {\n if (/video/.test(type)) {\n $panelObjectSize.hide();\n $panelMediaSize.show();\n } else {\n if (mediaEditor) {\n mediaEditor.destroy();\n }\n $panelObjectSize.show();\n $panelMediaSize.hide();\n }\n };\n const _initUpload = function (widget) {\n const $form = widget.$form,\n options = widget.options,\n qtiObject = widget.element,\n $uploadTrigger = $form.find('[data-role=\"upload-trigger\"]'),\n $src = $form.find('input[name=src]');\n\n const _openResourceMgr = function _openResourceMgr() {\n $uploadTrigger.resourcemgr({\n title: __(\n 'Please select a media file from the resource manager. You can add files from your computer with the button \"Add file(s)\".'\n ),\n appendContainer: options.mediaManager.appendContainer,\n mediaSourcesUrl: options.mediaManager.mediaSourcesUrl,\n browseUrl: options.mediaManager.browseUrl,\n uploadUrl: options.mediaManager.uploadUrl,\n deleteUrl: options.mediaManager.deleteUrl,\n downloadUrl: options.mediaManager.downloadUrl,\n fileExistsUrl: options.mediaManager.fileExistsUrl,\n params: {\n uri: options.uri,\n lang: options.lang,\n filters: _config.fileFilters\n },\n pathParam: 'path',\n path: options.mediaManager.path,\n root: options.mediaManager.root,\n select: function (e, files) {\n let file, type;\n if (files && files.length) {\n file = files[0].file;\n type = files[0].mime;\n qtiObject.attr('type', type);\n $src.val(file).trigger('change');\n }\n },\n open: function () {\n //hide tooltip if displayed\n if ($src.data('$tooltip')) {\n $src.blur().data('$tooltip').hide();\n }\n },\n close: function () {\n //triggers validation :\n $src.blur();\n }\n });\n };\n\n $uploadTrigger.on('click', _openResourceMgr);\n\n //if empty, open file manager immediately\n if (!$src.val()) {\n _openResourceMgr();\n }\n };\n\n ObjectStateActive.prototype.initForm = function initForm() {\n const _widget = this.widget,\n $form = _widget.$form,\n qtiObject = _widget.element,\n baseUrl = _widget.options.baseUrl;\n const $container = _widget.$original;\n\n $form.html(\n formTpl({\n baseUrl: baseUrl || '',\n src: qtiObject.attr('data'),\n alt: qtiObject.attr('alt'),\n height: qtiObject.attr('height'),\n width: qtiObject.attr('width')\n })\n );\n\n //init resource manager\n _initUpload(_widget);\n\n //init standard ui widget\n formElement.initWidget($form);\n\n $panelObjectSize = $('.size-panel', $form);\n $panelMediaSize = $('.media-size-panel', $form);\n hideShowPanels(qtiObject.attr('type'));\n\n $container.off('playerready').on('playerready', function () {\n setMediaSizeEditor(_widget);\n });\n\n //init data change callbacks\n formElement.setChangeCallbacks($form, qtiObject, {\n src: function (object, value) {\n if (value !== qtiObject.attr('data')) {\n qtiObject.attr('data', value);\n qtiObject.removeAttr('width');\n qtiObject.removeAttr('height');\n $form.find('input[name=width]').val('');\n $form.find('input[name=height]').val('');\n $container.removeData('ui.previewer');\n hideShowPanels(qtiObject.attr('type'));\n inlineHelper.togglePlaceholder(_widget);\n refreshRendering(_widget);\n }\n },\n width: function (object, value) {\n const val = parseInt(value, 10);\n if (_.isNaN(val)) {\n qtiObject.removeAttr('width');\n } else {\n qtiObject.attr('width', val);\n }\n refreshRendering(_widget);\n },\n height: function (object, value) {\n const val = parseInt(value, 10);\n if (_.isNaN(val)) {\n qtiObject.removeAttr('height');\n } else {\n qtiObject.attr('height', val);\n }\n refreshRendering(_widget);\n },\n alt: function (qtiObjectAlt, value) {\n qtiObjectAlt.attr('alt', value);\n },\n align: function (qtiObjectAlign, value) {\n inlineHelper.positionFloat(_widget, value);\n }\n });\n };\n\n return ObjectStateActive;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/object/states/states',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/object/states/Sleep',\n 'taoMediaManager/qtiCreator/widgets/static/object/states/Active'\n], function (factory, states) {\n 'use strict';\n\n return factory.createBundle(states, arguments);\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n *\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/object/Widget',[\n 'taoQtiItem/qtiCreator/widgets/static/Widget',\n 'taoMediaManager/qtiCreator/widgets/static/object/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/widget',\n 'tpl!taoQtiItem/qtiCreator/tpl/toolbars/media',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/inline'\n], function (Widget, states, helper, toolbarTpl, inlineHelper) {\n 'use strict';\n\n const ObjectWidget = Widget.clone();\n\n ObjectWidget.initCreator = function initCreator() {\n this.registerStates(states);\n\n Widget.initCreator.call(this);\n\n inlineHelper.togglePlaceholder(this);\n };\n\n ObjectWidget.getRequiredOptions = function getRequiredOptions() {\n return ['baseUrl', 'uri', 'lang', 'mediaManager'];\n };\n\n ObjectWidget.buildContainer = function buildContainer() {\n helper.buildBlockContainer(this);\n\n return this;\n };\n\n ObjectWidget.createToolbar = function createToolbar() {\n helper.createToolbar(this, toolbarTpl);\n\n return this;\n };\n\n return ObjectWidget;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\ndefine('taoMediaManager/qtiCreator/renderers/Object',[\n 'lodash',\n 'taoQtiItem/qtiCommonRenderer/renderers/Object',\n 'taoMediaManager/qtiCreator/widgets/static/object/Widget'\n], function (_, Renderer, Widget) {\n 'use strict';\n\n const CreatorObject = _.clone(Renderer);\n\n CreatorObject.render = function render(object, options) {\n //initial rendering:\n Renderer.render(object);\n\n options = options || {};\n options.baseUrl = this.getOption('baseUrl');\n options.uri = this.getOption('uri');\n options.lang = this.getOption('lang');\n options.mediaManager = this.getOption('mediaManager');\n options.assetManager = this.getAssetManager();\n\n Widget.build(object, Renderer.getContainer(object), this.getOption('bodyElementOptionForm'), options);\n };\n\n return CreatorObject;\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/**\n * @author Christophe Noël <christophe@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/table/states/Active',[\n 'lodash',\n 'jquery',\n 'i18n',\n 'ckeditor',\n 'ui/tableModel',\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoMediaManager/qtiCreator/widgets/static/states/Active',\n 'taoQtiItem/qtiCreator/widgets/static/table/components/tableActions',\n 'taoMediaManager/qtiCreator/editor/ckEditor/htmlEditor',\n 'taoQtiItem/qtiCreator/editor/gridEditor/content',\n 'taoQtiItem/qtiCreator/widgets/helpers/formElement',\n 'tpl!taoQtiItem/qtiCreator/tpl/forms/static/table'\n], function(_, $, __, ckEditor, tableModelFactory, stateFactory, Active, tableActionsFactory, htmlEditor, contentHelper, formElement, formTpl){\n 'use strict';\n\n var tableModel,\n colActions,\n rowActions;\n\n var css = {\n deleteColRow: 'hoverDelete',\n insertRowAfter: 'insertRowAfter',\n insertColAfter: 'insertColAfter',\n\n hAlignCenter: 'table-center',\n hAlignRight: 'table-right'\n };\n\n var TableStateActive = stateFactory.extend(Active, function create(){\n this.initForm();\n this.buildEditor();\n\n }, function exit(){\n this.widget.$form.empty();\n this.destroyEditor();\n });\n\n // the element body should only contain the <table> tag content, and not the <table> tag itself.\n // as the ckeditor instance is bound to a wrapping <div>, we need to go through an extra step to remove the <table> tag.\n function getChangeCallback(container){\n return _.throttle(function(data){\n var $tableTagContent = $(data).children(), // might a mix of tbody / thead / tfoot\n $pseudoContainer = $('<div>').html($tableTagContent),\n newBody = contentHelper.getContent($pseudoContainer);\n container.body(newBody);\n }, 400);\n }\n\n TableStateActive.prototype.initForm = function initForm(){\n var _widget = this.widget,\n $form = _widget.$form,\n table = _widget.element,\n $container = _widget.$container,\n hAlignOptions;\n\n hAlignOptions = [{\n name: __('Left'),\n value: 'left'\n }, {\n name: __('Center'),\n value: 'center',\n selected: table.hasClass(css.hAlignCenter)\n }, {\n name: __('Right'),\n value: 'right',\n selected: table.hasClass(css.hAlignRight)\n }] ;\n\n\n $form.html(formTpl({\n hAlignOptions: hAlignOptions\n }));\n\n //... init standard ui widget\n formElement.initWidget($form);\n\n //init data change callbacks\n formElement.setChangeCallbacks($form, table, {\n hAlign : function(t, value){\n hideTableActions();\n t.removeClass(css.hAlignRight);\n t.removeClass(css.hAlignCenter);\n $container.removeClass(`${css.hAlignRight} ${css.hAlignCenter}`);\n switch (value) {\n case 'center': {\n t.addClass(css.hAlignCenter);\n $container.addClass(css.hAlignCenter);\n break;\n }\n case 'right': {\n t.addClass(css.hAlignRight);\n $container.addClass(css.hAlignRight);\n break;\n }\n }\n }\n });\n\n };\n\n TableStateActive.prototype.buildEditor = function buildEditor(){\n var _widget = this.widget,\n container = _widget.element.getBody(),\n\n $itemPanel = _widget.getAreaBroker().getItemPanelArea(),\n $editableContainer = _widget.$container,\n $editable = $editableContainer.find('.qti-table-container'),\n $tablePropTrigger = $editableContainer.find('[data-role=\"cke-table-properties\"]');\n\n $editableContainer.attr('data-html-editable-container', true);\n $editable.attr('data-html-editable', true); // DO NOT move in template to avoid creation of nested ckInstances when container editor is created\n\n if(!htmlEditor.hasEditor($editableContainer)){\n htmlEditor.buildEditor($editableContainer, {\n placeholder: '',\n change : getChangeCallback(container),\n removePlugins: 'magicline',\n data : {\n container : container,\n widget : _widget\n },\n blur : function(){\n _widget.changeState('sleep');\n }\n });\n }\n\n $editable\n .on('editorready.tableActive', function(event, editor) {\n tableModel = tableModelFactory($editable.find('table'));\n\n // listener for table properties\n $tablePropTrigger.on('click.tableActive', function openTableProperties(e){\n e.stopPropagation();\n hideTableActions();\n editor.execCommand('taoqtitableProperties');\n });\n\n // listeners for columns actions\n colActions = tableActionsFactory({\n insertCol: true,\n deleteTitle: 'Delete column'\n })\n .on('delete', function() {\n editor.execCommand('columnDelete');\n updateTable(editor, $editableContainer);\n hideTableActions();\n })\n .on('deleteMouseEnter', function() {\n addClassOnCurrentCol(editor, css.deleteColRow);\n })\n .on('deleteMouseLeave', function() {\n clearCellClasses($editable, css.deleteColRow);\n })\n .on('insertCol', function() {\n editor.execCommand('columnInsertAfter');\n clearCellClasses($editable, css.insertColAfter); // this is because ck clone the current cells to insert the new ones\n this.trigger('insertColMouseEnter'); // so we don't want him to clone the \"insert style\"\n updateTable(editor, $editableContainer);\n })\n .on('insertColMouseEnter', function() {\n addClassOnCurrentCol(editor, css.insertColAfter);\n })\n .on('insertColMouseLeave', function() {\n clearCellClasses($editable, css.insertColAfter);\n })\n .render($itemPanel)\n .hide();\n\n // listeners for row actions\n rowActions = tableActionsFactory({\n insertRow: true,\n deleteTitle: 'Delete row'\n })\n .on('delete', function() {\n editor.execCommand('rowDelete');\n updateTable(editor, $editableContainer);\n hideTableActions();\n })\n .on('deleteMouseEnter', function() {\n addClassOnCurrentRow(editor, css.deleteColRow);\n })\n .on('deleteMouseLeave', function() {\n clearCellClasses($editable, css.deleteColRow);\n })\n .on('insertRow', function() {\n editor.execCommand('rowInsertAfter');\n clearCellClasses($editable, css.insertRowAfter); // this is because ck clone the current cells to insert the new ones\n this.trigger('insertRowMouseEnter'); // so we don't want him to clone the \"insert style\"\n updateTable(editor, $editableContainer);\n })\n .on('insertRowMouseEnter', function() {\n addClassOnCurrentRow(editor, css.insertRowAfter);\n })\n .on('insertRowMouseLeave', function() {\n clearCellClasses($editable, css.insertRowAfter);\n })\n .render($itemPanel)\n .hide();\n\n $editableContainer.on('keyup.tableActive mouseup.tableActive', function() {\n displayTableActions(editor, $editableContainer);\n });\n })\n .on('editordestroyed.tableActive', function() {\n if ($tablePropTrigger.length) {\n $tablePropTrigger.off('.tableActive');\n }\n });\n };\n\n TableStateActive.prototype.destroyEditor = function destroyEditor(){\n var _widget = this.widget,\n $editableContainer = _widget.$container,\n $editable = $editableContainer.find('[data-html-editable=\"true\"]');\n\n clearCellClasses($editable, css.insertColAfter);\n clearCellClasses($editable, css.insertRowAfter);\n clearCellClasses($editable, css.deleteColRow);\n\n //search and destroy the editor\n htmlEditor.destroyEditor($editableContainer);\n $editableContainer.off('.tableActive');\n $editable.off('.tableActive');\n\n $editable.attr('data-html-editable', false);\n $editableContainer.attr('data-html-editable-container', false);\n\n tableModel = null;\n\n // destroy the actions toolbars\n if (colActions) {\n colActions.destroy();\n colActions = null;\n }\n\n if (rowActions) {\n rowActions.destroy();\n rowActions = null;\n }\n };\n\n function addClassOnCurrentRow(editor, className) {\n var currentCellPos = getCurrentCellPos(editor),\n $currentCol;\n if (currentCellPos) {\n $currentCol = tableModel.getRowCells(currentCellPos.y);\n $currentCol.addClass(className);\n }\n }\n\n function addClassOnCurrentCol(editor, className) {\n var currentCellPos = getCurrentCellPos(editor),\n $currentCol;\n if (currentCellPos) {\n $currentCol = tableModel.getColCells(currentCellPos.x);\n $currentCol.addClass(className);\n }\n }\n\n function clearCellClasses($editable, className) {\n $editable.find('th, td').removeClass(className);\n }\n\n /**\n * Update the table model and the available actions on rows/columns\n * @param {Object} editor\n * @param {Jquery} $editableContainer\n */\n function updateTable(editor, $editableContainer) {\n tableModel.update();\n if (tableModel.getRowCount() === 1) {\n rowActions.hideDelete();\n } else {\n rowActions.showDelete();\n }\n if (tableModel.getColCount() === 1) {\n colActions.hideDelete();\n } else {\n colActions.showDelete();\n }\n // reposition toolbars as their dimensions might have change\n displayTableActions(editor, $editableContainer);\n }\n\n /**\n * hide components containing row and column actions\n */\n function hideTableActions() {\n if (colActions) {\n colActions.hide();\n }\n if (rowActions) {\n rowActions.hide();\n }\n }\n\n /**\n * Display row and columns actions at the correct position, depending of where the user has the cursor\n * @param {ckEditor} editor - editor instance to access the current selection\n * @param {jQuery} $tableContainer - the table DOM element, so we can align the toolbars on it\n */\n function displayTableActions(editor, $tableContainer) {\n var selectedCells = getSelection(editor),\n $currentCell;\n\n if (selectedCells && selectedCells.length !== 1) {\n // when none or more than one cells are selected, then we do not display the toolbars as the expected behavior is not obvious.\n // for example, it's difficult to define the expected behavior of deleting a column when cells from multiple columns are selected...\n hideTableActions();\n\n } else {\n $currentCell = $(selectedCells[0].$);\n\n colActions\n .show()\n .hAlignWith($currentCell, 'center')\n .vAlignWith($tableContainer, 'top');\n\n rowActions\n .show()\n .hAlignWith($tableContainer, 'left')\n .vAlignWith($currentCell, 'center');\n }\n }\n\n /**\n * only works when a single cell is selected\n * @param {Object} editor\n * @returns {Object}\n */\n function getCurrentCellPos(editor) {\n var selectedCells = getSelection(editor),\n currentCell;\n\n if (selectedCells && selectedCells.length === 1) {\n currentCell = selectedCells[0].$;\n\n return {\n x: currentCell.cellIndex,\n y: currentCell.parentNode.rowIndex\n };\n }\n }\n\n /**\n * Get the current selected cells in the table\n * @param {Object} editor - CkEditor instance\n * @returns {ckEditor.dom.element[]}\n */\n function getSelection(editor) {\n var selection = editor.getSelection(),\n tabletools = window.CKEDITOR.plugins.tabletools;\n\n if (selection && tabletools) {\n return tabletools.getSelectedCells(selection);\n }\n }\n\n return TableStateActive;\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 */\ndefine('taoMediaManager/qtiCreator/widgets/static/table/states/states',[\n 'taoQtiItem/qtiCreator/widgets/states/factory',\n 'taoQtiItem/qtiCreator/widgets/static/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/table/states/Sleep',\n 'taoMediaManager/qtiCreator/widgets/static/table/states/Active'\n], function(factory, states){\n 'use strict';\n\n return factory.createBundle(states, arguments);\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 * @author Christophe Noël <christophe@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/widgets/static/table/Widget',[\n 'jquery',\n 'taoQtiItem/qtiCreator/widgets/static/Widget',\n 'taoMediaManager/qtiCreator/widgets/static/table/states/states',\n 'taoQtiItem/qtiCreator/widgets/static/helpers/widget',\n 'tpl!taoQtiItem/qtiCreator/tpl/toolbars/table'\n], function($, Widget, states, helper, toolbarTpl) {\n 'use strict';\n\n var TableWidget = Widget.clone();\n\n TableWidget.initCreator = function() {\n\n this.registerStates(states);\n\n Widget.initCreator.call(this);\n };\n\n TableWidget.buildContainer = function(){\n var table = this.element;\n\n helper.buildBlockContainer(this);\n\n if (table.attr('class')) {\n this.$container.addClass(table.attr('class'));\n }\n\n return this;\n };\n\n TableWidget.createToolbar = function(){\n\n const self = this,\n $tlb = $(toolbarTpl({\n serial : this.serial,\n state : 'active'\n }));\n\n this.$container.append($tlb);\n\n $tlb.find('[data-role=\"delete\"]').on('click.widget-box', function(e){\n e.stopPropagation();//to prevent direct deleting;\n self.changeState('deleting');\n });\n\n return this;\n };\n\n return TableWidget;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA;\n */\n/**\n * @author Christophe Noël <christophe@taotesting.com>\n */\ndefine('taoMediaManager/qtiCreator/renderers/Table',[\n 'lodash',\n 'taoQtiItem/qtiCommonRenderer/renderers/Table',\n 'taoMediaManager/qtiCreator/widgets/static/table/Widget',\n 'tpl!taoQtiItem/qtiCreator/tpl/table'\n], function(_, Renderer, Widget, tpl) {\n 'use strict';\n\n const CreatorTable = _.clone(Renderer);\n\n CreatorTable.template = tpl;\n\n CreatorTable.render = function render(table, options){\n\n Widget.build(\n table,\n Renderer.getContainer(table),\n this.getOption('bodyElementOptionForm'),\n options || {}\n );\n };\n\n return CreatorTable;\n});\n\n","\ndefine('tpl!taoMediaManager/qtiXmlRenderer/tpl/item', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" class=\\\"\";\n if (helper = helpers['class']) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0['class']); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\";\n return buffer;\n }\n\nfunction program3(depth0,data) {\n \n var buffer = \"\", stack1;\n stack1 = helpers['if'].call(depth0, (data == null || data === false ? data : data.key), {hash:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" \";\n return buffer;\n }\nfunction program4(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"xmlns:\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\";\n return buffer;\n }\n\nfunction program6(depth0,data) {\n \n var buffer = \"\";\n buffer += \"xmlns=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\";\n return buffer;\n }\n\nfunction program8(depth0,data) {\n \n var stack1, helper, options;\n stack1 = (helper = helpers.join || (depth0 && depth0.join),options={hash:{},data:data},helper ? helper.call(depth0, (depth0 && depth0.attributes), \"=\", \" \", \"\\\"\", options) : helperMissing.call(depth0, \"join\", (depth0 && depth0.attributes), \"=\", \" \", \"\\\"\", options));\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n }\n\nfunction program10(depth0,data) {\n \n \n return \"\\n <div class=\\\"empty\\\"></div>\\n \";\n }\n\nfunction program12(depth0,data) {\n \n var buffer = \"\", stack1, helper;\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 \";\n return buffer;\n }\n\n buffer += \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<div\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0['class']), {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.each.call(depth0, (depth0 && depth0.namespaces), {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, (depth0 && depth0.attributes), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \">\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.empty), {hash:{},inverse:self.program(12, program12, data),fn:self.program(10, program10, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\";\n return buffer;\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) 2020 (original work) Open Assessment Technologies SA;\n *\n */\n\ndefine('taoMediaManager/qtiXmlRenderer/renderers/Item',['lodash', 'tpl!taoMediaManager/qtiXmlRenderer/tpl/item'], function(_, tpl){\n 'use strict';\n\n return {\n qtiClass : 'assessmentItem',\n template : tpl,\n getData : function getData(item, data){\n const defaultData = {\n 'class' : data.attributes.class || '',\n namespaces : item.getNamespaces(),\n schemaLocations : '',\n xsi: 'xsi:',//the standard namespace prefix for xml schema\n empty : item.isEmpty(),\n };\n\n _.forIn(item.getSchemaLocations(), (url, uri) => {\n defaultData.schemaLocations += `${uri} ${url} `;\n });\n defaultData.schemaLocations = defaultData.schemaLocations.trim();\n\n data = _.merge({}, data, defaultData);\n delete data.attributes.class;\n delete data.attributes.title;\n delete data.attributes.adaptive;\n delete data.attributes.timeDependent;\n delete data.attributes.identifier;\n\n data.attributes = _.mapValues(data.attributes, function (val) {\n return _.isString(val) ? _.escape(val) : val;\n });\n\n return data;\n }\n };\n});\n\n","\n(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n('.previewer{position:relative}.previewer iframe{min-height:400px;width:100%}.previewer .previewer-component{background-color:white;text-align:initial}.previewer .previewer-component .item-previewer-scope{height:calc(100vh - 250px)}.previewer .previewer-component .item-previewer-scope .action-bar,.previewer .previewer-component .item-previewer-scope .test-sidebar{display:none}.previewer.no-background{background:none}#item-editor-scope .tool-group ._accordion{display:none}\\n\\n/*# sourceMappingURL=../../../taoMediaManager/views/css/media.css.map */');\n","\ndefine(\"taoMediaManager/loader/taoMediaManager.bundle\", function(){});\n","define(\"taoMediaManager/loader/taoMediaManager.min\", [\"taoItems/loader/taoItemsRunner.min\",\"taoTests/loader/taoTestsRunner.min\",\"taoQtiItem/loader/taoQtiItemRunner.min\",\"taoQtiItem/loader/taoQtiItem.min\",\"taoQtiTestPreviewer/loader/qtiPreviewer.min\"], function(){});\n"]}