\n"})}),define("css!taoClientDiagnosticCss/diagnostics",[],function(){}),define("taoClientDiagnostic/tools/diagnostic/diagnostic",["jquery","lodash","i18n","async","ui/feedback","ui/component","core/dataProvider/request","util/url","taoClientDiagnostic/tools/performances/tester","taoClientDiagnostic/tools/bandwidth/tester","taoClientDiagnostic/tools/upload/tester","taoClientDiagnostic/tools/browser/tester","taoClientDiagnostic/tools/getStatus","taoClientDiagnostic/tools/getConfig","tpl!taoClientDiagnostic/tools/diagnostic/tpl/main","tpl!taoClientDiagnostic/tools/diagnostic/tpl/result","tpl!taoClientDiagnostic/tools/diagnostic/tpl/details","tpl!taoClientDiagnostic/tools/diagnostic/tpl/feedback","tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar","css!taoClientDiagnosticCss/diagnostics"],function($,_,__,async,feedback,component,request,urlUtil,performancesTester,bandwidthTester,uploadTester,browserTester,getStatus,getConfig,mainTpl,resultTpl,detailsTpl,feedbackTpl,qualityBarTpl){
-"use strict";function diagnosticFactory(config){return config&&_.forEach(["title","header","footer","info","button"],function(name){config[name]&&(config[name]=__(config[name]))}),component(diagnostic,_defaults).setTemplate(mainTpl).on("destroy",function(){this.controls=null}).on("render",function(){var self=this;this.controls={$start:this.$component.find('[data-action="test-launcher"]'),$status:this.$component.find(".status h2"),$results:this.$component.find(".results")},this.controls.$start.on("click",function(){self.run()}),this.controls.$results.on("click",'button[data-action="show-details"]',function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");
-$details.removeClass("hidden"),$btn.addClass("hidden"),$result.find('[data-action="hide-details"]').removeClass("hidden")}),this.controls.$results.on("click",'button[data-action="hide-details"]',function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");$details.addClass("hidden"),$btn.addClass("hidden"),$result.find('[data-action="show-details"]').removeClass("hidden")})}).init(config)}var _defaults={title:__("Diagnostic Tool"),header:__("This tool will run a number of tests in order to establish how well your current environment is suitable to run the TAO platform."),info:__("Be aware that these tests will take up to several minutes."),
-button:__("Begin diagnostics"),actionStore:"storeData",controller:"DiagnosticChecker",extension:"taoClientDiagnostic",actionDropId:"deleteId",storeAllRuns:!1,configurableText:{}},_thresholds=[{threshold:0,message:__("Your system requires a compatibility update, please contact your system administrator."),type:"error"},{threshold:33,message:__("Your system is not optimal, please contact your system administrator."),type:"warning"},{threshold:66,message:__("Your system is fully compliant."),type:"success"}],diagnostic={changeStatus:function(status){return this.is("rendered")&&this.controls.$status.html(status),this},store:function(type,details,done){var config=this.config;
-details=_.omit(details,"values"),details.type=type,$.post(urlUtil.route(config.actionStore,config.controller,config.extension,config.storeParams),details,done,"json")},getCustomMsg:function(key){return this.config.configurableText[key]},addCustomFeedbackMsg:function(status,msg){this.hasFailed(status)&&msg&&(_.isFunction(status.customMsgRenderer)&&(msg=status.customMsgRenderer(msg)),status.feedback=status.feedback||{},status.feedback.customMsg=msg)},hasFailed:function(result){return!(result&&result.feedback&&"success"===result.feedback.type)},addResult:function(result){var $main,$indicator,$result;return this.is("rendered")&&(result.quality&&result.quality.label&&result.quality.label.toString().length>2&&(result.quality.wide=!0),
-$main=$(resultTpl(result)),$result=$main.find(".result"),result.feedback&&$result.append($(feedbackTpl(result.feedback))),result.quality&&$result.append($(qualityBarTpl(result.quality))),result.details&&$main.find(".details").append($(detailsTpl(result.details))),$indicator=$main.find(".quality-indicator"),this.controls.$results.append($main),$main.fadeIn(function(){$indicator.length&&$indicator.animate({left:result.percentage*$main.outerWidth()/100-$indicator.outerWidth()/2})})),this},prepare:function(){return this.trigger("start"),this.changeStatus(__("Starting...")),this.setState("running",!0),this.setState("done",!1),this.controls.$results.empty(),this.controls.$start.addClass("hidden"),
-this},finish:function(){var config=this.config;return this.controls.$start.removeClass("hidden"),config.storeAllRuns&&this.deleteIdentifier(),this.trigger("end"),this.changeStatus(__("Done!")),this.setState("running",!1),this.setState("done",!0),this},deleteIdentifier:function(){var url=urlUtil.route(this.config.actionDropId,this.config.controller,this.config.extension);return request(url,null,"POST")},run:function(){function doCheck(testerConfig,cb){var testerId=testerConfig.id;self.trigger("starttester",testerId),self.setState(testerId,!0),require([testerConfig.tester],function(testerFactory){var tester=testerFactory(getConfig(testerConfig,self.config),self);
-self.changeStatus(tester.labels.status),tester.start(function(status,details,results){var customMsg;testerConfig.customMsgKey&&(customMsg=self.getCustomMsg(testerConfig.customMsgKey),self.addCustomFeedbackMsg(status,customMsg)),_.forEach(details,function(info){information.push(info)}),scores[status.id]=status,self.trigger("endtester",testerId,status),self.setState(testerId,!1),results=_.mapValues(results,function(value){switch(typeof value){case"boolean":return value?1:0;case"object":return JSON.stringify(value)}return value}),self.store(testerId,results,function(){self.addResult(status),cb()})})})}var self=this,information=[],scores={},testers=[];return this.is("rendered")&&(this.prepare(),
-_.forEach(this.config.testers,function(testerConfig,testerId){testerConfig.id=testerConfig.id||testerId,testerConfig.enabled&&testers.push(function(cb){doCheck(testerConfig,cb)})}),async.series(testers,function(){var total=_.min(scores,"percentage"),status=getStatus(total.percentage,_thresholds);status.title=__("Total"),status.id="total",self.addCustomFeedbackMsg(status,self.config.configurableText.diagTotalCheckResult),status.details=information,self.addResult(status),self.finish()})),this}};return diagnosticFactory}),define("taoClientDiagnostic/controller/CompatibilityChecker/diagnostics",["jquery","layout/loading-bar","ui/feedback","taoClientDiagnostic/tools/message","taoClientDiagnostic/tools/diagnostic/diagnostic"],function($,loadingBar,feedback,showMessage,diagnosticFactory){
-"use strict";return{start:function(config){var $contentArea=$(".content");showMessage("#feedback-box"),diagnosticFactory(config).on("start",function(){loadingBar.start()}).on("end",function(){loadingBar.stop()}).render($contentArea)}}}),define("tpl!taoClientDiagnostic/templates/diagnostic/main",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,buffer="";return buffer+="\n ",stack1=helpers.if.call(depth0,depth0&&depth0.diagInstructions,{hash:{},inverse:self.noop,fn:self.program(2,program2,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ";
-}function program2(depth0,data){var stack1,helper,buffer="";return buffer+="
\n"})}),define("css!taoClientDiagnosticCss/diagnostics",[],function(){}),define("taoClientDiagnostic/tools/diagnostic/diagnostic",["jquery","lodash","i18n","async","ui/feedback","ui/component","core/logger","core/store","core/dataProvider/request","util/url","taoClientDiagnostic/tools/performances/tester","taoClientDiagnostic/tools/bandwidth/tester","taoClientDiagnostic/tools/upload/tester","taoClientDiagnostic/tools/browser/tester","taoClientDiagnostic/tools/getStatus","taoClientDiagnostic/tools/getConfig","tpl!taoClientDiagnostic/tools/diagnostic/tpl/main","tpl!taoClientDiagnostic/tools/diagnostic/tpl/result","tpl!taoClientDiagnostic/tools/diagnostic/tpl/details","tpl!taoClientDiagnostic/tools/diagnostic/tpl/feedback","tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar","css!taoClientDiagnosticCss/diagnostics"],function($,_,__,async,feedback,component,loggerFactory,store,request,urlUtil,performancesTester,bandwidthTester,uploadTester,browserTester,getStatus,getConfig,mainTpl,resultTpl,detailsTpl,feedbackTpl,qualityBarTpl){
+"use strict";function diagnosticFactory(config){return config&&_.forEach(["title","header","footer","info","button"],function(name){config[name]&&(config[name]=__(config[name]))}),component(diagnostic,_defaults).setTemplate(mainTpl).on("destroy",function(){this.controls=null}).on("render",function(){function getControl(name){return self.controls["$"+name]}function getInputValue(name){var $control=getControl(name);return($control&&$control.val()||"").trim()}function setInputValue(name,value){var $control=getControl(name);$control&&$control.val(value)}function toggleControl(name,state){var $control=getControl(name);$control&&("undefined"==typeof state&&(state=!$control.is(":enabled")),
+state?$control.removeProp("disabled"):$control.prop("disabled",!0))}function manageSchoolName(){self.controls.$school=self.getElement().find('[data-control="school"]').on("keypress",function(e){_.defer(function(){toggleControl("start",!!getInputValue("school")),13===e.which&&(e.preventDefault(),self.controls.$start.click())})}),toggleControl("start",!!getInputValue("school")),toggleControl("school",!1),store("client-diagnostic").then(function(storage){return self.on("start.school",function(){storage.setItem("school",getInputValue("school")).catch(function(error){logger.error(error)})}),storage.getItem("school").then(function(value){setInputValue("school",value),
+toggleControl("start",!!getInputValue("school")),toggleControl("school",!0)})}).catch(function(error){logger.error(error),toggleControl("school",!0)}),self.on("start.school",function(){self.config.storeParams=_.assign(self.config.storeParams||{},{school:getInputValue("school")}),toggleControl("school",!1)}).on("end.school",function(){toggleControl("school",!0)})}var self=this;this.controls={$start:this.$component.find('[data-action="test-launcher"]'),$status:this.$component.find(".status h2"),$results:this.$component.find(".results")},this.controls.$start.on("click",function(){self.controls.$start.is(":enabled")&&self.run()}),this.config.requireSchoolName&&manageSchoolName(),
+this.controls.$results.on("click",'button[data-action="show-details"]',function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");$details.removeClass("hidden"),$btn.addClass("hidden"),$result.find('[data-action="hide-details"]').removeClass("hidden")}),this.controls.$results.on("click",'button[data-action="hide-details"]',function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");$details.addClass("hidden"),$btn.addClass("hidden"),$result.find('[data-action="show-details"]').removeClass("hidden")})}).init(config)}var logger=loggerFactory("taoClientDiagnostic/diagnostic"),_defaults={
+title:__("Diagnostic Tool"),header:__("This tool will run a number of tests in order to establish how well your current environment is suitable to run the TAO platform."),info:__("Be aware that these tests will take up to several minutes."),button:__("Begin diagnostics"),actionStore:"storeData",controller:"DiagnosticChecker",extension:"taoClientDiagnostic",actionDropId:"deleteId",storeAllRuns:!1,configurableText:{}},_thresholds=[{threshold:0,message:__("Your system requires a compatibility update, please contact your system administrator."),type:"error"},{threshold:33,message:__("Your system is not optimal, please contact your system administrator."),type:"warning"
+},{threshold:66,message:__("Your system is fully compliant."),type:"success"}],diagnostic={changeStatus:function(status){return this.is("rendered")&&this.controls.$status.html(status),this},store:function(type,details,done){var config=this.config;details=_.omit(details,"values"),details.type=type,$.post(urlUtil.route(config.actionStore,config.controller,config.extension,config.storeParams),details,done,"json")},getCustomMsg:function(key){return this.config.configurableText[key]},addCustomFeedbackMsg:function(status,msg){this.hasFailed(status)&&msg&&(_.isFunction(status.customMsgRenderer)&&(msg=status.customMsgRenderer(msg)),status.feedback=status.feedback||{},
+status.feedback.customMsg=msg)},hasFailed:function(result){return!(result&&result.feedback&&"success"===result.feedback.type)},addResult:function(result){var $main,$indicator,$result;return this.is("rendered")&&(result.quality&&result.quality.label&&result.quality.label.toString().length>2&&(result.quality.wide=!0),$main=$(resultTpl(result)),$result=$main.find(".result"),result.feedback&&$result.append($(feedbackTpl(result.feedback))),result.quality&&$result.append($(qualityBarTpl(result.quality))),result.details&&$main.find(".details").append($(detailsTpl(result.details))),$indicator=$main.find(".quality-indicator"),this.controls.$results.append($main),$main.fadeIn(function(){
+$indicator.length&&$indicator.animate({left:result.percentage*$main.outerWidth()/100-$indicator.outerWidth()/2})})),this},prepare:function(){return this.trigger("start"),this.changeStatus(__("Starting...")),this.setState("running",!0),this.setState("done",!1),this.controls.$results.empty(),this.controls.$start.addClass("hidden"),this},finish:function(){var config=this.config;return this.controls.$start.removeClass("hidden"),config.storeAllRuns&&this.deleteIdentifier(),this.trigger("end"),this.changeStatus(__("Done!")),this.setState("running",!1),this.setState("done",!0),this},deleteIdentifier:function(){var url=urlUtil.route(this.config.actionDropId,this.config.controller,this.config.extension);
+return request(url,null,"POST")},run:function(){function doCheck(testerConfig,cb){var testerId=testerConfig.id;self.trigger("starttester",testerId),self.setState(testerId,!0),require([testerConfig.tester],function(testerFactory){var tester=testerFactory(getConfig(testerConfig,self.config),self);self.changeStatus(tester.labels.status),tester.start(function(status,details,results){var customMsg;testerConfig.customMsgKey&&(customMsg=self.getCustomMsg(testerConfig.customMsgKey),self.addCustomFeedbackMsg(status,customMsg)),_.forEach(details,function(info){information.push(info)}),scores[status.id]=status,self.trigger("endtester",testerId,status),self.setState(testerId,!1),
+results=_.mapValues(results,function(value){switch(typeof value){case"boolean":return value?1:0;case"object":return JSON.stringify(value)}return value}),self.store(testerId,results,function(){self.addResult(status),cb()})})})}var self=this,information=[],scores={},testers=[];return this.is("rendered")&&(this.prepare(),_.forEach(this.config.testers,function(testerConfig,testerId){testerConfig.id=testerConfig.id||testerId,testerConfig.enabled&&testers.push(function(cb){doCheck(testerConfig,cb)})}),async.series(testers,function(){var total=_.min(scores,"percentage"),status=getStatus(total.percentage,_thresholds);status.title=__("Total"),status.id="total",self.addCustomFeedbackMsg(status,self.config.configurableText.diagTotalCheckResult),
+status.details=information,self.addResult(status),self.finish()})),this}};return diagnosticFactory}),define("taoClientDiagnostic/controller/CompatibilityChecker/diagnostics",["jquery","layout/loading-bar","ui/feedback","taoClientDiagnostic/tools/message","taoClientDiagnostic/tools/diagnostic/diagnostic"],function($,loadingBar,feedback,showMessage,diagnosticFactory){"use strict";return{start:function(config){var $contentArea=$(".content");showMessage("#feedback-box"),diagnosticFactory(config).on("start",function(){loadingBar.start()}).on("end",function(){loadingBar.stop()}).render($contentArea)}}}),define("tpl!taoClientDiagnostic/templates/diagnostic/main",["handlebars"],function(hb){
+return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,buffer="";return buffer+="\n ",stack1=helpers.if.call(depth0,depth0&&depth0.diagInstructions,{hash:{},inverse:self.noop,fn:self.program(2,program2,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n "}function program2(depth0,data){var stack1,helper,buffer="";return buffer+="
\n'})}),define("taoClientDiagnostic/controller/Diagnostic/diagnostic",["module","jquery","i18n","helpers","layout/loading-bar","ui/actionbar","ui/feedback","taoClientDiagnostic/tools/diagnostic/diagnostic","tpl!taoClientDiagnostic/templates/diagnostic/main"],function(module,$,__,helpers,loadingBar,actionbar,feedback,diagnosticFactory,diagnosticTpl){
+"use strict";var cssScope=".diagnostic-runner",taoDiagnosticRunnerCtlr={start:function(){function installTester(workstation){diagnosticFactory(config).setTemplate(diagnosticTpl).on("render",function(){var self=this;this.controls.$workstation=this.getElement().find('[data-control="workstation"]').on("keypress",function(e){13===e.which&&(e.preventDefault(),self.run())}).val(workstation)}).on("start",function(){this.config.storeParams=this.config.storeParams||{},this.config.storeParams.workstation=this.controls.$workstation.val(),this.controls.$workstation.prop("disabled",!0),loadingBar.start()}).on("end",function(){this.controls.$workstation.removeProp("disabled"),
+loadingBar.stop()}).on("render",function(){loadingBar.stop(),config.autoStart&&this.run()}).render($list)}var $container=$(cssScope),extension=$container.data("extension")||"taoClientDiagnostic",$list=$container.find(".list"),$panel=$(".panel"),config=$container.data("config"),indexUrl=helpers._url("index","Diagnostic",extension),workstationUrl=helpers._url("workstation","DiagnosticChecker",extension),buttons=[],moduleConfig=module.config()||{};config.configurableText=moduleConfig.configurableText||{},buttons.push({id:"back",icon:"step-backward",title:__("Return to the list"),label:__("List of readiness checks"),action:function(){window.location.href=indexUrl;
+}}),window.self===window.top&&buttons.push({id:"exitButton",icon:"close",title:__("Exit"),label:__("Exit"),action:function(){window.self.close()}}),actionbar({renderTo:$panel,buttons:buttons}),$.get(workstationUrl,"json").done(function(data){installTester(data&&data.workstation)}).fail(function(){feedback().error(__("Unable to get the workstation name!")),installTester()})}};return loadingBar.start(),taoDiagnosticRunnerCtlr}),!function(e,t,i){"use strict";"function"==typeof define&&define.amd?define("taoClientDiagnostic/lib/fingerprint/fingerprint2",i):"undefined"!=typeof module&&module.exports?module.exports=i():t.exports?t.exports=i():t[e]=i()}("Fingerprint2",this,function(){
+"use strict";var e=function(t){if(!(this instanceof e))return new e(t);var i={swfContainerId:"fingerprintjs2",swfPath:"flash/compiled/FontList.swf",detectScreenOrientation:!0,sortPluginsFor:[/palemoon/i],userDefinedFonts:[]};this.options=this.extend(t,i),this.nativeForEach=Array.prototype.forEach,this.nativeMap=Array.prototype.map};return e.prototype={extend:function(e,t){if(null==e)return t;for(var i in e)null!=e[i]&&t[i]!==e[i]&&(t[i]=e[i]);return t},get:function(e){var t=this,i={data:[],push:function(e){var i=e.key,a=e.value;"function"==typeof t.options.preprocessor&&(a=t.options.preprocessor(i,a)),this.data.push({key:i,value:a})}};i=this.userAgentKey(i),i=this.languageKey(i),
+i=this.colorDepthKey(i),i=this.pixelRatioKey(i),i=this.hardwareConcurrencyKey(i),i=this.screenResolutionKey(i),i=this.availableScreenResolutionKey(i),i=this.timezoneOffsetKey(i),i=this.sessionStorageKey(i),i=this.localStorageKey(i),i=this.indexedDbKey(i),i=this.addBehaviorKey(i),i=this.openDatabaseKey(i),i=this.cpuClassKey(i),i=this.platformKey(i),i=this.doNotTrackKey(i),i=this.pluginsKey(i),i=this.canvasKey(i),i=this.webglKey(i),i=this.adBlockKey(i),i=this.hasLiedLanguagesKey(i),i=this.hasLiedResolutionKey(i),i=this.hasLiedOsKey(i),i=this.hasLiedBrowserKey(i),i=this.touchSupportKey(i),i=this.customEntropyFunction(i),this.fontsKey(i,function(i){var a=[];t.each(i.data,function(e){
+var t=e.value;"undefined"!=typeof e.value.join&&(t=e.value.join(";")),a.push(t)});var r=t.x64hash128(a.join("~~~"),31);return e(r,i.data)})},customEntropyFunction:function(e){return"function"==typeof this.options.customFunction&&e.push({key:"custom",value:this.options.customFunction()}),e},userAgentKey:function(e){return this.options.excludeUserAgent||e.push({key:"user_agent",value:this.getUserAgent()}),e},getUserAgent:function(){return navigator.userAgent},languageKey:function(e){return this.options.excludeLanguage||e.push({key:"language",value:navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||""}),e},colorDepthKey:function(e){
+return this.options.excludeColorDepth||e.push({key:"color_depth",value:screen.colorDepth||-1}),e},pixelRatioKey:function(e){return this.options.excludePixelRatio||e.push({key:"pixel_ratio",value:this.getPixelRatio()}),e},getPixelRatio:function(){return window.devicePixelRatio||""},screenResolutionKey:function(e){return this.options.excludeScreenResolution?e:this.getScreenResolution(e)},getScreenResolution:function(e){var t;return t=this.options.detectScreenOrientation&&screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height],"undefined"!=typeof t&&e.push({key:"resolution",value:t}),e},availableScreenResolutionKey:function(e){return this.options.excludeAvailableScreenResolution?e:this.getAvailableScreenResolution(e);
},getAvailableScreenResolution:function(e){var t;return screen.availWidth&&screen.availHeight&&(t=this.options.detectScreenOrientation?screen.availHeight>screen.availWidth?[screen.availHeight,screen.availWidth]:[screen.availWidth,screen.availHeight]:[screen.availHeight,screen.availWidth]),"undefined"!=typeof t&&e.push({key:"available_resolution",value:t}),e},timezoneOffsetKey:function(e){return this.options.excludeTimezoneOffset||e.push({key:"timezone_offset",value:(new Date).getTimezoneOffset()}),e},sessionStorageKey:function(e){return!this.options.excludeSessionStorage&&this.hasSessionStorage()&&e.push({key:"session_storage",value:1}),e},localStorageKey:function(e){
return!this.options.excludeSessionStorage&&this.hasLocalStorage()&&e.push({key:"local_storage",value:1}),e},indexedDbKey:function(e){return!this.options.excludeIndexedDB&&this.hasIndexedDB()&&e.push({key:"indexed_db",value:1}),e},addBehaviorKey:function(e){return document.body&&!this.options.excludeAddBehavior&&document.body.addBehavior&&e.push({key:"add_behavior",value:1}),e},openDatabaseKey:function(e){return!this.options.excludeOpenDatabase&&window.openDatabase&&e.push({key:"open_database",value:1}),e},cpuClassKey:function(e){return this.options.excludeCpuClass||e.push({key:"cpu_class",value:this.getNavigatorCpuClass()}),e},platformKey:function(e){return this.options.excludePlatform||e.push({
key:"navigator_platform",value:this.getNavigatorPlatform()}),e},doNotTrackKey:function(e){return this.options.excludeDoNotTrack||e.push({key:"do_not_track",value:this.getDoNotTrack()}),e},canvasKey:function(e){return!this.options.excludeCanvas&&this.isCanvasSupported()&&e.push({key:"canvas",value:this.getCanvasFp()}),e},webglKey:function(e){return this.options.excludeWebGL?e:this.isWebGlSupported()?(e.push({key:"webgl",value:this.getWebglFp()}),e):e},adBlockKey:function(e){return this.options.excludeAdBlock||e.push({key:"adblock",value:this.getAdBlock()}),e},hasLiedLanguagesKey:function(e){return this.options.excludeHasLiedLanguages||e.push({key:"has_lied_languages",
@@ -210,8 +214,8 @@ links:["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abi
var nb="undefined"==typeof digits?2:Math.max(0,parseInt(digits,10)),factor=Math.pow(10,nb)||1;return Math.round(number*factor)/factor},formatBandwidth=function(value){var bandwidth=formatNumber(value);return value>100&&(bandwidth="> 100"),bandwidth},transformDateToLocal=function(date){var d,time;return _.isFinite(date)?(_.isNumber(date)||(date=_.parseInt(date,10)),d=new Date(1e3*date),time=moment.utc(d)):time=moment.tz(date,defaultDateTimeZone),time.tz(moment.tz.guess()).format(defaultDateFormat)},taoDiagnosticCtlr={start:function(){function request(url,selection,message){selection&&selection.length&&(loadingBar.start(),$.ajax({url:url,data:{id:selection},dataType:"json",
type:"POST",error:function(){loadingBar.stop()}}).done(function(response){loadingBar.stop(),response&&response.success?(message&&feedback().success(message),$list.datatable("refresh")):feedback().error(__("Something went wrong ...")+" "+encode.html(response.error),{encodeHtml:!1})}))}function remove(selection){request(removeUrl,selection,__("The readiness check result have been removed"))}var $container=$(cssScope),extension=$container.data("extension")||"taoClientDiagnostic",$list=$container.find(".list"),dataset=$container.data("set"),config=$container.data("config")||{},installedExtension=$container.data("installedextension")||!1,diagnosticUrl=helpers._url("diagnostic","Diagnostic",extension),removeUrl=helpers._url("remove","Diagnostic",extension),serviceUrl=helpers._url("diagnosticData","Diagnostic",extension),performancesTester=performancesTesterFactory(config.testers.performance||{}),fingerprintTester=fingerprintTesterFactory(config.testers.fingerprint||{}),tools=[],actions=[],model=[];
tools.push({id:"refresh",icon:"reset",title:__("Refresh the page"),label:__("Refresh"),action:function(){$list.datatable("refresh")}}),tools.push({id:"launch",icon:"play",title:__("Launch another readiness check"),label:__("Launch readiness check"),action:function(){window.location.href=diagnosticUrl}}),installedExtension&&tools.push({id:"lti",icon:"play",title:__("Try a test delivery"),label:__("Try a test delivery"),action:function(){window.location.href=deliveryUrl}}),tools.push({id:"remove",icon:"remove",title:__("Remove the selected readiness check results"),label:__("Remove"),massAction:!0,action:function(selection){dialog({message:__("The selected readiness check results will be removed. Continue ?"),
-autoRender:!0,autoDestroy:!0,onOkBtn:function(){remove(selection)}})}}),window.self===window.top&&tools.push({id:"exitButton",icon:"close",title:__("Exit"),label:__("Exit"),action:function(){window.self.close()}}),actions.push({id:"remove",icon:"remove",title:__("Remove the readiness check result?"),action:function(id){dialog({autoRender:!0,autoDestroy:!0,message:__("The readiness check result will be removed. Continue ?"),onOkBtn:function(){remove([id])}})}}),model.push({id:"workstation",label:__("Workstation")}),config.testers.fingerprint&&config.testers.fingerprint.enabled&&(model.push({id:"fingerprint-cell",label:__("Fingerprint"),transform:function(v,row){
-return fingerprintTpl(row.fingerprint)}}),$list.on("click.fingerprint",".fingerprint-cell span.details",function(e){var id=$(e.target).closest("tr").data("itemIdentifier"),row=_.find(dataset.data,{id:id});row&&dialog({content:detailsTpl(fingerprintTester.getSummary(row.fingerprint)),buttons:"ok",autoRender:!0,autoDestroy:!0})})),config.testers.browser&&config.testers.browser.enabled&&(model.push({id:"os",label:__("OS")}),model.push({id:"browser",label:__("Browser")})),config.testers.performance&&config.testers.performance.enabled&&model.push({id:"performance",label:__("Performances"),transform:function(value){var status=performancesTester.getFeedback(value);return status.feedback&&status.feedback.message;
-}}),config.testers.bandwidth&&config.testers.bandwidth.enabled&&model.push({id:"bandwidth",label:__("Bandwidth"),transform:formatBandwidth}),config.testers.intensive_bandwidth&&config.testers.intensive_bandwidth.enabled&&model.push({id:"intensive_bandwidth",label:__("Intensive bandwidth"),transform:formatBandwidth}),config.testers.upload&&config.testers.upload.enabled&&model.push({id:"upload",label:__("Upload speed"),transform:formatBandwidth}),model.push({id:"date",label:__("Date"),transform:function(value){return transformDateToLocal(value)}}),$list.on("query.datatable",function(){loadingBar.start()}).on("load.datatable",function(e,data){dataset=data,loadingBar.stop();
-}).datatable({url:serviceUrl,status:{empty:__("No readiness checks have been done!"),available:__("Readiness checks already done"),loading:__("Loading")},tools:tools,actions:actions,selectable:!0,model:model},dataset)}};return loadingBar.start(),taoDiagnosticCtlr}),function(c){var d=document,a="appendChild",i="styleSheet",s=d.createElement("style");s.type="text/css",d.getElementsByTagName("head")[0][a](s),s[i]?s[i].cssText=c:s[a](d.createTextNode(c))}('.diagnostics-main-area{max-width:768px;margin:40px auto 0 auto;background:#f3f1ef;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;padding:20px}.diagnostics-main-area h1,.diagnostics-main-area h2,.diagnostics-main-area h3{font-style:normal;font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif}.diagnostics-main-area h1{margin-bottom:20px;font-size:20px;font-size:2rem}.diagnostics-main-area h2{margin:0;font-size:14px;font-size:1.4rem}.diagnostics-main-area h3{margin-top:10px;margin-bottom:5px;font-size:12px;font-size:1.2rem}.diagnostics-main-area .status h2,.diagnostics-main-area .details h2{margin:1rem 0}.diagnostics-main-area .legend{font-style:italic;font-weight:normal;font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:11px;font-size:1.1rem}.diagnostics-main-area .customMsg{margin-top:10px}.diagnostics-main-area .quality-bar{height:15px;background:linear-gradient(to right, #CE1431 0%, #D57915 25%, #D5A215 50%, #D5CB15 75%, #36B111 100%);opacity:.8;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;margin:5px 0 10px;position:relative}.diagnostics-main-area .quality-indicator{position:absolute;border-width:10px 8px;border-style:solid;border-color:#333 transparent transparent;top:-1px;height:25px;width:0}.diagnostics-main-area .quality-indicator[title]:before{font-size:11px;font-size:1.1rem;content:attr(title);position:absolute;top:-36px;left:-12px;text-align:center;width:24px;height:24px;line-height:24px;display:inline-block;background-color:#0e5d91;color:rgba(255,255,255,0.9);-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px}.diagnostics-main-area .quality-indicator.wide[title]:before{left:-16px;width:32px}.diagnostics-main-area [data-result],.diagnostics-main-area .bandwidth-box{display:none}.diagnostics-main-area [data-action=bandwidth-launcher]{margin:5px 0 10px}.diagnostics-main-area li{padding-bottom:10px}.diagnostics-main-area .intro{margin-bottom:20px}table.datatable [class^="icon-"]{padding:0}table.datatable td{font-size:90%;font-weight:normal}table.datatable .progress .state:not(:first-child):before{content:\' - \'}table.datatable .progress .item-time:before{content:\' (\'}table.datatable .progress .item-time .total:before{content:\' / \'}table.datatable .progress .item-time:after{content:\')\'}.details table.matrix{border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;margin-top:5px}.details table.matrix td:first-child{min-width:30%}.diagnostic-scope h1{font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:22px;font-size:2.2rem;font-weight:normal}.diagnostic-scope h2{font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:18px;font-size:1.8rem;margin:30px 0 10px}.diagnostic-scope form.daterange label{padding:0}.diagnostic-scope form.daterange input{margin:0 10px}.diagnostic-scope table.datatable [class^="icon-"]{padding:0}.diagnostic-scope table.datatable td{font-size:90%;font-weight:normal}.diagnostic-scope .content{margin:auto}.diagnostic-scope .diagnostic-index .content,.diagnostic-scope .diagnostic-runner .content{width:100%;padding:0 20px}.diagnostic-scope .diagnostic-index .message,.diagnostic-scope .diagnostic-runner .message{padding:8px;text-align:center}.diagnostic-scope .panel .action-bar{background:#266d9c;padding:3px;overflow:hidden;color:#e7eff4;margin:40px 0 10px 0}.diagnostic-scope .panel .action-bar .btn-info{overflow:hidden;background:transparent;border:1px rgba(255,255,255,0.3) solid}.diagnostic-scope .diagnostics-main-area{margin-top:0px;max-width:800px}.diagnostic-scope .detailed-value{display:flex;justify-content:space-between}.diagnostic-scope .detailed-value.errors{color:#d8ae5b}.diagnostic-scope .detailed-value .details{font-size:2rem;cursor:pointer;color:#3e7da7}.diagnostic-scope .detailed-value .details:hover{color:#03131d}.action-bar .tool-exitButton,.action-bar [data-control="exitButton"]{float:right}\n\n/*# sourceMappingURL=diagnostics.css.map */');
+autoRender:!0,autoDestroy:!0,onOkBtn:function(){remove(selection)}})}}),window.self===window.top&&tools.push({id:"exitButton",icon:"close",title:__("Exit"),label:__("Exit"),action:function(){window.self.close()}}),actions.push({id:"remove",icon:"remove",title:__("Remove the readiness check result?"),action:function(id){dialog({autoRender:!0,autoDestroy:!0,message:__("The readiness check result will be removed. Continue ?"),onOkBtn:function(){remove([id])}})}}),model.push({id:"workstation",label:__("Workstation")}),config.requireSchoolName&&model.push({id:"school",label:__("School")}),config.testers.fingerprint&&config.testers.fingerprint.enabled&&(model.push({
+id:"fingerprint-cell",label:__("Fingerprint"),transform:function(v,row){return fingerprintTpl(row.fingerprint)}}),$list.on("click.fingerprint",".fingerprint-cell span.details",function(e){var id=$(e.target).closest("tr").data("itemIdentifier"),row=_.find(dataset.data,{id:id});row&&dialog({content:detailsTpl(fingerprintTester.getSummary(row.fingerprint)),buttons:"ok",autoRender:!0,autoDestroy:!0})})),config.testers.browser&&config.testers.browser.enabled&&(model.push({id:"os",label:__("OS")}),model.push({id:"browser",label:__("Browser")})),config.testers.performance&&config.testers.performance.enabled&&model.push({id:"performance",label:__("Performances"),transform:function(value){
+var status=performancesTester.getFeedback(value);return status.feedback&&status.feedback.message}}),config.testers.bandwidth&&config.testers.bandwidth.enabled&&model.push({id:"bandwidth",label:__("Bandwidth"),transform:formatBandwidth}),config.testers.intensive_bandwidth&&config.testers.intensive_bandwidth.enabled&&model.push({id:"intensive_bandwidth",label:__("Intensive bandwidth"),transform:formatBandwidth}),config.testers.upload&&config.testers.upload.enabled&&model.push({id:"upload",label:__("Upload speed"),transform:formatBandwidth}),model.push({id:"date",label:__("Date"),transform:function(value){return transformDateToLocal(value)}}),$list.on("query.datatable",function(){
+loadingBar.start()}).on("load.datatable",function(e,data){dataset=data,loadingBar.stop()}).datatable({url:serviceUrl,status:{empty:__("No readiness checks have been done!"),available:__("Readiness checks already done"),loading:__("Loading")},tools:tools,actions:actions,selectable:!0,model:model},dataset)}};return loadingBar.start(),taoDiagnosticCtlr}),function(c){var d=document,a="appendChild",i="styleSheet",s=d.createElement("style");s.type="text/css",d.getElementsByTagName("head")[0][a](s),s[i]?s[i].cssText=c:s[a](d.createTextNode(c))}('.diagnostics-main-area{max-width:768px;margin:40px auto 0 auto;background:#f3f1ef;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;padding:20px}.diagnostics-main-area h1,.diagnostics-main-area h2,.diagnostics-main-area h3{font-style:normal;font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif}.diagnostics-main-area h1{margin-bottom:20px;font-size:20px;font-size:2rem}.diagnostics-main-area h2{margin:0;font-size:14px;font-size:1.4rem}.diagnostics-main-area h3{margin-top:10px;margin-bottom:5px;font-size:12px;font-size:1.2rem}.diagnostics-main-area .status h2,.diagnostics-main-area .details h2{margin:1rem 0}.diagnostics-main-area .legend{font-style:italic;font-weight:normal;font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:11px;font-size:1.1rem}.diagnostics-main-area .customMsg{margin-top:10px}.diagnostics-main-area .quality-bar{height:15px;background:linear-gradient(to right, #CE1431 0%, #D57915 25%, #D5A215 50%, #D5CB15 75%, #36B111 100%);opacity:.8;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;margin:5px 0 10px;position:relative}.diagnostics-main-area .quality-indicator{position:absolute;border-width:10px 8px;border-style:solid;border-color:#333 transparent transparent;top:-1px;height:25px;width:0}.diagnostics-main-area .quality-indicator[title]:before{font-size:11px;font-size:1.1rem;content:attr(title);position:absolute;top:-36px;left:-12px;text-align:center;width:24px;height:24px;line-height:24px;display:inline-block;background-color:#0e5d91;color:rgba(255,255,255,0.9);-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px}.diagnostics-main-area .quality-indicator.wide[title]:before{left:-16px;width:32px}.diagnostics-main-area [data-result],.diagnostics-main-area .bandwidth-box{display:none}.diagnostics-main-area [data-action=bandwidth-launcher]{margin:5px 0 10px}.diagnostics-main-area li{padding-bottom:10px}.diagnostics-main-area .intro{margin-bottom:20px}.diagnostics-main-area .intro label{display:inline-block;width:100px}table.datatable [class^="icon-"]{padding:0}table.datatable td{font-size:90%;font-weight:normal}table.datatable .progress .state:not(:first-child):before{content:\' - \'}table.datatable .progress .item-time:before{content:\' (\'}table.datatable .progress .item-time .total:before{content:\' / \'}table.datatable .progress .item-time:after{content:\')\'}.details table.matrix{border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;margin-top:5px}.details table.matrix td:first-child{min-width:30%}.diagnostic-scope h1{font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:22px;font-size:2.2rem;font-weight:normal}.diagnostic-scope h2{font-family:"Century Gothic",CenturyGothic,AppleGothic,sans-serif;font-size:18px;font-size:1.8rem;margin:30px 0 10px}.diagnostic-scope form.daterange label{padding:0}.diagnostic-scope form.daterange input{margin:0 10px}.diagnostic-scope table.datatable [class^="icon-"]{padding:0}.diagnostic-scope table.datatable td{font-size:90%;font-weight:normal}.diagnostic-scope .content{margin:auto}.diagnostic-scope .diagnostic-index .content,.diagnostic-scope .diagnostic-runner .content{width:100%;padding:0 20px}.diagnostic-scope .diagnostic-index .message,.diagnostic-scope .diagnostic-runner .message{padding:8px;text-align:center}.diagnostic-scope .panel .action-bar{background:#266d9c;padding:3px;overflow:hidden;color:#e7eff4;margin:40px 0 10px 0}.diagnostic-scope .panel .action-bar .btn-info{overflow:hidden;background:transparent;border:1px rgba(255,255,255,0.3) solid}.diagnostic-scope .diagnostics-main-area{margin-top:0px;max-width:800px}.diagnostic-scope .detailed-value{display:flex;justify-content:space-between}.diagnostic-scope .detailed-value.errors{color:#d8ae5b}.diagnostic-scope .detailed-value .details{font-size:2rem;cursor:pointer;color:#3e7da7}.diagnostic-scope .detailed-value .details:hover{color:#03131d}.action-bar .tool-exitButton,.action-bar [data-control="exitButton"]{float:right}\n\n/*# sourceMappingURL=diagnostics.css.map */');
//# sourceMappingURL=controllers.min.js.map
\ No newline at end of file
diff --git a/views/js/controllers.min.js.map b/views/js/controllers.min.js.map
index d9d1af65..3542d368 100644
--- a/views/js/controllers.min.js.map
+++ b/views/js/controllers.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["routes.js","../tools/message.js","Authenticator/login.js","../tools/fixedDecimals.js","../tools/stats.js","../../taoQtiItem/qtiItem/core/qtiClasses.js","../../taoQtiItem/qtiItem/helper/util.js","../../taoQtiItem/qtiItem/helper/rendererConfig.js","../../taoQtiItem/qtiItem/core/Element.js","../../taoQtiItem/qtiItem/helper/xmlNsHandler.js","../../taoQtiItem/qtiItem/core/Loader.js","../../taoQtiItem/qtiItem/helper/interactionHelper.js","../../taoQtiItem/qtiRunner/core/Renderer.js","../../taoItems/assets/manager.js","../../taoItems/assets/strategies.js","../../taoQtiItem/portableElementRegistry/factory/factory.js","../../taoQtiItem/qtiCreator/helper/qtiElements.js","../../taoQtiItem/portableElementRegistry/factory/ciRegistry.js","../../taoQtiItem/portableElementRegistry/ciRegistry.js","../../taoQtiItem/portableElementRegistry/factory/icRegistry.js","../../taoQtiItem/portableElementRegistry/icRegistry.js","../../taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy.js","../../taoQtiItem/qtiCommonRenderer/renderers/config.js","../../taoQtiItem/qtiCommonRenderer/renderers/Renderer.js","../tools/getConfig.js","../tools/getLabels.js","../tools/getStatus.js","../tools/performances/tester.js","../tools/bandwidth/tester.js","../tools/upload/tester.js","../tools/getPlatformInfo.js","../tools/browser/tester.js","../tools/diagnostic/tpl/main!tpl","../tools/diagnostic/tpl/result!tpl","../tools/diagnostic/tpl/details!tpl","../tools/diagnostic/tpl/feedback!tpl","tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar","../../taoClientDiagnosticCss/diagnostics!css","../tools/diagnostic/diagnostic.js","CompatibilityChecker/diagnostics.js","../templates/diagnostic/main!tpl","Diagnostic/diagnostic.js","../lib/fingerprint/fingerprint2.js","../tools/fingerprint/tester.js","../tools/diagnostic/tpl/fingerprint!tpl","../../lib/moment-timezone.min.js","Diagnostic/index.js","../../../../../../../../../../../onLayerEnd0.js"],"names":["define","Authenticator","actions","login","CompatibilityChecker","index","Diagnostic","diagnostic","$","feedback","showMessages","container","$feedbackBox","data","error","showMessage","start","fixedDecimals","value","decimals","shift","Math","pow","abs","round","Number","_","stats","list","fieldName","variance","avg","med","middle","getValue","results","sum","sum2","min","MAX_VALUE","max","count","values","isFunction","item","forEach","undefined","push","diff","sqrt","sort","floor","ceil","average","median","key","_container","assessmentItem","responseProcessing","_simpleFeedbackRule","stylesheet","math","img","object","outcomeDeclaration","responseDeclaration","rubricBlock","associableHotspot","gap","gapImg","gapText","hotspotChoice","hottext","inlineChoice","simpleAssociableChoice","simpleChoice","associateInteraction","choiceInteraction","endAttemptInteraction","extendedTextInteraction","gapMatchInteraction","graphicAssociateInteraction","graphicGapMatchInteraction","graphicOrderInteraction","hotspotInteraction","hottextInteraction","inlineChoiceInteraction","matchInteraction","mediaInteraction","orderInteraction","prompt","selectPointInteraction","sliderInteraction","textEntryInteraction","uploadInteraction","feedbackBlock","feedbackInline","modalFeedback","customInteraction","infoControl","include","table","printedVariable","_tooltip","util","buildSerial","prefix","id","chars","i","charAt","random","length","buildId","usedIds","suffix","exists","TypeError","getUsedIds","contains","buildIdentifier","useSuffix","getUsedIdentifiers","isUndefined","replace","findInCollection","element","collectionNames","searchedSerial","found","isString","isArray","Error","each","collectionName","collection","split","nameToken","elt","parent","find","addMarkupNamespace","markup","ns","$0","$1","$2","$3","$4","indexOf","removeMarkupNamespaces","getMarkupUsedNamespaces","namespaces","original","slash","node","uniq","rendererConfigHelper","getOptionsFromArguments","args","options","placeholder","subclass","renderer","arg","isRenderer","isPlainObject","console","log","Class","loggerFactory","rendererConfig","_instances","logger","Element","extend","qtiClass","serial","rootElement","init","attributes","this","metaData","match","setAttributes","initContainer","arguments","initObject","is","getSerial","elts","getComposingElements","attr","name","prop","document","trigger","removeData","removeAttr","removeAttributes","warn","getAttributes","clone","attrNames","append","getBody","getObject","v","isA","getUsedClasses","ret","composingElts","body","location","getRootElement","setRelatedItem","setRootElement","getRelatedItem","setRenderer","getRenderer","render","rendering","_renderer","tplData","defaultData","tag","resolveUrl","merge","getData","renderTpl","replaceWith","postRender","altClassName","postRenderers","compact","getContainer","$scope","toArray","arr","type","isEmpty","addClass","className","clazz","_containClass","hasClass","removeClass","regex","RegExp","trim","toggleClass","state","isset","issetElement","unset","unsetElement","allClassStr","test","qtiElement","getElementBySerial","composingElements","getPrefix","html5Ns","prefixed","stripNs","pattern","openRegEx","closeRegEx","restoreNs","xml","tagMatch","xmlRe","tagRe","xmlMatch","imsXsd","prefixAtt","qtiClasses","xmlNsHandler","loadPortableCustomElementData","portableElement","typeIdentifier","entryPoint","libraries","setNamespace","xmlns","loadPortableCustomElementProperties","properties","rawProperties","forOwn","JSON","parse","e","Loader","classesLocation","qti","setClassesLocation","getRequiredClasses","union","loadRequiredClasses","callback","reload","requiredClass","requiredClasses","required","_this","require","QtiClass","prototype","call","getLoadedClasses","keys","loadItemData","Qti","loadContainer","outcomes","outcome","buildOutcome","addOutcomeDeclaration","feedbacks","buildElement","addModalFeedback","stylesheets","addStylesheet","responses","response","buildResponse","addResponseDeclaration","feedbackRules","forIn","fbData","buildSimpleFeedbackRule","setResponseProcessing","buildResponseProcessing","setNamespaces","setSchemaLocations","schemaLocations","setApipAccessibility","apipAccessibility","loadAndBuildElement","loadElement","loadElementData","loadElements","allElements","elementData","template","howMatch","defaultValue","correctResponse","correctResponses","size","mapping","mapEntries","areaMapping","mappingAttributes","feedbackRule","setCondition","condition","comparedValue","feedbackOutcome","feedbackThen","modalFeedbacks","feedbackElse","comparedOutcome","rp","processingType","bodyObject","bodyData","elements","eltData","setElement","defaults","bdy","loadObjectData","loadInteractionData","loadChoiceData","loadMathData","loadPicData","loadTooltipData","interaction","buildInteractionChoices","loadPciData","choices","set","matchSet","choice","addChoice","gapImgs","addGapImg","val","text","_alt","setMathML","mathML","annotations","encoding","setAnnotation","tooltip","content","pci","pic","convertChoices","outputType","c","findChoices","inputType","getChoice","getChoiceByIdentifier","shuffleChoices","r","f","j","n","k","tmp","serialToIdentifier","choiceSerial","Handlebars","Promise","interactionHelper","themeLoader","getDocumentBaseUrl","window","protocol","host","pathname","_isValidRenderer","valid","classCorrect","_renderableClasses","pos","slice","subClass","_renderableSubclasses","_dependencies","_defaults","Renderer","registerRendererClass","success","_locations","_renderers","shuffledChoices","_getClassRenderer","setOption","setOptions","opts","getOption","getCustomMessage","elementName","messageKey","messages","compile","getAssetManager","assetManager","getThemeLoader","qtiSubclass","res","decorators","isObject","before","after","renderDirect","tpl","setResponse","qtiInteraction","$container","getResponse","resetResponse","getState","setState","destroy","getLoadedRenderers","register","renderersLocations","load","self","themes","base","available","theme","path","intersection","reqClass","deps","requiredSubClasses","unload","setShuffledChoices","identificationType","pluck","getShuffledChoices","reshuffle","returnedType","getChoices","getRenderers","getLocations","url","resolve","getAbsoluteUrl","relUrl","absUrl","runtimeLocations","runtimeLocation","baseUrl","setAreaBroker","areaBroker","_areaBroker","getAreaBroker","getItemCreator","build","defaultOptions","NewRenderer","apply","urlUtil","checkStrategy","strategy","handle","assetManagerFactory","strategies","cache","parseUrl","_strategies","addStrategy","prependStrategy","unshift","setStrategies","newStrategies","setData","resolved","inputUrl","hasOwnProperty","result","resolveBy","clearCache","prependToUrl","slashcat","directory","encodeURIComponent","file","isRelative","itemCssNoCache","bust","Date","now","external","isAbsolute","toString","base64","isBase64","taomedia","eventifier","_requirejs","_defaultLoadingOptions","enabledOnly","runtimeOnly","loadModuleConfig","manifest","reject","requireConfigAliases","reqConfigs","modules","runtime","config","pciConfig","paths","runtimeModules","model","reduce","acc","conf","map","methods","_loaded","__providers","_registry","get","version","last","registerProvider","moduleName","resetProviders","loadProviders","providerLoadingStack","provider","getAllVersions","all","versions","getRuntime","assign","label","message","getCreator","creator","getBaseUrl","loadRuntimes","loadPromise","then","loadStack","configLoadingStack","_pcis","moduleConfigs","catch","err","loadCreators","requiredCreatorHooks","requiredCreators","pciModel","hook","enabled","creators","creatorHook","getTypeIdentifier","findIndex","module","enable","disable","isEnabled","__","QtiElements","classes","itemBody","parents","abstract","atomicBlock","atomicInline","simpleBlock","simpleInline","flowStatic","blockStatic","inlineStatic","flow","tableCell","caption","xhtml","col","colgroup","div","dl","dt","dd","hr","li","ol","ul","param","tbody","tfoot","thead","td","th","tr","a","abbr","acronym","b","big","cite","code","dfn","em","kbd","q","samp","small","span","strong","sub","sup","tt","var","blockquote","address","h1","h2","h3","h4","h5","h6","p","pre","br","textRun","blockInteraction","inlineInteraction","templateElement","templateBlock","templateInline","drawingInteraction","graphicInteraction","containable","children","getAllowedContainersElements","getAllowedContainers","jqSelector","substring","filter","getParentClasses","aClass","intersect","getChildClasses","getAllowedContents","recursive","checked","contain","child","isAllowedClass","qtiContainerClass","qtiContentClass","allowedClasses","cacheType","isBlock","isInline","topClass","getAvailableAuthoringElements","description","icon","short","tags","portableElementRegistry","qtiElements","getAuthoringData","on","ciRegistry","registry","providers","icRegistry","getBaseUrlByIdentifier","source","relative","fullmatch","relPath","context","assetStrategies","portableAssetStrategy","itemThemes","moduleConfig","root_url","locations","simpleChoice.choiceInteraction","simpleChoice.orderInteraction","simpleAssociableChoice.matchInteraction","simpleAssociableChoice.associateInteraction","enableDragAndDrop","associate","associateDragAndDrop","gapMatch","gapMatchDragAndDrop","graphicGapMatch","graphicGapMatchDragAndDrop","order","orderDragAndDrop","omit","level","parseInt","percentage","thresholds","len","step","status","quality","threshold","async","helpers","getConfig","getLabels","getStatus","loadItem","done","qtiJsonFile","urlTokens","extension","fullpath","s","contexts","loader","itemData","duration","end","performance","appendTo","remove","_second","performancesTester","initConfig","labels","_messages","idx","_samples","samples","_defaultSamples","sample","_sampleBaseId","timeout","_defaultTimeout","nb","occurrences","_defaultOccurrencesCount","tests","cb","partial","iterations","series","measures","summary","getFeedback","getSummary","performancesMin","performancesMax","performancesAverage","optimal","range","_thresholds","title","download","timeoutId","request","bandwidth","base_www","XMLHttpRequest","open","setRequestHeader","onload","bytes","seconds","speed","clearTimeout","_mega","onerror","delay","send","bandwidthTester","_downloadData","bind","bandwidthMin","bandwidthMax","bandwidthAverage","bandwidthUnit","unit","ideal","maxTestTakers","legend","wide","_kilo","10KB","100KB","1MB","urlHelper","uploadAvg","uploadMax","generateStr","possible","upload","route","str","ajax","xhr","startTime","addEventListener","evt","passedTime","lengthComputable","time","loaded","uploadTester","avgSpeed","totalSpeed","maxSpeed","getTesterUrl","win","action","controller","navigator","screen","params","ua","userAgent","ActiveXObject","opera","chrome","createElement","Worker","applicationCache","history","pushState","documentElement","webkitRequestFullScreen","w","width","h","height","defaultConfig","browserVersionAction","browserVersionController","browserVersionExtension","testerUrl","fail","getPlatformInfo","browserTester","post","customMsgRenderer","customMsg","_placeHolders","CURRENT_BROWSER","browser","CURRENT_OS","os","currentBrowser","browserVersion","currentOs","osVersion","hb","depth0","partials","program1","stack1","helper","buffer","header","hash","functionType","escapeExpression","program3","info","compilerInfo","inverse","noop","fn","program","button","helperMissing","details","component","mainTpl","resultTpl","detailsTpl","feedbackTpl","qualityBarTpl","diagnosticFactory","setTemplate","controls","$start","$component","$status","$results","run","$btn","closest","$result","$details","actionStore","actionDropId","storeAllRuns","configurableText","changeStatus","html","store","storeParams","getCustomMsg","addCustomFeedbackMsg","msg","hasFailed","addResult","$main","$indicator","fadeIn","animate","left","outerWidth","prepare","empty","finish","deleteIdentifier","doCheck","testerConfig","testerId","tester","testerFactory","customMsgKey","information","scores","mapValues","stringify","testers","total","diagTotalCheckResult","loadingBar","$contentArea","stop","diagInstructions","program2","program4","program6","actionbar","diagnosticTpl","cssScope","taoDiagnosticRunnerCtlr","installTester","workstation","$workstation","getElement","which","preventDefault","removeProp","autoStart","$list","$panel","indexUrl","_url","workstationUrl","buttons","href","top","close","renderTo","t","amd","exports","swfContainerId","swfPath","detectScreenOrientation","sortPluginsFor","userDefinedFonts","nativeForEach","Array","nativeMap","preprocessor","userAgentKey","languageKey","colorDepthKey","pixelRatioKey","hardwareConcurrencyKey","screenResolutionKey","availableScreenResolutionKey","timezoneOffsetKey","sessionStorageKey","localStorageKey","indexedDbKey","addBehaviorKey","openDatabaseKey","cpuClassKey","platformKey","doNotTrackKey","pluginsKey","canvasKey","webglKey","adBlockKey","hasLiedLanguagesKey","hasLiedResolutionKey","hasLiedOsKey","hasLiedBrowserKey","touchSupportKey","customEntropyFunction","fontsKey","join","x64hash128","customFunction","excludeUserAgent","getUserAgent","excludeLanguage","language","userLanguage","browserLanguage","systemLanguage","excludeColorDepth","colorDepth","excludePixelRatio","getPixelRatio","devicePixelRatio","excludeScreenResolution","getScreenResolution","excludeAvailableScreenResolution","getAvailableScreenResolution","availWidth","availHeight","excludeTimezoneOffset","getTimezoneOffset","excludeSessionStorage","hasSessionStorage","hasLocalStorage","excludeIndexedDB","hasIndexedDB","excludeAddBehavior","addBehavior","excludeOpenDatabase","openDatabase","excludeCpuClass","getNavigatorCpuClass","excludePlatform","getNavigatorPlatform","excludeDoNotTrack","getDoNotTrack","excludeCanvas","isCanvasSupported","getCanvasFp","excludeWebGL","isWebGlSupported","getWebglFp","excludeAdBlock","getAdBlock","excludeHasLiedLanguages","getHasLiedLanguages","excludeHasLiedResolution","getHasLiedResolution","excludeHasLiedOs","getHasLiedOs","excludeHasLiedBrowser","getHasLiedBrowser","excludeJsFonts","flashFontsKey","jsFontsKey","excludeFlashFonts","hasSwfObjectLoaded","hasMinFlashInstalled","loadSwfAndDetectFonts","setTimeout","extendedJsFonts","concat","o","l","getElementsByTagName","u","d","g","style","position","fontSize","lineHeight","innerHTML","fontFamily","appendChild","m","T","offsetWidth","offsetHeight","S","x","E","M","A","y","removeChild","excludePlugins","isIE","excludeIEPlugins","getIEPlugins","getRegularPlugins","plugins","pluginsShouldBeSorted","suffixes","Object","getOwnPropertyDescriptor","excludeTouchSupport","getTouchSupport","excludeHardwareConcurrency","getHardwareConcurrency","sessionStorage","localStorage","indexedDB","hardwareConcurrency","cpuClass","platform","doNotTrack","msDoNotTrack","maxTouchPoints","msMaxTouchPoints","createEvent","display","getContext","rect","isPointInPath","textBaseline","fillStyle","fillRect","dontUseFakeFontInCanvas","font","fillText","globalCompositeOperation","beginPath","arc","PI","closePath","fill","toDataURL","clearColor","DEPTH_TEST","depthFunc","LEQUAL","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","getExtension","getParameter","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getWebglCanvas","createBuffer","bindBuffer","ARRAY_BUFFER","Float32Array","bufferData","STATIC_DRAW","itemSize","numItems","createProgram","createShader","VERTEX_SHADER","shaderSource","compileShader","FRAGMENT_SHADER","attachShader","linkProgram","useProgram","vertexPosAttrib","getAttribLocation","offsetUniform","getUniformLocation","enableVertexAttribArray","vertexPosArray","vertexAttribPointer","FLOAT","uniform2f","drawArrays","TRIANGLE_STRIP","canvas","getSupportedExtensions","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE","ALPHA_BITS","getContextAttributes","antialias","BLUE_BITS","DEPTH_BITS","GREEN_BITS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_RENDERBUFFER_SIZE","MAX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_SIZE","MAX_VARYING_VECTORS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VIEWPORT_DIMS","RED_BITS","RENDERER","SHADING_LANGUAGE_VERSION","STENCIL_BITS","VENDOR","VERSION","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","getShaderPrecisionFormat","HIGH_FLOAT","precision","rangeMin","rangeMax","MEDIUM_FLOAT","LOW_FLOAT","HIGH_INT","MEDIUM_INT","LOW_INT","getElementsByClassName","languages","substr","toLowerCase","oscpu","productSub","eval","toSource","WebGLRenderingContext","appName","swfobject","hasFlashPlayerVersion","addFlashDivNode","setAttribute","onReady","allowScriptAccess","menu","embedSWF","x64Add","x64Multiply","x64Rotl","x64LeftShift","x64Xor","x64Fmix","charCodeAt","format","uuid","Fingerprint2","browserFingerprint","handleError","errors","getStorageKey","_storageKeys","browserStorage","browserId","lastFingerprint","freshBrowserId","newFingerprint","storage","getItem","fingerprint","toUpperCase","pendingPromises","resultFingerprint","changed","setItem","sources","pull","fingerprintValue","fingerprintDetails","fingerprintChanged","fingerprintErrors","fingerprintError","_thresholdValues","storageIssue","changedFingerprint","fingerprintUUID","moment","abbrs","offsets","untils","population","_set","toTimeString","at","offset","zone","offsetScore","abbrScore","getFullYear","I","H","Intl","DateTimeFormat","resolvedOptions","timeZone","z","scoreOffsetAt","D","F","G","zones","links","dataVersion","didShowError","_a","_tzm","utc","isMoment","add","tz","B","_z","C","J","K","L","_index","moveAmbiguousForward","moveInvalidForward","_zones","_links","_names","link","zoneExists","guess","names","Zone","unpack","unpackBase60","needsOffset","defaultZone","updateOffset","_isUTC","_d","utcOffset","zoneName","zoneAbbr","setDefault","N","momentProperties","encode","dialog","performancesTesterFactory","fingerprintTesterFactory","fingerprintTpl","defaultDateTimeZone","defaultDateFormat","formatNumber","number","digits","factor","formatBandwidth","transformDateToLocal","date","isFinite","isNumber","taoDiagnosticCtlr","selection","dataType","datatable","encodeHtml","removeUrl","dataset","installedExtension","diagnosticUrl","serviceUrl","fingerprintTester","tools","deliveryUrl","massAction","autoRender","autoDestroy","onOkBtn","transform","row","target","intensive_bandwidth","loading","selectable","cssText","createTextNode"],"mappings":"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","file":"routes.js","sourcesContent":["/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n * \n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n * \n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n * \n * Copyright (c) 2015 Open Assessment Technologies SA\n */\n\n\ndefine('taoClientDiagnostic/controller/routes',{\n 'Authenticator' : {\n 'actions' : {\n 'login' : 'controller/Authenticator/login'\n }\n },\n 'CompatibilityChecker' : {\n 'actions' : {\n 'index' : 'controller/CompatibilityChecker/diagnostics'\n }\n },\n 'Diagnostic' : {\n 'actions' : {\n 'index' : 'controller/Diagnostic/index',\n 'diagnostic' : 'controller/Diagnostic/diagnostic'\n }\n }\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\n\n/**\n *\n * @author Camille Moyon \n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/message',[\n 'jquery',\n 'ui/feedback'\n], function ($, feedback) {\n 'use strict';\n\n /**\n * Displays the messages set into a markup\n * @param {String|jQuery|HTMLElement} container\n */\n function showMessages(container) {\n var $feedbackBox = $(container);\n\n if ($feedbackBox.data('error')) {\n feedback().error($feedbackBox.data('error'));\n }\n if ($feedbackBox.data('message')) {\n feedback().error($feedbackBox.data('message'));\n }\n }\n\n /**\n * @exports\n */\n return showMessages;\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\n\n/**\n *\n * @author Camille Moyon \n */\ndefine('taoClientDiagnostic/controller/Authenticator/login',[\n 'jquery',\n 'taoClientDiagnostic/tools/message'\n], function ($, showMessage) {\n 'use strict';\n\n /**\n * @exports\n */\n return {\n start: function() {\n showMessage('#feedback-box');\n }\n };\n});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/fixedDecimals',[],function () {\n 'use strict';\n\n /**\n * Rounds a value to a fixed number of decimals\n * @param {Number} value The value to round\n * @param {Number} decimals The number of decimal\n * @returns {Number}\n */\n var fixedDecimals = function fixedDecimals(value, decimals) {\n var shift = Math.pow(10, Math.abs(decimals || 1));\n return Math.round(Number(value) * shift) / shift || 0;\n };\n\n return fixedDecimals;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/stats',[\n 'lodash',\n 'taoClientDiagnostic/tools/fixedDecimals'\n], function (_, fixedDecimals) {\n 'use strict';\n\n /**\n * Computes some stats on a list from a particular field\n * @param {Array|Object} list The list to compute stats on\n * @param {String|Function} fieldName The name of the field to process, or a callback method returning the value\n * @param {Number} [decimals] Optional number of fixed decimals for values\n * @returns {Object}\n */\n var stats = function stats(list, fieldName, decimals) {\n var sum = 0;\n var sum2 = 0;\n var min = Number.MAX_VALUE;\n var max = 0;\n var variance;\n var count = 0;\n var values = [];\n var avg;\n var med;\n var middle;\n var getValue;\n var results;\n\n if (_.isFunction(fieldName)) {\n getValue = fieldName;\n } else {\n getValue = function(item) {\n return item && item[fieldName] || 0;\n };\n }\n\n // process 1st pass stats: compute sum, min and max values\n _.forEach(list, function(item) {\n var value;\n if (undefined !== item) {\n value = getValue(item);\n values.push(value);\n min = Math.min(min, value);\n max = Math.max(max, value);\n sum += value;\n count++;\n }\n });\n\n // compute the average value\n avg = sum / (count || 1);\n\n // process 2nd pass stats: compute variance\n _.forEach(values, function(value) {\n var diff = value - avg;\n sum2 += diff * diff;\n });\n\n // compute de standard variance\n variance = count > 1 ? Math.sqrt(sum2 / (count - 1)) : 0;\n\n // compute the median value\n values.sort();\n middle = count / 2;\n med = (values[Math.floor(middle)] + values[Math.ceil(middle)]) / 2;\n\n results = {\n min : min,\n max : max,\n sum : sum,\n count : count,\n average : avg,\n median : med,\n variance : variance\n };\n\n if (decimals) {\n _.forEach(results, function(value, key) {\n results[key] = fixedDecimals(value, decimals);\n });\n }\n\n results.values = list;\n return results;\n };\n\n return stats;\n});\n\n","define('taoQtiItem/qtiItem/core/qtiClasses',[], function(){\n return {\n '_container' : 'taoQtiItem/qtiItem/core/Container',\n 'assessmentItem' : 'taoQtiItem/qtiItem/core/Item',\n 'responseProcessing' : 'taoQtiItem/qtiItem/core/ResponseProcessing',\n '_simpleFeedbackRule' : 'taoQtiItem/qtiItem/core/response/SimpleFeedbackRule',\n 'stylesheet' : 'taoQtiItem/qtiItem/core/Stylesheet',\n 'math' : 'taoQtiItem/qtiItem/core/Math',\n 'img' : 'taoQtiItem/qtiItem/core/Img',\n 'object' : 'taoQtiItem/qtiItem/core/Object',\n 'outcomeDeclaration' : 'taoQtiItem/qtiItem/core/variables/OutcomeDeclaration',\n 'responseDeclaration' : 'taoQtiItem/qtiItem/core/variables/ResponseDeclaration',\n 'rubricBlock' : 'taoQtiItem/qtiItem/core/RubricBlock',\n 'associableHotspot' : 'taoQtiItem/qtiItem/core/choices/AssociableHotspot',\n 'gap' : 'taoQtiItem/qtiItem/core/choices/Gap',\n 'gapImg' : 'taoQtiItem/qtiItem/core/choices/GapImg',\n 'gapText' : 'taoQtiItem/qtiItem/core/choices/GapText',\n 'hotspotChoice' : 'taoQtiItem/qtiItem/core/choices/HotspotChoice',\n 'hottext' : 'taoQtiItem/qtiItem/core/choices/Hottext',\n 'inlineChoice' : 'taoQtiItem/qtiItem/core/choices/InlineChoice',\n 'simpleAssociableChoice' : 'taoQtiItem/qtiItem/core/choices/SimpleAssociableChoice',\n 'simpleChoice' : 'taoQtiItem/qtiItem/core/choices/SimpleChoice',\n 'associateInteraction' : 'taoQtiItem/qtiItem/core/interactions/AssociateInteraction',\n 'choiceInteraction' : 'taoQtiItem/qtiItem/core/interactions/ChoiceInteraction',\n 'endAttemptInteraction' : 'taoQtiItem/qtiItem/core/interactions/EndAttemptInteraction',\n 'extendedTextInteraction' : 'taoQtiItem/qtiItem/core/interactions/ExtendedTextInteraction',\n 'gapMatchInteraction' : 'taoQtiItem/qtiItem/core/interactions/GapMatchInteraction',\n 'graphicAssociateInteraction' : 'taoQtiItem/qtiItem/core/interactions/GraphicAssociateInteraction',\n 'graphicGapMatchInteraction' : 'taoQtiItem/qtiItem/core/interactions/GraphicGapMatchInteraction',\n 'graphicOrderInteraction' : 'taoQtiItem/qtiItem/core/interactions/GraphicOrderInteraction',\n 'hotspotInteraction' : 'taoQtiItem/qtiItem/core/interactions/HotspotInteraction',\n 'hottextInteraction' : 'taoQtiItem/qtiItem/core/interactions/HottextInteraction',\n 'inlineChoiceInteraction' : 'taoQtiItem/qtiItem/core/interactions/InlineChoiceInteraction',\n 'matchInteraction' : 'taoQtiItem/qtiItem/core/interactions/MatchInteraction',\n 'mediaInteraction' : 'taoQtiItem/qtiItem/core/interactions/MediaInteraction',\n 'orderInteraction' : 'taoQtiItem/qtiItem/core/interactions/OrderInteraction',\n 'prompt' : 'taoQtiItem/qtiItem/core/interactions/Prompt',\n 'selectPointInteraction' : 'taoQtiItem/qtiItem/core/interactions/SelectPointInteraction',\n 'sliderInteraction' : 'taoQtiItem/qtiItem/core/interactions/SliderInteraction',\n 'textEntryInteraction' : 'taoQtiItem/qtiItem/core/interactions/TextEntryInteraction',\n 'uploadInteraction' : 'taoQtiItem/qtiItem/core/interactions/UploadInteraction',\n 'feedbackBlock' : 'taoQtiItem/qtiItem/core/feedbacks/FeedbackBlock',\n 'feedbackInline' : 'taoQtiItem/qtiItem/core/feedbacks/FeedbackInline',\n 'modalFeedback' : 'taoQtiItem/qtiItem/core/feedbacks/ModalFeedback',\n 'customInteraction' : 'taoQtiItem/qtiItem/core/interactions/CustomInteraction',\n 'infoControl' : 'taoQtiItem/qtiItem/core/PortableInfoControl',\n 'include' : 'taoQtiItem/qtiItem/core/Include',\n 'table' : 'taoQtiItem/qtiItem/core/Table',\n 'printedVariable' : 'taoQtiItem/qtiItem/core/PrintedVariable',\n '_tooltip' : 'taoQtiItem/qtiItem/core/Tooltip'\n };\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA\n *\n */\n\n/**\n * Common basic util functions\n */\ndefine('taoQtiItem/qtiItem/helper/util',['lodash'], function(_){\n 'use strict';\n\n var util = {\n\n buildSerial : function buildSerial(prefix){\n var id = prefix || '';\n var chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n for(var i = 0; i < 22; i++){\n id += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return id;\n },\n\n /**\n * Generates an id for a Qti element (the generation is different from identifier)\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildId : function buildId(item, prefix){\n var id;\n var usedIds;\n var i = 1;\n var suffix = '';\n var exists = false;\n\n if(!item){\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n usedIds = item.getUsedIds();\n\n do{\n exists = false;\n id = prefix + suffix;\n if(_.contains(usedIds, id)){\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while(exists);\n\n return id;\n },\n\n /**\n * Generates an identifier for a Qti element\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @param {Boolean} [useSuffix = true] - add a \"_ + index\" to the identifier\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildIdentifier : function buildIdentifier(item, prefix, useSuffix){\n\n var id;\n var usedIds;\n var suffix = '';\n var i = 1;\n var exists = false;\n\n if(!item){\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n if(!prefix){\n throw new TypeError('Prefix is required to build an identifier');\n }\n\n usedIds = item.getUsedIdentifiers();\n useSuffix = _.isUndefined(useSuffix) ? true : useSuffix;\n\n if(prefix){\n prefix = prefix.replace(/_[0-9]+$/ig, '_') //detect incremental id of type choice_12, response_3, etc.\n .replace(/[^a-zA-Z0-9_]/ig, '_')\n .replace(/(_)+/ig, '_');\n if(useSuffix){\n suffix = '_' + i;\n }\n }\n\n do{\n exists = false;\n id = prefix + suffix;\n if(usedIds[id]){\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while(exists);\n\n return id;\n },\n\n findInCollection : function findInCollection(element, collectionNames, searchedSerial){\n\n var found = null;\n\n if(_.isString(collectionNames)){\n collectionNames = [collectionNames];\n }\n\n if(_.isArray(collectionNames)){\n\n _.each(collectionNames, function(collectionName){\n\n //get collection to search in (resolving case like interaction.choices.0\n var collection = element;\n _.each(collectionName.split('.'), function(nameToken){\n collection = collection[nameToken];\n });\n var elt = collection[searchedSerial];\n\n if(elt){\n found = {'parent' : element, 'element' : elt};\n return false;//break the each loop\n }\n\n //search inside each elements:\n _.each(collection, function(elt){\n\n if(_.isFunction(elt.find)){\n found = elt.find(searchedSerial);\n if(found){\n return false;//break the each loop\n }\n }\n\n });\n\n if(found){\n return false;//break the each loop\n }\n\n });\n\n }else{\n\n throw new Error('invalid argument : collectionNames must be an array or a string');\n }\n\n return found;\n },\n addMarkupNamespace : function addMarkupNamespace(markup, ns){\n if(ns) {\n markup = markup.replace(/<(\\/)?([a-z:]+)(\\s?)([^><]*)>/g, function($0, $1, $2, $3, $4){\n if($2.indexOf(':')>0){\n return $0;\n }\n $1 = $1 || '';\n $3 = $3 || '';\n return '<'+ $1 + ns + ':'+$2+$3+$4+'>';\n });\n return markup;\n }\n return markup;\n\n },\n removeMarkupNamespaces : function removeMarkupNamespace(markup){\n return markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, '<$1$3>');\n },\n getMarkupUsedNamespaces : function getMarkupUsedNamespaces(markup){\n var namespaces = [];\n markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, function(original, slash, ns, node){\n namespaces.push(ns);\n return '<'+slash+node+'>';\n });\n return _.uniq(namespaces);\n }\n };\n\n return util;\n});\n\n","define('taoQtiItem/qtiItem/helper/rendererConfig',['lodash', 'jquery'], function(_, $){\n\n var rendererConfigHelper = {};\n\n rendererConfigHelper.getOptionsFromArguments = function(args){\n\n var options = {\n data : {},\n placeholder : null,\n subclass : '',\n renderer : null\n };\n \n _.each(args, function(arg){\n if(arg){\n if(arg.isRenderer){\n options.renderer = arg;\n }else if(arg instanceof $ && arg.length){\n options.placeholder = arg;\n }else if(_.isString(arg)){\n options.subclass = arg;\n }else if(_.isPlainObject(arg)){\n options.data = arg;\n }else{\n console.log('invalid arg', arg, args);\n }\n }\n });\n \n return options;\n };\n \n return rendererConfigHelper;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA\n *\n */\ndefine('taoQtiItem/qtiItem/core/Element',[\n 'jquery',\n 'lodash',\n 'class',\n 'core/logger',\n 'taoQtiItem/qtiItem/helper/util',\n 'taoQtiItem/qtiItem/helper/rendererConfig'\n], function($, _, Class, loggerFactory, util, rendererConfig){\n 'use strict';\n\n var _instances = {};\n\n /**\n * Create a logger\n */\n var logger = loggerFactory('taoQtiItem/qtiItem/core/Element');\n\n var Element = Class.extend({\n qtiClass : '',\n serial : '',\n rootElement : null,\n init : function(serial, attributes){\n\n //init own attributes\n this.attributes = {};\n\n //system properties, for item creator internal use only\n this.metaData = {};\n\n //init call in the format init(attributes)\n if(typeof (serial) === 'object'){\n attributes = serial;\n serial = '';\n }\n\n if(!serial){\n serial = util.buildSerial(this.qtiClass + '_');\n }\n\n if(serial && (typeof serial !== 'string' || !serial.match(/^[a-z_0-9]*$/i))){\n throw 'invalid QTI serial : (' + (typeof serial) + ') ' + serial;\n }\n\n if(!_instances[serial]){\n _instances[serial] = this;\n this.serial = serial;\n this.setAttributes(attributes || {});\n }else{\n throw 'a QTI Element with the same serial already exists ' + serial;\n }\n\n if(typeof this.initContainer === 'function'){\n this.initContainer(arguments[2] || '');\n }\n if(typeof this.initObject === 'function'){\n this.initObject();\n }\n },\n is : function(qtiClass){\n return (qtiClass === this.qtiClass);\n },\n placeholder : function(){\n return '{{' + this.serial + '}}';\n },\n getSerial : function(){\n return this.serial;\n },\n getUsedIdentifiers : function(){\n var usedIds = {};\n var elts = this.getComposingElements();\n for(var i in elts){\n var elt = elts[i];\n var id = elt.attr('identifier');\n if(id){\n //warning: simplistic implementation, allow only one unique identifier in the item no matter the element class/type\n usedIds[id] = elt;\n }\n }\n return usedIds;\n },\n\n /**\n * Get the ids in use. (id is different from identifier)\n * @returns {Array} of the ids in use\n */\n getUsedIds : function getUsedIds(){\n var usedIds = [];\n _.forEach(this.getComposingElements(), function(elt){\n var id = elt.attr('id');\n if(id && !_.contains(usedIds, id)){\n usedIds.push(id);\n }\n });\n return usedIds;\n },\n\n attr : function(name, value){\n if(name){\n if(value !== undefined){\n this.attributes[name] = value;\n }else{\n if(typeof (name) === 'object'){\n for(var prop in name){\n this.attr(prop, name[prop]);\n }\n }else if(typeof (name) === 'string'){\n if(this.attributes[name] === undefined){\n return undefined;\n }else{\n return this.attributes[name];\n }\n }\n }\n }\n return this;\n },\n data : function(name, value){\n if(name){\n if(value !== undefined){\n this.metaData[name] = value;\n $(document).trigger('metaChange.qti-widget', {element : this, key : name, value : value});\n }else{\n if(typeof (name) === 'object'){\n for(var prop in name){\n this.data(prop, name[prop]);\n }\n }else if(typeof (name) === 'string'){\n if(this.metaData[name] === undefined){\n return undefined;\n }else{\n return this.metaData[name];\n }\n }\n }\n }\n return this;\n },\n removeData : function(name){\n delete this.metaData[name];\n return this;\n },\n removeAttr : function(name){\n return this.removeAttributes(name);\n },\n setAttributes : function(attributes){\n if (!_.isPlainObject(attributes)) {\n logger.warn('attributes should be a plain object');\n }\n this.attributes = attributes;\n return this;\n },\n getAttributes : function(){\n return _.clone(this.attributes);\n },\n removeAttributes : function(attrNames){\n if(typeof (attrNames) === 'string'){\n attrNames = [attrNames];\n }\n for(var i in attrNames){\n delete this.attributes[attrNames[i]];\n }\n return this;\n },\n getComposingElements : function(){\n var elts = {};\n function append(element){\n elts[element.getSerial()] = element;//pass individual object by ref, instead of the whole list(object)\n elts = _.extend(elts, element.getComposingElements());\n }\n if(typeof this.initContainer === 'function'){\n append(this.getBody());\n }\n if(typeof this.initObject === 'function'){\n append(this.getObject());\n }\n _.each(this.metaData, function(v){\n if(Element.isA(v, '_container')){\n append(v);\n }else if(_.isArray(v)){\n _.each(v, function(v){\n if(Element.isA(v, '_container')){\n append(v);\n }\n });\n }\n });\n return elts;\n },\n getUsedClasses : function(){\n\n var ret = [this.qtiClass],\n composingElts = this.getComposingElements();\n\n _.each(composingElts, function(elt){\n ret.push(elt.qtiClass);\n });\n\n return _.uniq(ret);\n },\n find : function(serial){\n\n var found = null;\n var object,\n body;\n\n if(typeof this.initObject === 'function'){\n object = this.getObject();\n if(object.serial === serial){\n found = {'parent' : this, 'element' : object, 'location' : 'object'};\n }\n }\n\n if(!found && typeof this.initContainer === 'function'){\n body = this.getBody();\n if (body.serial === serial) {\n found = {'parent' : this, 'element' : body, 'location' : 'body'};\n } else {\n found = this.getBody().find(serial, this);\n }\n }\n\n return found;\n },\n parent : function(){\n var item = this.getRootElement();\n if(item){\n var found = item.find(this.getSerial());\n if(found){\n return found.parent;\n }\n }\n return null;\n },\n /**\n * @deprecated - use setRootElement() instead\n */\n setRelatedItem : function(item) {\n logger.warn('Deprecated use of setRelatedItem()');\n this.setRootElement(item);\n },\n setRootElement : function(item){\n var composingElts,\n i;\n\n if(Element.isA(item, 'assessmentItem')){\n this.rootElement = item;\n composingElts = this.getComposingElements();\n for(i in composingElts){\n composingElts[i].setRootElement(item);\n }\n }\n\n },\n /**\n * @deprecated - use getRootElement() instead\n */\n getRelatedItem : function(){\n logger.warn('Deprecated use of getRelatedItem()');\n return this.getRootElement();\n },\n getRootElement : function(){\n var ret = null;\n if(Element.isA(this.rootElement, 'assessmentItem')){\n ret = this.rootElement;\n }\n return ret;\n },\n setRenderer : function(renderer){\n if(renderer && renderer.isRenderer){\n this.renderer = renderer;\n var elts = this.getComposingElements();\n for(var serial in elts){\n elts[serial].setRenderer(renderer);\n }\n }else{\n throw 'invalid qti rendering engine';\n }\n },\n getRenderer : function(){\n return this.renderer;\n },\n /**\n * Render the element. Arguments are all optional and can be given in any order.\n * Argument parsing is based on argument type and is done by taoQtiItem/qtiItem/core/helpers/rendererConfig\n * @param {Renderer} renderer - specify which renderer to use\n * @param {jQuery} placeholder - DOM element that will be replaced by the rendered element\n * @param {Object} data - template data for the rendering\n * @param {String} subclass - subclass enables different behaviour of the same qti class in different contexts (eg. we could have different rendering for simpleChoice according to where it is being used: simpleChoice.orderInteraction, simpleChoice.choiceInteraction...)\n * @returns {String} - the rendered element as an HTML string\n */\n render : function render(){\n var args = rendererConfig.getOptionsFromArguments(arguments);\n var _renderer = args.renderer || this.getRenderer();\n var rendering;\n\n var tplData = {},\n defaultData = {\n 'tag' : this.qtiClass,\n 'serial' : this.serial,\n 'attributes' : this.getAttributes()\n };\n\n if(!_renderer){\n throw new Error('render: no renderer found for the element ' + this.qtiClass + ':' + this.serial);\n }\n\n if(typeof this.initContainer === 'function'){\n //allow body to have a different renderer if it has its own renderer set\n defaultData.body = this.getBody().render(args.renderer);\n }\n if(typeof this.initObject === 'function'){\n defaultData.object = {\n attributes : this.object.getAttributes()\n };\n defaultData.object.attributes.data = _renderer.resolveUrl(this.object.attr('data'));\n }\n\n tplData = _.merge(defaultData, args.data || {});\n tplData = _renderer.getData(this, tplData, args.subclass);\n rendering = _renderer.renderTpl(this, tplData, args.subclass);\n if(args.placeholder){\n args.placeholder.replaceWith(rendering);\n }\n\n return rendering;\n },\n postRender : function(data, altClassName, renderer){\n\n var postRenderers = [];\n var _renderer = renderer || this.getRenderer();\n\n if(typeof this.initContainer === 'function'){\n //allow body to have a different renderer if it has its own renderer set\n postRenderers = this.getBody().postRender(data, '', renderer);\n }\n\n if(_renderer){\n postRenderers.push(_renderer.postRender(this, data, altClassName));\n }else{\n throw 'postRender: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n\n return _.compact(postRenderers);\n },\n getContainer : function($scope, subclass){\n var renderer = this.getRenderer();\n if(renderer){\n return renderer.getContainer(this, $scope, subclass);\n }else{\n throw 'getContainer: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n },\n toArray : function(){\n var arr = {\n serial : this.serial,\n type : this.qtiClass,\n attributes : this.getAttributes()\n };\n\n if(typeof this.initContainer === 'function'){\n arr.body = this.getBody().toArray();\n }\n if(typeof this.initObject === 'function'){\n arr.object = this.object.toArray();\n }\n\n return arr;\n },\n isEmpty : function(){\n //tells whether the element should be considered empty or not, from the rendering point of view\n return false;\n },\n addClass : function(className){\n var clazz = this.attr('class') || '';\n if(!_containClass(clazz, className)){\n this.attr('class', clazz + (clazz.length ? ' ' : '') + className);\n }\n },\n hasClass : function(className){\n return _containClass(this.attr('class'), className);\n },\n removeClass : function(className){\n\n var clazz = this.attr('class') || '';\n if(clazz){\n\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)');\n clazz = clazz.replace(regex, ' ').trim();\n\n if(clazz){\n this.attr('class', clazz);\n }else{\n this.removeAttr('class');\n }\n }\n },\n /**\n * Add or remove class. Setting the optional state will force addition/removal.\n * State is here to keep the jQuery syntax\n *\n * @param {String} className\n * @param {Boolean} [state]\n */\n toggleClass : function(className, state) {\n\n if(typeof state === 'boolean') {\n return state ? this.addClass(className) : this.removeClass(className);\n }\n\n if(this.hasClass(className)) {\n return this.removeClass(className);\n }\n return this.addClass(className);\n },\n isset : function(){\n return Element.issetElement(this.serial);\n },\n unset : function(){\n return Element.unsetElement(this.serial);\n }\n });\n\n var _containClass = function(allClassStr, className){\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)', '');\n return allClassStr && regex.test(allClassStr);\n };\n\n //helpers\n Element.isA = function(qtiElement, qtiClass){\n return (qtiElement instanceof Element && qtiElement.is(qtiClass));\n };\n\n Element.getElementBySerial = function(serial){\n return _instances[serial];\n };\n\n Element.issetElement = function(serial){\n return !!_instances[serial];\n };\n\n /**\n * Unset a registered element from it's serial\n * @param {String} serial - the element serial\n * @returns {Boolean} true if unset\n */\n Element.unsetElement = function(serial){\n\n var element = Element.getElementBySerial(serial);\n\n if(element){\n\n var composingElements = element.getComposingElements();\n _.each(composingElements, function(elt){\n delete _instances[elt.serial];\n });\n delete _instances[element.serial];\n\n return true;\n }\n return false;\n };\n\n return Element;\n});\n\n\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA\n */\n\n/**\n * XML namespace handling\n */\ndefine('taoQtiItem/qtiItem/helper/xmlNsHandler',[], function(){\n 'use strict';\n\n /**\n * Elements that need to be prefixed\n *\n * @see http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd\n * @type {string}\n */\n var prefixed = 'article|aside|bdi|figure|footer|header|nav|rb|rp|rt|rtc|ruby|section';\n\n\n /**\n * Find a possibly existing prefix\n *\n * @param namespaces\n * @param html5Ns\n * @returns {*}\n */\n function getPrefix(namespaces, html5Ns) {\n var key;\n for(key in namespaces) {\n if(namespaces[key] === html5Ns) {\n return key;\n }\n }\n return 'qh5';\n }\n\n return {\n\n /**\n * Remove prefix to make sure elements are properly displayed\n *\n * @param body\n */\n stripNs : function stripNs(body) {\n var pattern = '([\\\\w]+)\\\\:(' + prefixed + ')';\n var openRegEx = new RegExp('(<' + pattern + ')', 'gi');\n var closeRegEx = new RegExp('(<\\\\/' + pattern + '>)', 'gi');\n return body.replace(openRegEx, '<$3').replace(closeRegEx, '$3>');\n },\n\n /**\n * Add a prefix to those elements that require one\n *\n * @param xml\n * @param namespaces\n * @returns {*}\n */\n restoreNs : function restoreNs(xml, namespaces) {\n var xmlRe = new RegExp('(<(' + prefixed + ')[^>]*>|<\\\\/(' + prefixed + ')>)', 'gi');\n var tagRe = new RegExp('((<)(' + prefixed + ')([^>]*)(>)|(<\\\\/)(' + prefixed + ')(>))', 'i');\n var xmlMatch = xml.match(xmlRe);\n var imsXsd = 'http://www.imsglobal.org/xsd';\n var html5Ns = imsXsd + '/imsqtiv2p2_html5_v1p0';\n var prefix = getPrefix(namespaces, html5Ns);\n var prefixAtt = 'xmlns:' + prefix + '=\"' + html5Ns + '\"';\n var i = xmlMatch ? xmlMatch.length : 0;\n var tagMatch;\n\n if(!xmlMatch) {\n return xml;\n }\n\n while(i--) {\n tagMatch = xmlMatch[i].match(tagRe);\n xml = xml.replace(xmlMatch[i],\n tagMatch[5]\n ? '<' + prefix + ':' + tagMatch[3] + tagMatch[4] + '>'\n : '' + prefix + ':' + tagMatch[7] + '>'\n );\n }\n\n // we found matches but no namespace has been set\n if(xmlMatch.length && xml.indexOf(prefixAtt) === -1) {\n xml = xml.replace('\n * @author Bertrand Chevrier \n */\ndefine('taoQtiItem/qtiRunner/core/Renderer',[\n 'lodash',\n 'jquery',\n 'handlebars',\n 'core/promise',\n 'taoQtiItem/qtiItem/core/Element',\n 'taoQtiItem/qtiItem/helper/interactionHelper',\n 'ui/themeLoader'\n], function(_, $, Handlebars, Promise, Element, interactionHelper, themeLoader){\n 'use strict';\n\n var _isValidRenderer = function(renderer){\n\n var valid = true;\n\n if(typeof (renderer) !== 'object'){\n return false;\n }\n\n var classCorrect = false;\n if(renderer.qtiClass){\n if(_.indexOf(_renderableClasses, renderer.qtiClass) >= 0){\n classCorrect = true;\n }else{\n var pos = renderer.qtiClass.indexOf('.');\n if(pos > 0){\n var qtiClass = renderer.qtiClass.slice(0, pos);\n var subClass = renderer.qtiClass.slice(pos + 1);\n if(_renderableSubclasses[qtiClass] && _.indexOf(_renderableSubclasses[qtiClass], subClass) >= 0){\n classCorrect = true;\n }\n }\n }\n }\n if(!classCorrect){\n valid = false;\n throw new Error('invalid qti class name in renderer declaration : ' + renderer.qtiClass);\n }\n\n if(!renderer.template){\n valid = false;\n throw new Error('missing template in renderer declaration : ' + renderer.qtiClass);\n }\n\n return valid;\n };\n\n var _renderableClasses = [\n '_container',\n 'assessmentItem',\n 'stylesheet',\n 'responseDeclaration',\n 'outcomeDeclaration',\n 'responseProcessing',\n '_simpleFeedbackRule',\n '_tooltip',\n 'img',\n 'math',\n 'object',\n 'table',\n 'modalFeedback',\n 'rubricBlock',\n 'associateInteraction',\n 'choiceInteraction',\n 'extendedTextInteraction',\n 'gapMatchInteraction',\n 'graphicAssociateInteraction',\n 'graphicGapMatchInteraction',\n 'graphicOrderInteraction',\n 'hotspotInteraction',\n 'hottextInteraction',\n 'inlineChoiceInteraction',\n 'matchInteraction',\n 'mediaInteraction',\n 'orderInteraction',\n 'selectPointInteraction',\n 'sliderInteraction',\n 'textEntryInteraction',\n 'uploadInteraction',\n 'endAttemptInteraction',\n 'customInteraction',\n 'prompt',\n 'associableHotspot',\n 'gap',\n 'gapImg',\n 'gapText',\n 'hotspotChoice',\n 'hottext',\n 'inlineChoice',\n 'simpleAssociableChoice',\n 'simpleChoice',\n 'infoControl',\n 'include',\n 'printedVariable'\n ];\n\n /**\n * The list of qti element dependencies. It is used internally to load dependent qti classes\n */\n var _dependencies = {\n assessmentItem : ['stylesheet', '_container', 'prompt', 'modalFeedback'],\n rubricBlock : ['_container'],\n associateInteraction : ['simpleAssociableChoice'],\n choiceInteraction : ['simpleChoice'],\n gapMatchInteraction : ['gap', 'gapText'],\n graphicAssociateInteraction : ['associableHotspot'],\n graphicGapMatchInteraction : ['associableHotspot', 'gapImg'],\n graphicOrderInteraction : ['hotspotChoice'],\n hotspotInteraction : ['hotspotChoice'],\n hottextInteraction : ['hottext'],\n inlineChoiceInteraction : ['inlineChoice'],\n matchInteraction : ['simpleAssociableChoice'],\n orderInteraction : ['simpleChoice']\n };\n\n /**\n * The list of supported qti subclasses.\n */\n var _renderableSubclasses = {\n 'simpleAssociableChoice' : ['associateInteraction', 'matchInteraction'],\n 'simpleChoice' : ['choiceInteraction', 'orderInteraction']\n };\n\n /**\n * List of the default properties for the item\n */\n var _defaults = {\n shuffleChoices : true\n };\n\n /**\n * Get the location of the document, useful to define a baseUrl for the required context\n * @returns {String}\n */\n function getDocumentBaseUrl(){\n return window.location.protocol + '//' + window.location.host + window.location.pathname.replace(/([^\\/]*)$/, '');\n }\n\n /**\n * The built Renderer class\n * @constructor\n * @param {Object} [options] - the renderer options\n * @param {AssetManager} [options.assetManager] - The renderer needs an AssetManager to resolve URLs (see {@link taoItems/assets/manager})\n * @param {Boolean} [options.shuffleChoices = true] - Does the renderer take care of the shuffling\n * @param {Object} [options.decorators] - to set up rendering decorator\n * @param {preRenderDecorator} [options.decorators.before] - to set up a pre decorator\n * @param {postRenderDecorator} [options.decorators.after] - to set up a post decorator\n */\n var Renderer = function(options){\n\n /**\n * Store the registered renderer location\n */\n var _locations = {};\n\n /**\n * Store loaded renderers\n */\n var _renderers = {};\n\n options = _.defaults(options || {}, _defaults);\n\n this.isRenderer = true;\n\n this.name = '';\n\n //store shuffled choice here\n this.shuffledChoices = [];\n\n /**\n * Get the actual renderer of the give qti class or subclass:\n * e.g. simplceChoice, simpleChoice.choiceInteraction, simpleChoice.orderInteraction\n */\n var _getClassRenderer = function(qtiClass){\n var ret = null;\n if(_renderers[qtiClass]){\n ret = _renderers[qtiClass];\n }else{\n var pos = qtiClass.indexOf('.');\n if(pos > 0){\n qtiClass = qtiClass.slice(0, pos);\n if(_renderers[qtiClass]){\n ret = _renderers[qtiClass];\n }\n }\n }\n return ret;\n };\n\n /**\n * Registers a QTI renderer class\n * @param {String} qtiClass\n * @param {Array} list\n * @returns {Boolean} `true` if the class has been successfully registered\n */\n function registerRendererClass(qtiClass, list) {\n var success = false;\n if (_locations[qtiClass] === false) {\n //mark this class as not renderable\n _renderers[qtiClass] = false;\n success = true;\n } else if (_locations[qtiClass]) {\n list.push(_locations[qtiClass]);\n success = true;\n }\n return success;\n }\n\n /**\n * Set the renderer options\n * @param {String} key - the name of the option\n * @param {*} value - the option vallue\n * @returns {Renderer} for chaining\n */\n this.setOption = function(key, value){\n if(typeof (key) === 'string'){\n options[key] = value;\n }\n return this;\n };\n\n /**\n * Set the renderer options\n * @param {Object} opts - the options\n * @returns {Renderer} for chaining\n */\n this.setOptions = function(opts){\n options = _.extend(options, opts);\n return this;\n };\n\n /**\n * Get the renderer option\n * @param {String} key - the name of the option\n * @returns {*|null} the option vallue\n */\n this.getOption = function(key){\n if(typeof (key) === 'string' && options[key]){\n return options[key];\n }\n return null;\n };\n\n this.getCustomMessage = function getCustomMessage(elementName, messageKey){\n var messages = this.getOption('messages');\n if(messages &&\n elementName &&\n messages[elementName] &&\n _.isString(messages[elementName][messageKey])){\n //currently not translatable but potentially could be if the need raises\n return Handlebars.compile(messages[elementName][messageKey]);\n }else{\n return null;\n }\n };\n\n /**\n * Get the bound assetManager\n * @returns {AssetManager} the assetManager\n */\n this.getAssetManager = function getAssetManager(){\n return options.assetManager;\n };\n\n /**\n * Get the bound theme loader\n * @returns {Object} the themeLoader\n */\n this.getThemeLoader = function getThemeLoader(){\n return this.themeLoader;\n };\n\n\n /**\n * Renders the template\n * @param {Object} element - the QTI model element\n * @param {Object} data - the data to give to the template\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the template results\n * @throws {Error} if the renderer is not set or has no template bound\n */\n this.renderTpl = function(element, data, qtiSubclass){\n\n var res;\n var ret = '';\n var tplFound = false;\n var qtiClass = qtiSubclass || element.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n var decorators = this.getOption('decorators');\n\n if(!renderer || !_.isFunction(renderer.template)){\n throw new Error('no renderer template loaded under the class name : ' + qtiClass);\n }\n\n //pre rendering decoration\n if(_.isObject(decorators) && _.isFunction(decorators.before)){\n\n /**\n * @callback preRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.before(element, qtiSubclass);\n if(_.isString(res)){\n ret += res;\n }\n }\n\n //render the template\n ret += renderer.template(data);\n\n\n //post rendering decoration\n if(_.isObject(decorators) && _.isFunction(decorators.after)){\n\n /**\n * @callback postRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.after(element, qtiSubclass);\n if(_.isString(res)){\n ret += res;\n }\n }\n return ret;\n };\n\n this.getData = function(element, data, qtiSubclass){\n\n var ret = data,\n qtiClass = qtiSubclass || element.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(typeof (renderer.getData) === 'function'){\n ret = renderer.getData.call(this, element, data);\n }\n }\n\n return ret;\n };\n\n this.renderDirect = function(tpl, data){\n return Handlebars.compile(tpl)(data);\n };\n\n this.getContainer = function(qtiElement, $scope, qtiSubclass){\n\n var ret = null,\n qtiClass = qtiSubclass || qtiElement.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n ret = renderer.getContainer(qtiElement, $scope);\n }else{\n throw 'no renderer found for the class : ' + qtiElement.qtiClass;\n }\n return ret;\n };\n\n this.postRender = function(qtiElement, data, qtiSubclass){\n\n var qtiClass = qtiSubclass || qtiElement.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if(renderer && typeof (renderer.render) === 'function') {\n return renderer.render.call(this, qtiElement, data);\n }\n };\n\n this.setResponse = function(qtiInteraction, response, qtiSubclass){\n\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(typeof (renderer.setResponse) === 'function'){\n ret = renderer.setResponse.call(this, qtiInteraction, response);\n var $container = renderer.getContainer.call(this, qtiInteraction);\n if($container instanceof $ && $container.length){\n $container.trigger('responseSet', [qtiInteraction, response]);\n }\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getResponse = function(qtiInteraction, qtiSubclass){\n\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(typeof (renderer.getResponse) === 'function'){\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.resetResponse = function(qtiInteraction, qtiSubclass){\n\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(typeof (renderer.resetResponse) === 'function'){\n ret = renderer.resetResponse.call(this, qtiInteraction);\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n * @returns {Object} the interaction's state\n *\n * @throws {Error} if no renderer is registered\n */\n this.getState = function(qtiInteraction, qtiSubclass){\n\n var ret = false;\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(_.isFunction(renderer.getState)){\n ret = renderer.getState.call(this, qtiInteraction);\n } else {\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {Object} state - the interaction's state\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n *\n * @throws {Error} if no renderer is found\n */\n this.setState = function(qtiInteraction, state, qtiSubclass){\n\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(_.isFunction(renderer.setState)){\n renderer.setState.call(this, qtiInteraction, state);\n } else {\n renderer.resetResponse.call(this, qtiInteraction);\n renderer.setResponse.call(this, qtiInteraction, state);\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n };\n\n /**\n * Calls the renderer destroy.\n * Ask the renderer to run destroy if exists.\n *\n * @throws {Error} if no renderer is found\n */\n this.destroy = function(qtiInteraction, qtiSubclass){\n\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if(renderer){\n if(_.isFunction(renderer.destroy)){\n ret = renderer.destroy.call(this, qtiInteraction);\n }\n }else{\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getLoadedRenderers = function(){\n return _renderers;\n };\n\n this.register = function(renderersLocations){\n _.extend(_locations, renderersLocations);\n };\n\n this.load = function(callback, requiredClasses){\n var self = this;\n var required = [];\n\n if(options.themes){\n\n //resolve themes paths\n options.themes.base = this.resolveUrl(options.themes.base);\n _.forEach(options.themes.available, function(theme, index){\n options.themes.available[index].path = self.resolveUrl(theme.path);\n });\n this.themeLoader = themeLoader(options.themes).load();\n }\n\n if(requiredClasses){\n if(_.isArray(requiredClasses)){\n\n //exclude abstract classes\n requiredClasses = _.intersection(requiredClasses, _renderableClasses);\n\n //add dependencies\n _.each(requiredClasses, function(reqClass){\n var deps = _dependencies[reqClass];\n if(deps){\n requiredClasses = _.union(requiredClasses, deps);\n }\n });\n\n _.forEach(requiredClasses, function(qtiClass){\n\n if(_renderableSubclasses[qtiClass]){\n var requiredSubClasses = _.intersection(requiredClasses, _renderableSubclasses[qtiClass]);\n _.each(requiredSubClasses, function(subclass){\n if (!registerRendererClass(qtiClass + '.' + subclass, required) && !registerRendererClass(qtiClass, required)) {\n throw new Error(self.name + ' : missing qti class location declaration: ' + qtiClass + ', subclass: ' + subclass);\n }\n });\n } else {\n if (!registerRendererClass(qtiClass, required)) {\n throw new Error(self.name + ' : missing qti class location declaration: ' + qtiClass);\n }\n }\n });\n } else {\n throw new Error('invalid argument type: expected array for arg \"requireClasses\"');\n }\n\n }else{\n required = _.values(_locations);\n }\n\n var _this = this;\n require(required, function(){\n\n _.each(arguments, function(clazz){\n if(_isValidRenderer(clazz)){\n _renderers[clazz.qtiClass] = clazz;\n }\n });\n\n if(typeof (callback) === 'function'){\n callback.call(_this, _renderers);\n }\n });\n\n return this;\n };\n\n /**\n * Unload the renderer\n */\n this.unload = function unload(){\n if(this.themeLoader){\n themeLoader(options.themes).unload();\n }\n return this;\n };\n\n /**\n * Define the shuffling manually\n *\n * @param {Object} interaction - the interaction\n * @param {Array} choices - the shuffled choices\n * @param {String} identificationType -\n */\n this.setShuffledChoices = function(interaction, choices, identificationType){\n if(Element.isA(interaction, 'interaction')){\n this.shuffledChoices[interaction.getSerial()] = _.pluck(interactionHelper.findChoices(interaction, choices, identificationType), 'serial');\n }\n };\n\n /**\n * Get the choices shuffled for this interaction.\n *\n * @param {Object} interaction - the interaction\n * @param {Boolean} reshuffle - by default choices are shuffled only once and store, but if true you can force shuffling again\n * @param {String} returnedType - the choice type\n * @returns {Array} the choices\n */\n this.getShuffledChoices = function(interaction, reshuffle, returnedType){\n var choices = [];\n var shuffled = [];\n var serial, i;\n\n if(Element.isA(interaction, 'interaction')){\n serial = interaction.getSerial();\n\n //1st time, we shuffle (or asked to force shuffling)\n if(!this.shuffledChoices[serial] || reshuffle){\n if(Element.isA(interaction, 'matchInteraction')){\n this.shuffledChoices[serial] = [];\n for(i = 0; i < 2; i++){\n choices[i] = interactionHelper.shuffleChoices(interaction.getChoices(i));\n this.shuffledChoices[serial][i] = _.pluck(choices[i], 'serial');\n }\n } else {\n choices = interactionHelper.shuffleChoices(interaction.getChoices());\n this.shuffledChoices[serial] = _.pluck(choices, 'serial');\n }\n\n //otherwise get the choices from the serials\n } else {\n if(Element.isA(interaction, 'matchInteraction')){\n _.forEach(choices, function(choice, index){\n if(index < 2){\n _.forEach(this.shuffledChoices[serial][i], function(choiceSerial){\n choice.push(interaction.getChoice(choiceSerial));\n });\n }\n });\n } else {\n _.forEach(this.shuffledChoices[serial], function(choiceSerial){\n choices.push(interaction.getChoice(choiceSerial));\n });\n }\n }\n\n //do some type convertion\n if(returnedType === 'serial' || returnedType === 'identifier'){\n return interactionHelper.convertChoices(choices, returnedType);\n }\n\n //pass value only, not ref\n return _.clone(choices);\n }\n\n return [];\n };\n\n this.getRenderers = function(){\n return _renderers;\n };\n\n this.getLocations = function(){\n return _locations;\n };\n\n /**\n * Resolve URLs using the defined assetManager's strategies\n * @param {String} url - the URL to resolve\n * @returns {String} the resolved URL\n */\n this.resolveUrl = function resolveUrl(url){\n if(!options.assetManager){\n return url;\n }\n if(typeof url === 'string' && url.length > 0){\n return options.assetManager.resolve(url);\n }\n };\n\n /**\n * @deprecated in favor of resolveUrl\n */\n this.getAbsoluteUrl = function(relUrl){\n\n //let until method is removed\n console.warn('DEPRECATED used getAbsoluteUrl with ', arguments);\n\n //allow relative url output only if explicitely said so\n if(this.getOption('userRelativeUrl')){\n return relUrl.replace(/^\\.?\\//, '');\n }\n\n if(/^http(s)?:\\/\\//i.test(relUrl) || /^data:[^\\/]+\\/[^;]+(;charset=[\\w]+)?;base64,/.test(relUrl)){\n //already absolute or base64 encoded\n return relUrl;\n }else{\n\n var absUrl = '';\n var runtimeLocations = this.getOption('runtimeLocations');\n\n if(runtimeLocations && _.size(runtimeLocations)){\n _.forIn(runtimeLocations, function(runtimeLocation, typeIdentifier){\n if(relUrl.indexOf(typeIdentifier) === 0){\n absUrl = relUrl.replace(typeIdentifier, runtimeLocation);\n return false;//break\n }\n });\n }\n\n if(absUrl){\n return absUrl;\n }else{\n var baseUrl = this.getOption('baseUrl') || getDocumentBaseUrl();\n return baseUrl + relUrl;\n }\n\n }\n };\n\n this.setAreaBroker = function setAreaBroker(areaBroker) {\n this._areaBroker = areaBroker;\n };\n\n this.getAreaBroker = function getAreaBroker() {\n if (this._areaBroker) {\n return this._areaBroker;\n }\n };\n\n this.getItemCreator = function getItemCreator() {\n return this.getOption('itemCreator');\n };\n };\n\n /**\n * Expose the renderer's factory\n * @exports taoQtiItem/qtiRunner/core/Renderer\n */\n return {\n\n /**\n * Creates a new Renderer by extending the Renderer's prototype\n * @param {Object} renderersLocations -\n * @param {String} [name] - the new renderer name\n * @param {Object} [defaultOptions] - the renderer options\n */\n build : function(renderersLocations, name, defaultOptions){\n var NewRenderer = function(){\n var options = _.isPlainObject(arguments[0]) ? arguments[0] : {};\n\n Renderer.apply(this);\n\n this.register(renderersLocations);\n this.name = name || '';\n this.setOptions(_.defaults(options, defaultOptions || {}));\n };\n NewRenderer.prototype = Renderer.prototype;\n return NewRenderer;\n }\n };\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015-2017 (original work) Open Assessment Technologies SA;\n *\n */\n\n/**\n * The asset manager proposes you to resolve your asset URLs for you!\n * You need to add the resolution strategies, it will then evaluate each strategy until the right one is found\n *\n * @author Bertrand Chevrier \n */\ndefine('taoItems/assets/manager',[\n 'lodash',\n 'util/url'\n], function(_, urlUtil){\n 'use strict';\n\n /**\n * @typedef AssetStrategy Defines a way to resolve an asset path\n * @property {String} name - the strategy name\n * @property {assetStrategyHandle} handle - how to resolve the strategy.\n */\n\n /**\n * @callback assetStrategyHandle\n * @param {String|Object} url - the URL to resolved. If parseUrl, it's an object that contains host, port, search, queryString, etc.\n * @param {Object} data - the context data\n * @returns {String?} falsy if not resolved otherwise the resolved URL\n */\n\n /**\n * Check if the given object is a valid AssetStrategy\n * @param {AssetStrategy} strategy\n * @throws {TypeError}\n */\n var checkStrategy = function checkStrategy(strategy){\n if(!_.isPlainObject(strategy) || !_.isFunction(strategy.handle) || !_.isString(strategy.name)){\n throw new TypeError('An asset resolution strategy is an object with a handle method and a name');\n }\n };\n\n /**\n * The assetManagerFactory create a new assetManager with the given resolution strategies and a data context.\n *\n * @example\n * //define AssetStrategies with a name and a handle method\n * var strategies = [{\n * name : 'external',\n * handle : function(url, data){\n * if(/^http/.test(url)){\n * return path;\n * }\n * }\n * }, {\n * name : 'relative',\n * handle : function(url, data){\n * if(/^((\\.\\/)|(\\w\\/))/){\n * return data.baseUrl + '/' + url ;\n * }\n * }\n * }]);\n *\n * var assetManager = assetManagerFactory(strategies, { baseUrl : 'http://t.oa/public/assets/' });\n * assetManager.resolve('http://foo/bar.png'); //will resolved using external\n * assetManager.resolve('bar.png'); //will resolved using relative strategy\n *\n * @param {AssetStrategy[]} strategies - the strategies\n * @param {Object} data - the context data\n * @param {Object} [options] - the manager options\n * @param {Boolean} [options.parseUrl = true] - If the URL to give to the strategies should be parsed or given as it is.\n * @param {Boolean} [options.cache] - resolve the same URL only once and store the result in memory.\n *\n * @exports taoItems/assets/manager\n * @namespace assetManagerFactory\n */\n var assetManagerFactory = function assetManagerFactory(strategies, data, options) {\n\n var cache = {};\n\n strategies = _.isArray(strategies) ? strategies : [strategies];\n data = data || {};\n options = _.defaults(options || {}, {\n parseUrl : true\n });\n\n /**\n * A brand new asset manager is created by the factory\n */\n var assetManager = {\n\n /**\n * The stack of strategies that would be used to resolve the asset path\n * @type {AssetStrategy[]}\n */\n _strategies : [],\n\n /**\n * Add an asset resolution strategy at the end of the stack.\n * The strategies will be evaluated in the order they've been added.\n * @param {AssetStrategy} strategy - the strategy to add\n * @throws {TypeError} if the strategy isn't defined correctly\n */\n addStrategy : function addStrategy (strategy){\n\n checkStrategy(strategy);\n\n this._strategies.push(strategy);\n },\n\n /**\n * Add an asset resolution strategy at the beginning of the stack.\n * The strategies will be evaluated in the order they've been added.\n * @param {AssetStrategy} strategy - the strategy to add\n * @throws {TypeError} if the strategy isn't defined correctly\n */\n prependStrategy : function prependStrategy(strategy){\n\n checkStrategy(strategy);\n\n this._strategies.unshift(strategy);\n },\n\n /**\n * Change the strategies\n * @param {AssetStrategy[]} strategies - the strategies\n * @throws {TypeError} if the strategy isn't defined correctly\n */\n setStrategies : function setStrategies(newStrategies){\n var self = this;\n\n this._strategies = [];\n\n //assign the strategies to the assetManager\n _.forEach(newStrategies, function(strategy){\n\n //if it's an object we add it directly\n if(_.isPlainObject(strategy)){\n assetManager.addStrategy(strategy);\n\n //if it's a function, we create the strategy with a generated name\n } else if(_.isFunction(strategy)){\n self.addStrategy({\n name : 'strategy_' + (self._strategies.length + 1),\n handle : strategy\n });\n }\n });\n },\n\n /**\n * Set context data\n * @param {String|Object} [key] - the key of the data to set or the data values if it's an object\n * @param {*} [value] - the value to set if a key is given\n */\n setData : function setData(key, value){\n if(_.isString(key) && typeof value !== 'undefined'){\n data[key] = value;\n } else if(_.isPlainObject(key)){\n data = key;\n }\n },\n\n /**\n * Get context data\n * @param {String} [key] - if we want the value of a particular key\n * @returns {Object|*} all the data or the propriety value if key is given\n */\n getData : function getData(key){\n if(_.isString(key)){\n return data[key];\n }\n return data;\n },\n\n /**\n * Resolve the given URL against the strategies\n * @param {String} url - the URL to resolve\n * @returns {String?} the resolved URL or nothing\n */\n resolve : function resolve(url){\n var resolved;\n var inputUrl;\n\n //if caching try to load the value from the cache\n if(options.cache && cache.hasOwnProperty(url)){\n return cache[url];\n }\n\n //parse the URL ?\n inputUrl = options.parseUrl ? urlUtil.parse(url) : url;\n\n //call strategies handlers, in their order until once returns something\n _.forEach(this._strategies, function(strategy){\n var result = strategy.handle(inputUrl, data);\n if(result){\n resolved = result;\n return false;\n }\n });\n\n resolved = resolved || '';\n\n if(options.cache){\n cache[url] = resolved;\n }\n\n return resolved;\n },\n\n /**\n * Resolve the given URL against the strategy identified by the given name\n * @param {String} name - the strategy name\n * @param {String} url - the URL to resolve\n * @returns {String?} the resolved URL or nothing\n */\n resolveBy : function resolveBy(name, url){\n var inputUrl;\n var resolved = '';\n var strategy = _.find(this._strategies, {name : name});\n if(strategy){\n //parse the URL ?\n inputUrl = options.parseUrl ? urlUtil.parse(url) : url;\n resolved = strategy.handle(inputUrl, data);\n }\n return resolved;\n },\n\n /**\n * When the cache is used, it could be useful to clear the cache\n */\n clearCache : function clearCache(){\n if(options.cache){\n cache = {};\n }\n }\n };\n\n assetManager.setStrategies(strategies);\n\n return assetManager;\n };\n\n return assetManagerFactory;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA;\n *\n */\n\n/**\n * Provides common strategies to resolved assets\n * that may be used by any type of items.\n *\n * @author Bertrand Chevrier \n */\ndefine('taoItems/assets/strategies',[\n 'util/url'\n], function(urlUtil){\n 'use strict';\n\n /**\n * Prepend a base to an URL\n * @param {Object} url - a parsed URL\n * @param {String} base - the base to prepend\n * @param {Boolean} [slashcat = false] - remove dots, double slashes, etc.\n * @returns {String} the URL\n */\n var prependToUrl = function prependToUrl(url, base, slashcat){\n\n //is slashcat we manage slash concact\n if(slashcat === true){\n return base.replace(/\\/$/, '') + '/' + url.directory.replace(/^\\.\\//, '').replace(/^\\//, '')\n + encodeURIComponent(url.file.replace(/^\\.\\//, '').replace(/^\\//, ''));\n }\n\n return base + url.directory.replace(/^\\.?\\//, '') + encodeURIComponent(url.file.replace(/^\\.?\\//, ''));\n };\n\n /**\n * Unrelated strategies accessible by there name.\n * Remember to not use the whole object, but each one in an array since the order matters.\n *\n * @exports taoItems/assets/strategies\n */\n var strategies = {\n\n //the baseUrl concats the baseUrl in data if the url is relative\n baseUrl : {\n name : 'baseUrl',\n handle : function handleBaseUrl(url, data){\n if(typeof data.baseUrl === 'string' && (urlUtil.isRelative(url)) ){\n return prependToUrl(url, data.baseUrl, data.slashcat);\n }\n }\n },\n\n //bust the cache for item CSS\n itemCssNoCache : {\n name : 'itemCssNoCache',\n handle : function handleItemCss(url, data){\n if(typeof data.baseUrl === 'string' && (urlUtil.isRelative(url)) && /\\.css$/.test(url.file)) {\n return urlUtil.build(prependToUrl(url, data.baseUrl, data.slashcat), { bust : Date.now() });\n }\n }\n },\n\n //absolute URL are just left intact\n external : {\n name : 'external',\n handle : function handleExternal(url){\n if(urlUtil.isAbsolute(url)){\n return url.toString();\n }\n }\n },\n\n //the base64 encoded resources are also left intact\n base64 : {\n name : 'base64',\n handle : function handleB64(url){\n if(urlUtil.isBase64(url)){\n return url.toString();\n }\n }\n },\n\n //special tao media protocol\n taomedia : {\n name : 'taomedia',\n handle : function handleTaoMedia(url, data){\n //either a baseUrl is given or if empty, taomedia resources are managed as relative resources\n var baseUrl = data.baseUrl || './';\n if( (typeof url === 'object' && url.protocol === 'taomedia') ||\n (/^taomedia:\\/\\//.test(url.toString())) ){\n return baseUrl + url.toString();\n }\n }\n }\n };\n return strategies;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\ndefine('taoQtiItem/portableElementRegistry/factory/factory',['lodash', 'core/promise', 'core/eventifier'], function (_, Promise, eventifier){\n 'use strict';\n\n var _requirejs = window.require;\n var _defaultLoadingOptions = {\n reload: false,\n enabledOnly : false,\n runtimeOnly : []\n };\n\n var loadModuleConfig = function loadModuleConfig(manifest){\n return new Promise(function(resolve, reject){\n var requireConfigAliases = {};\n var baseUrl;\n var reqConfigs = [];\n var modules = {};\n\n if(!manifest || !manifest.runtime){\n return reject('invalid manifest');\n }\n\n baseUrl = manifest.baseUrl;\n\n if(_.isArray(manifest.runtime.config) && manifest.runtime.config.length){\n _.forEach(manifest.runtime.config, function(pciConfig){\n if(_.isString(pciConfig)){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig);\n }else{\n if(pciConfig.data){\n modules = _.defaults(modules, pciConfig.data.paths || {});\n }else if(pciConfig.file){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig.file);\n }\n }\n });\n }\n\n require(reqConfigs, function(){\n\n var runtimeModules = {};\n\n requireConfigAliases[manifest.typeIdentifier] = baseUrl;\n\n if(manifest.model === 'IMSPCI'){\n\n modules = _.reduce(arguments, function(acc, conf){\n return _.defaults(acc, conf.paths || {});\n }, modules);\n\n _.forEach(manifest.runtime.modules || {}, function(paths, id){\n if(paths && (_.isString(paths) || (_.isArray(paths) && paths.length))){\n runtimeModules[id] = paths;\n }\n });\n\n modules = _.merge(modules, runtimeModules);\n\n _.forEach(modules, function(paths, id){\n paths = _.isArray(paths) ? paths : [paths];\n requireConfigAliases[id] = _.map(paths, function(path){\n return baseUrl+'/'+path.replace(/\\.js$/, '');\n });\n });\n }\n\n resolve(requireConfigAliases);\n\n }, reject);\n\n\n });\n };\n\n return function portableElementRegistry(methods){\n\n var _loaded = false;\n var __providers = {};\n\n return eventifier(_.defaults(methods || {}, {\n _registry : {},\n get : function get(typeIdentifier, version){\n\n if(this._registry[typeIdentifier]){\n //check version\n if(version){\n return _.find(this._registry[typeIdentifier], version);\n }else{\n //latest\n return _.last(this._registry[typeIdentifier]);\n }\n }\n },\n registerProvider : function registerProvider(moduleName){\n __providers[moduleName] = null;\n return this;\n },\n resetProviders : function resetProviders(){\n __providers = {};\n return this;\n },\n loadProviders : function loadProviders(){\n var self = this;\n return new Promise(function(resolve, reject) {\n var providerLoadingStack = [];\n _.forIn(__providers, function(provider, id){\n if(provider === null){\n providerLoadingStack.push(id);\n }\n });\n _requirejs(providerLoadingStack, function(){\n _.each([].slice.call(arguments), function(provider){\n if(provider && _.isFunction(provider.load)){\n __providers[providerLoadingStack.shift()] = provider;\n }\n });\n resolve();\n self.trigger('providersloaded');\n }, reject);\n });\n },\n getAllVersions : function getAllVersions(){\n var all = {};\n _.forIn(this._registry, function (versions, id){\n all[id] = _.map(versions, 'version');\n });\n return all;\n },\n getRuntime : function getRuntime(typeIdentifier, version){\n var pci = this.get(typeIdentifier, version);\n if(pci){\n return _.assign(pci.runtime, {\n id : pci.typeIdentifier,\n label : pci.label,\n baseUrl : pci.baseUrl,\n model : pci.model\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n getCreator : function getCreator(typeIdentifier, version){\n var pci = this.get(typeIdentifier, version);\n if(pci && pci.creator){\n return _.assign(pci.creator, {\n id : pci.typeIdentifier,\n label : pci.label,\n baseUrl : pci.baseUrl,\n response : pci.response,\n model : pci.model,\n xmlns : pci.xmlns\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n getBaseUrl : function getBaseUrl(typeIdentifier, version){\n var runtime = this.get(typeIdentifier, version);\n if(runtime){\n return runtime.baseUrl;\n }\n return '';\n },\n loadRuntimes : function loadRuntimes(options){\n var self = this;\n var loadPromise;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n if(_loaded && !options.reload){\n loadPromise = Promise.resolve();\n } else {\n loadPromise = self.loadProviders().then(function(){\n\n var loadStack = [];\n\n _.forEach(__providers, function (provider){\n if(provider){//check that the provider is loaded\n loadStack.push(provider.load());\n }\n });\n\n //performs the loadings in parallel\n return new Promise(function(resolve, reject){\n Promise.all(loadStack).then(function (results){\n\n var configLoadingStack = [];\n\n //update registry\n self._registry = _.reduce(results, function (acc, _pcis){\n return _.merge(acc, _pcis);\n }, {});\n\n //pre-configuring the baseUrl of the portable element's source\n _.forIn(self._registry, function (versions, typeIdentifier){\n //currently use latest runtime only\n configLoadingStack.push(loadModuleConfig(self.get(typeIdentifier)));\n });\n\n return Promise.all(configLoadingStack).then(function(moduleConfigs){\n var requireConfigAliases = _.reduce(moduleConfigs, function(acc, paths){\n return _.merge(acc, paths);\n }, {});\n\n //save the required libs name => path to global require alias\n //TODO in future planned user story : change this to a local require context to solve conflicts in third party module naming\n _requirejs.config({paths : requireConfigAliases});\n\n _loaded = true;\n\n resolve();\n }).catch(function(err){\n reject('error loading module config ' + err);\n });\n });\n });\n\n });\n }\n\n loadPromise\n .then(function() {\n self.trigger('runtimesloaded');\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n loadCreators : function loadCreators(options){\n var loadPromise;\n var self = this;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n loadPromise = self.loadRuntimes(options).then(function(){\n var requiredCreatorHooks = [];\n var requiredCreators = _.isArray(options.runtimeOnly) ? options.runtimeOnly : [];\n\n _.forIn(self._registry, function (versions, typeIdentifier){\n var pciModel = self.get(typeIdentifier);//currently use the latest version only\n if(pciModel.creator && pciModel.creator.hook && (pciModel.enabled || requiredCreators.indexOf(typeIdentifier) !== -1)){\n requiredCreatorHooks.push(pciModel.creator.hook.replace(/\\.js$/, ''));\n }\n });\n\n if(requiredCreatorHooks.length){\n return new Promise(function(resolve, reject){\n //@todo support caching?\n _requirejs(requiredCreatorHooks, function (){\n var creators = {};\n _.each(arguments, function (creatorHook){\n var id = creatorHook.getTypeIdentifier();\n var pciModel = self.get(id);\n var i = _.findIndex(self._registry[id], {version : pciModel.version});\n if(i < 0){\n self.trigger('error', 'no creator found for id/version ' + id + '/' + pciModel.version);\n }else{\n self._registry[id][i].creator.module = creatorHook;\n creators[id] = creatorHook;\n }\n });\n resolve(creators);\n }, reject);\n });\n }else{\n return Promise.resolve({});\n }\n\n });\n\n loadPromise\n .then(function(creators) {\n self.trigger('creatorsloaded', creators);\n return creators;\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n enable: function enable(typeIdentifier, version){\n var pci = this.get(typeIdentifier, version);\n if(pci){\n pci.enabled = true;\n }\n },\n disable: function disable(typeIdentifier, version){\n var pci = this.get(typeIdentifier, version);\n if(pci){\n pci.enabled = false;\n }\n },\n isEnabled: function isEnabled(typeIdentifier, version){\n var pci = this.get(typeIdentifier, version);\n return (pci && pci.enabled === true);\n }\n }));\n };\n});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Sam \n * @requires jquery\n * @requires lodash\n */\ndefine('taoQtiItem/qtiCreator/helper/qtiElements',['jquery', 'lodash', 'i18n'], function($, _, __){\n \"use strict\";\n\n var QtiElements = {};\n\n QtiElements.classes = {\n //abstract classes:\n 'itemBody' : {'parents' : ['bodyElement'], 'contains' : ['block'], 'abstract' : true},\n 'atomicBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'atomicInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'simpleBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['block'], 'abstract' : true},\n 'simpleInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'flowStatic' : {'parents' : ['flow'], 'abstract' : true},\n 'blockStatic' : {'parents' : ['block'], 'abstract' : true},\n 'inlineStatic' : {'parents' : ['inline'], 'abstract' : true},\n 'flow' : {'parents' : ['objectFlow'], 'abstract' : true},\n 'tableCell' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'abstract' : true},\n //html-derived qti elements:\n 'caption' : {'parents' : ['bodyElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'col' : {'parents' : ['bodyElement'], 'xhtml' : true},\n 'colgroup' : {'parents' : ['bodyElement'], 'contains' : ['col'], 'xhtml' : true},\n 'div' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['flow'], 'xhtml' : true},\n 'dl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['dlElement'], 'xhtml' : true},\n 'dt' : {'parents' : ['dlElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'dd' : {'parents' : ['dlElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'hr' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'xhtml' : true},\n 'math' : {'parents' : ['blockStatic', 'flowStatic', 'inlineStatic'], 'xhtml' : true},\n 'li' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'ol' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'ul' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'object' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['objectFlow'], 'xhtml' : true},\n 'param' : {'parents' : ['objectFlow'], 'xhtml' : true},\n 'table' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody'], 'xhtml' : true},\n 'tbody' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'tfoot' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'thead' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'td' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'th' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'tr' : {'parents' : ['bodyElement'], 'contains' : ['tableCell'], 'xhtml' : true},\n 'a' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'abbr' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'acronym' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'b' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'big' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'cite' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'code' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'dfn' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'em' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'i' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'kbd' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'q' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'samp' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'small' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'span' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'strong' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sub' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sup' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'tt' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'var' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'blockquote' : {'parents' : ['simpleBlock'], 'xhtml' : true},\n 'address' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h1' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h2' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h3' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h4' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h5' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h6' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'p' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'pre' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'img' : {'parents' : ['atomicInline'], 'xhtml' : true, attributes : ['src', 'alt', 'longdesc', 'height', 'width']},\n 'br' : {'parents' : ['atomicInline'], 'xhtml' : true},\n //qti elements:\n 'infoControl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'qti' : true},\n 'textRun' : {'parents' : ['inlineStatic', 'flowstatic'], 'qti' : true},\n 'feedbackInline' : {'parents' : ['simpleInline', 'feedbackElement'], 'qti' : true},\n 'feedbackBlock' : {'parents' : ['simpleBlock'], 'qti' : true},\n 'rubricBlock' : {'parents' : ['simpleBlock'], 'qti' : true}, //strange qti 2.1 exception, marked as simpleBlock instead of\n 'blockInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n 'inlineInteraction' : {'parents' : ['inline', 'flow', 'interaction'], 'qti' : true},\n 'gap' : {'parents' : ['inlineStatic'], 'qti' : true},\n 'hottext' : {'parents' : ['flowstatic', 'inlineStatic'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'printedVariable' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic', 'textOrVariable'], 'qti' : true},\n 'prompt' : {'parents' : ['bodyElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'templateElement' : {'parents' : ['bodyElement'], 'qti' : true},\n 'templateBlock' : {'parents' : ['blockStatic', 'flowStatic', 'templateElement'], 'contains' : ['blockStatic'], 'qti' : true},\n 'templateInline' : {'parents' : ['inlineStatic', 'flowStatic', 'templateElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'choiceInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'associateInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'orderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'matchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hottextInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'gapMatchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'mediaInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'sliderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'uploadInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'drawingInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'graphicInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hotspotInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicAssociateInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicOrderInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicGapMatchInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'selectPointInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'textEntryInteraction' : {'parents' : ['stringInteraction', 'inlineInteraction'], 'qti' : true},\n 'extendedTextInteraction' : {'parents' : ['stringInteraction', 'blockInteraction'], 'qti' : true},\n 'inlineChoiceInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'endAttemptInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'customInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n '_container' : {'parents' : ['block'], 'qti' : true}//a pseudo class introduced in TAO\n };\n\n QtiElements.cache = {containable : {}, children : {}, parents : {}};\n\n QtiElements.getAllowedContainersElements = function(qtiClass, $container){\n var classes = QtiElements.getAllowedContainers(qtiClass);\n var jqSelector = '';\n for(var i in classes){\n if(!classes[i].qti){\n //html element:\n jqSelector += classes[i] + ', ';\n }\n }\n\n if(jqSelector){\n jqSelector = jqSelector.substring(0, jqSelector.length - 2);\n }\n\n return $(jqSelector, $container ? $container : $(document)).filter(':not([data-qti-type])');\n };\n\n QtiElements.getAllowedContainers = function(qtiClass){\n var ret;\n if(QtiElements.cache.containable[qtiClass]){\n ret = QtiElements.cache.containable[qtiClass];\n }else{\n ret = [];\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(model.contains){\n var intersect = _.intersection(model.contains, parents);\n if(intersect.length){\n if(!model.abstract){\n ret.push(aClass);\n }\n ret = _.union(ret, QtiElements.getChildClasses(aClass, true));\n }\n }\n }\n QtiElements.cache.containable[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getAllowedContents = function(qtiClass, recursive, checked){\n\n var ret = [];\n checked = checked || {};\n\n var model = QtiElements.classes[qtiClass];\n if(model && model.contains){\n for(var i in model.contains){\n var contain = model.contains[i];\n if(!checked[contain]){\n checked[contain] = true;\n\n //qtiClass can contain everything defined as its contents\n ret.push(contain);\n\n //qtiClass can also contain subclass of its contents\n var children = QtiElements.getChildClasses(contain, true);\n for(var i in children){\n var child = children[i];\n if(!checked[child]){\n checked[child] = true;\n\n ret.push(child);\n\n //adding children allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(child, true, checked));\n }\n }\n }\n\n //adding allowed contents of qtiClass' allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(contain, true, checked));\n }\n\n }\n }\n }\n\n //qtiClass can contain all allowed contents of its parents:\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var i in parents){\n ret = _.union(ret, QtiElements.getAllowedContents(parents[i], recursive, checked));\n }\n\n return _.uniq(ret, false);\n };\n\n QtiElements.isAllowedClass = function(qtiContainerClass, qtiContentClass){\n var allowedClasses = QtiElements.getAllowedContents(qtiContainerClass);\n return (_.indexOf(allowedClasses, qtiContentClass) >= 0);\n };\n\n QtiElements.getParentClasses = function(qtiClass, recursive){\n var ret;\n if(recursive && QtiElements.cache.parents[qtiClass]){\n ret = QtiElements.cache.parents[qtiClass];\n }else{\n ret = [];\n if(QtiElements.classes[qtiClass]){\n ret = QtiElements.classes[qtiClass].parents;\n if(recursive){\n for(var i in ret){\n ret = _.union(ret, QtiElements.getParentClasses(ret[i], recursive));\n }\n ret = _.uniq(ret, false);\n }\n }\n QtiElements.cache.parents[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getChildClasses = function(qtiClass, recursive, type){\n var ret;\n var cacheType = type ? type : 'all';\n if(recursive && QtiElements.cache.children[qtiClass] && QtiElements.cache.children[qtiClass][cacheType]){\n ret = QtiElements.cache.children[qtiClass][cacheType];\n }else{\n ret = [];\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(_.indexOf(model.parents, qtiClass) >= 0){\n if(type){\n if(model[type]){\n ret.push(aClass);\n }\n }else{\n ret.push(aClass);\n }\n if(recursive){\n ret = _.union(ret, QtiElements.getChildClasses(aClass, recursive, type));\n }\n }\n }\n if(!QtiElements.cache.children[qtiClass]){\n QtiElements.cache.children[qtiClass] = {};\n }\n QtiElements.cache.children[qtiClass][cacheType] = ret;\n }\n\n return ret;\n };\n\n QtiElements.isBlock = function(qtiClass){\n return QtiElements.is(qtiClass, 'block');\n };\n\n QtiElements.isInline = function(qtiClass){\n return QtiElements.is(qtiClass, 'inline');\n };\n\n QtiElements.is = function(qtiClass, topClass){\n if(qtiClass === topClass){\n return true;\n }else{\n var parents = QtiElements.getParentClasses(qtiClass, true);\n return (_.indexOf(parents, topClass) >= 0);\n }\n };\n\n QtiElements.getAvailableAuthoringElements = function(){\n\n return {\n choiceInteraction : {\n label : __('Choice Interaction'),\n description : __('Select a single (radio buttons) or multiple (check boxes) responses among a set of choices.'),\n icon : 'icon-choice',\n short : __('Choice'),\n qtiClass : 'choiceInteraction',\n tags:['Common Interactions', 'mcq']\n },\n orderInteraction : {\n label : __('Order Interaction'),\n icon : 'icon-order',\n description : __('Arrange a list of choices in the correct order.'),\n short : __('Order'),\n qtiClass : 'orderInteraction',\n tags:['Common Interactions', 'ordering']\n },\n associateInteraction : {\n label : __('Associate Interaction'),\n icon : 'icon-associate',\n description : __('Create pair(s) from a series of choices.'),\n short : __('Associate'),\n qtiClass : 'associateInteraction',\n tags:['Common Interactions', 'association']\n },\n matchInteraction : {\n label : __('Match Interaction'),\n icon : 'icon-match',\n description : __('Create association(s) between two sets of choices displayed in a table (row and column).'),\n short : __('Match'),\n qtiClass : 'matchInteraction',\n tags:['Common Interactions', 'association']\n },\n hottextInteraction : {\n label : __('Hottext Interaction'),\n icon : 'icon-hottext',\n description : __('Select one or more text parts (hottext) within a text.'),\n short : __('Hottext'),\n qtiClass : 'hottextInteraction',\n tags:['Common Interactions', 'text']\n },\n gapMatchInteraction : {\n label : __('Gap Match Interaction'),\n icon : 'icon-gap-match',\n description : __(' Fill in the gaps in a text from a set of choices.'),\n short : __('Gap Match'),\n qtiClass : 'gapMatchInteraction',\n tags:['Common Interactions', 'text', 'association']\n },\n sliderInteraction : {\n label : __('Slider Interaction'),\n icon : 'icon-slider',\n description :__('Select a value within a numerical range.'),\n short : __('Slider'),\n qtiClass : 'sliderInteraction',\n tags:['Common Interactions', 'special']\n },\n extendedTextInteraction : {\n label : __('Extended Text Interaction'),\n icon : 'icon-extended-text',\n description : __('Collect open-ended information in one or more text area(s) (strings or numeric values).'),\n short : __('Extended Text'),\n qtiClass : 'extendedTextInteraction',\n tags:['Common Interactions', 'text']\n },\n uploadInteraction : {\n label : __('File Upload Interaction'),\n icon : 'icon-upload',\n description : __('Upload a file (e.g. document, picture...) as a response.'),\n short : __('File Upload'),\n qtiClass : 'uploadInteraction',\n tags:['Common Interactions', 'special']\n },\n mediaInteraction : {\n label : __('Media Interaction'),\n icon : 'icon-media',\n description : __('Control the playing parameters (auto-start, loop) of a video or audio file and report the number of time it has been played.'),\n short : __('Media'),\n qtiClass : 'mediaInteraction',\n tags:['Common Interactions', 'media']\n },\n _container : {\n label : __('Text Block'),\n icon : 'icon-font',\n description : __('Block contains the content (stimulus) of the item such as text or image. It is also required for Inline Interactions.'),\n short : __('Block'),\n qtiClass : '_container',\n tags:['Inline Interactions', 'text']\n },\n inlineChoiceInteraction : {\n label : __('Inline Choice Interaction'),\n icon : 'icon-inline-choice',\n description : __('Select a choice from a drop-down list.'),\n short : __('Inline Choice'),\n qtiClass : 'inlineChoiceInteraction',\n tags:['Inline Interactions', 'inline-interactions', 'mcq']\n },\n textEntryInteraction : {\n label : __('Text Entry Interaction'),\n icon : 'icon-text-entry',\n description : __('Collect open-ended information in a short text input (strings or numeric values).'),\n short : __('Text Entry'),\n qtiClass : 'textEntryInteraction',\n tags:['Inline Interactions', 'inline-interactions', 'text']\n },\n endAttemptInteraction : {\n label : __('End Attempt Interaction'),\n icon : 'icon-end-attempt',\n description : __('Trigger the end of the item attempt.'),\n short : __('End Attempt'),\n qtiClass : 'endAttemptInteraction',\n tags:['Inline Interactions', 'inline-interactions', 'button', 'submit']\n },\n hotspotInteraction : {\n label : __('Hotspot Interaction'),\n icon : 'icon-hotspot',\n description : __('Select one or more areas (hotspots) displayed on an picture.'),\n short : __('Hotspot'),\n qtiClass : 'hotspotInteraction',\n tags:['Graphic Interactions', 'mcq']\n },\n graphicOrderInteraction : {\n label : __('Graphic Order Interaction'),\n icon : 'icon-graphic-order',\n description : __('Order the areas (hotspots) displayed on a picture.'),\n short : __('Order'),\n qtiClass : 'graphicOrderInteraction',\n tags:['Graphic Interactions', 'ordering']\n },\n graphicAssociateInteraction : {\n label : __('Graphic Associate Interaction'),\n icon : 'icon-graphic-associate',\n description : __('Create association(s) between areas (hotspots) displayed on a picture.'),\n short : __('Associate'),\n qtiClass : 'graphicAssociateInteraction',\n tags:['Graphic Interactions', 'association']\n },\n graphicGapMatchInteraction : {\n label : __('Graphic Gap Match Interaction'),\n icon : 'icon-graphic-gap',\n description : __('Fill in the gaps on a picture with a set of image choices.'),\n short : __('Gap Match'),\n qtiClass : 'graphicGapMatchInteraction',\n tags:['Graphic Interactions', 'association']\n },\n selectPointInteraction : {\n label : __('Select Point Interaction'),\n icon : 'icon-select-point',\n description : __('Position one or more points on a picture (response areas are not displayed).'),\n short : __('Select Point'),\n qtiClass : 'selectPointInteraction',\n tags:['Graphic Interactions']\n }\n };\n };\n\n return QtiElements;\n\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\ndefine('taoQtiItem/portableElementRegistry/factory/ciRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory',\n 'taoQtiItem/qtiCreator/helper/qtiElements'\n], function (_, portableElementRegistry, qtiElements){\n 'use strict';\n\n /**\n * Create a ney interaction registry instance\n * interaction registry need to register newly loaded creator hooks in the list of available qti authoring elements\n *\n * @returns {Object} registry instance\n */\n return function customInteractionRegistry(){\n\n return portableElementRegistry({\n getAuthoringData : function getAuthoringData(typeIdentifier, options){\n var pciModel;\n options = _.defaults(options || {}, {version : 0, enabledOnly : false});\n pciModel = this.get(typeIdentifier, options.version);\n if(pciModel && pciModel.creator && pciModel.creator.hook && pciModel.creator.icon && (pciModel.enabled || !options.enabledOnly)){\n return {\n label : pciModel.label, //currently no translation available\n icon : pciModel.creator.icon.replace(new RegExp('^' + typeIdentifier + '\\/'), pciModel.baseUrl),\n short : pciModel.short,\n description : pciModel.description,\n qtiClass : 'customInteraction.' + pciModel.typeIdentifier, //custom interaction is block type\n tags : _.union(['Custom Interactions'], pciModel.tags)\n };\n }\n }\n }).on('creatorsloaded', function(creators){\n _.each(creators, function(creator){\n qtiElements.classes['customInteraction.' + creator.getTypeIdentifier()] = {parents : ['customInteraction'], qti : true};\n });\n });\n };\n\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\ndefine('taoQtiItem/portableElementRegistry/ciRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/ciRegistry', 'module'], function (_, ciRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of ciRegistry\n var registry = ciRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\ndefine('taoQtiItem/portableElementRegistry/factory/icRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory'\n], function (_, portableElementRegistry){\n 'use strict';\n\n /**\n * Info control registry has currently no additonal fonctionalities than the basic portable element registry\n *\n * @returns {Object} registry instance\n */\n return function infoControlRegistry(){\n return portableElementRegistry();\n }\n\n});\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n */\ndefine('taoQtiItem/portableElementRegistry/icRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/icRegistry', 'module'], function (_, icRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of icRegistry\n var registry = icRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\n});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n\ndefine('taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy',[\n 'taoQtiItem/portableElementRegistry/ciRegistry',\n 'taoQtiItem/portableElementRegistry/icRegistry'\n], function (ciRegistry, icRegistry) {\n 'use strict';\n\n function getBaseUrlByIdentifier(typeIdentifier) {\n if (ciRegistry.get(typeIdentifier)) {\n return ciRegistry.getBaseUrl(typeIdentifier);\n }\n if (icRegistry.get(typeIdentifier)) {\n return icRegistry.getBaseUrl(typeIdentifier);\n }\n return typeIdentifier;\n }\n\n //strategy to resolve portable info control and portable interactions paths.\n //It should never be reached in the stack the usual way and should be called only using resolveBy.\n return {\n name: 'portableElementLocation',\n handle: function handlePortableElementLocation(url) {\n\n if (url.file === url.path) {\n return getBaseUrlByIdentifier(url.file);\n } else if (url.source === url.relative) {\n return url.relative.replace(/^(\\.\\/)?([a-z_0-9]+)\\/(.*)/i, function (fullmatch, $1, typeIdentifier, relPath) {\n var runtimeLocation = getBaseUrlByIdentifier(typeIdentifier);\n if (runtimeLocation) {\n return runtimeLocation + '/' + relPath;\n }\n return fullmatch;\n });\n }\n }\n };\n});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n */\n\ndefine('taoQtiItem/qtiCommonRenderer/renderers/config',[\n 'lodash',\n 'context',\n 'ui/themes',\n 'taoItems/assets/manager',\n 'taoItems/assets/strategies',\n 'module',\n 'taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy'\n], function(_, context, themes, assetManagerFactory, assetStrategies, module, portableAssetStrategy){\n 'use strict';\n\n var itemThemes = themes.get('items');\n var moduleConfig = module.config();\n\n //Create asset manager stack\n var assetManager = assetManagerFactory([\n {\n name : 'theme',\n handle : function handleTheme(url){\n if(itemThemes && url.path && (url.path === itemThemes.base || _.contains(_.pluck(itemThemes.available, 'path'), url.path))){\n return context.root_url + url.toString();\n }\n }\n },\n assetStrategies.taomedia,\n assetStrategies.external,\n assetStrategies.base64,\n assetStrategies.itemCssNoCache,\n assetStrategies.baseUrl,\n portableAssetStrategy\n ], {baseUrl : ''});//baseUrl is not predefined in the config, but should be set upon renderer instantiating\n\n //renderers locations\n var locations = {\n 'assessmentItem' : 'taoQtiItem/qtiCommonRenderer/renderers/Item',\n '_container' : 'taoQtiItem/qtiCommonRenderer/renderers/Container',\n '_simpleFeedbackRule' : false,\n '_tooltip' : 'taoQtiItem/qtiCommonRenderer/renderers/Tooltip',\n 'stylesheet' : 'taoQtiItem/qtiCommonRenderer/renderers/Stylesheet',\n 'outcomeDeclaration' : false,\n 'responseDeclaration' : false,\n 'responseProcessing' : false,\n 'img' : 'taoQtiItem/qtiCommonRenderer/renderers/Img',\n 'math' : 'taoQtiItem/qtiCommonRenderer/renderers/Math',\n 'object' : 'taoQtiItem/qtiCommonRenderer/renderers/Object',\n 'table' : 'taoQtiItem/qtiCommonRenderer/renderers/Table',\n 'printedVariable' : 'taoQtiItem/qtiCommonRenderer/renderers/PrintedVariable',\n 'rubricBlock' : 'taoQtiItem/qtiCommonRenderer/renderers/RubricBlock',\n 'modalFeedback' : 'taoQtiItem/qtiCommonRenderer/renderers/ModalFeedback',\n 'prompt' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/Prompt',\n 'choiceInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ChoiceInteraction',\n 'extendedTextInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction',\n 'orderInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/OrderInteraction',\n 'associateInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/AssociateInteraction',\n 'matchInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MatchInteraction',\n 'textEntryInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/TextEntryInteraction',\n 'sliderInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SliderInteraction',\n 'inlineChoiceInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction',\n 'simpleChoice.choiceInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.ChoiceInteraction',\n 'simpleChoice.orderInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction',\n 'hottext' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/Hottext',\n 'gap' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/Gap',\n 'gapText' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapText',\n 'simpleAssociableChoice.matchInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction',\n 'simpleAssociableChoice.associateInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction',\n 'inlineChoice' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/InlineChoice',\n 'hottextInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HottextInteraction',\n 'hotspotInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HotspotInteraction',\n 'hotspotChoice' : false,\n 'gapMatchInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GapMatchInteraction',\n 'selectPointInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SelectPointInteraction',\n 'graphicOrderInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicOrderInteraction',\n 'mediaInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MediaInteraction',\n 'uploadInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/UploadInteraction',\n 'graphicGapMatchInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicGapMatchInteraction',\n 'gapImg' : 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapImg',\n 'graphicAssociateInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction',\n 'associableHotspot' : false,\n 'customInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/PortableCustomInteraction',\n 'infoControl' : 'taoQtiItem/qtiCommonRenderer/renderers/PortableInfoControl',\n 'include' : 'taoQtiItem/qtiCommonRenderer/renderers/Include',\n 'endAttemptInteraction' : 'taoQtiItem/qtiCommonRenderer/renderers/interactions/EndAttemptInteraction'\n };\n\n return {\n name:'commonRenderer',\n locations: locations,\n options: {\n assetManager: assetManager,\n themes : itemThemes,\n enableDragAndDrop: {\n associate: !!moduleConfig.associateDragAndDrop,\n gapMatch: !!moduleConfig.gapMatchDragAndDrop,\n graphicGapMatch: !!moduleConfig.graphicGapMatchDragAndDrop,\n order: !!moduleConfig.orderDragAndDrop\n },\n messages : moduleConfig.messages\n }\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n */\n\n/**\n * Define the Qti Item Common Renderer\n */\ndefine('taoQtiItem/qtiCommonRenderer/renderers/Renderer',[\n 'taoQtiItem/qtiRunner/core/Renderer',\n 'taoQtiItem/qtiCommonRenderer/renderers/config'\n], function(Renderer, config){\n 'use strict';\n\n return Renderer.build(config.locations, config.name, config.options);\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/getConfig',['lodash'], function (_) {\n 'use strict';\n\n /**\n * Gets a config set\n * @param {Object} [config]\n * @param {Object} [defaults]\n * @returns {Object}\n */\n return function getConfig(config, defaults) {\n return _(config || {})\n .omit(function (value) {\n return value === null || typeof value === 'undefined';\n })\n .defaults(defaults || {})\n .value();\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/getLabels',['lodash'], function (_) {\n 'use strict';\n\n /**\n * Gets the list of messages related to a particular level.\n * The level is provided as a numeric value, starting from 1.\n * @param {Array|Object} messages - The list of messages for all levels.\n * If only one object is provided is will be wrapped into an array\n * @param {Number|String} level - The level for which filter the messages.\n * It should be comprised within the available indexes.\n * Higher levels will be reduced to the higher available,\n * lower levels will be increased to the lowest.\n * @returns {Object}\n */\n return function getLabels(messages, level) {\n messages = messages || {};\n\n if (!_.isArray(messages)) {\n messages = [messages];\n }\n\n // Compute the level value that targets which list of labels to use.\n // It should be comprised within the available indexes.\n // Higher levels will be reduced to the higher available, lower levels will be increased to the lowest.\n level = Math.min(Math.max(parseInt(level, 10) || 0, 1), messages.length || 1) - 1;\n\n return messages[level] || {};\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n * @author dieter \n */\ndefine('taoClientDiagnostic/tools/getStatus',['lodash'], function (_) {\n 'use strict';\n\n /**\n * Gets the correct status message for a given percentage from a list of thresholds.\n * @param {Number|String} percentage - The actual percentage. Must be comprised between 0 and 100.\n * Other values will be adjusted to fit the interval.\n * @param {Array|Object} [thresholds] - A list of descriptors for each thresholds.\n * A threshold field must be provided for each.\n * @returns {Object} Returns the corresponding threshold, or an empty object if none match.\n */\n return function getStatus(percentage, thresholds) {\n // need a structure compatible with the handlebars template\n var status = {\n // the percentage is between 0 and 100 and obviously must be a number\n percentage: Math.max(0, Math.min(100, Math.round(parseInt(percentage, 10) || 0))),\n quality: {}\n };\n var len, feedback, i, step;\n\n // grab a feedback related to the percentage in the thresholds list\n if (thresholds) {\n if (!_.isArray(thresholds)) {\n thresholds = [thresholds];\n }\n\n len = thresholds.length;\n for (i = 0; i < len; i++) {\n step = thresholds[i];\n if (step && (!step.threshold || status.percentage >= step.threshold)) {\n feedback = step;\n } else {\n break;\n }\n }\n\n if (feedback) {\n status.feedback = _.clone(feedback);\n }\n }\n\n return status;\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015-2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/performances/tester',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'async',\n 'context',\n 'helpers',\n 'taoClientDiagnostic/tools/stats',\n 'taoQtiItem/qtiItem/core/Loader',\n 'taoQtiItem/qtiCommonRenderer/renderers/Renderer',\n 'taoClientDiagnostic/tools/getConfig',\n 'taoClientDiagnostic/tools/getLabels',\n 'taoClientDiagnostic/tools/getStatus'\n], function($, _, __, async, context, helpers, stats, Loader, Renderer, getConfig, getLabels, getStatus) {\n 'use strict';\n\n /**\n * Duration of one second (in milliseconds)\n * @type {Number}\n * @private\n */\n var _second = 1000;\n\n /**\n * Default timeout duration\n * @type {Number}\n * @private\n */\n var _defaultTimeout = 30 * _second;\n\n /**\n * Default number of renderings by samples\n * @type {Number}\n * @private\n */\n var _defaultOccurrencesCount = 10;\n\n /**\n * List of default samples\n * @type {Array}\n */\n var _defaultSamples = [\n 'taoClientDiagnostic/tools/performances/data/sample1/',\n 'taoClientDiagnostic/tools/performances/data/sample2/',\n 'taoClientDiagnostic/tools/performances/data/sample3/'\n ];\n\n /**\n * Default values for the performances tester\n * @type {Object}\n * @private\n */\n var _defaults = {\n id: 'performances',\n\n // The threshold for optimal performances\n optimal: 0.025,\n\n // The threshold for minimal performances\n threshold: 0.25\n };\n\n /**\n * A list of thresholds for performances check\n * @type {Array}\n * @private\n */\n var _thresholds = [{\n threshold: 0,\n message: __('Very slow performances'),\n type: 'error'\n }, {\n threshold: 33,\n message: __('Average performances'),\n type: 'warning'\n }, {\n threshold: 66,\n message: __('Good performances'),\n type: 'success'\n }];\n\n /**\n * List of translated texts per level.\n * The level is provided through the config as a numeric value, starting from 1.\n * @type {Object}\n * @private\n */\n var _messages = [\n // level 1\n {\n title: __('Workstation performances'),\n status: __('Checking the performances...'),\n performancesMin: __('Minimum rendering time'),\n performancesMax: __('Maximum rendering time'),\n performancesAverage: __('Average rendering time')\n }\n ];\n\n /**\n * Base text used to build sample identifiers\n * @type {String}\n * @private\n */\n var _sampleBaseId = 'sample';\n\n /**\n * Loads a page inside a div and compute the time to load\n * @param {Object} data The descriptor of the page to load\n * @param {Function} done A callback function called to provide the result\n */\n function loadItem(data, done){\n\n //item location config\n var qtiJsonFile = data.url + 'qti.json';\n var urlTokens = data.url.split('/');\n var extension = urlTokens[0];\n var fullpath = require.s.contexts._.config.paths[extension];\n var baseUrl = data.url.replace(extension, fullpath);\n var loader = new Loader();\n var renderer = new Renderer({\n baseUrl : baseUrl // compatibility mode for legacy installations\n });\n\n // check needed by compatibility mode for legacy installations\n if (renderer.getAssetManager) {\n renderer.getAssetManager().setData('baseUrl', baseUrl);\n }\n\n require(['json!'+qtiJsonFile], function(itemData){\n\n loader.loadItemData(itemData, function(item){\n renderer.load(function(){\n\n var $container,\n duration,\n start,\n end,\n result;\n\n //start right before rendering\n start = window.performance.now();\n\n //set renderer\n item.setRenderer(this);\n\n //render markup\n $container = $('
').appendTo('body');\n $container.append(item.render());\n\n //execute javascript\n item.postRender();\n\n //remove item\n $container.remove();\n\n //done\n end = window.performance.now();\n\n duration = (end - start) / _second;\n\n result = {\n id : data.id,\n url : data.url,\n duration: duration\n };\n\n done(null, result);\n\n }, this.getLoadedClasses());\n });\n\n });\n\n }\n\n /**\n * Performs a browser performances test by running a heavy page\n *\n * @param {Object} config - Some optional configs\n * @param {String} [config.id] - The identifier of the test\n * @param {Number} [config.optimal] - The threshold for optimal performances\n * @param {Number} [config.threshold] - The threshold for minimal performances\n * @param {String} [config.level] - The intensity level of the test. It will aim which messages list to use.\n * @returns {Object}\n */\n function performancesTester(config) {\n var initConfig = getConfig(config, _defaults);\n var labels = getLabels(_messages, initConfig.level);\n var idx = 0;\n var _samples = _.map(!_.isEmpty(initConfig.samples) && initConfig.samples || _defaultSamples, function(sample) {\n idx ++;\n return {\n id : _sampleBaseId + idx,\n url : sample,\n timeout : initConfig.timeout * 1000 || _defaultTimeout,\n nb : initConfig.occurrences || _defaultOccurrencesCount\n };\n });\n\n // add one occurrence on the first sample to obfuscate the time needed to load the runner\n _samples[0].nb ++;\n\n return {\n /**\n * Performs a performances test, then call a function to provide the result\n * @param {Function} done\n */\n start: function start(done) {\n var tests = [];\n var self = this;\n\n _.forEach(_samples, function(data) {\n var cb = _.partial(loadItem, data);\n var iterations = data.nb || 1;\n while (iterations --) {\n tests.push(cb);\n }\n });\n\n async.series(tests, function(err, measures) {\n var decimals = 2;\n var results;\n var status;\n var summary;\n\n if(err && !measures.length){\n //something went wrong\n throw err;\n }\n\n // remove the first result to obfuscate the time needed to load the runner\n measures.shift();\n\n results = stats(measures, 'duration', decimals);\n status = self.getFeedback(results.average);\n summary = self.getSummary(results);\n\n done(status, summary, results);\n });\n },\n\n /**\n * Gets the labels loaded for the tester\n * @returns {Object}\n */\n get labels() {\n return labels;\n },\n\n /**\n * Builds the results summary\n * @param {Object} results\n * @returns {Object}}\n */\n getSummary: function getSummary(results) {\n return {\n performancesMin: {message: labels.performancesMin, value: results.min + ' s'},\n performancesMax: {message: labels.performancesMax, value: results.max + ' s'},\n performancesAverage: {message: labels.performancesAverage, value: results.average + ' s'}\n };\n },\n\n /**\n * Gets the feedback status for the provided result value\n * @param {Number} result\n * @returns {Object}}\n */\n getFeedback: function getFeedback(result) {\n var optimal = initConfig.optimal;\n var range = Math.abs(optimal - (initConfig.threshold));\n var status = getStatus((range + optimal - result) / range * 100, _thresholds);\n\n status.title = labels.title;\n status.id = initConfig.id;\n return status;\n }\n };\n }\n\n return performancesTester;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015-2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoClientDiagnostic/tools/bandwidth/tester',[\n 'lodash',\n 'i18n',\n 'async',\n 'context',\n 'taoClientDiagnostic/tools/getConfig',\n 'taoClientDiagnostic/tools/getLabels',\n 'taoClientDiagnostic/tools/stats',\n 'taoClientDiagnostic/tools/fixedDecimals',\n 'taoClientDiagnostic/tools/getStatus'\n], function(_, __, async, context, getConfig, getLabels, stats, fixedDecimals, getStatus) {\n 'use strict';\n\n /**\n * A binary kilo bytes (KiB)\n * @type {Number}\n * @private\n */\n var _kilo = 1024;\n\n /**\n * A binary mega bytes (MiB)\n * @type {Number}\n * @private\n */\n var _mega = _kilo * _kilo;\n\n /**\n * Duration of one second (in milliseconds)\n * @type {Number}\n * @private\n */\n var _second = 1000;\n\n\n /**\n * Default values for the bandwidth tester\n * @type {Object}\n * @private\n */\n var _defaults = {\n id: 'bandwidth',\n\n // The typical bandwidth needed for a test taker (Mbps)\n unit: 0.16,\n\n // The thresholds for optimal bandwidth\n ideal: 45,\n\n // Maximum number of test takers to display\n max: 100\n };\n\n /**\n * A list of thresholds for bandwidth check\n * @type {Array}\n * @private\n */\n var _thresholds = [{\n threshold: 0,\n message: __('Low bandwidth'),\n type: 'error'\n }, {\n threshold: 33,\n message: __('Average bandwidth'),\n type: 'warning'\n }, {\n threshold: 66,\n message: __('Good bandwidth'),\n type: 'success'\n }];\n\n /**\n * List of descriptors defining the data sets to download.\n * - file : path of the file containing the test data\n * - size : the given size of the file\n * - timeout : the timeout for the download\n * - threshold : a bandwidth threshold above which the data set can be downloaded to evaluate a more accurate value\n * - nb : number of download iterations\n * @type {Object}\n */\n var _downloadData = {\n \"10KB\" : {\n id : '10KB',\n file : 'data/bin10KB.data',\n size : 10 * _kilo,\n timeout : _second,\n threshold : 0,\n nb : 10\n },\n \"100KB\" : {\n id : '100KB',\n file : 'data/bin100KB.data',\n size : 100 * _kilo,\n timeout : 2 * _second,\n threshold : 0,\n nb : 5\n },\n \"1MB\" : {\n id : '1MB',\n file : 'data/bin1MB.data',\n size : _mega,\n timeout : 20 * _second,\n threshold : 0,\n nb : 3\n }\n };\n\n /**\n * List of translated texts per level.\n * The level is provided through the config as a numeric value, starting from 1.\n * @type {Object}\n * @private\n */\n var _messages = [\n // level 1\n {\n title: __('Bandwidth'),\n status: __('Checking the bandwidth...'),\n legend: __('Number of simultaneous test takers the connection can handle'),\n bandwidthMin: __('Minimum bandwidth'),\n bandwidthMax: __('Maximum bandwidth'),\n bandwidthAverage: __('Average bandwidth')\n },\n // level 2\n {\n title: __('Media intensive bandwidth'),\n status: __('Checking the media intensive bandwidth...'),\n legend: __('Number of simultaneous test takers the connection can handle with media intensive'),\n bandwidthMin: __('Minimum intensive bandwidth'),\n bandwidthMax: __('Maximum intensive bandwidth'),\n bandwidthAverage: __('Average intensive bandwidth')\n }\n ];\n\n /**\n * Download a data set as described by the provided descriptor and compute the duration.\n * @param {Object} data The data set descriptor to use for download\n * @param {Function} cb A callback function called at the end of the download.\n * This callback is also called if a timeout breaks the download;\n */\n function download(data, cb) {\n var self = this;\n var start, end;\n var timeoutId;\n var url;\n var request;\n\n if (data.threshold && this.bandwidth < data.threshold) {\n return cb('threshold');\n }\n\n url = context.base_www + 'js/tools/bandwidth/' + data.file + '?' + Date.now();\n request = new XMLHttpRequest();\n request.open('GET', url, true);\n request.setRequestHeader('Accept', 'application/octet-stream');\n\n request.onload = function onRequestLoad () {\n var duration;\n var bytes;\n var seconds;\n var speed;\n\n end = window.performance.now();\n clearTimeout(timeoutId);\n\n duration = end - start;\n bytes = data.size;\n seconds = duration / _second;\n\n // speed in Mbps\n speed = ((bytes * 8) / seconds) / _mega;\n\n self.bandwidth = Math.max(self.bandwidth, speed);\n\n return cb(null, {\n id : data.id,\n file : data.file,\n size : data.size,\n duration : duration,\n speed : speed\n });\n };\n request.onerror = function onRequestError (err) {\n clearTimeout(timeoutId);\n cb(err);\n };\n\n timeoutId = _.delay(cb, data.timeout, 'timeout');\n start = window.performance.now();\n request.send();\n }\n\n /**\n * Performs a bandwidth test by downloading a bunch of data sets with different sizes\n *\n * @param {Object} config - Some optional configs\n * @param {String} [config.id] - The identifier of the test\n * @param {Number} [config.unit] - The typical bandwidth needed for a test taker (Mbps)\n * @param {Number} [config.ideal] - The thresholds for optimal bandwidth\n * @param {Number} [config.max] - Maximum number of test takers to display\n * @param {String} [config.level] - The intensity level of the test. It will aim which messages list to use.\n * @returns {Object}\n */\n function bandwidthTester (config) {\n var initConfig = getConfig(config, _defaults);\n var labels = getLabels(_messages, initConfig.level);\n\n return {\n /**\n * Performs a bandwidth test, then call a function to provide the result\n * @param {Function} done\n */\n start : function start(done) {\n var self = this;\n var tests = [];\n\n _.forEach(_downloadData, function(data) {\n var cb = _.bind(download, self, data);\n var iterations = data.nb || 1;\n while (iterations --) {\n tests.push(cb);\n }\n });\n\n this.bandwidth = 0;\n\n async.series(tests, function(err, measures) {\n var duration = 0;\n var size = 0;\n var decimals = 2;\n var results;\n var summary;\n var status;\n\n function getValue(value) {\n var speed = 0;\n\n if (value) {\n duration += value.duration;\n size += value.size;\n\n speed = value.speed;\n value.speed = fixedDecimals(speed, decimals);\n }\n\n return speed;\n }\n\n if (err && !measures.length) {\n //something went wrong\n throw err;\n }\n\n results = stats(measures, getValue, decimals);\n\n results.duration = fixedDecimals(duration / _second, decimals);\n results.size = size;\n\n summary = self.getSummary(results);\n status = self.getFeedback(results.max);\n\n done(status, summary, results);\n });\n },\n\n /**\n * Gets the labels loaded for the tester\n * @returns {Object}\n */\n get labels() {\n return labels;\n },\n\n /**\n * Builds the results summary\n * @param {Object} results\n * @returns {Object}}\n */\n getSummary: function getSummary(results) {\n return {\n bandwidthMin: {message: labels.bandwidthMin, value: results.min + ' Mbps'},\n bandwidthMax: {message: labels.bandwidthMax, value: results.max + ' Mbps'},\n bandwidthAverage: {message: labels.bandwidthAverage, value: results.average + ' Mbps'}\n };\n },\n\n /**\n * Gets the feedback status for the provided result value\n * @param {Number} result\n * @returns {Object}}\n */\n getFeedback: function getFeedback(result) {\n var bandwidthUnit = initConfig.unit;\n var threshold = initConfig.ideal;\n var maxTestTakers = initConfig.max;\n var max = threshold * bandwidthUnit;\n var status = getStatus(result / max * 100, _thresholds);\n var nb = Math.floor(result / bandwidthUnit);\n\n if (nb > maxTestTakers) {\n nb = '>' + maxTestTakers;\n }\n\n status.id = initConfig.id;\n status.title = labels.title;\n status.feedback.legend = labels.legend;\n status.quality.label = nb;\n\n if (nb.toString().length > 2) {\n status.quality.wide = true;\n }\n\n return status;\n }\n };\n }\n\n return bandwidthTester;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2017 (original work) Open Assessment Technologies SA ;\n */\ndefine('taoClientDiagnostic/tools/upload/tester',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'async',\n 'util/url',\n 'taoClientDiagnostic/tools/getConfig',\n 'taoClientDiagnostic/tools/getLabels',\n 'taoClientDiagnostic/tools/getStatus'\n], function($, _, __, async, urlHelper, getConfig, getLabels, getStatus) {\n 'use strict';\n\n /**\n * A binary kilo bytes (KiB)\n * @type {Number}\n * @private\n */\n var _kilo = 1024;\n\n /**\n * A binary mega bytes (MiB)\n * @type {Number}\n * @private\n */\n var _mega = _kilo * _kilo;\n\n /**\n * Result of diagnostic\n */\n var data = [];\n\n /**\n * Default values for the upload speed tester\n * @type {Object}\n * @private\n */\n var _defaults = {\n id: 'upload',\n\n // Size of data to sent to server during speed test in bytes\n size: _mega,\n\n // Optimal speed in bytes per second\n optimal: _mega\n };\n\n /**\n * A list of thresholds for bandwidth check\n * @type {Array}\n * @private\n */\n var _thresholds = [{\n threshold: 0,\n message: __('Low upload speed'),\n type: 'error'\n }, {\n threshold: 33,\n message: __('Average upload speed'),\n type: 'warning'\n }, {\n threshold: 66,\n message: __('Good upload speed'),\n type: 'success'\n }];\n\n /**\n * List of translated texts per level.\n * The level is provided through the config as a numeric value, starting from 1.\n * @type {Object}\n * @private\n */\n var _messages = [\n // level 1\n {\n title: __('Upload speed'),\n status: __('Checking upload speed...'),\n uploadAvg: __('Average upload speed'),\n uploadMax: __('Max upload speed')\n }\n ];\n\n /**\n * Generate random string of given length\n * @param length\n */\n var generateStr = function generateStr(length) {\n var text = \"\";\n var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n var i;\n\n for (i = 0; i < length; i++) {\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n\n return text;\n };\n\n /**\n * Upload generated string to check upload speed.\n * @param {number} size of string to upload in bytes\n * @return {object} jqXHR\n */\n var upload = function upload(size) {\n\n var url = urlHelper.route('upload', 'CompatibilityChecker', 'taoClientDiagnostic', {cache : Date.now()});\n var str = generateStr(size);\n data = [];\n\n return $.ajax({\n url : url,\n type : 'POST',\n data : {\n upload : str\n },\n xhr: function() {\n var xhr = new window.XMLHttpRequest();\n var startTime = Date.now();\n // Upload progress\n xhr.upload.addEventListener(\"progress\", function(evt){\n var passedTime;\n if (evt.lengthComputable) {\n passedTime = Date.now() - startTime;\n data.push({\n time: passedTime,\n loaded: evt.loaded,\n speed: ((evt.loaded * 8) / _mega) / (passedTime / 1000)\n });\n }\n }, false);\n\n return xhr;\n }\n });\n };\n\n /**\n * Performs a upload speed test\n * @param {Object} config - Some optional configs\n * @param {String} [config.id] - The identifier of the test\n * @param {Number} [config.size] - Size of data to sent to server during speed test in bytes\n * @param {Number} [config.optimal] - Optimal speed in bytes per second\n * @param {String} [config.level] - The intensity level of the test. It will aim which messages list to use.\n * @returns {Object}\n */\n var uploadTester = function uploadTester(config) {\n var initConfig = getConfig(config, _defaults);\n var labels = getLabels(_messages, initConfig.level);\n\n return {\n /**\n * Performs upload speed test, then call a function to provide the result\n * @param {Function} done\n */\n start : function start(done) {\n var self = this;\n\n upload(parseInt(initConfig.size, 10)).then(function() {\n var totalSpeed = 0;\n var avgSpeed;\n var maxSpeed = 0;\n var status, summary, results;\n\n _.forEach(data, function (val) {\n totalSpeed += val.speed;\n if (maxSpeed < val.speed) {\n maxSpeed = Math.round(val.speed * 100) / 100;\n }\n });\n avgSpeed = Math.round(totalSpeed / data.length * 100) / 100;\n results = {\n max: maxSpeed,\n avg: avgSpeed,\n type: 'upload'\n };\n\n status = self.getFeedback(avgSpeed);\n summary = self.getSummary(results);\n\n done(status, summary, results);\n });\n },\n\n /**\n * Gets the labels loaded for the tester\n * @returns {Object}\n */\n get labels() {\n return labels;\n },\n\n /**\n * Builds the results summary\n * @param {Object} results\n * @returns {Object}}\n */\n getSummary: function getSummary(results) {\n return {\n uploadAvg: {message: labels.uploadAvg, value: results.avg + ' Mbps'},\n uploadMax: {message: labels.uploadMax, value: results.max + ' Mbps'}\n };\n },\n\n /**\n * Gets the feedback status for the provided result value\n * @param {Number} result\n * @returns {Object}}\n */\n getFeedback: function getFeedback(result) {\n var optimal = initConfig.optimal / _mega;\n var status = getStatus((100 / optimal) * result, _thresholds);\n\n status.id = initConfig.id;\n status.title = labels.title;\n\n return status;\n }\n };\n };\n\n return uploadTester;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * This helper performs a server request to gather information about the user browser and os\n *\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/getPlatformInfo',[\n 'jquery',\n 'util/url',\n 'core/promise',\n 'taoClientDiagnostic/tools/getConfig'\n], function ($, url, Promise, getConfig) {\n 'use strict';\n\n /**\n * Some default values\n * @type {Object}\n * @private\n */\n var defaultConfig = {\n browserVersionAction: 'whichBrowser',\n browserVersionController: 'CompatibilityChecker',\n browserVersionExtension: 'taoClientDiagnostic'\n };\n\n /**\n * Gets the URL of the platform tester\n * @param {Window} win\n * @param {String} action\n * @param {String} controller\n * @param {String} extension\n * @returns {String}\n */\n function getTesterUrl(win, action, controller, extension) {\n var document = win.document;\n var navigator = win.navigator;\n var screen = win.screen;\n var params = {};\n var e = 0;\n var f = 0;\n\n // append the browser user agent\n params.ua = navigator.userAgent;\n\n // detect browser family\n e |= win.ActiveXObject ? 1 : 0;\n e |= win.opera ? 2 : 0;\n e |= win.chrome ? 4 : 0;\n e |= 'getBoxObjectFor' in document || 'mozInnerScreenX' in win ? 8 : 0;\n e |= ('WebKitCSSMatrix' in win || 'WebKitPoint' in win || 'webkitStorageInfo' in win || 'webkitURL' in win) ? 16 : 0;\n e |= (e & 16 && ({}.toString).toString().indexOf(\"\\n\") === -1) ? 32 : 0;\n params.e = e;\n\n // gather info about browser functionality\n f |= 'sandbox' in document.createElement('iframe') ? 1 : 0;\n f |= 'WebSocket' in win ? 2 : 0;\n f |= win.Worker ? 4 : 0;\n f |= win.applicationCache ? 8 : 0;\n f |= win.history && win.history.pushState ? 16 : 0;\n f |= document.documentElement.webkitRequestFullScreen ? 32 : 0;\n f |= 'FileReader' in win ? 64 : 0;\n params.f = f;\n\n // append a unique ID\n params.r = Math.random().toString(36).substring(7);\n\n // get the screen size\n params.w = screen.width;\n params.h = screen.height;\n\n return url.route(action, controller, extension, params);\n }\n\n /**\n * Check the user browser and os\n * @param {Window} window - Need an access to the window object\n * @param {Object} config\n * @param {String} config.browserVersionAction - The name of the action to call to get the browser checker\n * @param {String} config.browserVersionController - The name of the controller to call to get the browser checker\n * @param {String} config.browserVersionExtension - The name of the extension containing the controller to call to get the browser checker\n * @returns {Promise}\n */\n return function getPlatformInfo(win, config) {\n var testerUrl;\n\n config = getConfig(config, defaultConfig);\n\n testerUrl = getTesterUrl(\n win,\n config.browserVersionAction,\n config.browserVersionController,\n config.browserVersionExtension\n );\n\n return new Promise(function (resolve, reject) {\n $.ajax({url: testerUrl})\n .done(resolve)\n .fail(reject);\n });\n };\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/tools/browser/tester',[\n 'jquery',\n 'i18n',\n 'util/url',\n 'taoClientDiagnostic/tools/getConfig',\n 'taoClientDiagnostic/tools/getLabels',\n 'taoClientDiagnostic/tools/getPlatformInfo',\n 'taoClientDiagnostic/tools/getStatus'\n], function ($, __, url, getConfig, getLabels, getPlatformInfo, getStatus) {\n 'use strict';\n\n /**\n * Some default values\n * @type {Object}\n * @private\n */\n var _defaults = {\n id: 'browser',\n browserVersionAction: 'whichBrowser',\n browserVersionController: 'CompatibilityChecker',\n browserVersionExtension: 'taoClientDiagnostic',\n action: 'check',\n controller: 'DiagnosticChecker'\n };\n\n /**\n * Placeholder variables for custom messages\n * @type {Object}\n * @private\n */\n var _placeHolders = {\n CURRENT_BROWSER: '%CURRENT_BROWSER%',\n CURRENT_OS: '%CURRENT_OS%'\n };\n\n /**\n * List of translated texts per level.\n * The level is provided through the config as a numeric value, starting from 1.\n * @type {Object}\n * @private\n */\n var _messages = [\n // level 1\n {\n title: __('Operating system and web browser'),\n status: __('Checking the browser...'),\n browser: __('Web browser'),\n os: __('Operating system')\n }\n ];\n\n /**\n * Performs a browser support test\n *\n * @param {Object} config - Some optional configs\n * @param {String} [config.id] - The identifier of the test\n * @param {String} [config.action] - The name of the action to call to get the browser checker\n * @param {String} [config.controller] - The name of the controller to call to get the browser checker\n * @param {String} [config.extension] - The name of the extension containing the controller to call to get the browser checker\n * @param {String} [config.level] - The intensity level of the test. It will aim which messages list to use.\n * @returns {Object}\n */\n function browserTester(config) {\n var initConfig = getConfig(config, _defaults);\n var labels = getLabels(_messages, initConfig.level);\n\n return {\n /**\n * Performs a browser support test, then call a function to provide the result\n * @param {Function} done\n */\n start: function start(done) {\n var self = this;\n\n getPlatformInfo(window, initConfig)\n .then(function(results) {\n // which browser\n $.post(\n url.route(initConfig.action, initConfig.controller, initConfig.extension),\n results,\n function (data) {\n var percentage = ('success' === data.type) ? 100 : (('warning' === data.type) ? 33 : 0);\n var status = self.getFeedback(percentage, data);\n var summary = self.getSummary(results);\n\n status.customMsgRenderer = function(customMsg) {\n return (customMsg || '')\n .replace(_placeHolders.CURRENT_BROWSER, summary.browser.value)\n .replace(_placeHolders.CURRENT_OS, summary.os.value);\n };\n\n done(status, summary, results);\n },\n 'json'\n );\n });\n },\n\n /**\n * Gets the labels loaded for the tester\n * @returns {Object}\n */\n get labels() {\n return labels;\n },\n\n /**\n * Builds the results summary\n * @param {Object} results\n * @returns {Object}}\n */\n getSummary: function getSummary(results) {\n var currentBrowser = results.browser + ' ' + results.browserVersion;\n var currentOs = results.os + ' ' + results.osVersion;\n return {\n browser: {\n message: labels.browser,\n value: currentBrowser\n },\n os: {\n message: labels.os,\n value: currentOs\n }\n };\n },\n\n /**\n * Gets the feedback status for the provided result value\n * @param {Number} result\n * @param {Object} data\n * @returns {Object}}\n */\n getFeedback: function getFeedback(result, data) {\n var status = getStatus(result, data);\n\n status.id = initConfig.id;\n status.title = labels.title;\n\n return status;\n }\n };\n }\n\n return browserTester;\n});\n\n","\ndefine('tpl!taoClientDiagnostic/tools/diagnostic/tpl/main', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"
\\n\";\n return buffer;\n });\n});\n\n","\ndefine('css!taoClientDiagnosticCss/diagnostics',[],function(){});\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2017 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Jean-Sébastien Conan \n * @author dieter \n */\ndefine('taoClientDiagnostic/tools/diagnostic/diagnostic',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'async',\n 'ui/feedback',\n 'ui/component',\n 'core/dataProvider/request',\n 'util/url',\n 'taoClientDiagnostic/tools/performances/tester',\n 'taoClientDiagnostic/tools/bandwidth/tester',\n 'taoClientDiagnostic/tools/upload/tester',\n 'taoClientDiagnostic/tools/browser/tester',\n 'taoClientDiagnostic/tools/getStatus',\n 'taoClientDiagnostic/tools/getConfig',\n 'tpl!taoClientDiagnostic/tools/diagnostic/tpl/main',\n 'tpl!taoClientDiagnostic/tools/diagnostic/tpl/result',\n 'tpl!taoClientDiagnostic/tools/diagnostic/tpl/details',\n 'tpl!taoClientDiagnostic/tools/diagnostic/tpl/feedback',\n 'tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar',\n 'css!taoClientDiagnosticCss/diagnostics'\n], function ($,\n _,\n __,\n async,\n feedback,\n component,\n request,\n urlUtil,\n performancesTester,\n bandwidthTester,\n uploadTester,\n browserTester,\n getStatus,\n getConfig,\n mainTpl,\n resultTpl,\n detailsTpl,\n feedbackTpl,\n qualityBarTpl) {\n 'use strict';\n\n /**\n * Some default values\n * @type {Object}\n * @private\n */\n var _defaults = {\n title: __('Diagnostic Tool'),\n header: __('This tool will run a number of tests in order to establish how well your current environment is suitable to run the TAO platform.'),\n info: __('Be aware that these tests will take up to several minutes.'),\n button: __('Begin diagnostics'),\n actionStore: 'storeData',\n controller: 'DiagnosticChecker',\n extension: 'taoClientDiagnostic',\n actionDropId: 'deleteId',\n storeAllRuns: false,\n configurableText: {}\n };\n\n /**\n * A list of thresholds for summary\n * @type {Array}\n * @private\n */\n var _thresholds = [{\n threshold: 0,\n message: __('Your system requires a compatibility update, please contact your system administrator.'),\n type: 'error'\n }, {\n threshold: 33,\n message: __('Your system is not optimal, please contact your system administrator.'),\n type: 'warning'\n }, {\n threshold: 66,\n message: __('Your system is fully compliant.'),\n type: 'success'\n }];\n\n /**\n * Defines a diagnostic tool\n * @type {Object}\n */\n var diagnostic = {\n /**\n * Updates the displayed status\n * @param {String} status\n * @returns {diagnostic}\n * @private\n */\n changeStatus: function changeStatus(status) {\n if (this.is('rendered')) {\n this.controls.$status.html(status);\n }\n return this;\n },\n\n /**\n * Sends the detailed stats to the server\n * @param {String} type The type of stats\n * @param {Object} details The stats details\n * @param {Function} done A callback method called once server has responded\n */\n store: function store(type, details, done) {\n var config = this.config;\n\n details = _.omit(details, 'values');\n details.type = type;\n\n $.post(\n urlUtil.route(config.actionStore, config.controller, config.extension, config.storeParams),\n details,\n done,\n \"json\"\n );\n },\n\n /**\n * Retrieve a custom message from the config\n * @param key\n * @returns {*}\n */\n getCustomMsg: function getCustomMsg(key) {\n return this.config.configurableText[key];\n },\n\n /**\n * Enrich the feeback object with a custom message if the test has failed\n * @param {Object} status - the test result\n * @param {String} msg - the custom message\n */\n addCustomFeedbackMsg: function addCustomFeedbackMsg(status, msg) {\n if (this.hasFailed(status) && msg) {\n if (_.isFunction(status.customMsgRenderer)) {\n msg = status.customMsgRenderer(msg);\n }\n status.feedback = status.feedback || {};\n status.feedback.customMsg = msg;\n }\n },\n\n /**\n * Check if a result is considered as failed\n * @param {Object} result\n * @returns {boolean}\n */\n hasFailed: function hasFailed(result) {\n return !(\n result\n && result.feedback\n && result.feedback.type === \"success\"\n );\n },\n\n /**\n * Add a result row\n * @param {Object} result\n * @returns {diagnostic}\n */\n addResult: function addResult(result) {\n var $main, $indicator, $result;\n\n if (this.is('rendered')) {\n // adjust the width of the displayed label, if any, to the text length\n if (result.quality && result.quality.label && result.quality.label.toString().length > 2) {\n result.quality.wide = true;\n }\n\n // create and append the result to the displayed list\n $main = $(resultTpl(result));\n $result = $main.find('.result');\n if (result.feedback) {\n $result.append($(feedbackTpl(result.feedback)));\n }\n if (result.quality) {\n $result.append($(qualityBarTpl(result.quality)));\n }\n if (result.details) {\n $main.find('.details').append($(detailsTpl(result.details)));\n }\n\n $indicator = $main.find('.quality-indicator');\n this.controls.$results.append($main);\n\n // the result is hidden by default, show it with a little animation\n $main.fadeIn(function () {\n if ($indicator.length) {\n $indicator.animate({\n left: (result.percentage * $main.outerWidth() / 100) - ($indicator.outerWidth() / 2)\n });\n }\n });\n }\n\n return this;\n },\n\n /**\n * Does some preparations before starting the diagnostics\n * @returns {diagnostic}\n * @private\n */\n prepare: function prepare() {\n /**\n * Notifies the diagnostic start\n * @event diagnostic#start\n */\n this.trigger('start');\n this.changeStatus(__('Starting...'));\n this.setState('running', true);\n this.setState('done', false);\n\n // first we need a clean space to display the results, so remove the last results if any\n this.controls.$results.empty();\n\n // remove the start button during the diagnostic\n this.controls.$start.addClass('hidden');\n\n return this;\n },\n\n /**\n * Does some post process after ending the diagnostics\n * @returns {diagnostic}\n * @private\n */\n finish: function finish() {\n var config = this.config;\n\n // restore the start button to allow a new diagnostic run\n this.controls.$start.removeClass('hidden');\n\n if (config.storeAllRuns) {\n this.deleteIdentifier();\n }\n\n /**\n * Notifies the diagnostic end\n * @event diagnostic#end\n */\n this.trigger('end');\n this.changeStatus(__('Done!'));\n this.setState('running', false);\n this.setState('done', true);\n\n return this;\n },\n\n /**\n * delete unique id for this test session (next test will generate new one)\n */\n deleteIdentifier: function deleteIdentifier() {\n var url = urlUtil.route(this.config.actionDropId, this.config.controller, this.config.extension);\n return request(url, null, 'POST');\n },\n\n /**\n * Runs the diagnostics\n * @returns {diagnostic}\n */\n run: function run() {\n var self = this;\n var information = [];\n var scores = {};\n var testers = [];\n\n // common handling for testers\n function doCheck(testerConfig, cb) {\n var testerId = testerConfig.id;\n\n /**\n * Notifies the start of a tester operation\n * @event diagnostic#starttester\n * @param {String} name - The name of the tester\n */\n self.trigger('starttester', testerId);\n self.setState(testerId, true);\n\n require([testerConfig.tester], function (testerFactory){\n var tester = testerFactory(getConfig(testerConfig, self.config), self);\n self.changeStatus(tester.labels.status);\n tester.start(function (status, details, results) {\n var customMsg;\n if (testerConfig.customMsgKey) {\n customMsg = self.getCustomMsg(testerConfig.customMsgKey);\n self.addCustomFeedbackMsg(status, customMsg);\n }\n\n // the returned details must be ingested into the main details list\n _.forEach(details, function(info) {\n information.push(info);\n });\n scores[status.id] = status;\n\n /**\n * Notifies the end of a tester operation\n * @event diagnostic#endtester\n * @param {String} id - The identifier of the tester\n * @param {Array} results - The results of the test\n */\n self.trigger('endtester', testerId, status);\n self.setState(testerId, false);\n\n // results should be filtered in order to encode complex data\n results = _.mapValues(results, function(value) {\n switch(typeof(value)) {\n case 'boolean': return value ? 1 : 0;\n case 'object': return JSON.stringify(value);\n }\n return value;\n });\n\n // send the data to store\n self.store(testerId, results, function () {\n self.addResult(status);\n cb();\n });\n });\n });\n }\n\n if (this.is('rendered')) {\n // set up the component to a new run\n this.prepare();\n\n _.forEach(this.config.testers, function(testerConfig, testerId) {\n testerConfig.id = testerConfig.id || testerId;\n if (testerConfig.enabled) {\n testers.push(function (cb) {\n doCheck(testerConfig, cb);\n });\n }\n });\n\n // launch each testers in series, then display the results\n async.series(testers, function () {\n // pick the lowest percentage as the main score\n var total = _.min(scores, 'percentage');\n\n // get a status according to the main score\n var status = getStatus(total.percentage, _thresholds);\n\n // display the result\n status.title = __('Total');\n status.id = 'total';\n self.addCustomFeedbackMsg(status, self.config.configurableText.diagTotalCheckResult);\n\n status.details = information;\n self.addResult(status);\n\n // done !\n self.finish();\n });\n }\n\n return this;\n }\n };\n\n /**\n * Builds an instance of the diagnostic tool\n * @param {Object} config\n * @param {String} [config.title] - The displayed title\n * @param {String} [config.header] - A header text displayed to describe the component\n * @param {String} [config.info] - An information text displayed to warn about run duration\n * @param {String} [config.button] - The caption of the start button\n * @param {String} [config.actionStore] - The name of the action to call to store the results\n * @param {String} [config.actionCheck] - The name of the action to call to check the browser results\n * @param {String} [config.controller] - The name of the controller to call\n * @param {String} [config.extension] - The name of the extension containing the controller\n * @param {Object} [config.storeParams] - A list of additional parameters to send with diagnostic results\n *\n * @param {String} [config.browser.action] - The name of the action to call to get the browser checker\n * @param {String} [config.browser.controller] - The name of the controller to call to get the browser checker\n * @param {String} [config.browser.extension] - The name of the extension containing the controller to call to get the browser checker\n *\n * @param {Number} [config.bandwidth.unit] - The typical bandwidth needed for a test taker (Mbps)\n * @param {Array} [config.bandwidth.ideal] - The thresholds for optimal bandwidth, one by bar\n * @param {Number} [config.bandwidth.max] - Maximum number of test takers to display\n *\n * @param {Array} [config.performances.samples] - A list of samples to render in order to compute the rendering performances\n * @param {Number} [config.performances.occurrences] - The number of renderings by samples\n * @param {Number} [config.performances.timeout] - Max allowed duration for a sample rendering\n * @param {Number} [config.performances.optimal] - The threshold for optimal performances\n * @param {Number} [config.performances.threshold] - The threshold for minimal performances\n * @returns {diagnostic}\n */\n function diagnosticFactory(config) {\n // fix the translations for content loaded from config files\n if (config) {\n _.forEach(['title', 'header', 'footer', 'info', 'button'], function(name) {\n if (config[name]) {\n config[name] = __(config[name]);\n }\n });\n }\n\n return component(diagnostic, _defaults)\n .setTemplate(mainTpl)\n\n // uninstalls the component\n .on('destroy', function () {\n this.controls = null;\n })\n\n // renders the component\n .on('render', function () {\n var self = this;\n\n // get access to all needed placeholders\n this.controls = {\n $start: this.$component.find('[data-action=\"test-launcher\"]'),\n $status: this.$component.find('.status h2'),\n $results: this.$component.find('.results')\n };\n\n // start the diagnostic\n this.controls.$start.on('click', function () {\n self.run();\n });\n\n // show result details\n this.controls.$results.on('click', 'button[data-action=\"show-details\"]', function () {\n var $btn = $(this).closest('button');\n var $result = $btn.closest('[data-result]');\n var $details = $result.find('.details');\n $details.removeClass('hidden');\n $btn.addClass('hidden');\n $result.find('[data-action=\"hide-details\"]').removeClass('hidden');\n });\n\n // hide result details\n this.controls.$results.on('click', 'button[data-action=\"hide-details\"]', function () {\n var $btn = $(this).closest('button');\n var $result = $btn.closest('[data-result]');\n var $details = $result.find('.details');\n $details.addClass('hidden');\n $btn.addClass('hidden');\n $result.find('[data-action=\"show-details\"]').removeClass('hidden');\n });\n })\n .init(config);\n }\n\n return diagnosticFactory;\n});\n\n","/*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA;\n *\n */\n\n/**\n *\n * @author dieter \n * @author Jean-Sébastien Conan \n */\ndefine('taoClientDiagnostic/controller/CompatibilityChecker/diagnostics',[\n 'jquery',\n 'layout/loading-bar',\n 'ui/feedback',\n 'taoClientDiagnostic/tools/message',\n 'taoClientDiagnostic/tools/diagnostic/diagnostic'\n], function ($, loadingBar, feedback, showMessage, diagnosticFactory) {\n 'use strict';\n\n /**\n * @exports\n */\n return {\n start: function(config) {\n var $contentArea = $('.content');\n\n showMessage('#feedback-box');\n\n diagnosticFactory(config)\n .on('start', function() {\n loadingBar.start();\n })\n .on('end', function() {\n loadingBar.stop();\n })\n .render($contentArea);\n }\n };\n});\n\n","\ndefine('tpl!taoClientDiagnostic/templates/diagnostic/main', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.diagInstructions), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n return buffer;\n }\nfunction program2(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"