2 lines
212 KiB
JavaScript
2 lines
212 KiB
JavaScript
function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}(function(){'use strict';var loaderScript=document.getElementById("amd-loader"),configUrl=loaderScript.getAttribute("data-config"),bundle=loaderScript.getAttribute("data-bundle"),loadController=function(){var controllerOptions={},controllerPath=loaderScript.getAttribute("data-controller"),params=loaderScript.getAttribute("data-params");try{controllerOptions=JSON.parse(params)}catch(err){controllerOptions={}}window.require([controllerPath],function(controller){var startController=function(){window.started||(window.started=!0,controller.start(controllerOptions))};document.addEventListener("readystatechange",startController,!1),"complete"===document.readyState&&startController()})};window.require([configUrl],function(){window.loadBundles||(window.loaded={},window.loadBundles=function(bundles){bundles=bundles||[],bundles=bundles.concat(window.bundles),bundles=bundles.filter(function(item,index){return item&&bundles.indexOf(item)===index&&!0!==window.loaded[item]}),require(bundles,function(){bundles.forEach(function(item){window.loaded[item]=!0}),loadController()})}),bundle||window.bundles&&window.bundles.length?window.loadBundles([bundle]):loadController()})})(),define("loader/bootstrap",function(){}),define("css!taoQtiTestCss/new-test-runner",[],function(){}),define("taoQtiTest/controller/runner/runner",["jquery","lodash","i18n","context","module","core/router","core/logger","layout/loading-bar","ui/feedback","util/url","util/locale","taoTests/runner/providerLoader","taoTests/runner/runner","css!taoQtiTestCss/new-test-runner"],function($,_,__,context,module,router,loggerFactory,loadingBar,feedback,urlUtil,locale,providerLoader,runner){'use strict';var requiredOptions=["testDefinition","testCompilation","serviceCallId","bootstrap","options","providers"];return{start:function start(config){var $container=$(".runner"),logger=loggerFactory("controller/runner",{serviceCallId:config.serviceCallId,plugins:config&&config.providers&&Object.keys(config.providers.plugins)}),preventFeedback=!1,errorFeedback=null,exit=function(reason,level){var url=config.options.exitUrl,params={};reason&&(!level&&(level="warning"),params[level]=reason,url=urlUtil.build(url,params)),window.location=url},onError=function(err,displayMessage){onFeedback(err,displayMessage,"error")},onWarning=function(err,displayMessage){onFeedback(err,displayMessage,"warning")},onFeedback=function(err,displayMessage,type){var typeMap={warning:{logger:"warn",feedback:"warning"},error:{logger:"error",feedback:"error"}},loggerByType=logger[typeMap[type].logger],feedbackByType=feedback()[typeMap[type].feedback];return displayMessage=displayMessage||err.message,_.isString(displayMessage)||(displayMessage=JSON.stringify(displayMessage)),loadingBar.stop(),loggerByType({displayMessage:displayMessage},err),"error"===type&&(403===err.code||500===err.code)?(displayMessage="".concat(__("An error occurred during the test, please content your administrator.")," ").concat(displayMessage),exit(displayMessage,"error")):void(!preventFeedback&&(errorFeedback=feedbackByType(displayMessage,{timeout:-1})))},moduleConfig=module.config(),exitReason;return loadingBar.start(),$(".delivery-scope").attr({dir:locale.getLanguageDirection(context.locale)}),requiredOptions.every(function(option){return"undefined"!=typeof config[option]})?void(moduleConfig&&_.isArray(moduleConfig.extraRoutes)&&moduleConfig.extraRoutes.length&&router.dispatch(moduleConfig.extraRoutes),config.provider=Object.assign(config.provider||{},{runner:"qti"}),providerLoader(config.providers,context.bundle).then(function(results){var testRunnerConfig=_.omit(config,["providers"]);if(testRunnerConfig.renderTo=$container,results.proxy&&"function"==typeof results.proxy.getAvailableProviders){var loadedProxies=results.proxy.getAvailableProviders();testRunnerConfig.provider.proxy=loadedProxies[0]}logger.debug({config:testRunnerConfig,providers:config.providers},"Start test runner"),runner(config.provider.runner,results.plugins,testRunnerConfig).on("error",onError).on("warning",onWarning).on("ready",function(){_.defer(function(){$container.removeClass("hidden")})}).on("pause",function(data){data&&data.reason&&(exitReason=data.reason)}).after("destroy",function(){this.removeAllListeners(),exit(exitReason)}).on("disablefeedbackalerts",function(){errorFeedback&&errorFeedback.close(),preventFeedback=!0}).on("enablefeedbackalerts",function(){preventFeedback=!1}).init()}).catch(function(err){onError(err,__("An error occurred during the test initialization!"))})):onError(new TypeError(__("Missing required configuration option %s",name)))}}}),define("taoQtiTest/runner/config/assetManager",["taoItems/assets/manager","taoItems/assets/strategies","taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy"],function(assetManagerFactory,assetStrategies,assetPortableElement){'use strict';function getAssetManager(testId){var assetManager;return"undefined"==typeof assetManagers[testId]?(assetManager=assetManagerFactory(defaultStrategies,{baseUrl:""}),assetManagers[testId]=assetManager):assetManager=assetManagers[testId],assetManager}assetManagerFactory=assetManagerFactory&&Object.prototype.hasOwnProperty.call(assetManagerFactory,"default")?assetManagerFactory["default"]:assetManagerFactory,assetStrategies=assetStrategies&&Object.prototype.hasOwnProperty.call(assetStrategies,"default")?assetStrategies["default"]:assetStrategies,assetPortableElement=assetPortableElement&&Object.prototype.hasOwnProperty.call(assetPortableElement,"default")?assetPortableElement["default"]:assetPortableElement;var defaultStrategies=[assetStrategies.packedUrl,assetStrategies.external,assetStrategies.base64,assetStrategies.baseUrl,assetPortableElement],assetManagers={};return getAssetManager}),define("taoQtiTest/runner/config/qtiServiceConfig",["lodash","util/url","util/config"],function(_,urlUtil,configHelper){'use strict';function configFactory(config){var storage=configHelper.from(config,_entries,_defaults),undef;return storage.timeout?storage.timeout*=1e3:storage.timeout=undef,{getTestDefinition:function(){return storage.testDefinition},getTestCompilation:function(){return storage.testCompilation},getServiceCallId:function(){return storage.serviceCallId},getServiceController:function(){return storage.bootstrap.serviceController||_defaults.bootstrap.serviceController},getServiceExtension:function(){return storage.bootstrap.serviceExtension||_defaults.bootstrap.serviceExtension},getTestActionUrl:function(action){return urlUtil.route(action,this.getServiceController(),this.getServiceExtension(),{testDefinition:this.getTestDefinition(),testCompilation:this.getTestCompilation(),serviceCallId:this.getServiceCallId()})},getItemActionUrl:function(itemIdentifier,action){return urlUtil.route(action,this.getServiceController(),this.getServiceExtension(),{testDefinition:this.getTestDefinition(),testCompilation:this.getTestCompilation(),testServiceCallId:this.getServiceCallId(),itemDefinition:itemIdentifier})},getTelemetryUrl:function(itemIdentifier,signal){return urlUtil.route(signal,this.getServiceController(),this.getServiceExtension(),{testDefinition:this.getTestDefinition(),testCompilation:this.getTestCompilation(),testServiceCallId:this.getServiceCallId(),itemDefinition:itemIdentifier})},getTimeout:function(){return storage.timeout},getCommunicationConfig:function(){var communication=storage.bootstrap.communication||{},extension=communication.extension||this.getServiceExtension(),controller=communication.controller||this.getServiceController(),action=communication.action,syncActions=communication.syncActions||[],service=urlUtil.route(action||"message",controller,extension,{testDefinition:this.getTestDefinition(),testCompilation:this.getTestCompilation(),serviceCallId:this.getServiceCallId()}),params=_.merge({},communication.params||{},{service:communication.service||service});return params.timeout?params.timeout*=1e3:params.timeout=storage.timeout,params.interval&&(params.interval*=1e3),{enabled:communication.enabled,type:communication.type,params:params,syncActions:syncActions}}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,urlUtil=urlUtil&&Object.prototype.hasOwnProperty.call(urlUtil,"default")?urlUtil["default"]:urlUtil,configHelper=configHelper&&Object.prototype.hasOwnProperty.call(configHelper,"default")?configHelper["default"]:configHelper;var _defaults={bootstrap:{serviceController:"Runner",serviceExtension:"taoQtiTest"}},_entries={testDefinition:!0,testCompilation:!0,serviceCallId:!0,bootstrap:!1,timeout:!1};return configFactory}),define("taoQtiTest/runner/config/states",[],function(){'use strict';var states={testSession:Object.freeze({initial:0,interacting:1,modalFeedback:2,suspended:3,closed:4}),itemSession:Object.freeze({initial:0,interacting:1,modalFeedback:2,suspended:3,closed:4,solution:5,notSelected:255})};return states}),define("taoQtiTest/runner/helpers/currentItem",["lodash"],function(_){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;var responseCardinalities={single:"base",multiple:"list",ordered:"list",record:"record"},interactionMinConstraintProperties={matchInteraction:"minAssociations",choiceInteraction:"minChoices",orderInteraction:"minChoices",associateInteraction:"minAssociations",hottextInteraction:"minChoices",hotspotInteraction:"minChoices",graphicOrderInteraction:"minChoices",graphicAssociateInteraction:"minAssociations",selectPointInteraction:"minChoices"},currentItemHelper={getDeclarations:function(runner){var itemRunner=runner.itemRunner;return itemRunner._item&&itemRunner._item.responses},getResponseDeclaration:function(runner,identifier){var found=null;return _.forEach(currentItemHelper.getDeclarations(runner),function(declaration){var attributes=declaration.attributes||{};if(attributes.identifier===identifier)return found=declaration,!1}),found},toResponse:function(value,baseType,cardinality){var mappedCardinality=responseCardinalities[cardinality],response={};_.isString(value)&&(value=[value]);var transform=function(v){return v};return"boolean"===baseType?transform=function(v){return!0===v||"true"===v}:("directedPair"==baseType||"pair"==baseType)&&(transform=function(v){return _.isString(v)?v.split(" "):v}),value=_.map(value||[],transform),mappedCardinality&&("base"===mappedCardinality?0===value.length?response.base=null:(response.base={},response.base[baseType]=value[0]):(response[mappedCardinality]={},response[mappedCardinality][baseType]=value)),response},isQtiValueNull:function(value,baseType,cardinality){var mappedCardinality=responseCardinalities[cardinality];return _.isObject(value)&&null===value[mappedCardinality]&&(value=null),_.isObject(value)&&value[mappedCardinality]&&"undefined"!=typeof value[mappedCardinality][baseType]&&(value=value[mappedCardinality][baseType]),null===value||"string"===baseType&&_.isEmpty(value)||"single"!==cardinality&&_.isEmpty(value)},isQuestionAnswered:function(response,baseType,cardinality,defaultValue,constraintValue){var fullyAnswered=!0,answered,currentCardinality,responses;return defaultValue=defaultValue||null,constraintValue=constraintValue||0,currentItemHelper.isQtiValueNull(response,baseType,cardinality)?answered=!1:(answered=!_.isEqual(response,currentItemHelper.toResponse(defaultValue,baseType,cardinality)),0!==constraintValue&&(currentCardinality=responseCardinalities[cardinality],responses=response[currentCardinality][baseType]||[],fullyAnswered=responses&&responses.length>=constraintValue),answered=answered&&fullyAnswered),answered},guessInteractionConstraintValues:function(runner){var itemRunner=runner.itemRunner,itemBody=itemRunner._item&&itemRunner._item.bdy||{},interactions=itemBody.elements||{},constraintValues={};return _.forEach(interactions,function(interaction){var attributes=interaction.attributes||{},qtiClass=interaction.__proto__.qtiClass,constraintProperty;Object.prototype.hasOwnProperty.call(interactionMinConstraintProperties,qtiClass)&&(constraintProperty=interactionMinConstraintProperties[qtiClass],constraintValues[attributes.responseIdentifier]=attributes[constraintProperty])}),constraintValues},isAnswered:function(runner,partially){var itemRunner=runner.itemRunner,responses=itemRunner&&itemRunner.getResponses(),count=0,empty=0,declarations,constraintValues;return itemRunner&&(declarations=currentItemHelper.getDeclarations(runner),constraintValues=currentItemHelper.guessInteractionConstraintValues(runner),_.forEach(declarations,function(declaration){var attributes=declaration.attributes||{},response=responses[attributes.identifier],baseType=attributes.baseType,cardinality=attributes.cardinality;count++,currentItemHelper.isQuestionAnswered(response,baseType,cardinality,declaration.defaultValue,constraintValues[attributes.identifier])||empty++})),!1===partially?0<count&&0===empty:0<count&&empty<count},getStimuliHrefs:function(runner){var itemRunner=runner.itemRunner,itemBody=itemRunner._item&&itemRunner._item.bdy||{},interactions=itemBody.elements||{};return _(interactions).values().filter(function(element){return"include"===element.qtiClass}).pluck("attributes").pluck("href").value()},getTextStimuliHrefs:function(runner){var stimuli=this.getStimuliHrefs(runner),textStimuli;return 0<stimuli.length?(textStimuli=stimuli.filter(function(stimulusHref){var domNode=document.querySelector(".qti-include[data-href=\"".concat(stimulusHref,"\"]"));return _(domNode.childNodes).some(function(child){return child.nodeType===child.TEXT_NODE})}),textStimuli):[]}};return currentItemHelper}),define("taoQtiTest/runner/helpers/getTimerMessage",["i18n"],function(__){'use strict';function getTimerMessage(hours,minutes,seconds,unansweredQuestions,scope){var timeArr=[hours,minutes,seconds],timeArgArr=[],timerMessage;[__("hours"),__("minutes"),__("seconds")].forEach(function(unit,idx){0<timeArr[idx]&&timeArgArr.push("".concat(timeArr[idx]," ").concat(unit))});var answeredMessage;if(!unansweredQuestions||"item"===scope)answeredMessage=__("the current question");else{var questionsMessage=__("questions");1===unansweredQuestions&&(questionsMessage=__("question")),answeredMessage=__("remaining %s %s",unansweredQuestions,questionsMessage)}return timerMessage=0===timeArgArr.length?__("%s to answer %s","no time left",answeredMessage):__("%s to answer %s",timeArgArr.join(", "),answeredMessage),timerMessage}return __=__&&Object.prototype.hasOwnProperty.call(__,"default")?__["default"]:__,getTimerMessage}),define("taoQtiTest/runner/helpers/map",["lodash"],function(_){'use strict';function getEmptyStats(){return{questions:0,answered:0,flagged:0,viewed:0,total:0,questionsViewed:0}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;return{getJumps:function(map){return map&&map.jumps},getParts:function(map){return map&&map.parts},getSections:function(map){var parts=this.getParts(map),result={};return _.forEach(parts,function(part){var sections=part.sections;sections&&_.forEach(sections,function(section){result[section.id]=section})}),result},getActiveItem:function(map){var parts=this.getParts(map),result={};return _.forEach(parts,function(part){var sections=part.sections;sections&&_.forEach(sections,function(section){if(section.active){var items=section.items;_.forEach(items,function(item){item.active&&(result=item)})}})}),result},getNextSections:function(map,sectionId){var sections=this.getSections(map),result={},canList=!1;return _.forEach(sections,function(section){canList&&(result[section.id]=section),section.id===sectionId&&(canList=!0)}),result},getJump:function(map,position){var jumps=this.getJumps(map);return jumps&&jumps[position]},getPart:function(map,partName){var parts=this.getParts(map);return parts&&parts[partName]},getSection:function(map,sectionName){var parts=this.getParts(map),section=null;return _.forEach(parts,function(part){var sections=part.sections;if(sections&§ions[sectionName])return section=sections[sectionName],!1}),section},getItem:function(map,itemIdentifier){var jump=_.find(this.getJumps(map),{identifier:itemIdentifier});return this.getItemAt(map,jump&&jump.position)},getItemCategories:function(map,itemIdentifier){var item=this.getItem(map,itemIdentifier);return item&&Array.isArray(item.categories)?item.categories:[]},hasItemCategory:function(map,itemIdentifier,category){var fuzzyMatch=!!(3<arguments.length&&arguments[3]!==void 0)&&arguments[3],taoPrefix="x-tao-option-",categories=this.getItemCategories(map,itemIdentifier);if(!category||!category.length)return!1;var exactMatch=categories.includes(category);if(exactMatch)return!0;if(fuzzyMatch){if(!category.startsWith(taoPrefix)&&category.includes("".concat(taoPrefix).concat(category)))return!0;var normalize=function(elt){return elt.replace(taoPrefix,"").replace(/[-_\s]/g,"").toLowerCase()};return categories.some(function(itemCategory){return normalize(itemCategory)===normalize(category)})}return!1},getTestStats:function(map){return map&&map.stats},getPartStats:function(map,partName){var part=this.getPart(map,partName);return part&&part.stats},getSectionStats:function(map,sectionName){var section=this.getSection(map,sectionName);return section&§ion.stats},getScopeStats:function(map,position,scope){var jump=this.getJump(map,position);switch(scope){case"section":case"testSection":return this.getSectionStats(map,jump&&jump.section);case"part":case"testPart":return this.getPartStats(map,jump&&jump.part);case"testWithoutInaccessibleItems":{var testStats=this.getTestStats(map),_this$getPart=this.getPart(map,jump&&jump.part),currentPartPosition=_this$getPart.position,isCurrentPartLinear=_this$getPart.isLinear,parts=Object.values(this.getParts(map)).filter(function(_ref){var partPosition=_ref.position;return partPosition<currentPartPosition}).sort(function(a,b){return b-a}),linearPartIndex=isCurrentPartLinear?0:parts.findIndex(function(_ref2){var isLinear=_ref2.isLinear;return isLinear});if(-1===linearPartIndex)return testStats;var inaccessibleParts=parts.slice(linearPartIndex),countOfInaccessibleUnasweredQestions=inaccessibleParts.reduce(function(acc,_ref3){var _ref3$stats=_ref3.stats,questions=_ref3$stats.questions,answered=_ref3$stats.answered;return acc+(questions-answered)},0),countOfInaccessibleFlaggedQestions=inaccessibleParts.reduce(function(acc,_ref4){var flagged=_ref4.stats.flagged;return acc+flagged},0);return Object.assign({},testStats,{answered:testStats.answered+countOfInaccessibleUnasweredQestions,flagged:testStats.flagged-countOfInaccessibleFlaggedQestions})}default:case"test":return this.getTestStats(map);}},getScopeMap:function(map,position,scope){var scopeMap=_.cloneDeep(map||{}),jump=this.getJump(scopeMap,position),part=this.getPart(scopeMap,jump&&jump.part),section=this.getSection(scopeMap,jump&&jump.section);return scope&&"test"!==scope&&(scopeMap.parts={},part&&(scopeMap.parts[jump.part]=part)),part&&("section"===scope||"testSection"===scope)&&(part.sections={},section&&(part.sections[jump.section]=section)),section&&(section.stats=this.computeItemStats(section.items)),part&&(part.stats=this.computeStats(part.sections)),scopeMap.stats=this.computeStats(scopeMap.parts),scopeMap},getScopeMapFromContext:function(map,context,scope){var scopeMap=_.cloneDeep(map||{}),part,section;return context&&context.testPartId&&(part=this.getPart(scopeMap,context.testPartId)),context&&context.sectionId&&(section=this.getSection(scopeMap,context.sectionId)),scope&&"test"!==scope&&(scopeMap.parts={},part&&(scopeMap.parts[context.testPartId]=part)),part&&("section"===scope||"testSection"===scope)&&(part.sections={},section&&(part.sections[context.sectionId]=section)),section&&(section.stats=this.computeItemStats(section.items)),part&&(part.stats=this.computeStats(part.sections)),scopeMap.stats=this.computeStats(scopeMap.parts),scopeMap},getItemPart:function(map,position){var jump=this.getJump(map,position);return this.getPart(map,jump&&jump.part)},getItemSection:function(map,position){var jump=this.getJump(map,position),part=this.getPart(map,jump&&jump.part),sections=part&&part.sections;return sections&§ions[jump&&jump.section]},getItemAt:function(map,position){var jump=this.getJump(map,position),part=this.getPart(map,jump&&jump.part),sections=part&&part.sections,section=sections&§ions[jump&&jump.section],items=section&§ion.items;return items&&items[jump&&jump.identifier]},getItemIdentifier:function(map,position){var item;return item=_.isFinite(position)?this.getItemAt(map,position):this.getItem(map,position),item&&item.id},each:function(map,callback){return _.isFunction(callback)&&_.forEach(map&&map.parts,function(part){_.forEach(part&&part.sections,function(section){_.forEach(section&§ion.items,function(item){callback(item,section,part,map)})})}),map},updateItemStats:function(map,position){var jump=this.getJump(map,position),part=this.getPart(map,jump&&jump.part),sections=part&&part.sections,section=sections&§ions[jump&&jump.section];return section&&(section.stats=this.computeItemStats(section.items)),part&&(part.stats=this.computeStats(part.sections)),map&&(map.stats=this.computeStats(map.parts)),map},computeItemStats:function(items){return _.reduce(items,function(acc,item){return item.informational||(acc.questions++,item.answered&&acc.answered++,item.viewed&&acc.questionsViewed++),item.flagged&&acc.flagged++,item.viewed&&acc.viewed++,acc.total++,acc},getEmptyStats())},computeStats:function(collection){return _.reduce(collection,function(acc,item){return acc.questions+=item.stats.questions,acc.answered+=item.stats.answered,acc.flagged+=item.stats.flagged,acc.viewed+=item.stats.viewed,acc.total+=item.stats.total,acc.questionsViewed+=item.stats.questionsViewed,acc},getEmptyStats())},patch:function(currentMap,partialMap){var self=this,targetMap;if(!_.isPlainObject(partialMap)||!partialMap.parts)throw new TypeError("Invalid test map format");return currentMap&&"test"!==partialMap.scope?(targetMap=_.cloneDeep(currentMap),_.forEach(partialMap.parts,function(partialPart,targetPartId){"part"===partialMap.scope&&(targetMap.parts[targetPartId]=_.cloneDeep(partialPart)),"section"===partialMap.scope&&_.forEach(partialPart.sections,function(partialSection,targetSectionId){targetMap.parts[targetPartId].sections[targetSectionId]=_.cloneDeep(partialSection),targetMap.parts[targetPartId].sections[targetSectionId].stats=self.computeItemStats(targetMap.parts[targetPartId].sections[targetSectionId].items)}),targetMap.parts[targetPartId].stats=self.computeStats(targetMap.parts[targetPartId].sections)}),targetMap.stats=this.computeStats(targetMap.parts)):targetMap=_.cloneDeep(partialMap),targetMap=this.reindex(targetMap),targetMap},reindex:function(map){var offset=0,offsetPart=0,offsetSection=0,lastPartId,lastSectionId;if(!_.isPlainObject(map)||!map.parts)throw new TypeError("Invalid test map format");return map.jumps=[],_.sortBy(map&&map.parts,"position").forEach(function(part){_.sortBy(part&&part.sections,"position").forEach(function(section){_.sortBy(section&§ion.items,"position").forEach(function(item){lastPartId!==part.id&&(offsetPart=0,lastPartId=part.id,part.position=offset),lastSectionId!==section.id&&(offsetSection=0,lastSectionId=section.id,section.position=offset),item.position=offset,item.index=offsetSection+1,item.positionInPart=offsetPart,item.positionInSection=offsetSection,map.jumps[offset]={identifier:item.id,section:section.id,part:part.id,position:offset},offset++,offsetSection++,offsetPart++})})}),map},createJumpTable:function(map){if(!_.isPlainObject(map)||!map.parts)throw new TypeError("Invalid test map format");return map.jumps=[],this.each(map,function(item,section,part){var offset=item.position;map.jumps[offset]={identifier:item.id,section:section.id,part:part.id,position:offset}}),map}}}),define("taoQtiTest/runner/helpers/isReviewPanelEnabled",["taoQtiTest/runner/helpers/map"],function(mapHelper){'use strict';function isReviewPanelEnabled(runner){var reviewEnabled=mapHelper.hasItemCategory(runner.getTestMap(),runner.getTestContext().itemIdentifier,"reviewScreen",!0),itemReviewEnabled=runner.getOptions().review.enabled;return reviewEnabled&&itemReviewEnabled}return mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,isReviewPanelEnabled}),define("taoQtiTest/runner/helpers/stats",["lodash","taoQtiTest/runner/helpers/map","taoQtiTest/runner/helpers/currentItem"],function(_,mapHelper,currentItemHelper){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,currentItemHelper=currentItemHelper&&Object.prototype.hasOwnProperty.call(currentItemHelper,"default")?currentItemHelper["default"]:currentItemHelper;return{getInstantStats:function(scope,runner,sync){var map=runner.getTestMap(),context=runner.getTestContext(),item=runner.getCurrentItem(),testPart=runner.getCurrentPart(),stats=_.clone(mapHelper.getScopeStats(map,context.itemPosition,scope));if(!item.informational){var isItemCurrentlyAnswered=currentItemHelper.isAnswered(runner);!isItemCurrentlyAnswered&&item.answered?stats.answered--:(isItemCurrentlyAnswered||sync)&&!item.answered?stats.answered++:sync&&!isItemCurrentlyAnswered&&item.answered&&testPart.isLinear&&stats.answered++}return stats}}}),define("taoQtiTest/runner/helpers/messages",["i18n","taoQtiTest/runner/helpers/stats","handlebars"],function(__,statsHelper,Handlebars){'use strict';function messageHeaderTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function getHeader(scope){var header="";return"section"===scope||"testSection"===scope?header=__("You are about to leave this section."):"test"===scope||"testWithoutInaccessibleItems"===scope?header=__("You are about to submit the test."):"part"===scope&&(header=__("You are about to submit this test part.")),messageHeaderTpl({header:header.trim()})}function getActionMessage(scope){var submitButtonLabel=1<arguments.length&&arguments[1]!==void 0?arguments[1]:__("OK"),msg;return"section"===scope||"testSection"===scope||"part"===scope?(msg=__("Click \"%s\" to continue",submitButtonLabel).trim(),msg&&(msg+="."),msg):"test"===scope||"testWithoutInaccessibleItems"===scope?"".concat(__("You will not be able to access this test once submitted. Click \"%s\" to continue and submit the test.",submitButtonLabel)):""}function getFlaggedItemsWarning(stats){var message=1<arguments.length&&arguments[1]!==void 0?arguments[1]:"",flaggedCount=stats&&stats.flagged;return flaggedCount?message?"".concat(message," ").concat(__("and you flagged %s item(s) that you can review now",flaggedCount.toString())):__("You flagged %s item(s) that you can review now",flaggedCount.toString()):message}function getUnansweredItemsWarning(scope,runner,sync){var stats=statsHelper.getInstantStats(scope,runner,sync),unansweredCount=stats&&stats.questions-stats.answered,flaggedCount=stats&&stats.flagged,itemsCountMessage="";return"section"===scope||"testSection"===scope?(itemsCountMessage=__("You answered %s of %s question(s) for this section of the test",stats.answered.toString(),stats.questions.toString()),flaggedCount&&(itemsCountMessage+=", ".concat(__("and flagged %s of them",flaggedCount.toString())))):"test"===scope||"testWithoutInaccessibleItems"===scope?(1<unansweredCount?itemsCountMessage=__("There are %s unanswered questions",unansweredCount.toString()):1===unansweredCount&&(itemsCountMessage=__("There is %s unanswered question",unansweredCount.toString())),flaggedCount&&(itemsCountMessage=getFlaggedItemsWarning(stats,itemsCountMessage))):"part"===scope&&(1<unansweredCount?itemsCountMessage=__("There are %s unanswered questions in this part of the test",unansweredCount.toString()):1===unansweredCount&&(itemsCountMessage=__("There is %s unanswered question in this part of the test",unansweredCount.toString())),flaggedCount&&(itemsCountMessage=getFlaggedItemsWarning(stats,itemsCountMessage))),itemsCountMessage=itemsCountMessage.trim(),itemsCountMessage}__=__&&Object.prototype.hasOwnProperty.call(__,"default")?__["default"]:__,statsHelper=statsHelper&&Object.prototype.hasOwnProperty.call(statsHelper,"default")?statsHelper["default"]:statsHelper,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars;var Template=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var buffer="",stack1,helper;return buffer+="<b>",(helper=helpers.header)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.header,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</b><br><br>",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var escapeExpression=this.escapeExpression,self=this,stack1;return stack1=helpers["if"].call(depth0,depth0&&depth0.header,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),stack1||0===stack1?stack1:""});return{getExitMessage:function(scope,runner){var message=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",sync=3<arguments.length?arguments[3]:void 0,submitButtonLabel=4<arguments.length?arguments[4]:void 0,itemsCountMessage="",testRunnerOptions=runner.getOptions(),messageEnabled=testRunnerOptions.enableUnansweredItemsWarning;return messageEnabled&&(itemsCountMessage=getUnansweredItemsWarning(scope,runner,sync).trim(),itemsCountMessage&&(itemsCountMessage+=".")),"".concat(getHeader(scope)).concat(itemsCountMessage," ").concat(getActionMessage(scope,submitButtonLabel)).concat(message).trim()}}}),define("taoQtiTest/runner/helpers/navigation",["lodash","taoQtiTest/runner/helpers/map"],function(_,mapHelper){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper;var navigationHelper={isLeavingSection:function(testContext,testMap,direction,scope,position){var section,sectionStats,nbItems,item;if(_.isPlainObject(testContext)&&_.isPlainObject(testMap)&&!_.isEmpty(testContext.sectionId)&&!_.isEmpty(testContext.itemIdentifier))return section=mapHelper.getSection(testMap,testContext.sectionId),sectionStats=mapHelper.getSectionStats(testMap,testContext.sectionId),nbItems=sectionStats&§ionStats.total,item=mapHelper.getItem(testMap,testContext.itemIdentifier),"section"===scope||"testPart"===scope||"next"===direction&&item.positionInSection+1===nbItems||"previous"===direction&&0===item.positionInSection||"jump"===direction&&0<position&&(position<section.position||position>=section.position+nbItems);throw new TypeError("Invalid test context and test map")},isLeavingTestPart:function(testContext,testMap,direction,scope,position){var testPart,testPartStats,nbItems,item,section,sectionStats;if(_.isPlainObject(testContext)&&_.isPlainObject(testMap)&&!_.isEmpty(testContext.testPartId)&&!_.isEmpty(testContext.sectionId)&&!_.isEmpty(testContext.itemIdentifier))return testPart=mapHelper.getPart(testMap,testContext.testPartId),testPartStats=mapHelper.getPartStats(testMap,testContext.testPartId),nbItems=testPartStats&&testPartStats.total,item=mapHelper.getItem(testMap,testContext.itemIdentifier),"section"===scope&&(section=mapHelper.getSection(testMap,testContext.sectionId),sectionStats=mapHelper.getSectionStats(testMap,testContext.sectionId)),"testPart"===scope||"next"===direction&&"item"===scope&&item.positionInPart+1===nbItems||"next"===direction&&"section"===scope&§ion.position+sectionStats.total>=nbItems||"previous"===direction&&"item"===scope&&0===item.positionInPart||"previous"===direction&&"section"===scope&§ion.position===testPart.position||"jump"===direction&&0<position&&(position<testPart.position||position>=testPart.position+nbItems);throw new TypeError("Invalid test context and test map")},isLast:function(testMap,itemIdentifier){return this.isLastOf(testMap,itemIdentifier,"test")},isFirst:function(testMap,itemIdentifier){return this.isFirstOf(testMap,itemIdentifier,"test")},isLastOf:function(testMap,itemIdentifier,scope){var item,stats;if(!_.isPlainObject(testMap))throw new TypeError("Invalid test map");if(_.isEmpty(itemIdentifier))throw new TypeError("Invalid item identifier");if(scope=scope||"test",item=mapHelper.getItem(testMap,itemIdentifier),stats=mapHelper.getScopeStats(testMap,item.position,scope),stats&&_.isNumber(stats.total)){if("test"===scope)return item.position+1===stats.total;if("section"===scope||"assessmentSection"===scope||"testSection"===scope)return item.positionInSection+1===stats.total;if("part"===scope||"testPart"===scope)return item.positionInPart+1===stats.total}return!1},isFirstOf:function(testMap,itemIdentifier,scope){var item;if(!_.isPlainObject(testMap))throw new TypeError("Invalid test map");if(_.isEmpty(itemIdentifier))throw new TypeError("Invalid item identifier");return scope=scope||"test",item=mapHelper.getItem(testMap,itemIdentifier),"test"===scope?0===item.position:"section"===scope||"assessmentSection"===scope||"testSection"===scope?0===item.positionInSection:("part"===scope||"testPart"===scope)&&0===item.positionInPart},getSiblingItems:function(testMap,itemPosition,direction,size){var itemId=mapHelper.getItemIdentifier(testMap,itemPosition),previous=null,siblings=[],itemChain=_.reduce(testMap&&testMap.jumps,function(map,jump){var ref=jump.identifier;return previous&&(map[previous].next=ref),map[ref]={identifier:ref,previous:previous,next:null},previous=ref,map},{}),directions;return size=_.isFinite(size)?parseInt(size,10):3,directions=direction&&"both"!==direction?[direction]:["previous","next"],_.forEach(directions,function(link){var id=itemId;_.times(size,function(){return id=itemChain[id]&&itemChain[id][link],!!id&&void siblings.push(mapHelper.getItem(testMap,id))})}),siblings},getNextItem:function(testMap,itemPosition){var siblings=navigationHelper.getSiblingItems(testMap,itemPosition,"next",1);return siblings.length?siblings[0]:null},getPreviousItem:function(testMap,itemPosition){var siblings=navigationHelper.getSiblingItems(testMap,itemPosition,"previous",1);return siblings.length?siblings[0]:null},isMovingToNextItem:function(action,params){return params=params||{},"timeout"===action||"skip"===action||"move"===action&&"next"===params.direction&&"item"===params.scope},isMovingToPreviousItem:function(action,params){return params=params||{},"move"===action&&"previous"===params.direction&&"item"===params.scope},isJumpingToItem:function(action,params){return params=params||{},"move"===action&&"jump"===params.direction&&"item"===params.scope}};return navigationHelper}),define("taoQtiTest/runner/helpers/offlineErrorHelper",["lodash","i18n"],function(_,__){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,__=__&&Object.prototype.hasOwnProperty.call(__,"default")?__["default"]:__;return{buildErrorFromContext:function(errorData,context){var err=_.assign(new Error(errorData.message),errorData.data);return _.assign(err,context||{})},getOfflineNavError:function(){return{message:__("We are unable to connect to the server to retrieve the next item."),data:{success:!1,source:"navigator",purpose:"proxy",type:"nav",code:404}}},getOfflineExitError:function(){return{message:__("We are unable to connect the server to submit your results."),data:{success:!1,source:"navigator",purpose:"proxy",type:"finish",code:404}}},getOfflinePauseError:function(){return{message:__("The test has been paused, we are unable to connect to the server."),data:{success:!1,source:"navigator",purpose:"proxy",type:"pause",code:404}}}}}),define("taoQtiTest/runner/helpers/offlineSyncModal",["jquery","i18n","core/polling","ui/hider","ui/waitingDialog/waitingDialog","handlebars","util/shortcut/registry","util/shortcut"],function($$1,__,polling,hider,waitingDialogFactory,Handlebars,shortcutRegistry,globalShortcut){'use strict';function offlineSyncModalCountdownTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function offlineSyncModalWaitContentTpl(data,options,asString){var html=Template$1(data,options);return asString||!0?html:$(html)}function offlineSyncModalFactory(proxy){var waitingConfig={message:__("You are currently working offline."),waitContent:offlineSyncModalWaitContentTpl(),proceedContent:__("Your connection seems to be back, please proceed."),proceedButtonText:__("PROCEED & END ASSESSMENT"),showSecondary:!0,secondaryButtonText:__("Download"),secondaryButtonIcon:"download",buttonSeparatorText:__("or"),width:"600px"},betweenButtonTextSelector=".between-buttons-text",$countdown=$$1(offlineSyncModalCountdownTpl()),dialogShortcut=shortcutRegistry($$1("body"),{propagate:!1,prevent:!0}),$secondaryButton,delaySec,countdownPolling;dialogShortcut.disable().set("Tab Shift+Tab");var waitingDialog=waitingDialogFactory(waitingConfig),getDialogEl=function(selector){return waitingDialog.dialog.getDom().find(selector)};return waitingDialog.on("render",function(){delaySec=60,$secondaryButton=getDialogEl("button[data-control=\"secondary\"]"),$countdown.insertAfter($secondaryButton),proxy.after("reconnect.waiting",function(){waitingDialog.endWait(),hider.hide(getDialogEl("p.message"))}),proxy.before("disconnect.waiting",function(){waitingDialog.dialog.show(),waitingDialog.beginWait()}),waitingDialog.is("waiting")&&waitingDialog.trigger("begincountdown"),globalShortcut.disable(),dialogShortcut.enable()}).on("destroy",function(){proxy.off(".waiting"),globalShortcut.enable(),dialogShortcut.disable(),dialogShortcut.clear()}).on("wait",function(){hider.show(getDialogEl(betweenButtonTextSelector)),hider.show(getDialogEl("p.message")),waitingDialog.is("rendered")&&waitingDialog.trigger("begincountdown")}).on("begincountdown",function(){$secondaryButton.prop("disabled",!0),countdownPolling=polling({action:function(){delaySec--,$countdown.html(__("The download will be available in <strong>%d</strong> seconds",delaySec)),1>delaySec&&(this.stop(),$secondaryButton.removeProp("disabled"),$countdown.html(""))},interval:1e3,autoStart:!0})}).on("unwait",function(){countdownPolling.stop(),$secondaryButton.prop("disabled",!0),$countdown.html(""),hider.hide(getDialogEl(betweenButtonTextSelector))}),waitingDialog}$$1=$$1&&Object.prototype.hasOwnProperty.call($$1,"default")?$$1["default"]:$$1,__=__&&Object.prototype.hasOwnProperty.call(__,"default")?__["default"]:__,polling=polling&&Object.prototype.hasOwnProperty.call(polling,"default")?polling["default"]:polling,hider=hider&&Object.prototype.hasOwnProperty.call(hider,"default")?hider["default"]:hider,waitingDialogFactory=waitingDialogFactory&&Object.prototype.hasOwnProperty.call(waitingDialogFactory,"default")?waitingDialogFactory["default"]:waitingDialogFactory,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars,shortcutRegistry=shortcutRegistry&&Object.prototype.hasOwnProperty.call(shortcutRegistry,"default")?shortcutRegistry["default"]:shortcutRegistry,globalShortcut=globalShortcut&&Object.prototype.hasOwnProperty.call(globalShortcut,"default")?globalShortcut["default"]:globalShortcut;var Template=Handlebars.template(function(Handlebars,depth0,helpers){return this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),"<p class=\"button-subtext\"></p>\n"}),Template$1=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",helperMissing=helpers.helperMissing,escapeExpression=this.escapeExpression,helper,options;return buffer+="<div class=\"wait-content\">\n <p>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"It is not possible to save your responses while working offline.",options):helperMissing.call(depth0,"__","It is not possible to save your responses while working offline.",options)))+"</p>\n <p class=\"wait-content_text\"><strong>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Option A",options):helperMissing.call(depth0,"__","Option A",options)))+"</strong></p>\n <ul class=\"wait-content_actions-list\">\n <li>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Wait for your connection to come back online.",options):helperMissing.call(depth0,"__","Wait for your connection to come back online.",options)))+"</li>\n <li>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Try connecting the machine to the internet via cable, or move to an area with a better wifi signal.",options):helperMissing.call(depth0,"__","Try connecting the machine to the internet via cable, or move to an area with a better wifi signal.",options)))+"</li>\n <li>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"If the connection cannot be restored, see option B.",options):helperMissing.call(depth0,"__","If the connection cannot be restored, see option B.",options)))+"</li>\n </ul>\n <p class=\"wait-content_text\"><strong>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Option B",options):helperMissing.call(depth0,"__","Option B",options)))+"</strong></p>\n <ul class=\"wait-content_actions-list\">\n <li>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Download the pupil responses and submit manually.",options):helperMissing.call(depth0,"__","Download the pupil responses and submit manually.",options)))+"</li>\n </ul>\n <p>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Step 1: Download the file (see below when available).",options):helperMissing.call(depth0,"__","Step 1: Download the file (see below when available).",options)))+" <strong>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Do not rename it.",options):helperMissing.call(depth0,"__","Do not rename it.",options)))+"</strong></p>\n <p>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Step 2: When you are online again, please send the downloaded file to receptionbaseline@nfer.ac.uk together with the ",options):helperMissing.call(depth0,"__","Step 2: When you are online again, please send the downloaded file to receptionbaseline@nfer.ac.uk together with the ",options)))+"\n <strong>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"name of the pupil",options):helperMissing.call(depth0,"__","name of the pupil",options)))+"</strong> "+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"and",options):helperMissing.call(depth0,"__","and",options)))+" <strong>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"the assessment (LCL or Mathematics)",options):helperMissing.call(depth0,"__","the assessment (LCL or Mathematics)",options)))+"</strong> "+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"that was being taken.",options):helperMissing.call(depth0,"__","that was being taken.",options)))+"\n </p>\n <p>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Step 3: Once you have downloaded the file you can close the browser window. Do not do anything further with the assessment whilst it shows as \"in progress\"; the status will be updated once the helpline has uploaded the file.",options):helperMissing.call(depth0,"__","Step 3: Once you have downloaded the file you can close the browser window. Do not do anything further with the assessment whilst it shows as \"in progress\"; the status will be updated once the helpline has uploaded the file.",options)))+"</p>\n <br />\n <p>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"If you need help, please contact our Helpline on 0330 088 4171.",options):helperMissing.call(depth0,"__","If you need help, please contact our Helpline on 0330 088 4171.",options)))+"</p>\n</div>",buffer});return offlineSyncModalFactory}),define("taoQtiTest/runner/helpers/testContextBuilder",["lodash","util/capitalize","taoQtiTest/runner/helpers/map","taoQtiTest/runner/helpers/navigation"],function(_,capitalize,mapHelper,navigationHelper){'use strict';function buildTestContextFromPosition(testContext,testMap,position,attempt){var updatedMap=mapHelper.updateItemStats(testMap,position),item=mapHelper.getItemAt(updatedMap,position),section=mapHelper.getItemSection(updatedMap,position),part=mapHelper.getItemPart(updatedMap,position);return!!item&&getTestContext(testContext,testMap,item,section,part,position,attempt)}function getTestContext(testContext,testMap,item,section,part,position,attempt){var _Mathmax=Math.max,isLeavingSection=section.id!==testContext.sectionId,isLeavingPart=part.id!==testContext.testPartId,newTestContext=_.defaults({itemIdentifier:item.id,itemPosition:position,remainingAttempts:_Mathmax(-1,item.remainingAttempts-1),sectionId:section.id,sectionTitle:section.label,testPartId:part.id,canMoveBackward:!part.isLinear&&!navigationHelper.isFirst(testMap,item.id)},testContext);return attempt&&(newTestContext.attempt=attempt+1),isLeavingSection&&(newTestContext.numberRubrics=0,newTestContext.rubrics=""),newTestContext.timeConstraints=_.reject(testContext.timeConstraints,function(constraint){return"assessmentItemRef"===constraint.qtiClassName||isLeavingSection&&"assessmentSection"===constraint.qtiClassName||isLeavingPart&&"testPart"===constraint.qtiClassName}),item.timeConstraint&&newTestContext.timeConstraints.push(item.timeConstraint),isLeavingSection&§ion.timeConstraint&&newTestContext.timeConstraints.push(section.timeConstraint),isLeavingPart&&part.timeConstraint&&newTestContext.timeConstraints.push(part.timeConstraint),newTestContext.options=_.defaults(getOptionsFromCategories(item.categories||[]),_.pick(testContext.options,["allowComment","allowSkipping","exitButton","logoutButton"])),newTestContext}function getOptionsFromCategories(categories){return _.isArray(categories)&&categories.length?_.reduce(categories,function(acc,category){var categoryName;return _.isString(category)&&!_.isEmpty(category)&&(categoryName=category.replace("x-tao-option-","").split(/[-_]+/g).map(function(name,index){return 0===index?name:name.length?capitalize(name):""}).join(""),categoryName&&(acc[categoryName]=!0)),acc},{}):{}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,capitalize=capitalize&&Object.prototype.hasOwnProperty.call(capitalize,"default")?capitalize["default"]:capitalize,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,navigationHelper=navigationHelper&&Object.prototype.hasOwnProperty.call(navigationHelper,"default")?navigationHelper["default"]:navigationHelper;return{buildTestContextFromPosition:buildTestContextFromPosition,buildTestContextFromJump:function(testContext,testMap,jump,attempt){var part=testMap.parts[jump.part],section=part.sections[jump.section],item=section.items[jump.item];return getTestContext(testContext,testMap,item,section,part,jump.position,attempt)}}}),define("taoQtiTest/runner/navigator/navigator",["lodash","taoQtiTest/runner/helpers/map","taoQtiTest/runner/helpers/testContextBuilder"],function(_,mapHelper,testContextBuilder){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,testContextBuilder=testContextBuilder&&Object.prototype.hasOwnProperty.call(testContextBuilder,"default")?testContextBuilder["default"]:testContextBuilder;var navigatorFactory=function(testContext,testMap){if(!_.all([testContext,testMap],_.isPlainObject))throw new TypeError("The navigator must be built with a testData, a testContext and a testMap");return{navigate:function(direction,scope,position){var methodName=direction.toLowerCase()+scope.substr(0,1).toUpperCase()+scope.substr(1).toLowerCase();if(_.isFunction(this[methodName]))return this[methodName](position)},nextItem:function(){return testContextBuilder.buildTestContextFromPosition(testContext,testMap,testContext.itemPosition+1)},previousItem:function(){return testContextBuilder.buildTestContextFromPosition(testContext,testMap,testContext.itemPosition-1)},nextSection:function(){var sectionStats=mapHelper.getSectionStats(testMap,testContext.sectionId),section=mapHelper.getSection(testMap,testContext.sectionId);return testContextBuilder.buildTestContextFromPosition(testContext,testMap,section.position+sectionStats.total)},jumpItem:function(position){return testContextBuilder.buildTestContextFromPosition(testContext,testMap,position)}}};return navigatorFactory}),define("taoQtiTest/runner/branchRule/helpers/branchRuleHelper",["lodash"],function(_){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;return{evaluateSubBranchRules:function(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore){return new Promise(function(resolve,reject){var subBranchRuleResults=[],promises=[];branchRuleDefinition=_.omit(branchRuleDefinition,["@attributes"]),promises=_.map(branchRuleDefinition,function(subBranchRule,subBranchRuleName){return branchRuleMapper(subBranchRuleName,branchRuleDefinition[subBranchRuleName],item,navigationParams,responseStore).validate()}),Promise.all(promises).then(function(results){_.forEach(results,function(subBranchRuleResult){Array.isArray(subBranchRuleResult)?subBranchRuleResult.forEach(function(value){subBranchRuleResults.push(value)}):subBranchRuleResults.push(subBranchRuleResult)}),resolve(subBranchRuleResults)}).catch(function(err){reject(err)})})}}}),define("taoQtiTest/runner/branchRule/types/match",["lodash"],function(_){'use strict';return _=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,function(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore){var variableIdentifier=branchRuleDefinition.variable["@attributes"].identifier,correctIdentifier=branchRuleDefinition.correct["@attributes"].identifier;return{validate:function(){return Promise.all([responseStore.getCorrectResponse(correctIdentifier),responseStore.getResponse(variableIdentifier)]).then(function(result){return _.contains(result[0],result[1])})}}}}),define("taoQtiTest/runner/branchRule/types/or",["taoQtiTest/runner/branchRule/helpers/branchRuleHelper"],function(branchRuleHelper){'use strict';return branchRuleHelper=branchRuleHelper&&Object.prototype.hasOwnProperty.call(branchRuleHelper,"default")?branchRuleHelper["default"]:branchRuleHelper,function(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore){return{validate:function(){return branchRuleHelper.evaluateSubBranchRules(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore).then(function(subBranchRuleResults){return subBranchRuleResults.some(function(value){return value})})}}}}),define("taoQtiTest/runner/branchRule/types/and",["taoQtiTest/runner/branchRule/helpers/branchRuleHelper"],function(branchRuleHelper){'use strict';return branchRuleHelper=branchRuleHelper&&Object.prototype.hasOwnProperty.call(branchRuleHelper,"default")?branchRuleHelper["default"]:branchRuleHelper,function(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore){return{validate:function(){return branchRuleHelper.evaluateSubBranchRules(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore).then(function(subBranchRuleResults){return subBranchRuleResults.every(function(value){return value})})}}}}),define("taoQtiTest/runner/branchRule/types/not",["lodash"],function(_){'use strict';return _=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,function(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore){return Array.isArray(branchRuleDefinition)||(branchRuleDefinition=[branchRuleDefinition]),{validate:function(){var promises=branchRuleDefinition.map(function(expression){var subBranchRuleName=_.head(_.keys(expression)),subBranchRuleDefinition=expression[subBranchRuleName];return branchRuleMapper(subBranchRuleName,subBranchRuleDefinition,item,navigationParams,responseStore).validate()});return Promise.all(promises).then(function(results){return _.map(results,function(result){return!result})})}}}}),define("taoQtiTest/runner/branchRule/branchRuleMapper",["taoQtiTest/runner/branchRule/types/match","taoQtiTest/runner/branchRule/types/or","taoQtiTest/runner/branchRule/types/and","taoQtiTest/runner/branchRule/types/not"],function(matchBranchRule,orBranchRule,andBranchRule,notBranchRule){'use strict';function branchRuleMapperFactory(branchRuleName,branchRuleDefinition,item,navigationParams,responseStore){if(!(branchRuleName in branchRuleMap))throw new Error("Invalid branch rule name: ".concat(branchRuleName));return branchRuleMap[branchRuleName](branchRuleDefinition,item,navigationParams,branchRuleMapperFactory,responseStore)}matchBranchRule=matchBranchRule&&Object.prototype.hasOwnProperty.call(matchBranchRule,"default")?matchBranchRule["default"]:matchBranchRule,orBranchRule=orBranchRule&&Object.prototype.hasOwnProperty.call(orBranchRule,"default")?orBranchRule["default"]:orBranchRule,andBranchRule=andBranchRule&&Object.prototype.hasOwnProperty.call(andBranchRule,"default")?andBranchRule["default"]:andBranchRule,notBranchRule=notBranchRule&&Object.prototype.hasOwnProperty.call(notBranchRule,"default")?notBranchRule["default"]:notBranchRule;var branchRuleMap={match:matchBranchRule,or:orBranchRule,and:andBranchRule,not:notBranchRule};return branchRuleMapperFactory}),define("taoQtiTest/runner/branchRule/branchRule",["taoQtiTest/runner/branchRule/helpers/branchRuleHelper","taoQtiTest/runner/branchRule/branchRuleMapper"],function(branchRuleHelper,branchRuleMapper){'use strict';return branchRuleHelper=branchRuleHelper&&Object.prototype.hasOwnProperty.call(branchRuleHelper,"default")?branchRuleHelper["default"]:branchRuleHelper,branchRuleMapper=branchRuleMapper&&Object.prototype.hasOwnProperty.call(branchRuleMapper,"default")?branchRuleMapper["default"]:branchRuleMapper,function(branchRuleDefinition,item,navigationParams,responseStore){return new Promise(function(resolve){var result;return"undefined"==typeof branchRuleDefinition["@attributes"]||"undefined"==typeof branchRuleDefinition["@attributes"].target?resolve(null):void branchRuleHelper.evaluateSubBranchRules(branchRuleDefinition,item,navigationParams,branchRuleMapper,responseStore).then(function(branchRuleResults){return result=branchRuleResults.every(function(branchRuleResult){return branchRuleResult}),result?resolve(branchRuleDefinition["@attributes"].target):void resolve(null)})})}}),define("taoQtiTest/runner/services/offlineJumpTable",["lodash","taoQtiTest/runner/branchRule/branchRule","taoQtiTest/runner/helpers/map"],function(_,branchRule,mapHelper){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,branchRule=branchRule&&Object.prototype.hasOwnProperty.call(branchRule,"default")?branchRule["default"]:branchRule,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper;return function(itemStore,responseStore){function addResponsesToResponseStore(params){params.itemResponse&&_.forEach(params.itemResponse,function(response,itemResponseIdentifier){var responseIdentifier="".concat(params.itemDefinition,".").concat(itemResponseIdentifier);_.forEach(response,function(responseEntry){var responseId=responseEntry&&responseEntry.identifier;Array.isArray(responseId)?responseId.forEach(function(id){responseStore.addResponse(responseIdentifier,id)}):responseStore.addResponse(responseIdentifier,responseId)})})}function getItems(map){return _.uniq(_.map(getSimplifiedTestMap(map),function(row){return row.item}))}function getSections(map){return _.uniq(_.map(getSimplifiedTestMap(map),function(row){return row.section}))}function getSimplifiedTestMap(map){var simplifiedTestMap=[];return mapHelper.each(map,function(item,section,part){simplifiedTestMap.push({item:item.id,itemHasBranchRule:!_.isEmpty(item.branchRule),itemBranchRule:item.branchRule,section:section.id,sectionHasBranchRule:!_.isEmpty(section.branchRule),sectionBranchRule:section.branchRule,part:part.id,partHasBranchRule:!_.isEmpty(part.branchRule),partBranchRule:part.branchRule})}),simplifiedTestMap}var testMap={},jumpTable=[];return{setTestMap:function(map){return testMap=map,this},buildJumpTable:function(testContext){function calculateNextJump(){var lastJumpItem=self.getLastJump().item||null;return contextItemId===lastJumpItem?Promise.resolve():itemStore.get(lastJumpItem).then(function(item){var itemResponse={};return _.forEach(item.itemState,function(state,itemStateIdentifier){itemResponse[itemStateIdentifier]=state.response}),self.jumpToNextItem(Object.assign({},item,{itemResponse:itemResponse,itemDefinition:item.itemIdentifier})).then(calculateNextJump)})}var self=this,simplifiedTestMap=getSimplifiedTestMap(testMap),contextItemId=testContext?testContext.itemIdentifier:null,contextItemPosition=contextItemId?testContext.itemPosition:null,firstJumpItem=simplifiedTestMap[0];return firstJumpItem&&this.addJump(firstJumpItem.part,firstJumpItem.section,firstJumpItem.item),contextItemPosition?calculateNextJump():Promise.resolve()},putCorrectResponsesInStore:function(){var simplifiedTestMap=getSimplifiedTestMap(testMap),promises=[];return simplifiedTestMap.forEach(function(row){promises.push(itemStore.get(row.item).then(function(item){item&&_.forEach(item.itemData.data.responses,function(response){var responseIdentifier="".concat(item.itemIdentifier,".").concat(response.identifier);responseStore.addCorrectResponse(responseIdentifier,response.correctResponses)})}).catch(function(err){return Promise.reject(err)}))}),Promise.all(promises)},init:function(testContext){var _this=this;return this.putCorrectResponsesInStore().then(function(){return _this.buildJumpTable(testContext)})},clearJumpTable:function(){return jumpTable=[],this},addJump:function(partIdentifier,sectionIdentifier,itemIdentifier){var self=this;return new Promise(function(resolve){var lastJump=self.getLastJump(),nextPosition="undefined"==typeof lastJump.position?0:lastJump.position+1;jumpTable.push({item:itemIdentifier,part:partIdentifier,section:sectionIdentifier,position:nextPosition}),resolve()})},jumpTo:function(position){return jumpTable=jumpTable.filter(function(jump){return jump.position<=position}),this},jumpToSkipItem:function(){var self=this;return new Promise(function(resolve){var simplifiedTestMap=getSimplifiedTestMap(testMap),lastJumpItem=self.getLastJump().item||null,items=getItems(testMap),itemSliceIndex=items.indexOf(lastJumpItem),itemIdentifierToAdd=items.slice(itemSliceIndex+1).shift(),itemToAdd=simplifiedTestMap.filter(function(row){return row.item===itemIdentifierToAdd}).shift();return itemToAdd?self.addJump(itemToAdd.part,itemToAdd.section,itemToAdd.item).then(resolve):resolve()})},jumpToNextItem:function(params){var self=this;return addResponsesToResponseStore(params),new Promise(function(resolve){var simplifiedTestMap=getSimplifiedTestMap(testMap),lastJumpItem=self.getLastJump().item||null,items=getItems(testMap),itemSliceIndex=items.indexOf(lastJumpItem),itemIdentifierToAdd=items.slice(itemSliceIndex+1).shift(),itemToAdd=simplifiedTestMap.filter(function(row){return row.item===itemIdentifierToAdd}).shift(),lastJumpItemData=simplifiedTestMap.filter(function(row){return row.item===lastJumpItem}).shift();return lastJumpItemData&&lastJumpItemData.itemHasBranchRule?itemStore.get(lastJumpItem).then(function(item){branchRule(lastJumpItemData.itemBranchRule,item,params,responseStore).then(function(itemIdentifierToAddd){null!==itemIdentifierToAddd&&(itemToAdd=simplifiedTestMap.filter(function(row){return row.item===itemIdentifierToAddd}).shift()),self.addJump(itemToAdd.part,itemToAdd.section,itemToAdd.item).then(resolve)}).catch(function(err){return Promise.reject(err)})}).catch(function(err){return Promise.reject(err)}):itemToAdd?self.addJump(itemToAdd.part,itemToAdd.section,itemToAdd.item).then(resolve):resolve()})},jumpToNextSection:function(){var self=this;return new Promise(function(resolve){var simplifiedTestMap=getSimplifiedTestMap(testMap),lastJumpSection=self.getLastJump().section||null,sections=getSections(testMap),sectionSliceIndex=sections.indexOf(lastJumpSection),sectionIdentifierToAdd=sections.slice(sectionSliceIndex+1).shift(),itemToAdd=simplifiedTestMap.filter(function(row){return row.section===sectionIdentifierToAdd}).shift();return itemToAdd?self.addJump(itemToAdd.part,itemToAdd.section,itemToAdd.item).then(resolve):resolve()})},jumpToPreviousItem:function(){return new Promise(function(resolve){jumpTable.pop(),resolve()})},getJumpTable:function(){return jumpTable},getLastJump:function(){return 0<jumpTable.length?jumpTable[jumpTable.length-1]:{}}}}}),define("taoQtiTest/runner/navigator/offlineNavigator",["util/capitalize","taoQtiTest/runner/services/offlineJumpTable","taoQtiTest/runner/helpers/testContextBuilder"],function(capitalize,offlineJumpTableFactory,testContextBuilder){'use strict';function offlineNavigatorFactory(itemStore,responseStore){var offlineJumpTableHelper=offlineJumpTableFactory(itemStore,responseStore),testContext,testMap;return{setTestData:function(){return this},setTestContext:function(context){return testContext=context,this},setTestMap:function(map){return testMap=map,this},init:function(){return offlineJumpTableHelper.setTestMap(testMap),offlineJumpTableHelper.init(testContext)},clearJumpTable:function(){return offlineJumpTableHelper.clearJumpTable(),this},navigate:function(direction,scope,position,params){return new Promise(function(resolve,reject){var navigationActionName="jumpTo".concat(capitalize(direction)).concat(capitalize(scope)),lastJump;if("undefined"==typeof offlineJumpTableHelper[navigationActionName]||"function"!=typeof offlineJumpTableHelper[navigationActionName])throw new Error("Invalid navigation action");offlineJumpTableHelper[navigationActionName](params).then(function(){lastJump=offlineJumpTableHelper.getLastJump(),itemStore.get(lastJump.item).then(function(itemFromStore){var newTestContext=testContextBuilder.buildTestContextFromJump(testContext,testMap,lastJump,itemFromStore.attempt);itemStore.update(newTestContext.itemIdentifier,"attempt",newTestContext.attempt).then(function(){return resolve(newTestContext)})})}).catch(function(err){reject(err)})})}}}return capitalize=capitalize&&Object.prototype.hasOwnProperty.call(capitalize,"default")?capitalize["default"]:capitalize,offlineJumpTableFactory=offlineJumpTableFactory&&Object.prototype.hasOwnProperty.call(offlineJumpTableFactory,"default")?offlineJumpTableFactory["default"]:offlineJumpTableFactory,testContextBuilder=testContextBuilder&&Object.prototype.hasOwnProperty.call(testContextBuilder,"default")?testContextBuilder["default"]:testContextBuilder,offlineNavigatorFactory}),define("taoQtiTest/runner/provider/dataUpdater",["lodash","taoQtiTest/runner/helpers/map","taoQtiTest/runner/config/states"],function(_,mapHelper,states){'use strict';function dataUpdaterFactory(testDataHolder){if(!testDataHolder||!_.isFunction(testDataHolder.get)||!_.isFunction(testDataHolder.set))throw new TypeError("A data holder is mandatory for the udpater");return{update:function(dataSet){var self=this,isContextual=function(contextualData){return contextualData&&(_.isPlainObject(contextualData.testContext)||_.isPlainObject(contextualData.testData)||_.isPlainObject(contextualData.testMap))},updateData=function(contextualData){var builtTestMap,updatedTestMap;contextualData&&(_.isPlainObject(contextualData.testData)&&testDataHolder.set("testData",contextualData.testData),_.isPlainObject(contextualData.testContext)&&testDataHolder.set("testContext",contextualData.testContext),_.isPlainObject(contextualData.testMap)&&(builtTestMap=self.buildTestMap(contextualData.testMap),builtTestMap&&testDataHolder.set("testMap",builtTestMap)),updatedTestMap=self.updateStats(),updatedTestMap&&testDataHolder.set("testMap",updatedTestMap))};isContextual(dataSet)?updateData(dataSet):updateData(_.findLast(dataSet,isContextual))},buildTestMap:function(testMap){var newMap=null;return testMap&&(testMap.scope&&"test"!==testMap.scope?newMap=mapHelper.patch(testDataHolder.get("testMap"),testMap):newMap=mapHelper.reindex(testMap)),newMap},updateStats:function(){var testMap=testDataHolder.get("testMap"),testContext=testDataHolder.get("testContext"),updatedTestMap=null;if(testMap&&testContext&&_.isNumber(testContext.itemPosition)){var item=mapHelper.getItemAt(testMap,testContext.itemPosition);if(item&&testContext.state===states.testSession.interacting){var testPart=mapHelper.getPart(testMap,testContext.testPartId);item.viewed=!0,testPart&&testPart.isLinear&&(item.answered=!0),updatedTestMap=mapHelper.updateItemStats(testMap,testContext.itemPosition)}}return updatedTestMap},updatePluginsConfig:function(plugins,pluginsConfig){if(!pluginsConfig){var testData=testDataHolder.get("testData");pluginsConfig=testData&&testData.config&&testData.config.plugins}plugins&&pluginsConfig&&_.forEach(pluginsConfig,function(config,pluginName){_.isPlainObject(plugins[pluginName])&&_.isFunction(plugins[pluginName].setConfig)&&_.isPlainObject(config)&&plugins[pluginName].setConfig(config)})}}}return _=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,states=states&&Object.prototype.hasOwnProperty.call(states,"default")?states["default"]:states,dataUpdaterFactory}),define("taoQtiTest/runner/provider/toolStateBridge",["lodash"],function(_){'use strict';function toolStateBridgeFactory(testStore,activePlugins){var tools=[];if(!testStore||!_.isFunction(testStore.getStore))throw new TypeError("The toolStateBridge should be initialized with a testStore");if(!_.isArray(activePlugins)||!activePlugins.length)throw new TypeError("The toolStateBridge should be initialized with a the list of active plugins");return{setTools:function(toolNames){return tools=_(toolNames).filter(function(toolName){return _.contains(activePlugins,toolName)}).map(function(toolName){return testStore.startChangeTracking(toolName),toolName}).value(),this},getTools:function(){return tools},restoreState:function(toolName,toolState){return _.contains(tools,toolName)&&_.isPlainObject(toolState)?testStore.getStore(toolName).then(function(toolStore){return toolStore.clear().then(function(){return toolStore})}).then(function(toolStore){return Promise.all(_.map(toolState,function(value,key){return toolStore.setItem(key,value)}))}).then(function(){return testStore.resetChanges(toolName),!0}):Promise.resolve(!1)},restoreStates:function(states){var self=this;return Promise.all(_.map(states,function(toolState,toolName){return self.restoreState(toolName,toolState).then(function(result){var formattedResult={};return formattedResult[toolName]=result,formattedResult})})).then(mergeCollection)},getState:function(toolName,reset){return _.contains(tools,toolName)&&testStore.hasChanges(toolName)?testStore.getStore(toolName).then(function(toolStore){return!1!==reset&&testStore.resetChanges(toolName),toolStore.getItems()}):Promise.resolve(!1)},getStates:function(){var self=this;return Promise.all(_.map(tools,function(toolName){return self.getState(toolName).then(function(toolState){var formattedState={};return!!toolState&&(formattedState[toolName]=toolState,formattedState)})})).then(mergeCollection)}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;var mergeCollection=function(collection){return _.reduce(collection,function(acc,value){return value?_.merge(acc,value):acc},{})};return toolStateBridgeFactory}),define("taoQtiTest/runner/ui/toolbox/entry",["lodash","ui/component","handlebars"],function(_,componentFactory,Handlebars){'use strict';function entryTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function itemComponentFactory(specs,defaults){var itemComponent;return specs=_.defaults(specs||{},itemComponentApi),itemComponent=componentFactory(specs,defaults).setTemplate(entryTpl).on("enable",function(){this.is("rendered")&&this.$component.removeProp("disabled")}).on("disable",function(){this.is("rendered")&&(this.$component.prop("disabled",!0),this.turnOff())}).on("init",function(){this.initItem()}).on("render",function(){var self=this;this.disable(),this.$component.on("mousedown",function(event){self.trigger("mousedown",event)}).on("click",function(event){self.trigger("click",event)})}),itemComponent}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,componentFactory=componentFactory&&Object.prototype.hasOwnProperty.call(componentFactory,"default")?componentFactory["default"]:componentFactory,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars;var Template=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var buffer="",stack1,helper;return buffer+=" ",(helper=helpers.className)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.className,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),buffer}function program3(depth0,data){var buffer="",stack1;return buffer+="\n aria-"+escapeExpression((stack1=null==data||!1===data?data:data.key,"function"===_typeof(stack1)?stack1.apply(depth0):stack1))+"=\""+escapeExpression("function"===_typeof(depth0)?depth0.apply(depth0):depth0)+"\"\n ",buffer}function program5(depth0,data){var buffer="",stack1,helper;return buffer+="<span class=\"icon icon-",(helper=helpers.icon)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.icon,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),stack1=helpers.unless.call(depth0,depth0&&depth0.text,{hash:{},inverse:self.noop,fn:self.program(6,program6,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"></span>",buffer}function program6(){return" no-label"}function program8(depth0,data){var buffer="",stack1,helper;return buffer+="<span class=\"text\">",(helper=helpers.text)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.text,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</span>",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",escapeExpression=this.escapeExpression,self=this,stack1,helper;return buffer+="<li\n data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n class=\"small btn-info action",stack1=helpers["if"].call(depth0,depth0&&depth0.className,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"\n title=\"",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n role=\"button\"\n ",stack1=helpers.each.call(depth0,depth0&&depth0.aria,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n>\n <a class=\"li-inner\" href=\"#\" onclick=\"return false\" aria-hidden=\"true\" >\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.icon,{hash:{},inverse:self.noop,fn:self.program(5,program5,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.text,{hash:{},inverse:self.noop,fn:self.program(8,program8,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n </a>\n</li>\n",buffer}),itemComponentApi={initItem:function(){this.id=this.config.control,this.menu=null},getType:function(){return"entry"},getId:function(){return this.id},setMenuId:function(menuId){this.menuId=menuId},getMenuId:function(){return this.menuId},turnOn:function(){this.setState("active",!0);var element=this.getElement();element&&"option"===element.attr("role")&&element.attr("aria-selected","true").attr("aria-checked","true")},turnOff:function(){this.setState("active",!1);var element=this.getElement();element&&"option"===element.attr("role")&&element.attr("aria-selected","false").attr("aria-checked","false")},hoverOn:function(){this.setState("hover",!0)},hoverOff:function(){this.setState("hover",!1)}};return itemComponentFactory}),define("taoQtiTest/runner/ui/toolbox/menu",["jquery","lodash","ui/component","ui/hider","ui/stacker","handlebars"],function($$1,_,componentFactory,hider,stackerFactory,Handlebars){'use strict';function menuTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function menuItemTpl(data,options,asString){var html=Template$1(data,options);return asString||!0?html:$(html)}function menuComponentFactory(specs,defaults){var _defaults,menuComponent;return _defaults={$component:$$1(),$menuButton:$$1(),$menuContainer:$$1(),$menuContent:$$1(),$menuItems:$$1(),$menuStateIcon:$$1(),hoverIndex:null,id:null,menuItems:[]},specs=_.defaults(specs||{},menuComponentApi),menuComponent=componentFactory(specs,defaults).setTemplate(menuTpl).on("enable",function(){this.is("rendered")&&this.$component.removeProp("disabled")}).on("disable",function(){this.is("rendered")&&(this.$component.prop("disabled",!0),this.closeMenu(),this.turnOff())}).on("hide",function(){this.is("rendered")&&this.closeMenu()}).on("init",function(){this.initMenu()}).on("render",function(){var self=this;this.$menuButton=this.$component.find("[data-control=\"".concat(this.config.control,"-button\"]")),this.$menuContainer=this.$component.find("[data-control=\"".concat(this.config.control,"-menu\"]")),this.$menuContent=this.$component.find("[data-control=\"".concat(this.config.control,"-list\"]")),this.$menuStateIcon=this.$menuButton.find(".icon-up"),this.disable(),this.$component.on("click",function(e){e.preventDefault(),self.is("opened")||e.stopPropagation(),self.toggleMenu()}),this.$menuContainer.on("click",function(e){e.preventDefault(),e.stopPropagation(),self.closeMenu()}),this.$menuContent.on("mouseleave",this.hoverOffAll)}).on("destroy",function(){this.is("rendered")&&(this.$menuContainer.off(".menuNavigation"),this.$menuButton.off(".menuNavigation"))}),_.defaults(menuComponent,_defaults),menuComponent}$$1=$$1&&Object.prototype.hasOwnProperty.call($$1,"default")?$$1["default"]:$$1,_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,componentFactory=componentFactory&&Object.prototype.hasOwnProperty.call(componentFactory,"default")?componentFactory["default"]:componentFactory,hider=hider&&Object.prototype.hasOwnProperty.call(hider,"default")?hider["default"]:hider,stackerFactory=stackerFactory&&Object.prototype.hasOwnProperty.call(stackerFactory,"default")?stackerFactory["default"]:stackerFactory,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars;var Template=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var buffer="",stack1,helper;return buffer+=" ",(helper=helpers.className)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.className,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),buffer}function program3(depth0,data){var buffer="",stack1,helper;return buffer+="<span class=\"icon icon-",(helper=helpers.icon)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.icon,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),stack1=helpers.unless.call(depth0,depth0&&depth0.text,{hash:{},inverse:self.noop,fn:self.program(4,program4,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"></span>",buffer}function program4(){return" no-label"}function program6(depth0,data){var buffer="",stack1,helper;return buffer+="<span class=\"text\">",(helper=helpers.text)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.text,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</span>",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",escapeExpression=this.escapeExpression,self=this,stack1,helper;return buffer+="<li\n data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n class=\"small btn-info action ",stack1=helpers["if"].call(depth0,depth0&&depth0.className,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"\n title=\"",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n aria-label=\"",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n aria-haspopup=\"listbox\"\n role=\"button\"\n>\n <a class=\"li-inner\" data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"-button\" href=\"#\" aria-hidden=\"true\">\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.icon,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.text,{hash:{},inverse:self.noop,fn:self.program(6,program6,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n <span class=\"icon icon-up\"></span>\n </a>\n <div data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"-menu\" class=\"hidden ",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"-menu\" tabindex=\"1\">\n <ul\n data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"-list\"\n class=\"menu ",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"-list\"\n role=\"listbox\"\n ></ul>\n </div>\n</li>\n",buffer}),Template$1=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var buffer="",stack1,helper;return buffer+=" ",(helper=helpers.className)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.className,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),buffer}function program3(depth0,data){var buffer="",stack1,helper;return buffer+="\n role=\"",(helper=helpers.role)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.role,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",escapeExpression=this.escapeExpression,self=this,stack1,helper;return buffer+="<li\n class=\"small action menu-item ",stack1=helpers["if"].call(depth0,depth0&&depth0.className,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"\n data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n tabindex=\"-1\"\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.role,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n>\n <a class=\"li-inner menu-inner\">\n <span class=\"icon icon-checkbox\"></span><span class=\"icon icon-checkbox-checked\"></span>\n <span class=\"label\">",(helper=helpers.text)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.text,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</span>\n </a>\n</li>",buffer}),keyCodes={TAB:9,ESC:27,ENTER:13,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40},stacker=stackerFactory("test-runner"),menuComponentApi={initMenu:function(){this.id=this.config.control,this.navType=this.config.navType?this.config.navType:"fromLast",this.menuItems=[]},getType:function(){return"menu"},getId:function(){return this.id},turnOn:function(){this.setState("active",!0)},turnOff:function(){this.setState("active",!1)},toggleMenu:function(){this.is("disabled")||(this.is("opened")?this.closeMenu():this.openMenu())},indexOfClosestVisibleItem:function(inc,last){if(!this.menuItems.length)return-1;var position=this.hoverIndex,elem;do{if(position+=inc,position===last)return-1;elem=this.menuItems[position].getElement()}while(elem&&elem.hasClass("hidden"));return position},hoverByIndex:function(index){var elem=this.menuItems[index];return this.hoverIndex=index,elem&&this.hoverItem(elem.id),elem},hoverNextVisibleItem:function(){var index=this.indexOfClosestVisibleItem(1,this.menuItems.length),elem=this.hoverByIndex(index);return elem},hoverPreviousVisibleItem:function(){var index=this.indexOfClosestVisibleItem(-1,-1),elem=this.hoverByIndex(index);return elem},openMenu:function(){hider.show(this.$menuContainer),stacker.bringToFront(this.$menuContent),this.$menuStateIcon.removeClass("icon-up"),this.$menuStateIcon.addClass("icon-down"),this.turnOn(),this.enableShortcuts(),this.hoverOffAll(),document.activeElement&&document.activeElement.blur();var activeItemIndex=_.findIndex(this.menuItems,function(item){return item.is("active")});0<=activeItemIndex?(this.hoverIndex=activeItemIndex,this.$menuItems[this.hoverIndex].focus(),this.hoverItem(this.menuItems[activeItemIndex].id)):"fromLast"===this.navType?(this.hoverIndex=this.menuItems.length,this.hoverPreviousVisibleItem()):"fromFirst"===this.navType&&(this.hoverIndex=-1,this.hoverNextVisibleItem()),this.setState("opened",!0),this.trigger("openmenu",this)},closeMenu:function(){hider.hide(this.$menuContainer),this.$menuStateIcon.removeClass("icon-down"),this.$menuStateIcon.addClass("icon-up"),this.turnOff(),this.disableShortcuts(),this.hoverOffAll(),this.setState("opened",!1),this.trigger("closemenu",this),this.is("disabled")||this.$component.prop("disabled")||this.$menuButton.parent().focus()},getItemById:function(itemId){return _.find(this.menuItems,function(item){return item.getId()===itemId})},addItem:function(item){item&&this.menuItems.push(item)},renderItems:function(){var self=this;this.menuItems.forEach(function(item){item.setTemplate(menuItemTpl),item.render(self.$menuContent),item.enable()}),this.$menuItems=this.$menuContent.find(".menu-item"),this.$menuItems.on("mouseenter",function(e){var itemId=e.currentTarget.getAttribute("data-control");self.mouseOverItem(itemId)})},mouseOverItem:function(itemId){var self=this;this.menuItems.forEach(function(item,index){item.id===itemId&&(self.hoverIndex=index)}),this.hoverItem(itemId)},hasDisplayedItems:function(){return this.menuItems.some(function(item){return!item.is("disabled")&&!item.is("hidden")})},turnOffAll:function(){this.menuItems.forEach(function(current){current.turnOff()})},enableShortcuts:function(){var self=this;this.$menuContainer.on("keydown.menuNavigation",function(e){var currentKeyCode=e.keyCode?e.keyCode:e.charCode;e.preventDefault();currentKeyCode===keyCodes.ESC||currentKeyCode===keyCodes.TAB?self.closeMenu():currentKeyCode===keyCodes.SPACE||currentKeyCode===keyCodes.ENTER?(self.triggerHighlightedItem(),e.stopPropagation()):currentKeyCode===keyCodes.LEFT||currentKeyCode===keyCodes.UP?(self.moveUp(),e.stopPropagation()):currentKeyCode===keyCodes.RIGHT||currentKeyCode===keyCodes.DOWN?(self.moveDown(),e.stopPropagation()):void 0}),this.$menuButton.on("keydown.menuNavigation",function(e){function setFocusToItem(index){self.hoverIndex=index,self.$menuContainer.focus(),self.hoverItem(self.menuItems[self.hoverIndex].id)}var currentKeyCode=e.keyCode?e.keyCode:e.charCode;currentKeyCode===keyCodes.UP&&"fromLast"===self.navType&&(e.stopPropagation(),setFocusToItem(self.menuItems.length-1)),currentKeyCode===keyCodes.DOWN&&"fromFirst"===self.navType&&(e.stopPropagation(),setFocusToItem(0))})},disableShortcuts:function(){this.$menuContainer.off(".menuNavigation"),this.$menuButton.off(".menuNavigation")},moveUp:function(){if(0<this.hoverIndex){var elem=this.hoverPreviousVisibleItem();elem||this.closeMenu()}else 0===this.hoverIndex&&(this.hoverIndex--,this.closeMenu())},moveDown:function(){if(this.hoverIndex<this.menuItems.length-1){var elem=this.hoverNextVisibleItem();elem||this.closeMenu()}else this.hoverIndex===this.menuItems.length-1&&(this.hoverIndex++,this.closeMenu())},hoverItem:function(itemId){var itemToHover=this.getItemById(itemId);this.hoverOffAll(),itemToHover&&(itemToHover.hoverOn(),itemToHover.getElement().focus())},hoverOffAll:function(){this.menuItems.forEach(function(current){current&¤t.hoverOff()})},triggerHighlightedItem:function(){var activeItem;this.menuItems[this.hoverIndex]&&(activeItem=this.menuItems[this.hoverIndex],activeItem.getElement().trigger("click"),this.closeMenu(),this.$component.focus())},setNavigationType:function(type){["fromLast","fromFirst"].includes(type)&&(this.navType=type)}};return menuComponentFactory}),define("taoQtiTest/runner/ui/toolbox/text",["lodash","ui/component","handlebars"],function(_,componentFactory,Handlebars){'use strict';function textTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function textComponentFactory(specs,defaults){var textComponent;return specs=_.defaults(specs||{},textComponentApi),textComponent=componentFactory(specs,defaults).setTemplate(textTpl).on("init",function(){this.initText()}).on("render",function(){this.disable()}),textComponent}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,componentFactory=componentFactory&&Object.prototype.hasOwnProperty.call(componentFactory,"default")?componentFactory["default"]:componentFactory,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars;var Template=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var buffer="",stack1,helper;return buffer+="class=\"",(helper=helpers.className)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.className,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n ",buffer}function program3(depth0,data){var buffer="",stack1;return buffer+="\n aria-"+escapeExpression((stack1=null==data||!1===data?data:data.key,"function"===_typeof(stack1)?stack1.apply(depth0):stack1))+"=\""+escapeExpression("function"===_typeof(depth0)?depth0.apply(depth0):depth0)+"\"\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",escapeExpression=this.escapeExpression,self=this,stack1,helper;return buffer+="<li\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.className,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+=" data-control=\"",(helper=helpers.control)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.control,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"\n ",stack1=helpers.each.call(depth0,depth0&&depth0.aria,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n>\n ",(helper=helpers.text)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.text,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\n</li>\n",buffer}),textComponentApi={initText:function(){this.id=this.config.control},getType:function(){return"text"},getId:function(){return this.id}};return textComponentFactory}),define("taoQtiTest/runner/ui/toolbox/toolbox",["lodash","jquery","ui/component","taoQtiTest/runner/ui/toolbox/entry","taoQtiTest/runner/ui/toolbox/menu","taoQtiTest/runner/ui/toolbox/text","handlebars"],function(_,$$1,componentFactory,entryFactory,menuFactory,textFactory,Handlebars){'use strict';function toolboxTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}function defaultRenderer($container){var self=this,menuEntries=[];_.isArray(this.allItems)&&this.allItems.forEach(function(item){self.hasMenu(item)||item.render($container)}),this.allMenus.forEach(function(menu){var menuId=menu.getId();menuEntries=self.allItems.filter(function(item){return"entry"===item.getType()&&item.getMenuId()===menuId}),menuEntries.forEach(function(item){menu.addItem(item)}),menu.renderItems()})}function toolboxComponentFactory(specs,defaults){var $document=$$1(document),toolboxComponent;return specs=_.defaults(specs||{},toolboxComponentApi),toolboxComponent=componentFactory(specs,defaults).on("init",function(){this.initToolbox()}).on("render.defaultRenderer",defaultRenderer).on("render",function(){var self=this;$document.off(".toolboxmenu"),$document.on("click.toolboxmenu",function(){self.allMenus.forEach(function(menu){menu.is("opened")&&menu.closeMenu()})})}).on("destroy",function(){$document.off(".toolboxmenu"),this.allItems.forEach(function(item){item.destroy()})}).setTemplate(toolboxTpl),toolboxComponent}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,$$1=$$1&&Object.prototype.hasOwnProperty.call($$1,"default")?$$1["default"]:$$1,componentFactory=componentFactory&&Object.prototype.hasOwnProperty.call(componentFactory,"default")?componentFactory["default"]:componentFactory,entryFactory=entryFactory&&Object.prototype.hasOwnProperty.call(entryFactory,"default")?entryFactory["default"]:entryFactory,menuFactory=menuFactory&&Object.prototype.hasOwnProperty.call(menuFactory,"default")?menuFactory["default"]:menuFactory,textFactory=textFactory&&Object.prototype.hasOwnProperty.call(textFactory,"default")?textFactory["default"]:textFactory,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars;var Template=Handlebars.template(function(Handlebars,depth0,helpers){return this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),"<ul class=\"plain tools-box-list\"></ul>"}),toolboxComponentApi={initToolbox:function(){this.allItems=[],this.allMenus=[]},createMenu:function(config){var self=this,menu=menuFactory().init(config);return this.allItems.push(menu),this.allMenus.push(menu),menu.on("openmenu",function(openedMenu){self.allMenus.forEach(function(current){openedMenu.getId()!==current.getId()&¤t.is("opened")&¤t.closeMenu()})}),menu},createEntry:function(config){var extendedConfig=Object.assign({role:"option"},config),item=entryFactory().init(extendedConfig);return this.allItems.push(item),item},createText:function(config){var text=textFactory().init(config);return this.allItems.push(text),text},hasMenu:function(item){return item&&_.isFunction(item.getMenuId)&&item.getMenuId()}};return toolboxComponentFactory}),define("taoQtiTest/runner/provider/stopwatch",["core/eventifier","core/polling","core/timer"],function(eventifier,pollingFactory,timerFactory){'use strict';function stopwatchFactory(){var options=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},config=Object.assign({},defaultOptions,options),initialized=!1,polling,stopwatch;return eventifier({isInitialized:function(){return initialized},init:function(){var _this=this;stopwatch=timerFactory({autoStart:!1}),polling=pollingFactory({action:function(){return _this.trigger("tick",stopwatch.tick())},interval:config.interval,autoStart:!1}),initialized=!0},start:function(){this.isInitialized()&&(stopwatch.resume(),polling.start())},stop:function(){this.isInitialized()&&(stopwatch.pause(),polling.stop())},destroy:function(){this.isInitialized()&&(initialized=!1,polling.stop(),polling=null,stopwatch.stop(),stopwatch=null)}})}eventifier=eventifier&&Object.prototype.hasOwnProperty.call(eventifier,"default")?eventifier["default"]:eventifier,pollingFactory=pollingFactory&&Object.prototype.hasOwnProperty.call(pollingFactory,"default")?pollingFactory["default"]:pollingFactory,timerFactory=timerFactory&&Object.prototype.hasOwnProperty.call(timerFactory,"default")?timerFactory["default"]:timerFactory;var defaultOptions={interval:1e3};return stopwatchFactory}),define("taoQtiTest/runner/provider/qti",["jquery","lodash","i18n","core/cachedStore","taoTests/runner/areaBroker","taoTests/runner/proxy","taoTests/runner/probeOverseer","taoTests/runner/testStore","taoQtiTest/runner/provider/dataUpdater","taoQtiTest/runner/provider/toolStateBridge","taoQtiTest/runner/helpers/currentItem","taoQtiTest/runner/helpers/map","taoQtiTest/runner/ui/toolbox/toolbox","taoQtiItem/runner/qtiItemRunner","taoQtiTest/runner/config/assetManager","handlebars","taoQtiTest/runner/config/states","taoQtiTest/runner/provider/stopwatch"],function($$1,_,__,cachedStore,areaBrokerFactory,proxyFactory,probeOverseerFactory,testStoreFactory,dataUpdater,toolStateBridgeFactory,currentItemHelper,mapHelper,toolboxFactory,qtiItemRunner,getAssetManager,Handlebars,states,stopwatchFactory){'use strict';function layoutTpl(data,options,asString){var html=Template(data,options);return asString||!0?html:$(html)}$$1=$$1&&Object.prototype.hasOwnProperty.call($$1,"default")?$$1["default"]:$$1,_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,__=__&&Object.prototype.hasOwnProperty.call(__,"default")?__["default"]:__,cachedStore=cachedStore&&Object.prototype.hasOwnProperty.call(cachedStore,"default")?cachedStore["default"]:cachedStore,areaBrokerFactory=areaBrokerFactory&&Object.prototype.hasOwnProperty.call(areaBrokerFactory,"default")?areaBrokerFactory["default"]:areaBrokerFactory,proxyFactory=proxyFactory&&Object.prototype.hasOwnProperty.call(proxyFactory,"default")?proxyFactory["default"]:proxyFactory,probeOverseerFactory=probeOverseerFactory&&Object.prototype.hasOwnProperty.call(probeOverseerFactory,"default")?probeOverseerFactory["default"]:probeOverseerFactory,testStoreFactory=testStoreFactory&&Object.prototype.hasOwnProperty.call(testStoreFactory,"default")?testStoreFactory["default"]:testStoreFactory,dataUpdater=dataUpdater&&Object.prototype.hasOwnProperty.call(dataUpdater,"default")?dataUpdater["default"]:dataUpdater,toolStateBridgeFactory=toolStateBridgeFactory&&Object.prototype.hasOwnProperty.call(toolStateBridgeFactory,"default")?toolStateBridgeFactory["default"]:toolStateBridgeFactory,currentItemHelper=currentItemHelper&&Object.prototype.hasOwnProperty.call(currentItemHelper,"default")?currentItemHelper["default"]:currentItemHelper,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,toolboxFactory=toolboxFactory&&Object.prototype.hasOwnProperty.call(toolboxFactory,"default")?toolboxFactory["default"]:toolboxFactory,qtiItemRunner=qtiItemRunner&&Object.prototype.hasOwnProperty.call(qtiItemRunner,"default")?qtiItemRunner["default"]:qtiItemRunner,getAssetManager=getAssetManager&&Object.prototype.hasOwnProperty.call(getAssetManager,"default")?getAssetManager["default"]:getAssetManager,Handlebars=Handlebars&&Object.prototype.hasOwnProperty.call(Handlebars,"default")?Handlebars["default"]:Handlebars,states=states&&Object.prototype.hasOwnProperty.call(states,"default")?states["default"]:states,stopwatchFactory=stopwatchFactory&&Object.prototype.hasOwnProperty.call(stopwatchFactory,"default")?stopwatchFactory["default"]:stopwatchFactory;var Template=Handlebars.template(function(Handlebars,depth0,helpers,partials,data){this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var buffer="",helperMissing=helpers.helperMissing,escapeExpression=this.escapeExpression,helper,options;return buffer+="<main aria-labelledby=\"test-title-header\" class=\"test-runner-scope\">\n <div class=\"action-bar content-action-bar horizontal-action-bar top-action-bar\">\n <div class=\"control-box size-wrapper\"></div>\n </div>\n\n <div class=\"test-runner-sections\">\n\n <aside class=\"test-sidebar test-sidebar-left\" aria-labelledby=\"test-sidebar-left-header\">\n <h2 id=\"test-sidebar-left-header\" class=\"landmark-title-hidden\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Test status and review structure",options):helperMissing.call(depth0,"__","Test status and review structure",options)))+"</h2>\n </aside>\n\n <section class=\"content-wrapper\" aria-labelledby=\"test-title-header\">\n <h2 id=\"test-title-header\" class=\"landmark-title-hidden\"></h2>\n <div id=\"qti-content\"></div>\n </section>\n </div>\n\n <div class=\"action-bar content-action-bar horizontal-action-bar bottom-action-bar\">\n <div class=\"control-box size-wrapper\">\n <aside class=\"lft tools-box\" aria-labelledby=\"toolboxheader\">\n <h2 id=\"toolboxheader\" class=\"landmark-title-hidden\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Tool box and flagging for review",options):helperMissing.call(depth0,"__","Tool box and flagging for review",options)))+"</h2>\n </aside>\n <nav class=\"rgt navi-box\" aria-labelledby=\"navheader\">\n <h2 id=\"navheader\" class=\"landmark-title-hidden\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Main navigation",options):helperMissing.call(depth0,"__","Main navigation",options)))+"</h2>\n <ul class=\"plain navi-box-list\"></ul>\n </div>\n </div>\n </div>\n\n</main>\n",buffer});return{name:"qti",loadAreaBroker:function(){var $layout=$$1(layoutTpl());return areaBrokerFactory($layout,{content:$$1("#qti-content",$layout),toolbox:$$1(".tools-box",$layout),navigation:$$1(".navi-box-list",$layout),mainLandmark:$$1("#test-title-header",$layout),control:$$1(".top-action-bar .control-box",$layout),actionsBar:$$1(".bottom-action-bar .control-box",$layout),panel:$$1(".test-sidebar-left",$layout),header:$$1(".title-box",$layout)})},loadProxy:function(){var config=this.getConfig(),proxyProvider=config.provider.proxy||"qtiServiceProxy",proxyConfig=_.pick(config,["testDefinition","testCompilation","serviceCallId","bootstrap","options"]);return proxyFactory(proxyProvider,proxyConfig)},loadProbeOverseer:function(){return probeOverseerFactory(this)},loadTestStore:function(){var config=this.getConfig(),identifier=config.serviceCallId||"test-".concat(Date.now());return testStoreFactory(identifier)},loadPersistentStates:function(){var self=this,config=this.getConfig(),persistencePromise=cachedStore("test-states-".concat(config.serviceCallId),"states");return persistencePromise.catch(function(err){self.trigger("error",err)}),persistencePromise.then(function(storage){self.stateStorage=storage})},getPersistentState:function(name){if(this.stateStorage)return this.stateStorage.getItem(name)},setPersistentState:function(name,active){var self=this,setPromise;if(this.stateStorage)return setPromise=this.stateStorage.setItem(name,active),setPromise.catch(function(err){self.trigger("error",err)}),setPromise},install:function(){this.dataUpdater=dataUpdater(this.getDataHolder()),this.toolStateBridge=toolStateBridgeFactory(this.getTestStore(),_.keys(this.getPlugins())),this.getCurrentItem=function(){var testContext=this.getTestContext(),testMap=this.getTestMap();if(testContext&&testMap&&testContext.itemIdentifier)return mapHelper.getItem(testMap,testContext.itemIdentifier)},this.getCurrentSection=function(){var testContext=this.getTestContext(),testMap=this.getTestMap();if(testContext&&testMap&&testContext.sectionId)return mapHelper.getSection(testMap,testContext.sectionId)},this.getCurrentPart=function(){var testContext=this.getTestContext(),testMap=this.getTestMap();if(testContext&&testMap&&testContext.testPartId)return mapHelper.getPart(testMap,testContext.testPartId)}},init:function(){function getItemResults(){var results={},context=self.getTestContext();return context&&self.itemRunner&&context.itemSessionState<=states.itemSession.interacting&&(results={itemResponse:self.itemRunner.getResponses(),itemState:self.itemRunner.getState()}),results}function computeNext(action,params,loadPromise){var context=self.getTestContext(),currentItem=self.getCurrentItem(),submitError=function(err){err&&err.unrecoverable?(self.trigger("alert.error",__("An unrecoverable error occurred. Your test session will be paused.")),self.trigger("pause",{message:err.message})):200===err.code?self.trigger("alert.submitError",err.message||__("An error occurred during results submission. Please retry."),load):self.trigger("error",err)},feedbackPromise=new Promise(function(resolve){if((currentItem.hasFeedbacks||context.hasFeedbacks)&&context.itemSessionState<=states.itemSession.interacting)params=_.omit(params,["itemState","itemResponse"]),self.getProxy().submitItem(context.itemIdentifier,self.itemRunner.getState(),self.itemRunner.getResponses(),params).then(function(results){return results.itemSession&&(currentItem.answered=results.itemSession.itemAnswered,!0===results.displayFeedbacks&&results.feedbacks)?void self.itemRunner.renderFeedbacks(results.feedbacks,results.itemSession,function(queue){self.trigger("modalFeedbacks",queue,resolve)}):resolve()}).catch(submitError);else{if("skip"===action)currentItem.answered=!1;else{var testPart=self.getCurrentPart(),isLinear=testPart&&testPart.isLinear;currentItem.answered=isLinear||currentItemHelper.isAnswered(self)}resolve()}});feedbackPromise.then(function(){return self.toolStateBridge.getStates()}).then(function(toolStates){toolStates&&0<_.size(toolStates)&&(params.toolStates=toolStates),self.setTestMap(self.dataUpdater.updateStats()),self.on("unloaditem.".concat(action),function(){self.off(".".concat(action)),self.getProxy().callItemAction(context.itemIdentifier,action,params).then(function(results){return loadPromise=loadPromise||Promise.resolve(),loadPromise.then(function(){return results})}).then(function(results){self.dataUpdater.update(results),load()}).catch(submitError)}),self.unloadItem(context.itemIdentifier)}).catch(submitError)}function load(){var context=self.getTestContext();context.state<=states.testSession.interacting?self.loadItem(context.itemIdentifier):context.state===states.testSession.closed&&self.finish()}var self=this,config=this.getConfig(),areaBroker=this.getAreaBroker();areaBroker.setComponent("toolbox",toolboxFactory()),areaBroker.getToolbox().init();var stopwatch=stopwatchFactory({});stopwatch.init(),stopwatch.spread(this,"tick");var isTimerClientMode=function(){return config.options.timer&&config.options.timer.restoreTimerFromClient};return this.on("ready",function(){load()}).on("move",function(direction,scope,position){var itemResults=getItemResults();this.trigger("disablenav disabletools"),computeNext("move",_.merge(itemResults,{direction:direction,scope:scope||"item",ref:position}))}).on("skip",function(scope){this.trigger("disablenav disabletools"),computeNext("skip",{scope:scope||"item"})}).on("exit",function(reason){var context=self.getTestContext();this.disableItem(context.itemIdentifier),this.getProxy().callTestAction("exitTest",_.merge(getItemResults(),{itemDefinition:context.itemIdentifier,reason:reason})).then(function(){return self.finish()}).catch(function(err){self.trigger("error",err)})}).on("timeout",function(scope,ref,timer){var context=self.getTestContext(),noAlertTimeout=mapHelper.hasItemCategory(self.getTestMap(),context.itemIdentifier,"noAlertTimeout",!0);context.isTimeout=!0,this.setTestContext(context),timer&&timer.allowLateSubmission?(self.trigger("alert.timeout",__("Time limit reached, this part of the test has ended. However you are allowed to finish the current item.")),self.before("move.latetimeout",function(){return self.off("move.latetimeout"),computeNext("timeout",_.merge(getItemResults(),{scope:scope,ref:ref,late:!0})),Promise.reject({cancel:!0})})):(this.disableItem(context.itemIdentifier),computeNext("timeout",_.merge(getItemResults(),{scope:scope,ref:ref}),new Promise(function(resolve){noAlertTimeout?resolve():self.trigger("alert.timeout",__("The time limit has been reached for this part of the test."),function(){self.trigger("timeoutAccepted"),resolve()})})))}).on("pause",function(data){var testContext=self.getTestContext();this.setState("closedOrSuspended",!0),this.getProxy().callTestAction("pause",{itemDefinition:testContext.itemIdentifier,itemState:self.itemRunner.getState(),reason:{reasons:data&&data.reasons,comment:data&&(data.originalMessage||data.message)}}).then(function(){self.trigger("leave",{code:states.testSession.suspended,message:data&&data.message})}).catch(function(err){self.trigger("error",err)})}).on("move skip exit timeout pause",function(){stopwatch.stop()}).on("loaditem",function(){var context=this.getTestContext(),warning=!1,getItemLabel=function(){var item=self.getCurrentItem();return item&&item.label?item.label:context.itemIdentifier};context.isTimeout?warning=__("Time limit reached for item \"%s\".",getItemLabel()):context.itemSessionState>states.itemSession.interacting&&(0===context.remainingAttempts?warning=__("No more attempts allowed for item \"%s\".",getItemLabel()):warning=__("Item \"%s\" is completed.",getItemLabel())),warning&&(self.disableItem(context.itemIdentifier),self.trigger("warning",warning))}).on("renderitem",function(){var context=this.getTestContext();this.getItemState(context.itemIdentifier,"disabled")||this.trigger("enabletools"),this.trigger("enablenav")}).after("renderitem",function(){stopwatch.start()}).on("resumeitem",function(){this.trigger("enableitem enablenav")}).on("disableitem",function(){isTimerClientMode()&&stopwatch.stop(),this.trigger("disabletools")}).on("enableitem",function(){isTimerClientMode()&&stopwatch.start(),this.trigger("enabletools")}).on("error",function(){stopwatch.stop(),this.trigger("disabletools enablenav")}).on("finish",function(){this.flush()}).on("leave",function(){this.trigger("endsession"),this.flush()}).on("flush",function(){this.destroy(),stopwatch.destroy()}),this.getProbeOverseer()&&this.getProbeOverseer().start(),this.getTestStore().getStorageIdentifier().then(function(storeId){return self.getProxy().init({storeId:storeId}).then(function(response){return response.testData&&Object.assign(config.options,response.testData.config),self.dataUpdater.update(response),self.dataUpdater.updatePluginsConfig(self.getPlugins(),self.getPluginsConfig()),self.getTestStore().clearVolatileIfStoreChange(response.lastStoreId).then(function(){return response})}).then(function(response){var isNewStore=!response.lastStoreId||response.lastStoreId!==storeId;if(response.toolStates&&isNewStore)return self.toolStateBridge.setTools(_.keys(response.toolStates)).restoreStates(response.toolStates)})})},render:function(){var config=this.getConfig(),areaBroker=this.getAreaBroker();config.renderTo.append(areaBroker.getContainer()),areaBroker.getToolbox().render(areaBroker.getToolboxArea())},loadItem:function(itemIdentifier){return this.getProxy().getItem(itemIdentifier).then(function(_ref){var itemData=_ref.itemData,baseUrl=_ref.baseUrl,itemState=_ref.itemState,portableElements=_ref.portableElements,flags=_ref.flags;return{content:itemData,baseUrl:baseUrl,state:itemState,portableElements:portableElements,flags:flags}})},renderItem:function(itemIdentifier,itemData){var self=this,config=this.getConfig(),assetManager=getAssetManager(config.serviceCallId),changeState=function(){self.setItemState(itemIdentifier,"changed",!0)};return new Promise(function(resolve,reject){assetManager.setData("baseUrl",itemData.baseUrl),assetManager.setData("itemIdentifier",itemIdentifier),assetManager.setData("assets",itemData.content.assets),itemData.content=itemData.content||{},self.itemRunner=qtiItemRunner(itemData.content.type,itemData.content.data,{assetManager:assetManager}).on("error",function(err){err&&err.unrecoverable?self.trigger("pause",{message:err.message}):(self.trigger("enablenav"),reject(err))}).on("init",function(){var itemContainer=self.getAreaBroker().getContentArea(),itemRenderingOptions=_.pick(itemData,["state","portableElements"]);this.render(itemContainer,itemRenderingOptions)}).on("render",function(){this.on("responsechange",changeState),this.on("statechange",changeState),resolve()}).on("warning",function(err){self.trigger("warning",err)}).init()})},unloadItem:function(){var self=this;return self.trigger("beforeunloaditem disablenav disabletools"),new Promise(function(resolve){return self.itemRunner?void self.itemRunner.on("clear",resolve).clear():void resolve()})},finish:function(){if(!this.getState("finish")&&(this.trigger("disablenav disabletools"),this.stateStorage))return this.stateStorage.removeStore()},flush:function(){var self=this,probeOverseer=this.getProbeOverseer(),proxy=this.getProxy(),flushPromise;return flushPromise=probeOverseer&&!this.getState("disconnected")?probeOverseer.flush().then(function(data){var traceData={};if(data&&data.length)return _.forEach(data,function(entry){var id="".concat(entry.type,"-").concat(entry.id);entry.marker&&(id="".concat(entry.marker,"-").concat(id)),traceData[id]=entry}),self.getProxy().sendVariables(traceData)}).then(function(){probeOverseer.stop()}).catch(function(){probeOverseer.stop()}):Promise.resolve(),flushPromise.then(function(){proxy.hasCommunicator()&&proxy.getCommunicator().then(function(communicator){return communicator.close()}).catch(_.noop)})},destroy:function(){var areaBroker=this.getAreaBroker();if(this.itemRunner&&this.itemRunner.clear(),this.itemRunner=null,areaBroker&&areaBroker.getToolbox().destroy(),this.getState("finish"))return this.getTestStore().remove()}}}),define("taoQtiTest/runner/proxy/cache/actionStore",["lodash","taoTests/runner/testStore"],function(_,testStore){'use strict';function actionStoreFatory(id){var actionQueue=[],loadStore=function(){return testStore(id).getStore("actions")};if(_.isEmpty(id))throw new TypeError("Please specify the action store id");return{push:function(action,params,timestamp){return actionQueue.push({action:action,timestamp:timestamp||Date.now(),parameters:params}),loadStore().then(function(actionStore){return actionStore.setItem("queue",actionQueue)})},flush:function(){return loadStore().then(function(actionStore){return actionStore.getItem("queue").then(function(queue){return actionQueue=[],actionStore.setItem("queue",actionQueue).then(function(){return queue})})})},update:function(params){return _.forEach(actionQueue,function(action){action.parameters.actionId===params.actionId&&(action.parameters=params)}),loadStore().then(function(actionStore){return actionStore.setItem("queue",actionQueue)})}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,testStore=testStore&&Object.prototype.hasOwnProperty.call(testStore,"default")?testStore["default"]:testStore;return actionStoreFatory}),define("taoQtiTest/runner/proxy/cache/preloaders/assets/audio",["lodash"],function(_){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;return{name:"audio",init:function(assetManager){var audioBlobs={};return assetManager.prependStrategy({name:"precaching-audio",handle:function(url,data){var sourceUrl=url.toString();if(data.itemIdentifier&&audioBlobs[data.itemIdentifier]&&"undefined"!=typeof audioBlobs[data.itemIdentifier][sourceUrl])return URL.createObjectURL(audioBlobs[data.itemIdentifier][sourceUrl])}}),{loaded:function(url,sourceUrl,itemIdentifier){return!!(audioBlobs[itemIdentifier]&&audioBlobs[itemIdentifier][sourceUrl])},load:function(url,sourceUrl,itemIdentifier){return new Promise(function(resolve){if(audioBlobs[itemIdentifier]=audioBlobs[itemIdentifier]||{},"undefined"==typeof audioBlobs[itemIdentifier][sourceUrl]){var request=new XMLHttpRequest;request.open("GET",url,!0),request.responseType="blob",request.onerror=resolve,request.onabort=resolve,request.onload=function(){200===request.status&&(audioBlobs[itemIdentifier][sourceUrl]=request.response),resolve()},request.send()}else resolve()})},unload:function(url,sourceUrl,itemIdentifier){return audioBlobs[itemIdentifier]&&(audioBlobs[itemIdentifier]=_.omit(audioBlobs[itemIdentifier],sourceUrl)),Promise.resolve()}}}}}),define("taoQtiTest/runner/proxy/cache/preloaders/assets/image",["lodash"],function(_){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;return{name:"img",init:function(){var images={};return{loaded:function(url,sourceUrl,itemIdentifier){return!!(images[itemIdentifier]&&images[itemIdentifier][sourceUrl])},load:function(url,sourceUrl,itemIdentifier){return images[itemIdentifier]=images[itemIdentifier]||{},"Image"in window&&!images[itemIdentifier][sourceUrl]&&(images[itemIdentifier][sourceUrl]=new Image,images[itemIdentifier][sourceUrl].src=url),Promise.resolve()},unload:function(url,sourceUrl,itemIdentifier){return images[itemIdentifier]&&(images[itemIdentifier]=_.omit(images[itemIdentifier],sourceUrl)),Promise.resolve()}}}}}),define("taoQtiTest/runner/proxy/cache/preloaders/assets/stylesheet",["lodash"],function(_){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_;var relSupport=function(feature){var fakeLink=document.createElement("link");try{if(fakeLink.relList&&"function"==typeof fakeLink.relList.supports)return fakeLink.relList.supports(feature)}catch(err){return!1}},supportPreload=relSupport("preload"),supportPrefetch=relSupport("prefetch");return{name:"css",init:function(){var stylesheets={};return{loaded:function(url,sourceUrl,itemIdentifier){return!!(stylesheets[itemIdentifier]&&stylesheets[itemIdentifier][sourceUrl])},load:function(url,sourceUrl,itemIdentifier){if(stylesheets[itemIdentifier]=stylesheets[itemIdentifier]||{},!stylesheets[itemIdentifier][sourceUrl]){var link=document.createElement("link");supportPreload?(link.setAttribute("rel","preload"),link.setAttribute("as","style")):supportPrefetch?(link.setAttribute("rel","prefetch"),link.setAttribute("as","style")):(link.disabled=!0,link.setAttribute("rel","stylesheet"),link.setAttribute("type","text/css")),link.setAttribute("data-preload",!0),link.setAttribute("href",url),document.querySelector("head").appendChild(link),stylesheets[itemIdentifier][sourceUrl]=link}return Promise.resolve()},unload:function(url,sourceUrl,itemIdentifier){if(stylesheets[itemIdentifier]){var link=stylesheets[itemIdentifier][sourceUrl]||document.querySelector("head link[data-preload][href=\"".concat(url,"\"]"));link&&document.querySelector("head").removeChild(link),stylesheets[itemIdentifier]=_.omit(stylesheets[itemIdentifier],sourceUrl)}return Promise.resolve()}}}}}),define("taoQtiTest/runner/proxy/cache/preloaders/assets/preloaders",["taoQtiTest/runner/proxy/cache/preloaders/assets/audio","taoQtiTest/runner/proxy/cache/preloaders/assets/image","taoQtiTest/runner/proxy/cache/preloaders/assets/stylesheet"],function(audioPreloader,imagePreloader,stylesheetPreloader){'use strict';audioPreloader=audioPreloader&&Object.prototype.hasOwnProperty.call(audioPreloader,"default")?audioPreloader["default"]:audioPreloader,imagePreloader=imagePreloader&&Object.prototype.hasOwnProperty.call(imagePreloader,"default")?imagePreloader["default"]:imagePreloader,stylesheetPreloader=stylesheetPreloader&&Object.prototype.hasOwnProperty.call(stylesheetPreloader,"default")?stylesheetPreloader["default"]:stylesheetPreloader;var preloaders=[audioPreloader,imagePreloader,stylesheetPreloader];return preloaders}),define("taoQtiTest/runner/proxy/cache/preloaderManager",["core/providerRegistry"],function(providerRegistry){'use strict';function preloaderManagerFactory(){function preloaderFactory(assetManager){var preloaders={};return preloaderFactory.getAvailableProviders().forEach(function(name){preloaders[name]=preloaderFactory.getProvider(name).init(assetManager)}),{has:function(name){return!!preloaders[name]},loaded:function(name){var preloader=preloaders[name];if(preloader&&"function"==typeof preloader.loaded){for(var _len=arguments.length,args=Array(1<_len?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return!!preloader.loaded.apply(preloader,args)}return!1},load:function(name){var preloader=preloaders[name];if(preloader&&"function"==typeof preloader.load){for(var _len2=arguments.length,args=Array(1<_len2?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];return Promise.resolve(preloader.load.apply(preloader,args))}return Promise.resolve()},unload:function(name){var preloader=preloaders[name];if(preloader&&"function"==typeof preloader.unload){for(var _len3=arguments.length,args=Array(1<_len3?_len3-1:0),_key3=1;_key3<_len3;_key3++)args[_key3-1]=arguments[_key3];return Promise.resolve(preloader.unload.apply(preloader,args))}return Promise.resolve()}}}return providerRegistry(preloaderFactory)}return providerRegistry=providerRegistry&&Object.prototype.hasOwnProperty.call(providerRegistry,"default")?providerRegistry["default"]:providerRegistry,preloaderManagerFactory}),define("taoQtiTest/runner/proxy/cache/assetPreloader",["taoQtiTest/runner/proxy/cache/preloaders/assets/preloaders","taoQtiTest/runner/proxy/cache/preloaderManager"],function(preloaders,preloaderManagerFactory){'use strict';preloaders=preloaders&&Object.prototype.hasOwnProperty.call(preloaders,"default")?preloaders["default"]:preloaders,preloaderManagerFactory=preloaderManagerFactory&&Object.prototype.hasOwnProperty.call(preloaderManagerFactory,"default")?preloaderManagerFactory["default"]:preloaderManagerFactory;var assetPreloaderFactory=preloaderManagerFactory();return preloaders.forEach(function(preloader){return assetPreloaderFactory.registerProvider(preloader.name,preloader)}),assetPreloaderFactory}),define("taoQtiTest/runner/proxy/cache/preloaders/interactions/extendedText",["ckeditor","taoQtiItem/qtiCommonRenderer/helpers/ckConfigurator"],function(ckEditor,ckConfigurator){'use strict';function preloadCKEditor(language){return new Promise(function(resolve){var placeholder=document.createElement("div"),ckOptions={resize_enabled:!0,secure:"https:"===location.protocol,forceCustomDomain:!0,language:language},editor=ckEditor.inline(placeholder,ckOptions);editor.on("instanceReady",function(){resolve(editor)}),editor.on("configLoaded",function(){editor.config=ckConfigurator.getConfig(editor,"extendedText",ckOptions)}),("ready"===editor.status||"loaded"===editor.status)&&resolve(editor)}).then(function(editor){editor.destroy()})}ckEditor=ckEditor&&Object.prototype.hasOwnProperty.call(ckEditor,"default")?ckEditor["default"]:ckEditor,ckConfigurator=ckConfigurator&&Object.prototype.hasOwnProperty.call(ckConfigurator,"default")?ckConfigurator["default"]:ckConfigurator;var getItemLanguage=function(itemData){var lang=itemData&&itemData.data&&itemData.data.attributes&&itemData.data.attributes["xml:lang"];return lang||(lang=window.document.documentElement.getAttribute("lang")),lang&&lang.split("-")[0]||"en"};return{name:"extendedTextInteraction",init:function(){var preloadedLanguages={};return{loaded:function(interaction,itemData){if(interaction.attributes&&"xhtml"===interaction.attributes.format){var lang=getItemLanguage(itemData);return preloadedLanguages[lang]}return!0},load:function(interaction,itemData){if(interaction.attributes&&"xhtml"===interaction.attributes.format){var lang=getItemLanguage(itemData);if(!preloadedLanguages[lang])return preloadedLanguages[lang]=!0,preloadCKEditor(lang)}return Promise.resolve()},unload:function(){return Promise.resolve()}}}}}),define("taoQtiTest/runner/proxy/cache/preloaders/interactions/preloaders",["taoQtiTest/runner/proxy/cache/preloaders/interactions/extendedText"],function(extendedTextPreloader){'use strict';extendedTextPreloader=extendedTextPreloader&&Object.prototype.hasOwnProperty.call(extendedTextPreloader,"default")?extendedTextPreloader["default"]:extendedTextPreloader;var preloaders=[extendedTextPreloader];return preloaders}),define("taoQtiTest/runner/proxy/cache/interactionPreloader",["taoQtiTest/runner/proxy/cache/preloaders/interactions/preloaders","taoQtiTest/runner/proxy/cache/preloaderManager"],function(preloaders,preloaderManagerFactory){'use strict';preloaders=preloaders&&Object.prototype.hasOwnProperty.call(preloaders,"default")?preloaders["default"]:preloaders,preloaderManagerFactory=preloaderManagerFactory&&Object.prototype.hasOwnProperty.call(preloaderManagerFactory,"default")?preloaderManagerFactory["default"]:preloaderManagerFactory;var interactionPreloaderFactory=preloaderManagerFactory();return preloaders.forEach(function(preloader){return interactionPreloaderFactory.registerProvider(preloader.name,preloader)}),interactionPreloaderFactory}),define("taoQtiTest/runner/proxy/cache/itemPreloader",["lodash","core/logger","taoQtiItem/runner/qtiItemRunner","taoQtiTest/runner/config/assetManager","taoQtiTest/runner/proxy/cache/assetPreloader","taoQtiTest/runner/proxy/cache/interactionPreloader","util/url"],function(_,loggerFactory,qtiItemRunner,getAssetManager,assetPreloaderFactory,interactionPreloaderFactory,urlUtil){'use strict';function itemPreloaderFactory(options){var preloadAssetManager=getAssetManager("item-preloader"),resolveAssets=function(item){return new Promise(function(resolve){var assets=item.itemData.assets;return preloadAssetManager.setData("baseUrl",item.baseUrl),preloadAssetManager.setData("assets",assets),resolve(_.reduce(assets,function(acc,assetList,type){var resolved={};return _.forEach(assetList,function(url){urlUtil.isBase64(url)||(resolved[url]=preloadAssetManager.resolve(url))}),0<_.size(resolved)&&(acc[type]=resolved),acc},{}))})};if(!options||!options.testId)throw new TypeError("The test identifier is mandatory to start the item preloader");var testAssetManager=getAssetManager(options.testId),assetPreloader=assetPreloaderFactory(testAssetManager),interactionPreloader=interactionPreloaderFactory(),itemLoad=function(item){return logger.debug("Start preloading of item ".concat(item.itemIdentifier)),new Promise(function(resolve,reject){qtiItemRunner(item.itemData.type,item.itemData.data,{assetManager:preloadAssetManager,preload:!0}).on("init",function(){logger.debug("Preloading of item ".concat(item.itemIdentifier," done")),resolve(!0)}).on("error",reject).init()})},interactionLoad=function(item){return Promise.all(getItemInteractions(item.itemData).map(function(interaction){return interactionPreloader.has(interaction.qtiClass)?(logger.debug("Loading interaction ".concat(interaction.serial,"(").concat(interaction.qtiClass,") for item ").concat(item.itemIdentifier)),interactionPreloader.load(interaction.qtiClass,interaction,item.itemData,item.itemIdentifier)):Promise.resolve()}))},interactionUnload=function(item){return Promise.all(getItemInteractions(item.itemData).map(function(interaction){return interactionPreloader.has(interaction.qtiClass)?(logger.debug("Unloading interaction ".concat(interaction.serial,"(").concat(interaction.qtiClass,") for item ").concat(item.itemIdentifier)),interactionPreloader.unload(interaction.qtiClass,interaction,item.itemData,item.itemIdentifier)):Promise.resolve()}))},assetLoad=function(item){return resolveAssets(item).then(function(resolved){return _.forEach(resolved,function(assets,type){assetPreloader.has(type)?_.forEach(assets,function(url,sourceUrl){logger.debug("Loading asset ".concat(sourceUrl,"(").concat(type,") for item ").concat(item.itemIdentifier)),assetPreloader.load(type,url,sourceUrl,item.itemIdentifier)}):setItemFlag(item,"containsNonPreloadedAssets")}),!0})},assetUnload=function(item){return resolveAssets(item).then(function(resolved){return _.forEach(resolved,function(assets,type){assetPreloader.has(type)&&_.forEach(assets,function(url,sourceUrl){logger.debug("Unloading asset ".concat(sourceUrl,"(").concat(type,") for item ").concat(item.itemIdentifier)),assetPreloader.unload(type,url,sourceUrl,item.itemIdentifier)})}),!0})};return{preload:function(item){var loading=[];return isItemObjectValid(item)&&(loading.push(itemLoad(item)),loading.push(interactionLoad(item)),_.size(item.itemData.data&&item.itemData.data.feedbacks)&&setItemFlag(item,"hasFeedbacks"),0<_.size(item.itemData.assets)&&loading.push(assetLoad(item))),Promise.all(loading).then(function(results){return 0<results.length&&_.all(results,_.isTrue)})},unload:function(item){var loading=[];return isItemObjectValid(item)&&(loading.push(interactionUnload(item)),0<_.size(item.itemData.assets)&&loading.push(assetUnload(item))),Promise.all(loading).then(function(results){return 0<results.length&&_.all(results,_.isTrue)})}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,loggerFactory=loggerFactory&&Object.prototype.hasOwnProperty.call(loggerFactory,"default")?loggerFactory["default"]:loggerFactory,qtiItemRunner=qtiItemRunner&&Object.prototype.hasOwnProperty.call(qtiItemRunner,"default")?qtiItemRunner["default"]:qtiItemRunner,getAssetManager=getAssetManager&&Object.prototype.hasOwnProperty.call(getAssetManager,"default")?getAssetManager["default"]:getAssetManager,assetPreloaderFactory=assetPreloaderFactory&&Object.prototype.hasOwnProperty.call(assetPreloaderFactory,"default")?assetPreloaderFactory["default"]:assetPreloaderFactory,interactionPreloaderFactory=interactionPreloaderFactory&&Object.prototype.hasOwnProperty.call(interactionPreloaderFactory,"default")?interactionPreloaderFactory["default"]:interactionPreloaderFactory,urlUtil=urlUtil&&Object.prototype.hasOwnProperty.call(urlUtil,"default")?urlUtil["default"]:urlUtil;var logger=loggerFactory("taoQtiTest/runner/proxy/cache/itemPreloader"),isItemObjectValid=function(item){return _.isPlainObject(item)&&_.isString(item.baseUrl)&&_.isString(item.itemIdentifier)&&!_.isEmpty(item.itemIdentifier)&&_.isPlainObject(item.itemData)},setItemFlag=function(item,flag){item.flags=item.flags||{},item.flags[flag]=!0},getItemInteractions=function(itemData){var interactions=[];return itemData.data&&itemData.data.body&&itemData.data.body.elements&&_.forEach(itemData.data.body.elements,function(elements){return interactions.push(elements)}),interactions};return itemPreloaderFactory}),define("taoQtiTest/runner/proxy/cache/itemStore",["lodash","core/store","taoQtiTest/runner/proxy/cache/itemPreloader"],function(_,store,itemPreloaderFactory){'use strict';function itemStoreFactory(options){var config=_.defaults(options||{},defaultConfig),getStore=function(){return store("item-cache",store.backends.memory)},index=[],itemPreloader;return config.preload&&(itemPreloader=itemPreloaderFactory(_.pick(config,["testId"]))),{setCacheSize:function(cacheSize){config.maxSize=cacheSize},get:function(key){return getStore().then(function(itemStorage){return itemStorage.getItem(key)})},has:function(key){return _.contains(index,key)},set:function(key,item){var self=this;return getStore().then(function(itemStorage){return itemStorage.setItem(key,item).then(function(updated){return updated&&(!_.contains(index,key)&&index.push(key),config.preload&&_.defer(function(){itemPreloader.preload(item)})),1<index.length&&index.length>config.maxSize?self.remove(index[0]).then(function(removed){return updated&&removed}):updated})})},update:function(key,updateKey,updateValue){return this.has(key)&&_.isString(updateKey)?getStore().then(function(itemStorage){return itemStorage.getItem(key).then(function(itemData){if(_.isPlainObject(itemData))return itemData[updateKey]=updateValue,itemStorage.setItem(key,itemData)})}):Promise.resolve(!1)},remove:function(key){return this.has(key)?getStore().then(function(itemStorage){return index=_.without(index,key),itemStorage.getItem(key).then(function(item){config.preload&&_.defer(function(){itemPreloader.unload(item)})}).then(function(){return itemStorage.removeItem(key)})}):Promise.resolve(!1)},clear:function(){return getStore().then(function(itemStorage){return index=[],itemStorage.clear()})}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,store=store&&Object.prototype.hasOwnProperty.call(store,"default")?store["default"]:store,itemPreloaderFactory=itemPreloaderFactory&&Object.prototype.hasOwnProperty.call(itemPreloaderFactory,"default")?itemPreloaderFactory["default"]:itemPreloaderFactory;var defaultConfig={maxSize:10,preload:!1};return itemStoreFactory}),define("taoQtiTest/runner/proxy/qtiServiceProxy",["lodash","core/promiseQueue","core/communicator","taoQtiTest/runner/config/qtiServiceConfig","core/request"],function(_,promiseQueue,communicatorFactory,configFactory,coreRequest){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,promiseQueue=promiseQueue&&Object.prototype.hasOwnProperty.call(promiseQueue,"default")?promiseQueue["default"]:promiseQueue,communicatorFactory=communicatorFactory&&Object.prototype.hasOwnProperty.call(communicatorFactory,"default")?communicatorFactory["default"]:communicatorFactory,configFactory=configFactory&&Object.prototype.hasOwnProperty.call(configFactory,"default")?configFactory["default"]:configFactory,coreRequest=coreRequest&&Object.prototype.hasOwnProperty.call(coreRequest,"default")?coreRequest["default"]:coreRequest;return{name:"qtiServiceProxy",install:function(){var self=this;this.queue=promiseQueue(),this.prepareParams=function(actionParams){var stringifyParams=["itemState","itemResponse","toolStates"];return _.isPlainObject(actionParams)?_.mapValues(actionParams,function(value,key){return _.contains(stringifyParams,key)?JSON.stringify(value):value}):actionParams},this.request=function(url,reqParams,contentType,noToken){return coreRequest({url:url,data:self.prepareParams(reqParams),method:reqParams?"POST":"GET",contentType:contentType,noToken:noToken,background:!1,sequential:!0,timeout:self.configStorage.getTimeout()}).then(function(response){return self.setOnline(),response&&response.success?Promise.resolve(response):Promise.reject(response)}).catch(function(error){return self.isConnectivityError(error)&&self.setOffline("request"),Promise.reject(error)})}},init:function(config,params){return this.configStorage=configFactory(config||{}),this.request(this.configStorage.getTestActionUrl("init"),params)},destroy:function(){return this.configStorage=null,this.queue=null,Promise.resolve()},getTestData:function(){return this.request(this.configStorage.getTestActionUrl("getTestData"))},getTestContext:function(){return this.request(this.configStorage.getTestActionUrl("getTestContext"))},getTestMap:function(){return this.request(this.configStorage.getTestActionUrl("getTestMap"))},sendVariables:function(variables){return this.request(this.configStorage.getTestActionUrl("storeTraceData"),{traceData:JSON.stringify(variables)})},callTestAction:function(action,params){return this.request(this.configStorage.getTestActionUrl(action),params)},getItem:function(itemIdentifier,params){return this.request(this.configStorage.getItemActionUrl(itemIdentifier,"getItem"),params,void 0,!0)},submitItem:function(itemIdentifier,state,response,params){var body=_.merge({itemState:state,itemResponse:response},params||{});return this.request(this.configStorage.getItemActionUrl(itemIdentifier,"submitItem"),body)},callItemAction:function(itemIdentifier,action,params){return this.request(this.configStorage.getItemActionUrl(itemIdentifier,action),params)},telemetry:function(itemIdentifier,signal,params){return this.request(this.configStorage.getTelemetryUrl(itemIdentifier,signal),params,null,!0)},loadCommunicator:function(){var config=this.configStorage.getCommunicationConfig();return config.enabled?communicatorFactory(config.type,config.params):null}}}),define("taoQtiTest/runner/proxy/cache/proxy",["lodash","taoQtiTest/runner/navigator/navigator","taoQtiTest/runner/helpers/map","taoQtiTest/runner/helpers/navigation","taoQtiTest/runner/provider/dataUpdater","taoQtiTest/runner/proxy/qtiServiceProxy","taoQtiTest/runner/proxy/cache/itemStore","taoQtiTest/runner/proxy/cache/actionStore","taoQtiTest/runner/helpers/offlineErrorHelper"],function(_,testNavigatorFactory,mapHelper,navigationHelper,dataUpdater,qtiServiceProxy,itemStoreFactory,actionStoreFactory,offlineErrorHelper){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,testNavigatorFactory=testNavigatorFactory&&Object.prototype.hasOwnProperty.call(testNavigatorFactory,"default")?testNavigatorFactory["default"]:testNavigatorFactory,mapHelper=mapHelper&&Object.prototype.hasOwnProperty.call(mapHelper,"default")?mapHelper["default"]:mapHelper,navigationHelper=navigationHelper&&Object.prototype.hasOwnProperty.call(navigationHelper,"default")?navigationHelper["default"]:navigationHelper,dataUpdater=dataUpdater&&Object.prototype.hasOwnProperty.call(dataUpdater,"default")?dataUpdater["default"]:dataUpdater,qtiServiceProxy=qtiServiceProxy&&Object.prototype.hasOwnProperty.call(qtiServiceProxy,"default")?qtiServiceProxy["default"]:qtiServiceProxy,itemStoreFactory=itemStoreFactory&&Object.prototype.hasOwnProperty.call(itemStoreFactory,"default")?itemStoreFactory["default"]:itemStoreFactory,actionStoreFactory=actionStoreFactory&&Object.prototype.hasOwnProperty.call(actionStoreFactory,"default")?actionStoreFactory["default"]:actionStoreFactory,offlineErrorHelper=offlineErrorHelper&&Object.prototype.hasOwnProperty.call(offlineErrorHelper,"default")?offlineErrorHelper["default"]:offlineErrorHelper;var proxy=_.defaults({name:"precaching",install:function(config){var self=this;qtiServiceProxy.install.call(this),this.itemStore=itemStoreFactory({maxSize:20,preload:!0,testId:config.serviceCallId}),this.actiontStore=null,this.getItemFromStore=!1,this.requestConfig={},this.actionPromises={},this.actionRejectPromises={},this.dataUpdater=dataUpdater(this.getDataHolder()),this.getCacheAmount=function(){var cacheAmount=1;return config&&config.options&&config.options.itemCaching&&(cacheAmount=parseInt(config.options.itemCaching.amount,10)||cacheAmount),cacheAmount},this.hasItem=function(itemIdentifier){return itemIdentifier&&self.itemStore.has(itemIdentifier)},this.hasNextItem=function(itemIdentifier){var sibling=navigationHelper.getNextItem(this.getDataHolder().get("testMap"),itemIdentifier);return sibling&&self.hasItem(sibling.id)},this.hasPreviousItem=function(itemIdentifier){var sibling=navigationHelper.getPreviousItem(this.getDataHolder().get("testMap"),itemIdentifier);return sibling&&self.hasItem(sibling.id)},this.offlineAction=function(action,actionParams){var result={success:!0},testContext=this.getDataHolder().get("testContext"),testMap=this.getDataHolder().get("testMap"),testNavigator,newTestContext;if("pause"===action)throw offlineErrorHelper.buildErrorFromContext(offlineErrorHelper.getOfflinePauseError(),{reason:actionParams.reason});if(_.contains(["exitTest","timeout"],action)||"next"===actionParams.direction&&navigationHelper.isLast(testMap,testContext.itemIdentifier))throw offlineErrorHelper.buildErrorFromContext(offlineErrorHelper.getOfflineExitError());if(actionParams.direction&&actionParams.scope){if(testNavigator=testNavigatorFactory(testContext,testMap),newTestContext=testNavigator.navigate(actionParams.direction,actionParams.scope,actionParams.ref),!newTestContext||!newTestContext.itemIdentifier||!self.hasItem(newTestContext.itemIdentifier))throw offlineErrorHelper.buildErrorFromContext(offlineErrorHelper.getOfflineNavError());result.testContext=newTestContext}return self.markActionAsOffline(actionParams),result},this.processSyncAction=function(action,actionParams,deferred){return new Promise(function(resolve,reject){self.scheduleAction(action,actionParams).then(function(actionData){self.actionPromises[actionData.params.actionId]=resolve,self.actionRejectPromises[actionData.params.actionId]=reject,deferred||self.syncData().then(function(result){self.isOnline()&&_.forEach(result,function(actionResult){var actionId=actionResult.requestParameters&&actionResult.requestParameters.actionId?actionResult.requestParameters.actionId:null;if(!actionResult.success&&self.actionRejectPromises[actionId]){var error=new Error(actionResult.message);return error.unrecoverable=!0,reject(error)}actionId&&self.actionPromises[actionId]&&self.actionPromises[actionId](actionResult)})}).catch(function(reason){reject(reason)})}).catch(function(reason){reject(reason)})})},this.scheduleAction=function(action,actionParams){return actionParams.actionId="".concat(action,"_").concat(new Date().getTime()),self.actiontStore.push(action,self.prepareParams(_.defaults(actionParams||{},self.requestConfig))).then(function(){return{action:action,params:actionParams}})},this.requestNetworkThenOffline=function(url,action,actionParams,deferred,noToken){var testContext=this.getDataHolder().get("testContext"),communicationConfig=self.configStorage.getCommunicationConfig(),runRequestThenOffline=function(){var request;return communicationConfig.syncActions&&0<=communicationConfig.syncActions.indexOf(action)?request=self.processSyncAction(action,actionParams,deferred):(request=self.request(url,actionParams,void 0,noToken||!1),request.then(function(result){return self.isOffline()?self.scheduleAction(action,actionParams):result})),request.then(function(result){return self.isOffline()?self.offlineAction(action,actionParams):result}).catch(function(error){if(self.isConnectivityError(error)&&self.isOffline())return self.offlineAction(action,actionParams);throw error})};return this.isOffline()?this.telemetry(testContext.itemIdentifier,"up").then(function(){return self.isOnline()?runRequestThenOffline():self.scheduleAction(action,actionParams).then(function(){return self.offlineAction(action,actionParams)})}).catch(function(err){if(self.isConnectivityError(err))return self.scheduleAction(action,actionParams).then(function(){return self.offlineAction(action,actionParams)});throw err}):runRequestThenOffline()},this.syncData=function(){var actions;return this.queue.serie(function(){return self.actiontStore.flush().then(function(data){if(actions=data,data&&data.length)return self.send("sync",data)}).catch(function(err){throw self.isConnectivityError(err)&&(self.setOffline("communicator"),_.forEach(actions,function(action){self.actiontStore.push(action.action,action.parameters)})),err})})},this.exportActions=function(){var actions;return this.queue.serie(function(){return self.actiontStore.flush().then(function(data){return actions=data,_.forEach(actions,function(action){self.actiontStore.push(action.action,action.parameters)}),data})})},this.markActionAsOffline=function(actionParams){return actionParams.offline=!0,this.queue.serie(function(){return self.actiontStore.update(self.prepareParams(_.defaults(actionParams||{},self.requestConfig)))})}},init:function(config,params){var self=this;if(!this.getDataHolder())throw new Error("Unable to retrieve test runners data holder");return this.requestConfig=_.pick(config,["testDefinition","testCompilation","serviceCallId"]),this.actiontStore=actionStoreFactory(config.serviceCallId),this.on("reconnect",function(){return this.syncData().then(function(responses){self.dataUpdater.update(responses)}).catch(function(err){self.trigger("error",err)})}),this.syncData(),qtiServiceProxy.init.call(this,config,params)},destroy:function(){return this.itemStore.clear(),this.getItemFromStore=!1,qtiServiceProxy.destroy.call(this)},getItem:function(itemIdentifier,params){var self=this,loadNextItem=function(){var testMap=self.getDataHolder().get("testMap"),siblings=navigationHelper.getSiblingItems(testMap,itemIdentifier,"both",self.getCacheAmount()),missing=_.reduce(siblings,function(list,sibling){return self.hasItem(sibling.id)||list.push(sibling.id),list},[]);self.isOnline()&&missing.length&&_.delay(function(){self.requestNetworkThenOffline(self.configStorage.getTestActionUrl("getNextItemData"),"getNextItemData",{itemDefinition:missing},!1,!0).then(function(response){response&&response.items&&_.forEach(response.items,function(item){item&&item.itemIdentifier&&self.itemStore.set(item.itemIdentifier,item)})}).catch(_.noop)},450)};return this.getItemFromStore&&this.itemStore.has(itemIdentifier)?(loadNextItem(),this.itemStore.get(itemIdentifier)):this.request(this.configStorage.getItemActionUrl(itemIdentifier,"getItem"),params,void 0,!0).then(function(response){return response&&response.success&&self.itemStore.set(itemIdentifier,response),loadNextItem(),response})},submitItem:function(itemIdentifier,state,response,params){var self=this;return this.itemStore.update(itemIdentifier,"itemState",state).then(function(){return qtiServiceProxy.submitItem.call(self,itemIdentifier,state,response,params)})},sendVariables:function(variables,deferred){var actionParams={traceData:JSON.stringify(variables)};return this.requestNetworkThenOffline(this.configStorage.getTestActionUrl("storeTraceData"),"storeTraceData",actionParams,deferred)},callTestAction:function(action,params,deferred){return this.requestNetworkThenOffline(this.configStorage.getTestActionUrl(action),action,params,deferred)},callItemAction:function(itemIdentifier,action,params,deferred){var self=this,updateStatePromise=Promise.resolve(),testMap=this.getDataHolder().get("testMap");return params.itemState&&(updateStatePromise=this.itemStore.update(itemIdentifier,"itemState",params.itemState)),self.getItemFromStore=navigationHelper.isMovingToNextItem(action,params)&&self.hasNextItem(itemIdentifier)||navigationHelper.isMovingToPreviousItem(action,params)&&self.hasPreviousItem(itemIdentifier)||navigationHelper.isJumpingToItem(action,params)&&self.hasItem(mapHelper.getItemIdentifier(testMap,params.ref)),(navigationHelper.isMovingToNextItem(action,params)||navigationHelper.isMovingToPreviousItem(action,params)||navigationHelper.isJumpingToItem(action,params))&&(params.start=!0),updateStatePromise.then(function(){return self.requestNetworkThenOffline(self.configStorage.getItemActionUrl(itemIdentifier,action),action,_.merge({itemDefinition:itemIdentifier},params),deferred)})}},qtiServiceProxy);return proxy}),define("taoQtiTest/runner/proxy/loader",["lodash","module","taoTests/runner/proxy"],function(_,module,proxy){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,module=module&&Object.prototype.hasOwnProperty.call(module,"default")?module["default"]:module,proxy=proxy&&Object.prototype.hasOwnProperty.call(proxy,"default")?proxy["default"]:proxy;var config=_.defaults(module.config(),{providerName:"qtiServiceProxy",module:"taoQtiTest/runner/proxy/qtiServiceProxy"});return function(){return new Promise(function(resolve,reject){require([config.module],function(proxyProvider){proxy.registerProvider(config.providerName,proxyProvider),resolve(config.providerName)},reject)})}}),define("taoQtiTest/runner/services/responseStore",["lodash","core/store"],function(_,store){'use strict';function responseStoreFactory(options){var config=_.defaults(options||{},defaultConfig),getResponseStore=function(){return store(config.responseStoreName,store.backends.memory)},getCorrectResponseStore=function(){return store(config.correctResponseStoreName,store.backends.memory)};return{getResponses:function(){return getResponseStore().then(function(storage){return storage.getItems()})},getCorrectResponses:function(){return getCorrectResponseStore().then(function(storage){return storage.getItems()})},getResponse:function(key){return getResponseStore().then(function(storage){return storage.getItem(key)})},getCorrectResponse:function(key){return getCorrectResponseStore().then(function(storage){return storage.getItem(key).then(function(result){return new Promise(function(resolve){return"undefined"==typeof result?resolve([]):resolve(result)})})})},addResponse:function(key,value){return getResponseStore().then(function(storage){return storage.setItem(key,value).then(function(updated){return updated})})},addCorrectResponse:function(key,value){return getCorrectResponseStore().then(function(storage){return storage.setItem(key,value).then(function(updated){return updated})})},clearResponses:function(){return getResponseStore().then(function(storage){return storage.clear()})},clearCorrectResponses:function(){return getCorrectResponseStore().then(function(storage){return storage.clear()})}}}_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,store=store&&Object.prototype.hasOwnProperty.call(store,"default")?store["default"]:store;var defaultConfig={responseStoreName:"response",correctResponseStoreName:"correct-response"};return responseStoreFactory}),define("taoQtiTest/runner/proxy/offline/proxy",["lodash","taoQtiTest/runner/navigator/offlineNavigator","taoQtiTest/runner/helpers/navigation","taoQtiTest/runner/provider/dataUpdater","taoQtiTest/runner/proxy/qtiServiceProxy","taoQtiTest/runner/proxy/cache/itemStore","taoQtiTest/runner/proxy/cache/actionStore","taoQtiTest/runner/helpers/offlineErrorHelper","taoQtiTest/runner/helpers/offlineSyncModal","taoQtiTest/runner/services/responseStore","util/download","taoQtiTest/runner/config/states"],function(_,offlineNavigatorFactory,navigationHelper,dataUpdater,qtiServiceProxy,itemStoreFactory,actionStoreFactory,offlineErrorHelper,offlineSyncModal,responseStoreFactory,download,states){'use strict';_=_&&Object.prototype.hasOwnProperty.call(_,"default")?_["default"]:_,offlineNavigatorFactory=offlineNavigatorFactory&&Object.prototype.hasOwnProperty.call(offlineNavigatorFactory,"default")?offlineNavigatorFactory["default"]:offlineNavigatorFactory,navigationHelper=navigationHelper&&Object.prototype.hasOwnProperty.call(navigationHelper,"default")?navigationHelper["default"]:navigationHelper,dataUpdater=dataUpdater&&Object.prototype.hasOwnProperty.call(dataUpdater,"default")?dataUpdater["default"]:dataUpdater,qtiServiceProxy=qtiServiceProxy&&Object.prototype.hasOwnProperty.call(qtiServiceProxy,"default")?qtiServiceProxy["default"]:qtiServiceProxy,itemStoreFactory=itemStoreFactory&&Object.prototype.hasOwnProperty.call(itemStoreFactory,"default")?itemStoreFactory["default"]:itemStoreFactory,actionStoreFactory=actionStoreFactory&&Object.prototype.hasOwnProperty.call(actionStoreFactory,"default")?actionStoreFactory["default"]:actionStoreFactory,offlineErrorHelper=offlineErrorHelper&&Object.prototype.hasOwnProperty.call(offlineErrorHelper,"default")?offlineErrorHelper["default"]:offlineErrorHelper,offlineSyncModal=offlineSyncModal&&Object.prototype.hasOwnProperty.call(offlineSyncModal,"default")?offlineSyncModal["default"]:offlineSyncModal,responseStoreFactory=responseStoreFactory&&Object.prototype.hasOwnProperty.call(responseStoreFactory,"default")?responseStoreFactory["default"]:responseStoreFactory,download=download&&Object.prototype.hasOwnProperty.call(download,"default")?download["default"]:download,states=states&&Object.prototype.hasOwnProperty.call(states,"default")?states["default"]:states;var proxy=_.defaults({name:"offline",install:function(config){var self=this;qtiServiceProxy.install.call(this),this.itemStore=itemStoreFactory({preload:!0,testId:config.serviceCallId}),this.responseStore=responseStoreFactory(),this.offlineNavigator=offlineNavigatorFactory(this.itemStore,this.responseStore),this.actionStore=null,this.requestConfig={},this.actionPromises={},this.syncInProgress=!1,this.dataUpdater=dataUpdater(this.getDataHolder()),this.hasItem=function(itemIdentifier){return itemIdentifier&&self.itemStore.has(itemIdentifier)},this.hasNextItem=function(itemIdentifier){var sibling=navigationHelper.getNextItem(this.getDataHolder().get("testMap"),itemIdentifier);return sibling&&self.hasItem(sibling.id)},this.hasPreviousItem=function(itemIdentifier){var sibling=navigationHelper.getPreviousItem(this.getDataHolder().get("testMap"),itemIdentifier);return sibling&&self.hasItem(sibling.id)},this.offlineAction=function(action,actionParams){return new Promise(function(resolve,reject){var result={success:!0},dataHolder=self.getDataHolder(),testContext=dataHolder.get("testContext"),testMap=dataHolder.get("testMap"),isLast=!!(testContext&&testMap)&&navigationHelper.isLast(testMap,testContext.itemIdentifier),isOffline=self.isOffline(),isBlocked=_.contains(["exitTest","timeout","pause"],action),isNavigationAction="next"===actionParams.direction||"skip"===action,isMeaningfullScope=!!actionParams.scope,navigate=function(navigator,options,results){var newTestContext;navigator.setTestContext(options.testContext).setTestMap(options.testMap).navigate(actionParams.direction,actionParams.scope,actionParams.ref,actionParams).then(function(res){if(newTestContext=res,!newTestContext||!newTestContext.itemIdentifier||!self.hasItem(newTestContext.itemIdentifier))throw offlineErrorHelper.buildErrorFromContext(offlineErrorHelper.getOfflineNavError());results.testContext=newTestContext,resolve(results)}).catch(function(err){reject(err)})},isDirectionDefined;if("skip"===action&&(actionParams.direction=action),isDirectionDefined=!!actionParams.direction,isBlocked||isNavigationAction&&isLast){result.testContext={state:states.testSession.closed};var offlineSync=function(){offlineSyncModal(self).on("proceed",function(){self.syncData().then(function(){if(self.isOnline())return resolve(result)}).catch(function(){return resolve({success:!1})})}).on("secondaryaction",function(){self.initiateDownload().catch(function(){return resolve({success:!1})})})};return isOffline?offlineSync():self.syncData().then(function(){return self.isOffline()?offlineSync():resolve(result)}).catch(function(){return resolve({success:!1})})}if(!(isDirectionDefined&&isMeaningfullScope))resolve(result);else if(isOffline)navigate(self.offlineNavigator,{testContext:testContext,testMap:testMap},result);else return self.syncData().then(function(){navigate(self.offlineNavigator,{testContext:testContext,testMap:testMap},result)}).catch(function(){return resolve({success:!1})})})},this.scheduleAction=function(action,actionParams){return actionParams=_.assign(actionParams,{actionId:"".concat(action,"_").concat(new Date().getTime()),offline:!0}),self.actionStore.push(action,self.prepareParams(_.defaults(actionParams||{},self.requestConfig))).then(function(){return{action:action,params:actionParams}})},this.sendSyncData=function(data){var attempt=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1;return new Promise(function(resolve,reject){return self.send("sync",data).then(resolve).catch(function(err){return self.isConnectivityError(err)&&attempt<3?self.sendSyncData(data,attempt+1).then(resolve).catch(reject):reject(err)})})},this.syncData=function(){var actions;return this.syncInProgress=!0,this.queue.serie(function(){return self.actionStore.flush().then(function(data){if(actions=data,data&&data.length)return self.sendSyncData(data)}).catch(function(err){if(self.isConnectivityError(err))return self.setOffline("communicator"),void _.forEach(actions,function(action){self.actionStore.push(action.action,action.parameters,action.timestamp)});throw self.syncInProgress=!1,self.trigger("error",err),err}).then(function(data){return self.syncInProgress=!1,data})})},this.prepareDownload=function(actions){var timestamp=Date.now(),dateTime=new Date(timestamp).toISOString(),testData=self.getDataHolder().get("testData"),testMap=self.getDataHolder().get("testMap"),niceFilename="Download of ".concat(testMap.title," at ").concat(dateTime,".json"),isExitTest=actions.some(function(elem){return"exitTest"===elem.action});return{filename:niceFilename,content:JSON.stringify({isExitTest:isExitTest,timestamp:timestamp,testData:testData,actionQueue:actions,testConfig:self.requestConfig})}},this.initiateDownload=function(){return this.queue.serie(function(){return self.actionStore.flush().then(function(actions){return _.forEach(actions,function(action){self.actionStore.push(action.action,action.parameters,action.timestamp)}),actions}).then(self.prepareDownload).then(function(data){return download(data.filename,data.content)})})}},init:function(config,params){var self=this,InitCallPromise=qtiServiceProxy.init.call(this,config,params);if(!this.getDataHolder())throw new Error("Unable to retrieve test runners data holder");return this.requestConfig=_.pick(config,["testDefinition","testCompilation","serviceCallId"]),this.actionStore=actionStoreFactory(config.serviceCallId),this.before("error",function(e,error){return!(self.isConnectivityError(error)&&self.syncInProgress)}),InitCallPromise.then(function(response){var promises=[];return response.items||(response.items={}),self.itemStore.setCacheSize(_.size(response.items)),_.forEach(response.items,function(item,itemIdentifier){promises.push(self.itemStore.set(itemIdentifier,item))}),Promise.all(promises).then(function(){return self.offlineNavigator.setTestContext(response.testContext).setTestMap(response.testMap).init()}).then(function(){return response})})},destroy:function(){var self=this;return this.itemStore.clear().then(function(){return qtiServiceProxy.destroy.call(self)})},getItem:function(itemIdentifier){return this.itemStore.get(itemIdentifier)},submitItem:function(itemIdentifier,state,response,params){var self=this;return this.itemStore.update(itemIdentifier,"itemState",state).then(function(){return qtiServiceProxy.submitItem.call(self,itemIdentifier,state,response,params)})},sendVariables:function(variables){var self=this,actionParams={traceData:JSON.stringify(variables)};return self.scheduleAction("storeTraceData",actionParams).then(function(){return self.offlineAction("storeTraceData",actionParams)}).catch(function(err){return Promise.reject(err)})},callTestAction:function(action,params){var self=this;return self.scheduleAction(action,params).then(function(){return self.offlineAction(action,params)}).catch(function(err){return Promise.reject(err)})},callItemAction:function(itemIdentifier,action,params){var self=this,updateStatePromise=Promise.resolve();return params.itemState&&(updateStatePromise=this.itemStore.update(itemIdentifier,"itemState",params.itemState)),(navigationHelper.isMovingToNextItem(action,params)||navigationHelper.isMovingToPreviousItem(action,params)||navigationHelper.isJumpingToItem(action,params))&&(params.start=!0),updateStatePromise.then(function(){return params=_.assign({itemDefinition:itemIdentifier},params),self.scheduleAction(action,params).then(function(){return self.offlineAction(action,params)}).catch(function(err){return Promise.reject(err)})}).catch(function(err){return Promise.reject(err)})}},qtiServiceProxy);return proxy}),function(c){var d=document,s=d.createElement("style");s.type="text/css",d.getElementsByTagName("head")[0].appendChild(s),s.styleSheet?s.styleSheet.cssText=c:s.appendChild(d.createTextNode(c))}(".qti-navigator{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;-o-flex-direction:column;flex-direction:column;padding:0;cursor:default;min-width:calc(18rem - 8px);height:100%;position:relative}.qti-navigator span{display:inline-block}.qti-navigator .collapsed .collapsible-panel{display:none !important}.qti-navigator .collapsed .qti-navigator-label .icon-up{display:none}.qti-navigator .collapsed .qti-navigator-label .icon-down{display:inline-block}.qti-navigator .collapsible>.qti-navigator-label,.qti-navigator .qti-navigator-item>.qti-navigator-label{cursor:pointer}.qti-navigator.scope-test-section .qti-navigator-part>.qti-navigator-label{display:none !important}.qti-navigator .qti-navigator-label{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;min-width:calc(100% - 12px);padding:0 6px;line-height:3rem}.qti-navigator .qti-navigator-label .icon-up,.qti-navigator .qti-navigator-label .icon-down{line-height:3rem;margin-left:auto}.qti-navigator .qti-navigator-label .icon-down{display:none}.qti-navigator .qti-navigator-label .qti-navigator-number{display:none}.qti-navigator .qti-navigator-icon,.qti-navigator .icon{position:relative;top:1px;display:inline-block;width:2rem;line-height:2.8rem}.qti-navigator .unseen .qti-navigator-icon{cursor:default}.qti-navigator.prevents-unseen:not(.skipahead-enabled) .unseen .qti-navigator-icon,.qti-navigator.prevents-unseen:not(.skipahead-enabled) .unseen .qti-navigator-label{cursor:not-allowed !important}.qti-navigator .icon-answered:before{content:\"\\e69a\"}.qti-navigator .icon-viewed:before{content:\"\\e631\"}.qti-navigator .icon-flagged:before{content:\"\\e64e\"}.qti-navigator .icon-unanswered:before,.qti-navigator .icon-unseen:before{content:\"\\e6a5\"}.qti-navigator .qti-navigator-counter{text-align:right;margin-left:auto;font-size:12px;font-size:1.2rem}.qti-navigator .qti-navigator-actions{text-align:center}.qti-navigator .qti-navigator-info.collapsed{height:calc(3rem + 1px)}.qti-navigator .qti-navigator-info{height:calc(5 * (3rem + 1px));overflow:hidden}.qti-navigator .qti-navigator-info>.qti-navigator-label{min-width:calc(100% - 16px);padding:0 8px}.qti-navigator .qti-navigator-info ul{padding:0 4px}.qti-navigator .qti-navigator-info ul .qti-navigator-label span.qti-navigator-text{padding:0 6px;min-width:10rem}.qti-navigator .qti-navigator-info ul .qti-navigator-label span.qti-navigator-icon{min-width:1.5rem}.qti-navigator .qti-navigator-info ul .qti-navigator-label span.qti-navigator-counter{min-width:5rem}.qti-navigator .qti-navigator-filters{margin-top:1rem;text-align:center;width:15rem;height:calc(3rem + (2 * 1px))}.qti-navigator .qti-navigator-filters ul{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch}.qti-navigator .qti-navigator-filters li{display:block}.qti-navigator .qti-navigator-filters li .qti-navigator-tab{border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;border-left:none;line-height:3rem;min-width:5rem;cursor:pointer;white-space:nowrap}.qti-navigator .qti-navigator-tree{-webkit-flex:1;-moz-flex:1;-ms-flex:1;-o-flex:1;flex:1;overflow-y:auto}.qti-navigator .qti-navigator-linear,.qti-navigator .qti-navigator-linear-part{padding:8px}.qti-navigator .qti-navigator-linear .icon,.qti-navigator .qti-navigator-linear-part .icon{display:none}.qti-navigator .qti-navigator-linear .qti-navigator-label,.qti-navigator .qti-navigator-linear-part .qti-navigator-label{font-size:14px;font-size:1.4rem}.qti-navigator .qti-navigator-linear .qti-navigator-title,.qti-navigator .qti-navigator-linear-part .qti-navigator-title{font-size:14px;font-size:1.4rem;margin:8px 0}.qti-navigator .qti-navigator-linear .qti-navigator-message,.qti-navigator .qti-navigator-linear-part .qti-navigator-message{font-size:14px;font-size:1.4rem}.qti-navigator .qti-navigator-part>.qti-navigator-label{padding:0 8px}.qti-navigator .qti-navigator-part:not(:first-child){margin-top:1px}.qti-navigator .qti-navigator-section>.qti-navigator-label{padding:0 8px}.qti-navigator .qti-navigator-item{margin:1px 0;padding-left:10px}.qti-navigator .qti-navigator-item:first-child{margin-top:0}.qti-navigator .qti-navigator-item.disabled>.qti-navigator-label{cursor:not-allowed}.qti-navigator .qti-navigator-collapsible{cursor:pointer;text-align:center;display:none;position:absolute;top:0;bottom:0;right:0;padding-top:50%}.qti-navigator .qti-navigator-collapsible .icon{font-size:20px;font-size:2rem;width:1rem !important;height:2rem !important}.qti-navigator .qti-navigator-collapsible .qti-navigator-expand{display:none}.qti-navigator.collapsible{padding-right:calc(1rem + 10px) !important}.qti-navigator.collapsible .qti-navigator-collapsible{display:block}.qti-navigator.collapsed{width:calc(8rem + 1rem + 10px);min-width:8rem}.qti-navigator.collapsed ul{padding:0 !important}.qti-navigator.collapsed .qti-navigator-text,.qti-navigator.collapsed .qti-navigator-info>.qti-navigator-label,.qti-navigator.collapsed .qti-navigator-part>.qti-navigator-label,.qti-navigator.collapsed .qti-navigator-section>.qti-navigator-label,.qti-navigator.collapsed .qti-navigator-message{display:none !important}.qti-navigator.collapsed .qti-navigator-label{padding:0 2px !important;width:calc(8rem - 4px);min-width:calc(8rem - 4px)}.qti-navigator.collapsed .qti-navigator-icon,.qti-navigator.collapsed .icon{width:auto}.qti-navigator.collapsed .qti-navigator-counter{margin-left:0;min-width:4rem !important}.qti-navigator.collapsed .qti-navigator-collapsible .qti-navigator-collapse{display:none}.qti-navigator.collapsed .qti-navigator-collapsible .qti-navigator-expand{display:block}.qti-navigator.collapsed .qti-navigator-info{height:calc(4 * (3rem + 1px))}.qti-navigator.collapsed .qti-navigator-info.collapsed .collapsible-panel{display:block !important}.qti-navigator.collapsed .qti-navigator-filters{width:calc(8rem - 16px)}.qti-navigator.collapsed .qti-navigator-filter span{display:none}.qti-navigator.collapsed .qti-navigator-filter.active span{display:block;border:0 none;width:calc(8rem - 16px)}.qti-navigator.collapsed .qti-navigator-item,.qti-navigator.collapsed .qti-navigator-linear,.qti-navigator.collapsed .qti-navigator-linear-part{padding-left:2px;text-align:center}.qti-navigator.collapsed .qti-navigator-item{overflow:hidden}.qti-navigator.collapsed .qti-navigator-item .qti-navigator-icon{padding-left:6px;width:2rem}.qti-navigator.collapsed .qti-navigator-item .qti-navigator-number{display:inline-block;margin-left:6px;margin-right:8rem}.qti-navigator.collapsed .qti-navigator-linear,.qti-navigator.collapsed .qti-navigator-linear-part{padding:0 0 8px 0}.qti-navigator.collapsed .qti-navigator-linear .icon,.qti-navigator.collapsed .qti-navigator-linear-part .icon{display:block}.qti-navigator.collapsed .qti-navigator-actions button{padding:0 9px 0 5px}.qti-navigator .qti-navigator-info>.qti-navigator-label{background-color:#D4D5D7;color:#222;border-top:1px solid #D4D5D7}.qti-navigator .qti-navigator-info li{border-bottom:1px solid #fff}.qti-navigator .qti-navigator-filter .qti-navigator-tab{background-color:#fff}.qti-navigator .qti-navigator-filter .qti-navigator-tab:hover{background-color:#3e7da7;color:#fff}.qti-navigator .qti-navigator-filter.active .qti-navigator-tab{background-color:#a4a9b1;color:#fff}.qti-navigator .qti-navigator-linear,.qti-navigator .qti-navigator-linear-part{background:#fff}.qti-navigator .qti-navigator-part>.qti-navigator-label{background-color:#dddfe2}.qti-navigator .qti-navigator-part>.qti-navigator-label:hover{background-color:#c6cacf}.qti-navigator .qti-navigator-part.active>.qti-navigator-label{background-color:#c0c4ca}.qti-navigator .qti-navigator-section>.qti-navigator-label{border-bottom:1px solid #fff}.qti-navigator .qti-navigator-section>.qti-navigator-label:hover{background-color:#ebe8e4}.qti-navigator .qti-navigator-section.active>.qti-navigator-label{background-color:#ded9d4}.qti-navigator .qti-navigator-item{background:#fff}.qti-navigator .qti-navigator-item.active{background:#0e5d91;color:#fff}.qti-navigator .qti-navigator-item:hover{background:#0a3f62;color:#fff}.qti-navigator .qti-navigator-item.disabled{background-color:#e2deda !important}.qti-navigator .qti-navigator-collapsible{background-color:#dfe1e4;color:#222}.qti-navigator .qti-navigator-collapsible .icon{color:#fff}.document-viewer-plugin{position:relative}.document-viewer-plugin .viewer-overlay{position:fixed;top:0;left:0;bottom:0;right:0;z-index:10000;width:100%;opacity:.5;background-color:#e4ecef}.document-viewer-plugin .viewer-panel{position:fixed;top:10px;left:10px;bottom:10px;right:10px;z-index:100000;color:#222;background:#f3f1ef;font-size:14px;font-size:1.4rem;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px}.document-viewer-plugin .viewer-header{position:relative;width:100%;height:30px;padding:5px 0;z-index:1}.document-viewer-plugin .viewer-header .viewer-title{font-size:15px;font-size:1.5rem;padding:0;margin:0 0 0 1.6rem}.document-viewer-plugin .viewer-header .icon{float:right;font-size:20px;font-size:2rem;color:#266d9c;margin:1px 6px;top:3px}.document-viewer-plugin .viewer-header .icon:hover{cursor:pointer;opacity:.75}.document-viewer-plugin .viewer-content{padding:0 20px;margin-top:4px;position:relative;height:calc(100% - 40px);overflow:auto}.qti-choiceInteraction.maskable .qti-choice .answer-mask{position:absolute;top:0;right:0;height:100%;padding:5px 10px 0 10px;z-index:10;color:#0e5d91;border:solid 1px #222;background-color:#c8d6dc;text-align:right;vertical-align:middle}.qti-choiceInteraction.maskable .qti-choice .answer-mask:hover{color:#568eb2}.qti-choiceInteraction.maskable .qti-choice .answer-mask .answer-mask-toggle:before{font-family:'tao' !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e643\"}.qti-choiceInteraction.maskable .qti-choice .label-content{padding-right:40px}.qti-choiceInteraction.maskable .qti-choice.masked .answer-mask{width:100%}.qti-choiceInteraction.maskable .qti-choice.masked .answer-mask .answer-mask-toggle:before{font-family:'tao' !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e631\"}.qti-choiceInteraction.maskable .qti-choice.masked .answer-mask:hover{background-color:#d2dde2}.mask-container.mask-container{background-color:transparent}.mask-container.mask-container .dynamic-component-title-bar{border-top-left-radius:5px;border-top-right-radius:5px;background-color:transparent;border:none;position:absolute;width:100%;z-index:1}.mask-container.mask-container .dynamic-component-title-bar.moving{background:#f3f1ef;border-bottom:1px solid #8d949e}.mask-container.mask-container .dynamic-component-title-bar .closer{display:none}.mask-container.mask-container .dynamic-component-resize-container .dynamic-component-resize-wrapper{bottom:0}.mask-container.mask-container .dynamic-component-resize-container .dynamic-component-resize-wrapper:hover,.mask-container.mask-container .dynamic-component-resize-container .dynamic-component-resize-wrapper.resizing{bottom:20px}.mask-container.mask-container .dynamic-component-content .mask{position:absolute;width:100%;height:100%;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent;opacity:1}.mask-container.mask-container .dynamic-component-content .mask .inner{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;position:relative;width:100%;height:100%;background-color:#fff;opacity:1;box-sizing:content-box;padding-bottom:30px}.mask-container.mask-container .dynamic-component-content .mask .controls{background:#f3f1ef;position:absolute;top:0;right:0;padding:0 5px 0 10px;border-radius:5px;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom:1px solid #8d949e;border-left:1px solid #8d949e;height:30px;z-index:2}.mask-container.mask-container .dynamic-component-content .mask .controls a{text-decoration:none;margin-right:5px;vertical-align:middle}.mask-container.mask-container .dynamic-component-content .mask .controls a:hover{color:#0a4166}.mask-container.mask-container .dynamic-component-content .mask .controls .view{font-size:20px;font-size:2rem}.mask-container.mask-container .dynamic-component-content .mask .controls .close{font-size:20px;font-size:2rem}.mask-container.mask-container .dynamic-component-content.moving .mask .inner{border-color:rgba(14,93,145,0.5);opacity:.55}.mask-container.mask-container .dynamic-component-content.moving .mask .controls{border-left:none;border-bottom-left-radius:0;z-index:2}.mask-container.mask-container .dynamic-component-content.sizing .mask{border-color:rgba(14,93,145,0.5)}.mask-container.mask-container .dynamic-component-content.sizing .mask .inner{opacity:.55}.mask-container.mask-container .dynamic-component-content.sizing .mask .controls{background-color:transparent;border-bottom:none;border-left:none}.mask-container.mask-container.previewing .dynamic-component-content .mask .inner{opacity:.15;-webkit-transition:opacity, 600ms, ease, 0s;-moz-transition:opacity, 600ms, ease, 0s;-ms-transition:opacity, 600ms, ease, 0s;-o-transition:opacity, 600ms, ease, 0s;transition:opacity, 600ms, ease, 0s}.mask-container.mask-container.previewing .dynamic-component-content .mask .controls{background-color:transparent;border-bottom:none;border-left:none}.connectivity-box{display:none;width:40px;margin-left:40px}.connectivity-box.with-message{width:60px}.connectivity-box .icon-connect,.connectivity-box .icon-disconnect{display:none;line-height:2;font-size:16px;font-size:1.6rem;text-shadow:0 1px 0 rgba(0,0,0,0.9)}.connectivity-box .message-connect,.connectivity-box .message-disconnected{display:none;font-size:14px;font-size:1.4rem;text-shadow:none;margin-right:3px}.connectivity-box.connected,.connectivity-box.disconnected{display:inline-block}.connectivity-box.connected .icon-connect,.connectivity-box.connected .message-connect{display:inline-block}.connectivity-box.disconnected .icon-disconnect,.connectivity-box.disconnected .message-disconnected{display:inline-block}.line-reader-mask{box-sizing:border-box;border:0 solid #0E5D91;background-color:#f3f7fa}.line-reader-mask.hidden{display:none}.line-reader-mask.resizing{background-color:rgba(243,247,250,0.8);border-color:rgba(14,93,145,0.5)}.line-reader-mask.resizer{z-index:99999 !important}.line-reader-mask.resizer.se .resize-control{border-right:2px solid #0E5D91;border-bottom:2px solid #0E5D91;width:40px;height:40px}.line-reader-mask.border-top{border-top-width:1px}.line-reader-mask.border-right{border-right-width:1px}.line-reader-mask.border-bottom{border-bottom-width:1px}.line-reader-mask.border-left{border-left-width:1px}.line-reader-mask.ne{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px}.line-reader-mask.se{-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px}.line-reader-mask.sw{-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px}.line-reader-mask.nw{-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.line-reader-mask.se .resize-control{width:20px;height:20px;margin-bottom:10px;margin-right:10px;border-right:1px solid #0E5D91;border-bottom:1px solid #0E5D91;position:absolute;right:0;bottom:0;cursor:nwse-resize}.line-reader-mask.e .resize-control{position:absolute;width:20px;height:20px;bottom:-10px;left:-10px;border-right:1px solid #0E5D91;border-bottom:1px solid #0E5D91;cursor:nesw-resize}.line-reader-mask.s .resize-control{position:absolute;width:20px;height:10px;right:-10px;border-bottom:1px solid #0E5D91}.line-reader-overlay{box-sizing:border-box;opacity:0}.line-reader-overlay.hidden{display:none}.line-reader-overlay.moving{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.line-reader-overlay.moving.n{max-height:none}.line-reader-overlay.moving,.line-reader-overlay .inner-window{overflow:hidden;position:absolute;opacity:1;background-color:transparent;border:1px solid rgba(14,93,145,0.5)}.line-reader-overlay .inner-window{box-sizing:content-box}.line-reader-overlay .mask-bg{box-sizing:border-box;border:0 solid rgba(243,247,250,0.8);background-color:transparent;position:absolute}.line-reader-overlay.n{max-height:30px;opacity:1}.line-reader-overlay.n .icon-mobile-menu{font-size:22px;font-size:2.2rem;display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;-o-justify-content:center;justify-content:center;border-bottom:1px solid #0E5D91;color:#0E5D91;position:absolute;left:0;top:0;height:30px;width:100%;z-index:1}.line-reader-overlay.n .icon-mobile-menu:hover{color:#0a4166}.line-reader-overlay.n .icon-mobile-menu:before{position:relative;top:3px}.line-reader-overlay .icon-mobile-menu{display:none}.line-reader-inner-drag{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;-o-justify-content:center;justify-content:center;text-align:center;padding-top:3px;color:#0E5D91}.line-reader-inner-drag.hidden{display:none}.line-reader-inner-drag:hover{background-color:#87aec8;color:#0a4166}.line-reader-inner-drag.moving{background-color:transparent;color:#9fbed3}.line-reader-inner-drag .icon{text-shadow:none !important;border-bottom-left-radius:110px;border-bottom-right-radius:110px;border:1px solid #0E5D91;border-top:0;width:50px;height:25px;position:relative;bottom:10px}.line-reader-inner-drag .icon:before{position:relative;top:5px;left:1px}.line-reader-closer{font-size:22px;font-size:2.2rem;cursor:pointer;color:#0E5D91;width:12px;height:12px}.line-reader-closer:hover{color:#0a4166}.line-reader-closer .icon{text-shadow:none !important}.magnifier-container.magnifier-container{background-color:transparent}.magnifier-container.magnifier-container .dynamic-component-title-bar{border-top-left-radius:5px;border-top-right-radius:5px;background-color:transparent;border:none;position:absolute;width:100%;z-index:3}.magnifier-container.magnifier-container .dynamic-component-title-bar.moving{background:#f3f1ef;border-bottom:1px solid #8d949e}.magnifier-container.magnifier-container .dynamic-component-title-bar .closer{display:none}.magnifier-container.magnifier-container .dynamic-component-resize-container .dynamic-component-resize-wrapper{bottom:0}.magnifier-container.magnifier-container .dynamic-component-resize-container .dynamic-component-resize-wrapper:hover,.magnifier-container.magnifier-container .dynamic-component-resize-container .dynamic-component-resize-wrapper.resizing{bottom:20px}.magnifier-container.magnifier-container .dynamic-component-content .magnifier{position:absolute;width:100%;height:100%;overflow:hidden;background-color:#fff;opacity:1;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;box-sizing:content-box;padding-bottom:30px}@-o-keyframes fadeIn{0%{opacity:0;visibility:visible}100%{opacity:1;visibility:visible}}@-moz-keyframes fadeIn{0%{opacity:0;visibility:visible}100%{opacity:1;visibility:visible}}@-webkit-keyframes fadeIn{0%{opacity:0;visibility:visible}100%{opacity:1;visibility:visible}}@keyframes fadeIn{0%{opacity:0;visibility:visible}100%{opacity:1;visibility:visible}}@-o-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@-moz-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@-o-keyframes pop{0%{opacity:0;visibility:visible}50%{opacity:.5;visibility:visible;transform:scale(2)}100%{opacity:0;visibility:hidden;transform:scale(3)}}@-moz-keyframes pop{0%{opacity:0;visibility:visible}50%{opacity:.5;visibility:visible;transform:scale(2)}100%{opacity:0;visibility:hidden;transform:scale(3)}}@-webkit-keyframes pop{0%{opacity:0;visibility:visible}50%{opacity:.5;visibility:visible;transform:scale(2)}100%{opacity:0;visibility:hidden;transform:scale(3)}}@keyframes pop{0%{opacity:0;visibility:visible}50%{opacity:.5;visibility:visible;transform:scale(2)}100%{opacity:0;visibility:hidden;transform:scale(3)}}.magnifier-container.magnifier-container .dynamic-component-content .magnifier .level{position:absolute;overflow:hidden;z-index:1;top:0;left:0;bottom:0;right:0;background:transparent;color:#3e7da7;opacity:1;font-size:50px;font-size:5rem;display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;-o-justify-content:center;justify-content:center;-webkit-animation:pop 400ms forwards;-moz-animation:pop 400ms forwards;-ms-animation:pop 400ms forwards;-o-animation:pop 400ms forwards;animation:pop 400ms forwards}.magnifier-container.magnifier-container .dynamic-component-content .magnifier .level:before{content:\"x\"}.magnifier-container.magnifier-container .dynamic-component-content .magnifier .overlay{position:absolute;overflow:hidden;z-index:2;top:0;left:0;bottom:0;right:0;background:transparent}.magnifier-container.magnifier-container .dynamic-component-content .magnifier>.controls{position:absolute;background-color:#f3f1ef;border:0 solid #8d949e;min-height:29px;z-index:4}.magnifier-container.magnifier-container .dynamic-component-content .magnifier>.controls a{color:#222;text-decoration:none;font-size:20px;font-size:2rem;margin:0 2px}.magnifier-container.magnifier-container .dynamic-component-content .magnifier>.controls a:hover{color:#0a4166}.magnifier-container.magnifier-container .dynamic-component-content .magnifier>.controls.close{top:0;right:0;border-bottom-width:1px;border-left-width:1px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px}.magnifier-container.magnifier-container .dynamic-component-content .magnifier .inner{position:absolute}.magnifier-container.magnifier-container .dynamic-component-content.moving .magnifier .controls{border-left:none;border-bottom-left-radius:0}.magnifier-container.magnifier-container .dynamic-component-content.sizing{border-color:rgba(14,93,145,0.5)}.magnifier-container.magnifier-container .dynamic-component-content.sizing .inner,.magnifier-container.magnifier-container .dynamic-component-content.sizing .controls,.magnifier-container.magnifier-container .dynamic-component-content.sizing .level{opacity:0.45 !important}.progress-box .progressbar .progressbar-points{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch}.progress-box .progressbar .progressbar-points>span.progressbar-point{flex:1;display:inline-block;border:1px solid #0e5d91;background-color:#f3f1ef;height:calc(1rem - 4px);margin:0 1px 0 0}.progress-box .progressbar .progressbar-points>span.progressbar-point:last-child{margin-right:0}.progress-box .progressbar .progressbar-points>span.progressbar-point.reached{background-color:#0e5d91}.progress-box .progressbar .progressbar-points>span.progressbar-point.current{background-color:#a4a9b1}.tts-container .tts-controls{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;background-color:#f3f1ef;-webkit-box-shadow:0 2px 3px 1px rgba(0,0,0,0.2);-moz-box-shadow:0 2px 3px 1px rgba(0,0,0,0.2);-ms-box-shadow:0 2px 3px 1px rgba(0,0,0,0.2);-o-box-shadow:0 2px 3px 1px rgba(0,0,0,0.2);box-shadow:0 2px 3px 1px rgba(0,0,0,0.2)}.tts-container .tts-controls .tts-control{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;-o-justify-content:center;justify-content:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center;color:#222;height:100%;padding:6px 8.5px;text-decoration:none}.tts-container .tts-controls .tts-control .tts-control-label{padding-left:7.5px}.tts-container .tts-controls .tts-control .tts-icon{font-size:18px;text-align:center;width:18px}.tts-container .tts-controls .tts-control .icon-pause{display:none}.tts-container .tts-controls .tts-control.tts-control-drag{cursor:move}.tts-container .tts-controls .tts-control.tts-control-drag .tts-icon{color:#555}.tts-container .tts-controls .tts-control.tts-control-drag:hover{background-color:transparent}.tts-container .tts-controls .tts-control:hover{background-color:#ddd8d2}.tts-container .tts-controls .tts-control-container{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch}.tts-container .tts-controls .tts-control-container .tts-slider-container{display:none}.tts-container .tts-controls .tts-control-container .tts-slider-container .tts-slider{margin:0 8.5px;width:80px}.tts-container.playing .tts-controls .tts-control .icon-pause{display:block}.tts-container.playing .tts-controls .tts-control .icon-play{display:none}.tts-container.sfhMode .tts-controls .tts-control.tts-control-mode{-webkit-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-ms-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-o-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);background-color:#ddd8d2}.tts-container.settings .tts-controls .tts-control-container .tts-slider-container{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center}.tts-container.settings .tts-controls .tts-control-container:last-child{-webkit-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-ms-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);-o-box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);box-shadow:inset 2px 2px 4px rgba(0,0,0,0.2);background-color:#ddd8d2}.tts-container.settings .tts-controls .tts-control-container .tts-control-settings:hover{background-color:transparent}.tts-content-node{outline:none}.tts-visible.tts-component-container .test-runner-sections .tts-content-node:hover,.tts-visible.tts-component-container .test-runner-sections .tts-content-node:focus{background-color:transparent !important;color:#222 !important}.tts-visible.tts-component-container .test-runner-sections .tts-content-node .label-box,.tts-visible.tts-component-container .test-runner-sections .tts-content-node .qti-choice{cursor:default !important}.tts-sfhMode.tts-component-container .test-runner-sections{cursor:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIxNHB4IiBoZWlnaHQ9IjE0cHgiIHZpZXdCb3g9IjAgMCAxNCAxNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5Hcm91cCAyPC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9IkFydGJvYXJkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjQuMDAwMDAwLCAtMTYuMDAwMDAwKSI+ICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgMTUuMDAwMDAwKSI+ICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtQ29weS02IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjwvcmVjdD4gICAgICAgICAgICAgICAgPGcgaWQ9Imljb24tLy0xNi0vLWNoZXZyb24tYm90dG9tLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAyLjAwMDAwMCkiIGZpbGw9IiMyRDJEMkQiPiAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9InN3YXAtaWNvbi1jb2xvciIgcG9pbnRzPSIwIDAgMCA4IDYgNCI+PC9wb2x5Z29uPiAgICAgICAgICAgICAgICA8L2c+ICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtQ29weSIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iNSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktNCIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iMSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktMiIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktMyIgZmlsbD0iIzJEMkQyRCIgeD0iMSIgeT0iMTMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIj48L3JlY3Q+ICAgICAgICAgICAgPC9nPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+) 0 32,auto !important}.tts-sfhMode.tts-component-container .test-runner-sections .tts-content-node.tts-active-content-node:hover{color:#222 !important;background-color:#ff0 !important}.tts-sfhMode.tts-component-container .test-runner-sections .tts-content-node:hover,.tts-sfhMode.tts-component-container .test-runner-sections .tts-content-node:focus{color:#222 !important;background-color:#f3f1ef !important}.tts-sfhMode.tts-component-container .test-runner-sections .tts-content-node .label-box,.tts-sfhMode.tts-component-container .test-runner-sections .tts-content-node .qti-choice{cursor:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIxNHB4IiBoZWlnaHQ9IjE0cHgiIHZpZXdCb3g9IjAgMCAxNCAxNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5Hcm91cCAyPC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9IkFydGJvYXJkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjQuMDAwMDAwLCAtMTYuMDAwMDAwKSI+ICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgMTUuMDAwMDAwKSI+ICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtQ29weS02IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjwvcmVjdD4gICAgICAgICAgICAgICAgPGcgaWQ9Imljb24tLy0xNi0vLWNoZXZyb24tYm90dG9tLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAyLjAwMDAwMCkiIGZpbGw9IiMyRDJEMkQiPiAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9InN3YXAtaWNvbi1jb2xvciIgcG9pbnRzPSIwIDAgMCA4IDYgNCI+PC9wb2x5Z29uPiAgICAgICAgICAgICAgICA8L2c+ICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtQ29weSIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iNSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktNCIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iMSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktMiIgZmlsbD0iIzJEMkQyRCIgeD0iOSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iMiI+PC9yZWN0PiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLUNvcHktMyIgZmlsbD0iIzJEMkQyRCIgeD0iMSIgeT0iMTMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIj48L3JlY3Q+ICAgICAgICAgICAgPC9nPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+) 0 32,auto !important}.tts-sfhMode.tts-component-container .test-runner-sections img.tts-content-node:hover,.tts-sfhMode.tts-component-container .test-runner-sections img.tts-content-node:focus{padding:5px}.tts-playing.tts-component-container .test-runner-sections .tts-content-node.tts-active-content-node,.tts-playing.tts-component-container .test-runner-sections .tts-content-node.tts-active-content-node *{color:#222 !important;background-color:#ff0 !important}.tts-playing.tts-component-container .test-runner-sections .tts-content-node.tts-active-content-node:hover,.tts-playing.tts-component-container .test-runner-sections .tts-content-node.tts-active-content-node *:hover{color:#222 !important;background-color:#ff0 !important}.tts-playing.tts-component-container .test-runner-sections img.tts-content-node.tts-active-content-node{padding:5px}body.delivery-scope{min-height:100vh;max-height:100vh;margin-bottom:0}.runner{position:relative}.qti-choiceInteraction .overlay-answer-eliminator{display:none}.test-runner-scope{position:relative;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:calc(100vh - 99px)}.test-runner-scope .landmark-title-hidden{width:1px;height:1px;overflow:hidden;position:absolute}.test-runner-scope .test-runner-sections{-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%;overflow:hidden;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.test-runner-scope .test-sidebar{background:#f3f1ef;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;overflow-y:auto;max-width:350px}.test-runner-scope .test-sidebar>.qti-panel{max-width:350px;padding:10px}@media only screen and (max-device-width: 800px){.test-runner-scope .test-sidebar{max-width:200px}.test-runner-scope .test-sidebar>.qti-panel{max-width:200px}}@media only screen and (min-device-width: 800px) and (max-device-width: 1280px){.test-runner-scope .test-sidebar{max-width:250px}.test-runner-scope .test-sidebar>.qti-panel{max-width:250px}}@media only screen and (min-device-width: 1280px) and (max-device-width: 1440px){.test-runner-scope .test-sidebar{max-width:300px}.test-runner-scope .test-sidebar>.qti-panel{max-width:300px}}.test-runner-scope .test-sidebar-left{border-right:1px #ddd solid}.test-runner-scope .test-sidebar-right{border-left:1px #ddd solid}.test-runner-scope .content-wrapper{position:relative;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%;overflow:auto;padding:0}.test-runner-scope .content-wrapper .overlay{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;opacity:.9}.test-runner-scope .content-wrapper .overlay-full{background-color:#fff;opacity:1}.test-runner-scope #qti-content{-webkit-overflow-scrolling:touch;max-width:1024px;width:100%;margin:auto}.test-runner-scope #qti-item{width:100%;min-width:100%;height:auto;overflow:visible}.test-runner-scope .qti-item{padding:30px}.test-runner-scope .size-wrapper{max-width:1280px;margin:auto;width:100%}.test-runner-scope #qti-rubrics{margin:auto;max-width:1024px;width:100%}.test-runner-scope #qti-rubrics .qti-rubricBlock{margin:20px 0}.test-runner-scope #qti-rubrics .hidden{display:none}.test-runner-scope .visible-hidden{position:absolute;overflow:hidden;height:1px;width:1px;word-wrap:normal}.no-controls .test-runner-scope{height:100vh}.test-runner-scope .action-bar.content-action-bar{padding:2px}.test-runner-scope .action-bar.content-action-bar li{margin:2px 0 0 10px;border:none}.test-runner-scope .action-bar.content-action-bar li.btn-info{padding-top:6px;height:36px;margin-top:0;border-bottom:solid 2px transparent;border-radius:0}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group{border:none !important;overflow:hidden;padding:0}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a{float:left;margin:0 2px;padding:0 15px;border:1px solid rgba(255,255,255,0.3);border-radius:0px;display:inline-block;height:inherit}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a:first-of-type{border-top-left-radius:3px;border-bottom-left-radius:3px;margin-left:0}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a:last-of-type{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-right:0}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a:hover,.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a.active{border-color:rgba(255,255,255,0.8)}.test-runner-scope .action-bar.content-action-bar li.btn-info.btn-group a .no-label{padding-right:0}.test-runner-scope .action-bar.content-action-bar li.btn-info:hover,.test-runner-scope .action-bar.content-action-bar li.btn-info.active{border-bottom-color:rgba(255,255,255,0.8)}.test-runner-scope .action-bar.content-action-bar li.btn-info:active,.test-runner-scope .action-bar.content-action-bar li.btn-info.active{background:#e7eff4;border-color:rgba(255,255,255,0.8)}.test-runner-scope .action-bar.content-action-bar li.btn-info:active a,.test-runner-scope .action-bar.content-action-bar li.btn-info.active a{color:#266d9c;text-shadow:none}.test-runner-scope .action-bar.content-action-bar li.btn-info:active:hover,.test-runner-scope .action-bar.content-action-bar li.btn-info.active:hover{background:#fff}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar{opacity:1;height:40px;flex-basis:40px}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box{height:38px;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:space-between;-ms-flex-pack:space-between;justify-content:space-between;padding-left:10px;padding-right:10px}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .title-box{font-size:14px;font-size:1.4rem;padding:4px 0 0;-ms-flex:0 1 auto;-webkit-flex:0 1 auto;flex:0 1 auto}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .progress-box,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .item-number-box{padding-top:4px;white-space:nowrap;-ms-flex:0 1 auto;-webkit-flex:0 1 auto;flex:0 1 auto}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .progress-box .qti-controls,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .item-number-box .qti-controls{display:inline-block;margin-left:20px;white-space:nowrap}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .timer-box{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar>.control-box .progressbar{margin-top:5px;min-width:150px;max-width:200px;height:0.6em}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box{color:rgba(255,255,255,0.9);text-shadow:1px 1px 0 black}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .lft,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .rgt{padding-left:20px}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .lft:first-child,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .rgt:first-child{padding-left:0}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .lft:last-child ul,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box .rgt:last-child ul{display:inline-block}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box [class^=\"btn-\"],.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar>.control-box [class*=\" btn-\"]{white-space:nowrap}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .action{position:relative;overflow:visible}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu{color:#222;background:#f3f1ef;border:1px solid #aaa9a7;overflow:auto;list-style:none;min-width:150px;margin:0;padding:0;position:absolute;bottom:36px;left:-3px}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action{display:inline-block;text-align:left;width:100%;white-space:nowrap;overflow:hidden;color:#222;border-bottom:1px solid #c2c1bf;margin:0;-moz-border-radius:0px;-webkit-border-radius:0px;border-radius:0px;height:auto;padding:8px 15px 9px;line-height:1;border-left:solid 3px transparent}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action .icon-checkbox-checked{display:none}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.active{background-color:#dbd9d7;font-weight:bold}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover .icon-checkbox,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover .icon-checkbox,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.active .icon-checkbox{display:none}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover .icon-checkbox-checked,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover .icon-checkbox-checked,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.active .icon-checkbox-checked{display:inline-block}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:focus,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover{background-color:#0e5d91;color:#fff;border-left-color:#313030 !important}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:focus .label,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:focus .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover .label,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover .label,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover .icon{color:#fff}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:focus .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action.hover .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action:hover .icon{color:#e7eff4}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action .label,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar .tools-box .menu .action .icon{font-size:14px;font-size:1.4rem;text-shadow:none;color:#222}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar{overflow:visible;position:relative}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .action{line-height:1.6}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .icon.no-label{padding-right:0}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .tool-label-collapsed .btn-info .text,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .tool-label-collapsed-hover .btn-info:not(:hover) .text,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.no-tool-label .text,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.tool-label-collapsed .text,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.tool-label-collapsed-over:not(:hover) .text{display:none}.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .tool-label-collapsed .btn-info .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .tool-label-collapsed-hover .btn-info:not(:hover) .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.no-tool-label .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.tool-label-collapsed .icon,.test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.bottom-action-bar .btn-info.tool-label-collapsed-over:not(:hover) .icon{padding:0}.test-runner-scope [data-control=\"exit\"]{margin-left:20px}.test-runner-scope [data-control=\"comment-toggle\"]{display:none}.test-runner-scope.non-lti-context .title-box{display:none}.test-runner-scope [data-control=\"qti-comment\"]{background-color:#f3f1ef;position:absolute;bottom:33px;left:8px;text-align:right;padding:5px;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;-webkit-box-shadow:0 0 15px 1px rgba(0,0,0,0.2);-moz-box-shadow:0 0 15px 1px rgba(0,0,0,0.2);-ms-box-shadow:0 0 15px 1px rgba(0,0,0,0.2);-o-box-shadow:0 0 15px 1px rgba(0,0,0,0.2);box-shadow:0 0 15px 1px rgba(0,0,0,0.2)}.test-runner-scope [data-control=\"qti-comment\"] textarea{display:block;height:100px;resize:none;width:350px;padding:3px;margin:0 0 10px 0;border:none;font-size:13px;font-size:1.3rem;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px}.test-runner-scope .tools-box{position:relative;overflow:visible}.wait-content .wait-content_text--centered{text-align:center}.wait-content .wait-content_actions-list{display:-ms-flex;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;-o-flex-direction:column;flex-direction:column}.wait-content .wait-content_actions-list .wait-content_text--centered{position:relative;right:15px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box>.lft{float:right;margin:2px 10px 0 0}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .rgt{float:left}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action>.li-inner>.icon,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action>.li-inner>.icon{display:inline-block}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .action,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .action{text-align:right}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .action.active .icon.icon-checkbox-checked,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .action.active .icon.icon-checkbox-checked{display:inline-block}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .action:not(.active) .icon.icon-checkbox,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .action:not(.active) .icon.icon-checkbox{display:inline-block}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .action:not(.active):hover .icon.icon-checkbox,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .action:not(.active):hover .icon.icon-checkbox{display:none}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .action:not(.active):hover .icon.icon-checkbox-checked,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .action:not(.active):hover .icon.icon-checkbox-checked{display:inline-block}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list>.action .menu,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list>.action .menu{left:auto;right:-3px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action{float:right}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon{padding:0 0 0 9px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-right:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-left:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-fast-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-step-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-fast-backward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-step-backward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .icon.icon-backward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-right:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-left:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-fast-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-step-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-forward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-fast-backward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-step-backward:before,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .icon.icon-backward:before{display:inline-block;transform:scaleX(-1)}body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .tools-box-list .action .action,body.delivery-scope[dir=rtl] .runner .test-runner-scope .bottom-action-bar .control-box .navi-box-list .action .action{text-align:right}body.delivery-scope[dir=rtl] .qti-navigator .icon-up,body.delivery-scope[dir=rtl] .qti-navigator .icon-down{margin-left:0;margin-right:auto}body.delivery-scope[dir=rtl] .qti-navigator .qti-navigator-counter{margin-left:0;margin-right:auto;text-align:left}body.delivery-scope[dir=rtl] .qti-item [class^=\"feedback-\"].small,body.delivery-scope[dir=rtl] .qti-item [class*=\" feedback-\"].small{padding:8px 45px 8px 20px;text-align:right}body.delivery-scope[dir=rtl] .qti-item [class^=\"feedback-\"].small>[class^=\"icon-\"],body.delivery-scope[dir=rtl] .qti-item [class^=\"feedback-\"].small>[class*=\" icon-\"],body.delivery-scope[dir=rtl] .qti-item [class*=\" feedback-\"].small>[class^=\"icon-\"],body.delivery-scope[dir=rtl] .qti-item [class*=\" feedback-\"].small>[class*=\" icon-\"]{left:auto;right:10px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.connectivity-box{margin-left:0px;margin-right:40px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.connectivity-box.with-message .message-connect{margin-left:3px;margin-right:0px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.progress-box>.qti-controls{margin-left:0px;margin-right:20px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.timer-box .timer-toggler{right:20px}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.timer-box .timer-wrapper .countdown:first-child::before{content:' '}body.delivery-scope[dir=rtl] .runner .test-runner-scope .action-bar.content-action-bar.horizontal-action-bar.top-action-bar .control-box>.timer-box .timer-wrapper .countdown:last-child::before{content:none}.action-bar .shortcuts-list-wrapper{width:100%;height:100%;position:fixed;top:0;left:0;display:flex;align-items:center;align-content:center;justify-content:center;overflow:auto;background:rgba(0,0,0,0.5);z-index:10001}.action-bar .shortcuts-list-wrapper .shortcuts-list{width:auto;min-width:400px;height:auto;min-height:300px;padding:30px !important;color:#222 !important;text-shadow:none !important;position:relative;background-color:#fff;border:1px solid #ddd}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-list-description{width:450px}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-list-title{font-size:24px;margin-top:0}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-title{font-size:18px;margin-top:20px}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-title:focus{outline:3px solid #276D9B;outline-offset:3px}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-list{list-style:none;margin:0;padding:0}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-list .shortcut-item{display:-ms-flexbox;display:-webkit-flex;display:flex;float:none;margin:0}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-list .shortcut-item .shortcut-item-action,.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-list .shortcut-item .shortcut-item-shortcut{-ms-flex:0 1 50%;-webkit-flex:0 1 50%;flex:0 1 50%;margin:0;text-align:center}.action-bar .shortcuts-list-wrapper .shortcuts-list .shortcuts-group-list .shortcut-item .shortcut-item-action{text-align:left}.action-bar .shortcuts-list-wrapper .shortcuts-list .btn-close{background-color:transparent;box-shadow:none;height:20px;padding:0;position:absolute;right:12px;top:10px;width:20px}.action-bar .shortcuts-list-wrapper .shortcuts-list .btn-close .icon-close{color:#222;font-size:20px;padding:0}.action-bar .shortcuts-list-wrapper .shortcuts-list .btn-close:focus{outline:3px solid #276D9B;outline-offset:3px}.jump-links-container .jump-links-box{display:block;width:0;height:0;position:absolute}.jump-links-container .jump-links-box .jump-link-item{position:fixed;display:block;z-index:1001}.jump-links-container .jump-links-box .jump-link{z-index:1002;position:fixed;display:block;overflow:hidden;top:10px;left:10px;width:0;padding:0 !important;font-size:2.4rem !important}.jump-links-container .jump-links-box .jump-link:focus{width:auto;height:auto;padding:30px !important;background:#f3f1ef;color:#222 !important;border:3px solid #222;outline:none;text-shadow:none !important}.jump-links-container .jump-links-box .jump-link:focus:hover{background:#f3f1ef;text-decoration:underline}\n\n/*# sourceMappingURL=../../../taoQtiTest/views/css/new-test-runner.css.map */"),define("taoQtiTest/loader/taoQtiTestRunner.bundle",function(){}),window.bundles=(window.bundles||[]).concat(["taoItems/loader/taoItemsRunner.min","taoTests/loader/taoTestsRunner.min","taoQtiItem/loader/taoQtiItemRunner.min"]);
|
|
//# sourceMappingURL=taoQtiTestRunner.min.js.map
|